int timeout);
 void bcma_prepare_core(struct bcma_bus *bus, struct bcma_device *core);
 void bcma_init_bus(struct bcma_bus *bus);
+void bcma_unregister_cores(struct bcma_bus *bus);
 int bcma_bus_register(struct bcma_bus *bus);
 void bcma_bus_unregister(struct bcma_bus *bus);
 int __init bcma_bus_early_register(struct bcma_bus *bus);
 
        /* Initialize struct, detect chip */
        bcma_init_bus(bus);
 
+       /* Scan bus to find out generation of PCIe core */
+       err = bcma_bus_scan(bus);
+       if (err)
+               goto err_pci_unmap_mmio;
+
+       if (bcma_find_core(bus, BCMA_CORE_PCIE2))
+               bus->host_is_pcie2 = true;
+
        /* Register */
        err = bcma_bus_register(bus);
        if (err)
-               goto err_pci_unmap_mmio;
+               goto err_unregister_cores;
 
        pci_set_drvdata(dev, bus);
 
 out:
        return err;
 
+err_unregister_cores:
+       bcma_unregister_cores(bus);
 err_pci_unmap_mmio:
        pci_iounmap(dev, bus->mmio);
 err_pci_release_regions:
        { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4357) },
        { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4358) },
        { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4359) },
+       { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4360) },
        { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4365) },
+       { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x43a0) },
        { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x43a9) },
        { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x43aa) },
+       { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x43b1) },
        { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4727) },
        { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 43227) },  /* 0xa8db, BCM43217 (sic!) */
        { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 43228) },  /* 0xa8dc */