2014-08-24 23:57:49 +08:00
|
|
|
From f8c6045ee00b82c1bb3f8b3446d723c4d50e6b08 Mon Sep 17 00:00:00 2001
|
2014-05-30 03:25:40 +08:00
|
|
|
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
|
|
Date: Mon, 12 May 2014 21:57:53 +0200
|
2014-08-24 23:57:49 +08:00
|
|
|
Subject: [PATCH 09/17] bcma: store more alternative addresses
|
2014-05-30 03:25:40 +08:00
|
|
|
|
|
|
|
Each core could have more than one alternative address. There are cores
|
|
|
|
with 8 alternative addresses for different functions. The PHY control
|
|
|
|
in the Chip common B core is done through the 2. alternative address
|
|
|
|
and not the first one.
|
|
|
|
|
|
|
|
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
|
|
---
|
|
|
|
drivers/bcma/scan.c | 9 +++++----
|
|
|
|
drivers/usb/host/bcma-hcd.c | 2 +-
|
|
|
|
include/linux/bcma/bcma.h | 2 +-
|
|
|
|
3 files changed, 7 insertions(+), 6 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/bcma/scan.c
|
|
|
|
+++ b/drivers/bcma/scan.c
|
|
|
|
@@ -276,7 +276,7 @@ static int bcma_get_next_core(struct bcm
|
|
|
|
struct bcma_device *core)
|
|
|
|
{
|
|
|
|
u32 tmp;
|
|
|
|
- u8 i, j;
|
|
|
|
+ u8 i, j, k;
|
|
|
|
s32 cia, cib;
|
|
|
|
u8 ports[2], wrappers[2];
|
|
|
|
|
|
|
|
@@ -367,6 +367,7 @@ static int bcma_get_next_core(struct bcm
|
|
|
|
core->addr = tmp;
|
|
|
|
|
|
|
|
/* get & parse slave ports */
|
|
|
|
+ k = 0;
|
|
|
|
for (i = 0; i < ports[1]; i++) {
|
|
|
|
for (j = 0; ; j++) {
|
|
|
|
tmp = bcma_erom_get_addr_desc(bus, eromptr,
|
|
|
|
@@ -376,9 +377,9 @@ static int bcma_get_next_core(struct bcm
|
|
|
|
/* pr_debug("erom: slave port %d "
|
|
|
|
* "has %d descriptors\n", i, j); */
|
|
|
|
break;
|
|
|
|
- } else {
|
|
|
|
- if (i == 0 && j == 0)
|
|
|
|
- core->addr1 = tmp;
|
|
|
|
+ } else if (k < 8) {
|
|
|
|
+ core->addr_s[k] = tmp;
|
|
|
|
+ k++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--- a/drivers/usb/host/bcma-hcd.c
|
|
|
|
+++ b/drivers/usb/host/bcma-hcd.c
|
|
|
|
@@ -237,7 +237,7 @@ static int bcma_hcd_probe(struct bcma_de
|
|
|
|
bcma_hcd_init_chip(dev);
|
|
|
|
|
|
|
|
/* In AI chips EHCI is addrspace 0, OHCI is 1 */
|
|
|
|
- ohci_addr = dev->addr1;
|
|
|
|
+ ohci_addr = dev->addr_s[0];
|
|
|
|
if ((chipinfo->id == 0x5357 || chipinfo->id == 0x4749)
|
|
|
|
&& chipinfo->rev == 0)
|
|
|
|
ohci_addr = 0x18009000;
|
|
|
|
--- a/include/linux/bcma/bcma.h
|
|
|
|
+++ b/include/linux/bcma/bcma.h
|
2014-08-01 05:44:41 +08:00
|
|
|
@@ -267,7 +267,7 @@ struct bcma_device {
|
2014-05-30 03:25:40 +08:00
|
|
|
u8 core_unit;
|
|
|
|
|
|
|
|
u32 addr;
|
|
|
|
- u32 addr1;
|
|
|
|
+ u32 addr_s[8];
|
|
|
|
u32 wrap;
|
|
|
|
|
|
|
|
void __iomem *io_addr;
|