summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.2/183-bcma-scan-for-extra-address-space.patch
diff options
context:
space:
mode:
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-02-12 16:38:10 +0000
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-02-12 16:38:10 +0000
commit6d7798dc01d71f5db2a8d468a7cfdc67444ae090 (patch)
tree3ea58252b93cfe3558b996e5d548b42b0abc320f /target/linux/brcm47xx/patches-3.2/183-bcma-scan-for-extra-address-space.patch
parent947736eb77adfef1e6382e0a5de7490b2934a714 (diff)
brcm47xx: update usb driver for brcm47xx.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30480 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm47xx/patches-3.2/183-bcma-scan-for-extra-address-space.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.2/183-bcma-scan-for-extra-address-space.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.2/183-bcma-scan-for-extra-address-space.patch b/target/linux/brcm47xx/patches-3.2/183-bcma-scan-for-extra-address-space.patch
new file mode 100644
index 000000000..29fdfce20
--- /dev/null
+++ b/target/linux/brcm47xx/patches-3.2/183-bcma-scan-for-extra-address-space.patch
@@ -0,0 +1,61 @@
+From adebff2358c2b631fc04e31ba87eee48e546c655 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Sun, 20 Nov 2011 18:22:35 +0100
+Subject: [PATCH 183/186] bcma: scan for extra address space
+
+Some cores like the USB core have two address spaces. In the USB host
+controller one address space is used for the OHCI and the other for the
+EHCI controller interface. The USB controller is the only core I found
+with two address spaces. This code is based on the AI scan function
+ai_scan() in shared/aiutils.c i the Broadcom SDK.
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ drivers/bcma/scan.c | 18 +++++++++++++++++-
+ include/linux/bcma/bcma.h | 1 +
+ 2 files changed, 18 insertions(+), 1 deletions(-)
+
+--- a/drivers/bcma/scan.c
++++ b/drivers/bcma/scan.c
+@@ -297,6 +297,22 @@ 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) {
++ pr_info("found bridge");
++ return -ENXIO;
++ }
++ }
++ core->addr = tmp;
++
+ /* get & parse slave ports */
+ for (i = 0; i < ports[1]; i++) {
+ for (j = 0; ; j++) {
+@@ -309,7 +325,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;