Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / drivers / bcma / scan.c
index f94cccc..3bea7fe 100644 (file)
@@ -297,6 +297,23 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
                        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) {
+                       return -EILSEQ;
+               } else {
+                       pr_info("Bridge found\n");
+                       return -ENXIO;
+               }
+       }
+       core->addr = tmp;
+
        /* get & parse slave ports */
        for (i = 0; i < ports[1]; i++) {
                for (j = 0; ; j++) {
@@ -309,7 +326,7 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
                                break;
                        } else {
                                if (i == 0 && j == 0)
-                                       core->addr = tmp;
+                                       core->addr1 = tmp;
                        }
                }
        }