diff options
Diffstat (limited to 'drivers/bcma')
-rw-r--r-- | drivers/bcma/scan.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/bcma/scan.c b/drivers/bcma/scan.c index f94cccccfa56..3bea7fe25b20 100644 --- a/drivers/bcma/scan.c +++ b/drivers/bcma/scan.c | |||
@@ -297,6 +297,23 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr, | |||
297 | return -EILSEQ; | 297 | return -EILSEQ; |
298 | } | 298 | } |
299 | 299 | ||
300 | /* First Slave Address Descriptor should be port 0: | ||
301 | * the main register space for the core | ||
302 | */ | ||
303 | tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0); | ||
304 | if (tmp <= 0) { | ||
305 | /* Try again to see if it is a bridge */ | ||
306 | tmp = bcma_erom_get_addr_desc(bus, eromptr, | ||
307 | SCAN_ADDR_TYPE_BRIDGE, 0); | ||
308 | if (tmp <= 0) { | ||
309 | return -EILSEQ; | ||
310 | } else { | ||
311 | pr_info("Bridge found\n"); | ||
312 | return -ENXIO; | ||
313 | } | ||
314 | } | ||
315 | core->addr = tmp; | ||
316 | |||
300 | /* get & parse slave ports */ | 317 | /* get & parse slave ports */ |
301 | for (i = 0; i < ports[1]; i++) { | 318 | for (i = 0; i < ports[1]; i++) { |
302 | for (j = 0; ; j++) { | 319 | for (j = 0; ; j++) { |
@@ -309,7 +326,7 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr, | |||
309 | break; | 326 | break; |
310 | } else { | 327 | } else { |
311 | if (i == 0 && j == 0) | 328 | if (i == 0 && j == 0) |
312 | core->addr = tmp; | 329 | core->addr1 = tmp; |
313 | } | 330 | } |
314 | } | 331 | } |
315 | } | 332 | } |