brcm47xx: add new usb driver for bcma bus and replace ssb usb driver.
[openwrt/svn-archive/archive.git] / target / linux / brcm47xx / patches-3.0 / 0028-bcma-scan-for-extra-address-space.patch
1 From 1735daf1db79d338dccfc55444b52ed52af79e86 Mon Sep 17 00:00:00 2001
2 From: Hauke Mehrtens <hauke@hauke-m.de>
3 Date: Sun, 20 Nov 2011 18:22:35 +0100
4 Subject: [PATCH 15/21] bcma: scan for extra address space
5
6 Some cores like the USB core have two address spaces. In the USB host
7 controller one address space is used for the OHCI and the other for the
8 EHCI controller interface. The USB controller is the only core I found
9 with two address spaces. This code is based on the AI scan function
10 ai_scan() in shared/aiutils.c i the Broadcom SDK.
11
12 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
13 ---
14 drivers/bcma/scan.c | 17 ++++++++++++++++-
15 include/linux/bcma/bcma.h | 1 +
16 2 files changed, 17 insertions(+), 1 deletions(-)
17
18 --- a/drivers/bcma/scan.c
19 +++ b/drivers/bcma/scan.c
20 @@ -286,6 +286,21 @@ static int bcma_get_next_core(struct bcm
21 return -EILSEQ;
22 }
23
24 +
25 + /* First Slave Address Descriptor should be port 0:
26 + * the main register space for the core
27 + */
28 + tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0);
29 + if (tmp < 0) {
30 + /* Try again to see if it is a bridge */
31 + tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_BRIDGE, 0);
32 + if (tmp) {
33 + printk("found bridge\n");
34 + }
35 +
36 + }
37 + core->addr = tmp;
38 +
39 /* get & parse slave ports */
40 for (i = 0; i < ports[1]; i++) {
41 for (j = 0; ; j++) {
42 @@ -298,7 +313,7 @@ static int bcma_get_next_core(struct bcm
43 break;
44 } else {
45 if (i == 0 && j == 0)
46 - core->addr = tmp;
47 + core->addr1 = tmp;
48 }
49 }
50 }
51 --- a/include/linux/bcma/bcma.h
52 +++ b/include/linux/bcma/bcma.h
53 @@ -138,6 +138,7 @@ struct bcma_device {
54 u8 core_index;
55
56 u32 addr;
57 + u32 addr1;
58 u32 wrap;
59
60 void __iomem *io_addr;