|
|
|
@ -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");
|
|
|
|
@ -454,30 +492,3 @@ 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
|
|
|
|
|
@@ -299,6 +299,12 @@
|
|
|
|
|
Mapping for the Flaga digital module. If you don't have one, ignore
|
|
|
|
|
this setting.
|
|
|
|
|
|
|
|
|
|
+config MTD_BCM47XX
|
|
|
|
|
+ tristate "BCM47xx flash device"
|
|
|
|
|
+ depends on MIPS && MTD_CFI && BCM947XX
|
|
|
|
|
+ help
|
|
|
|
|
+ Support for the flash chips on the BCM947xx board.
|
|
|
|
|
+
|
|
|
|
|
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 @@
|
|
|
|
|
obj-$(CONFIG_MTD_PCMCIA) += pcmciamtd.o
|
|
|
|
|
obj-$(CONFIG_MTD_RPXLITE) += rpxlite.o
|
|
|
|
|
obj-$(CONFIG_MTD_TQM8XXL) += tqm8xxl.o
|
|
|
|
|
+obj-$(CONFIG_MTD_BCM47XX) += bcm47xx-flash.o
|
|
|
|
|
obj-$(CONFIG_MTD_SA1100) += sa1100-flash.o
|
|
|
|
|
obj-$(CONFIG_MTD_IPAQ) += ipaq-flash.o
|
|
|
|
|
obj-$(CONFIG_MTD_SBC_GXX) += sbc_gxx.o
|
|
|
|
|