From 22b2e3fbb9cc78d671e44f788a062031c97ffc6f Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Thu, 3 May 2012 20:18:41 +0000
Subject: brcm47xx: add support for kernel 3.3

SVN-Revision: 31573
---
 .../182-bcma-scan-for-extra-address-space.patch    | 45 ++++++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 target/linux/brcm47xx/patches-3.3/182-bcma-scan-for-extra-address-space.patch

(limited to 'target/linux/brcm47xx/patches-3.3/182-bcma-scan-for-extra-address-space.patch')

diff --git a/target/linux/brcm47xx/patches-3.3/182-bcma-scan-for-extra-address-space.patch b/target/linux/brcm47xx/patches-3.3/182-bcma-scan-for-extra-address-space.patch
new file mode 100644
index 0000000000..6e68f0cc8f
--- /dev/null
+++ b/target/linux/brcm47xx/patches-3.3/182-bcma-scan-for-extra-address-space.patch
@@ -0,0 +1,45 @@
+--- a/drivers/bcma/scan.c
++++ b/drivers/bcma/scan.c
+@@ -297,6 +297,23 @@ static int bcma_get_next_core(struct bcm
+ 			return -EILSEQ;
+ 	}
+ 
++	/* First Slave Address Descriptor should be port 0:
++	 * the main register space for the core
++	 */
++	tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0);
++	if (tmp <= 0) {
++		/* Try again to see if it is a bridge */
++		tmp = bcma_erom_get_addr_desc(bus, eromptr,
++					      SCAN_ADDR_TYPE_BRIDGE, 0);
++		if (tmp <= 0) {
++			return -EILSEQ;
++		} else {
++			pr_info("Bridge found\n");
++			return -ENXIO;
++		}
++	}
++	core->addr = tmp;
++
+ 	/* get & parse slave ports */
+ 	for (i = 0; i < ports[1]; i++) {
+ 		for (j = 0; ; j++) {
+@@ -309,7 +326,7 @@ static int bcma_get_next_core(struct bcm
+ 				break;
+ 			} else {
+ 				if (i == 0 && j == 0)
+-					core->addr = tmp;
++					core->addr1 = tmp;
+ 			}
+ 		}
+ 	}
+--- a/include/linux/bcma/bcma.h
++++ b/include/linux/bcma/bcma.h
+@@ -139,6 +139,7 @@ struct bcma_device {
+ 	u8 core_unit;
+ 
+ 	u32 addr;
++	u32 addr1;
+ 	u32 wrap;
+ 
+ 	void __iomem *io_addr;
-- 
cgit v1.2.3