port new diag driver to kamikaze
[openwrt.git] / target / linux / brcm-2.6 / patches / 002-flash-map.patch
index 9d56893..a1cbe03 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,452 @@
+@@ -0,0 +1,490 @@
 +/*
 + *  Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
 + *  Copyright (C) 2005 Waldemar Brodkorb <wbx@openwrt.org>
@@ -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)
@@ -394,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
@@ -401,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");
This page took 0.02294 seconds and 4 git commands to generate.