diff --git a/target/linux/brcm47xx-2.6/files/drivers/mtd/maps/bcm47xx-flash.c b/target/linux/brcm47xx-2.6/files/drivers/mtd/maps/bcm47xx-flash.c index 93cda8b328..50fff896f1 100644 --- a/target/linux/brcm47xx-2.6/files/drivers/mtd/maps/bcm47xx-flash.c +++ b/target/linux/brcm47xx-2.6/files/drivers/mtd/maps/bcm47xx-flash.c @@ -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); diff --git a/target/linux/brcm47xx-2.6/files/drivers/ssb/driver_mips/mips.c b/target/linux/brcm47xx-2.6/files/drivers/ssb/driver_mips/mips.c index c6aaeede81..65916b17ba 100644 --- a/target/linux/brcm47xx-2.6/files/drivers/ssb/driver_mips/mips.c +++ b/target/linux/brcm47xx-2.6/files/drivers/ssb/driver_mips/mips.c @@ -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; } } diff --git a/target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_mips.h b/target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_mips.h index b1ce1144d3..61c766550c 100644 --- a/target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_mips.h +++ b/target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_mips.h @@ -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; };