flash related cleanups
authorFelix Fietkau <nbd@openwrt.org>
Thu, 1 Mar 2007 11:54:33 +0000 (11:54 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Thu, 1 Mar 2007 11:54:33 +0000 (11:54 +0000)
SVN-Revision: 6446

target/linux/brcm47xx-2.6/files/drivers/mtd/maps/bcm47xx-flash.c
target/linux/brcm47xx-2.6/files/drivers/ssb/driver_mips/mips.c
target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_mips.h

index 93cda8b328e00897ffab9c7ff86d82c49670cb29..50fff896f171a6981fa077bfd5594dc584b901f8 100644 (file)
@@ -77,26 +77,6 @@ struct trx_header {
 extern struct ssb_bus ssb;
 static struct mtd_info *bcm947xx_mtd;
 
-static void bcm947xx_map_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
-{
-#define MIPS_MEMCPY_ALIGN 4
-       map_word ret;
-       ssize_t transfer;
-       ssize_t done = 0;
-       if ((len >= MIPS_MEMCPY_ALIGN) && (!(from & (MIPS_MEMCPY_ALIGN - 1))) && (!(((unsigned int)to & (MIPS_MEMCPY_ALIGN - 1))))) {
-               done = len & ~(MIPS_MEMCPY_ALIGN - 1);
-               memcpy_fromio(to, map->virt + from, done);
-       }
-       while (done < len) {
-               ret = map->read(map, from + done);
-               transfer = len - done;
-               if (transfer > map->bankwidth)
-                       transfer = map->bankwidth;
-               memcpy((void *)((unsigned long)to + done), &ret.x[0], transfer);
-               done += transfer;
-       }
-}
-
 static struct map_info bcm947xx_map = {
        name: "Physically mapped flash",
        size: WINDOW_SIZE,
@@ -426,8 +406,6 @@ int __init init_bcm947xx_map(void)
        }
        simple_map_init(&bcm947xx_map);
        
-       bcm947xx_map.copy_from = bcm947xx_map_copy_from;
-       
        if (!(bcm947xx_mtd = do_map_probe("cfi_probe", &bcm947xx_map))) {
                printk("Failed to do_map_probe\n");
                iounmap((void *)bcm947xx_map.virt);
index c6aaeede815b8060be122fe163e1a1b93678d374..65916b17bafce1b12547386c3b93a456ed9e234e 100644 (file)
@@ -165,12 +165,16 @@ static void ssb_mips_flash_detect(struct ssb_mipscore *mcore)
 {
        struct ssb_bus *bus = mcore->dev->bus;
 
+       mcore->flash_buswidth = 2;
        if (bus->chipco.dev) {
                mcore->flash_window = 0x1c000000;
-               mcore->flash_window_size = 0x800000;
+               mcore->flash_window_size = 0x02000000;
+               if ((ssb_read32(bus->chipco.dev, SSB_CHIPCO_FLASH_CFG)
+                               & SSB_CHIPCO_CFG_DS16) == 0)
+                       mcore->flash_buswidth = 1;
        } else {
                mcore->flash_window = 0x1fc00000;
-               mcore->flash_window_size = 0x400000;
+               mcore->flash_window_size = 0x00400000;
        }
 }
 
index b1ce1144d343a2d6f9cd9e6e63580818570f0086..61c766550c278389f2e2260282d174aa6049acd3 100644 (file)
@@ -22,6 +22,7 @@ struct ssb_mipscore {
        int nr_serial_ports;
        struct ssb_serial_port serial_ports[4];
 
+       int flash_buswidth;
        u32 flash_window;
        u32 flash_window_size;
 };