From 140f6cc62c66913adb930023d349a1a87854774a Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Sun, 15 Oct 2006 22:36:16 +0000
Subject: [PATCH] add io resource patch from #800, merge flash map stuff from
 linux 2.4 to support the wl-hdd without breaking the netgear wgt634u

SVN-Revision: 5134
---
 .../linux/brcm-2.6/patches/001-bcm947xx.patch |  2 +-
 .../brcm-2.6/patches/002-flash-map.patch      | 73 +++++++++++--------
 2 files changed, 43 insertions(+), 32 deletions(-)

diff --git a/target/linux/brcm-2.6/patches/001-bcm947xx.patch b/target/linux/brcm-2.6/patches/001-bcm947xx.patch
index 380e8190ed..786b9af788 100644
--- a/target/linux/brcm-2.6/patches/001-bcm947xx.patch
+++ b/target/linux/brcm-2.6/patches/001-bcm947xx.patch
@@ -11329,7 +11329,7 @@ diff -urN linux.old/arch/mips/bcm947xx/pci.c linux.dev/arch/mips/bcm947xx/pci.c
 +static struct resource ext_pci_io_resource = {
 +	.name   = "Ext PCI I/O resources",
 +	.start  = 0x100,
-+	.end    = 0x1FF,
++	.end    = 0x7FF,
 +	.flags  = IORESOURCE_IO,
 +};
 +
diff --git a/target/linux/brcm-2.6/patches/002-flash-map.patch b/target/linux/brcm-2.6/patches/002-flash-map.patch
index 9d568930d2..0f9c5ada99 100644
--- a/target/linux/brcm-2.6/patches/002-flash-map.patch
+++ b/target/linux/brcm-2.6/patches/002-flash-map.patch
@@ -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
-- 
2.30.2