add reboot fix from #1312
[openwrt.git] / target / linux / brcm-2.6 / patches / 002-flash-map.patch
index a8ed909..3c805cb 100644 (file)
@@ -1,7 +1,7 @@
-diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/bcm47xx-flash.c
---- linux.old/drivers/mtd/maps/bcm47xx-flash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/drivers/mtd/maps/bcm47xx-flash.c 2006-06-23 19:54:06.000000000 +0200
-@@ -0,0 +1,451 @@
+diff -urN linux-2.6.19.ref/drivers/mtd/maps/bcm47xx-flash.c linux-2.6.19/drivers/mtd/maps/bcm47xx-flash.c
+--- linux-2.6.19.ref/drivers/mtd/maps/bcm47xx-flash.c  1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19/drivers/mtd/maps/bcm47xx-flash.c      2006-12-04 21:33:58.000000000 +0100
+@@ -0,0 +1,490 @@
 +/*
 + *  Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
 + *  Copyright (C) 2005 Waldemar Brodkorb <wbx@openwrt.org>
@@ -45,7 +45,7 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +#include <linux/types.h>
 +#include <linux/kernel.h>
 +#include <linux/wait.h>
-+#include <linux/config.h>
++#include <linux/autoconf.h>
 +#include <linux/mtd/mtd.h>
 +#include <linux/mtd/map.h>
 +#ifdef CONFIG_MTD_PARTITIONS
@@ -56,14 +56,22 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +#include <linux/crc32.h>
 +#include <asm/io.h>
 +
++#include <typedefs.h>
++#include <osl.h>
++#include <bcmnvram.h>
++#include <bcmutils.h>
++#include <sbconfig.h>
++#include <sbchipc.h>
++#include <sbutils.h>
 +#include <trxhdr.h>
 +
 +#define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y))
 +#define NVRAM_SPACE 0x8000
-+#define WINDOW_ADDR 0x1c000000
-+#define WINDOW_SIZE 0x800000
++#define WINDOW_ADDR 0x1fc00000
++#define WINDOW_SIZE 0x400000
 +#define BUSWIDTH 2
 +
++extern sb_t *sbh;
 +static struct mtd_info *bcm947xx_mtd;
 +
 +static void bcm947xx_map_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
@@ -125,7 +133,7 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +              /*
 +               * Read into buffer 
 +               */
-+              if (MTD_READ(mtd, off, sizeof(buf), &len, buf) ||
++              if (mtd->read(mtd, off, sizeof(buf), &len, buf) ||
 +                  len != sizeof(buf))
 +                      continue;
 +
@@ -187,7 +195,7 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +      set_current_state(TASK_INTERRUPTIBLE);
 +      add_wait_queue(&wait_q, &wait);
 +
-+      ret = MTD_ERASE(mtd, &erase);
++      ret = mtd->erase(mtd, &erase);
 +      if (ret) {
 +              set_current_state(TASK_RUNNING);
 +              remove_wait_queue(&wait_q, &wait);
@@ -204,7 +212,7 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +       * Next, writhe data to flash.
 +       */
 +
-+      ret = MTD_WRITE (mtd, pos, len, &retlen, buf);
++      ret = mtd->write(mtd, pos, len, &retlen, buf);
 +      if (ret)
 +              return ret;
 +      if (retlen != len)
@@ -235,7 +243,7 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +              /*
 +               * Read into buffer 
 +               */
-+              if (MTD_READ(mtd, off, sizeof(trx), &len, (char *) &trx) ||
++              if (mtd->read(mtd, off, sizeof(trx), &len, (char *) &trx) ||
 +                  len != sizeof(trx))
 +                      continue;
 +
@@ -261,7 +269,7 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +      if (part->size == 0)
 +              return 0;
 +      
-+      if (MTD_READ(mtd, part->offset, sizeof(buf), &len, buf) || len != sizeof(buf))
++      if (mtd->read(mtd, part->offset, sizeof(buf), &len, buf) || len != sizeof(buf))
 +              return 0;
 +
 +      if (*((__u32 *) buf) == SQUASHFS_MAGIC) {
@@ -289,7 +297,7 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +      
 +              /* Update the trx crc32 */
 +              for (i = (u32) &(((struct trx_header *)NULL)->flag_version); i <= trx.len; i += sizeof(buf)) {
-+                      if (MTD_READ(mtd, off + i, sizeof(buf), &len, buf) || len != sizeof(buf))
++                      if (mtd->read(mtd, off + i, sizeof(buf), &len, buf) || len != sizeof(buf))
 +                              return 0;
 +                      crc = crc32_le(crc, buf, min(sizeof(buf), trx.len - i));
 +              }
@@ -298,7 +306,7 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +              /* read first eraseblock from the trx */
 +              block = kmalloc(mtd->erasesize, GFP_KERNEL);
 +              trx2 = (struct trx_header *) block;
-+              if (MTD_READ(mtd, off, mtd->erasesize, &len, block) || len != mtd->erasesize) {
++              if (mtd->read(mtd, off, mtd->erasesize, &len, block) || len != mtd->erasesize) {
 +                      printk("Error accessing the first trx eraseblock\n");
 +                      return 0;
 +              }
@@ -326,7 +334,8 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +{
 +      int cfe_size;
 +
-+      cfe_size = find_cfe_size(mtd,size);
++      if ((cfe_size = find_cfe_size(mtd,size)) < 0)
++              return NULL;
 +
 +      /* boot loader */
 +      bcm947xx_parts[0].offset = 0;
@@ -393,6 +402,10 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +
 +int __init init_bcm947xx_map(void)
 +{
++      uint coreidx;
++      chipcregs_t *cc;
++      uint32 fltype;
++      uint window_addr = 0, window_size = 0;
 +      size_t size;
 +      int ret = 0;
 +#ifdef CONFIG_MTD_PARTITIONS
@@ -400,7 +413,33 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +      int i;
 +#endif
 +
-+      bcm947xx_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE);
++      coreidx = sb_coreidx(sbh);
++
++      /* Check strapping option if chipcommon exists */
++      if ((cc = sb_setcore(sbh, SB_CC, 0))) {
++              fltype = readl(&cc->capabilities) & CAP_FLASH_MASK;
++              if (fltype == PFLASH) {
++                      bcm947xx_map.map_priv_2 = 1;
++                      window_addr = 0x1c000000;
++                      bcm947xx_map.size = window_size = 32 * 1024 * 1024;
++                      if ((readl(&cc->flash_config) & CC_CFG_DS) == 0)
++                              bcm947xx_map.bankwidth = 1;
++              }
++      } else {
++              fltype = PFLASH;
++              bcm947xx_map.map_priv_2 = 0;
++              window_addr = WINDOW_ADDR;
++              window_size = WINDOW_SIZE;
++      }
++
++      sb_setcoreidx(sbh, coreidx);
++
++      if (fltype != PFLASH) {
++              printk(KERN_ERR "pflash: found no supported devices\n");
++              ret = -ENODEV;
++              goto fail;
++      }
++      bcm947xx_map.virt = ioremap(window_addr, window_size);
 +
 +      if (!bcm947xx_map.virt) {
 +              printk("Failed to ioremap\n");
@@ -453,9 +492,9 @@ diff -urN linux.old/drivers/mtd/maps/bcm47xx-flash.c linux.dev/drivers/mtd/maps/
 +
 +module_init(init_bcm947xx_map);
 +module_exit(cleanup_bcm947xx_map);
-diff -urN linux.old/drivers/mtd/maps/Kconfig linux.dev/drivers/mtd/maps/Kconfig
---- linux.old/drivers/mtd/maps/Kconfig 2006-06-23 19:13:51.000000000 +0200
-+++ linux.dev/drivers/mtd/maps/Kconfig 2006-06-23 18:47:58.000000000 +0200
+diff -urN linux-2.6.19.ref/drivers/mtd/maps/Kconfig linux-2.6.19/drivers/mtd/maps/Kconfig
+--- linux-2.6.19.ref/drivers/mtd/maps/Kconfig  2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19/drivers/mtd/maps/Kconfig      2006-12-04 21:33:58.000000000 +0100
 @@ -299,6 +299,12 @@
          Mapping for the Flaga digital module. If you don't have one, ignore
          this setting.
@@ -469,10 +508,10 @@ diff -urN linux.old/drivers/mtd/maps/Kconfig linux.dev/drivers/mtd/maps/Kconfig
  config MTD_BEECH
        tristate "CFI Flash device mapped on IBM 405LP Beech"
        depends on MTD_CFI && BEECH
-diff -urN linux.old/drivers/mtd/maps/Makefile linux.dev/drivers/mtd/maps/Makefile
---- linux.old/drivers/mtd/maps/Makefile        2006-06-23 19:13:51.000000000 +0200
-+++ linux.dev/drivers/mtd/maps/Makefile        2006-06-23 18:47:58.000000000 +0200
-@@ -30,6 +30,7 @@
+diff -urN linux-2.6.19.ref/drivers/mtd/maps/Makefile linux-2.6.19/drivers/mtd/maps/Makefile
+--- linux-2.6.19.ref/drivers/mtd/maps/Makefile 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19/drivers/mtd/maps/Makefile     2006-12-04 21:33:58.000000000 +0100
+@@ -29,6 +29,7 @@
  obj-$(CONFIG_MTD_PCMCIA)      += pcmciamtd.o
  obj-$(CONFIG_MTD_RPXLITE)     += rpxlite.o
  obj-$(CONFIG_MTD_TQM8XXL)     += tqm8xxl.o
This page took 0.030805 seconds and 4 git commands to generate.