[adm5120] fix flash driver, it should work on RB150 as well
authorGabor Juhos <juhosg@openwrt.org>
Tue, 23 Oct 2007 12:31:13 +0000 (12:31 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Tue, 23 Oct 2007 12:31:13 +0000 (12:31 +0000)
SVN-Revision: 9418

target/linux/adm5120/files/arch/mips/adm5120/boards/mikrotik.c
target/linux/adm5120/files/drivers/mtd/maps/adm5120-flash.c
target/linux/adm5120/files/include/asm-mips/mach-adm5120/adm5120_platform.h

index 1ed420e0c74303cef06fbb3d2f86facf8b81d5d7..855ec3afb1ccba7cf5cc5630c87402dff1d1d87b 100644 (file)
@@ -140,6 +140,7 @@ static unsigned char rb133c_vlans[6] __initdata = {
 static unsigned char rb15x_vlans[6] __initdata = {
        /* FIXME: untested */
        0x41, 0x42, 0x44, 0x48, 0x50, 0x00
+};
 
 static unsigned char rb192_vlans[6] __initdata = {
        /* FIXME: untested */
@@ -261,6 +262,8 @@ static void __init rb150_setup(void)
        adm5120_nand_data.ctrl.cmd_ctrl = rb150_nand_cmd_ctrl;
        adm5120_nand_data.ctrl.dev_ready = rb150_nand_ready;
 
+       adm5120_flash0_data.window_size = 512*1024;
+
        rb1xx_flash_setup();
        rb1xx_mac_setup();
 }
index e07fb96d260a6287b3dbdf2e6537e52b757e9ad7..20f67d625f4a8f1907b005b063a00c32adaaf83c 100644 (file)
@@ -244,7 +244,7 @@ static int adm5120_flash_initinfo(struct adm5120_flash_info *info,
        struct map_info *map = &info->amap.map;
        struct adm5120_flash_platform_data *pdata = dev->dev.platform_data;
        struct flash_desc *fdesc;
-       u32 t;
+       u32 t = 0;
 
        map->name = dev->dev.bus_id;
 
@@ -255,12 +255,18 @@ static int adm5120_flash_initinfo(struct adm5120_flash_info *info,
 
        fdesc = &flash_descs[dev->id];
 
-       /* get memory window size */
-       t = SW_READ_REG(MEMCTRL) >> fdesc->srs_shift;
-       t &= MEMCTRL_SRS_MASK;
-       info->amap.window_size = flash_sizes[t];
+       if (pdata)
+               info->amap.window_size = pdata->window_size;
+
+       if (info->amap.window_size == 0) {
+               /* get memory window size */
+               t = SW_READ_REG(MEMCTRL) >> fdesc->srs_shift;
+               t &= MEMCTRL_SRS_MASK;
+               info->amap.window_size = flash_sizes[t];
+       }
+
        if (info->amap.window_size == 0) {
-               MAP_ERR(map, "invalid flash size detected\n");
+               MAP_ERR(map, "unable to determine window size\n");
                goto err_out;
        }
 
index b20c483b845a23db0e24ff98ccffb7244f70f6a4..f47b10b785a4729af6318b0c42e18f424f40a8f7 100644 (file)
@@ -39,6 +39,7 @@
 struct adm5120_flash_platform_data {
        void                    (*set_vpp)(struct map_info *, int);
        void                    (*switch_bank)(unsigned);
+       u32                     window_size;
 #ifdef CONFIG_MTD_PARTITIONS
        unsigned int            nr_parts;
        struct mtd_partition    *parts;