mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-20 05:43:08 +02:00
079a3384c5
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29756 3c298f89-4303-0410-b956-a3cf2f4a3e73
61 lines
1.7 KiB
Diff
61 lines
1.7 KiB
Diff
From 1735daf1db79d338dccfc55444b52ed52af79e86 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 15/21] 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 | 17 ++++++++++++++++-
|
|
include/linux/bcma/bcma.h | 1 +
|
|
2 files changed, 17 insertions(+), 1 deletions(-)
|
|
|
|
--- a/drivers/bcma/scan.c
|
|
+++ b/drivers/bcma/scan.c
|
|
@@ -286,6 +286,21 @@ 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) {
|
|
+ printk("found bridge\n");
|
|
+ }
|
|
+
|
|
+ }
|
|
+ core->addr = tmp;
|
|
+
|
|
/* get & parse slave ports */
|
|
for (i = 0; i < ports[1]; i++) {
|
|
for (j = 0; ; j++) {
|
|
@@ -298,7 +313,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
|
|
@@ -138,6 +138,7 @@ struct bcma_device {
|
|
u8 core_index;
|
|
|
|
u32 addr;
|
|
+ u32 addr1;
|
|
u32 wrap;
|
|
|
|
void __iomem *io_addr;
|