X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/5944cb9a11215b2bf6d13b5f643b3b9124049779..7f464dbf8c4dc4a62596c609d2a363772bcd1379:/target/linux/brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c?ds=sidebyside diff --git a/target/linux/brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c b/target/linux/brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c index 0d5bd84ec..33aafd850 100644 --- a/target/linux/brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c +++ b/target/linux/brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c @@ -45,7 +45,7 @@ static struct map_info bcm963xx_map = { static int parse_cfe_partitions( struct mtd_info *master, struct mtd_partition **pparts) { - int nrparts = 2, curpart = 0; /* CFE and NVRAM are always present. */ + int nrparts = 3, curpart = 0; /* CFE,NVRAM and global LINUX are always present. */ struct bcm_tag *buf; struct mtd_partition *parts; int ret; @@ -118,9 +118,16 @@ static int parse_cfe_partitions( struct mtd_info *master, struct mtd_partition * parts[curpart].size += sparelen; curpart++; }; + parts[curpart].name = "nvram"; parts[curpart].offset = master->size - master->erasesize; parts[curpart].size = master->erasesize; + + /* Global partition "linux" to make easy firmware upgrade */ + curpart++; + parts[curpart].name = "linux"; + parts[curpart].offset = parts[0].size; + parts[curpart].size = master->size - parts[0].size - parts[3].size; for (i = 0; i < nrparts; i++) printk(KERN_INFO PFX "Partition %d is %s offset %x and length %x\n", i, parts[i].name, parts[i].offset, parts[i].size); @@ -155,14 +162,14 @@ static int bcm963xx_probe(struct platform_device *pdev) r = platform_get_resource(pdev, IORESOURCE_MEM, 0); bcm963xx_map.phys = r->start; - bcm963xx_map.size = (r->end - r->start); - bcm963xx_map.virt = ioremap(r->start, r->end - r->start); + bcm963xx_map.size = (r->end - r->start) + 1; + bcm963xx_map.virt = ioremap(r->start, r->end - r->start + 1); if (!bcm963xx_map.virt) { printk(KERN_ERR PFX "Failed to ioremap\n"); return -EIO; } - printk(KERN_INFO PFX "0x%08x at 0x%08x\n", r->end - r->start, r->start); + printk(KERN_INFO PFX "0x%08lx at 0x%08x\n", bcm963xx_map.size, bcm963xx_map.phys); simple_map_init(&bcm963xx_map);