static void bcma_host_pci_switch_core(struct bcma_device *core)
 {
+       int win2 = core->bus->host_is_pcie2 ?
+               BCMA_PCIE2_BAR0_WIN2 : BCMA_PCI_BAR0_WIN2;
+
        pci_write_config_dword(core->bus->host_pci, BCMA_PCI_BAR0_WIN,
                               core->addr);
-       pci_write_config_dword(core->bus->host_pci, BCMA_PCI_BAR0_WIN2,
-                              core->wrap);
+       pci_write_config_dword(core->bus->host_pci, win2, core->wrap);
        core->bus->mapped_core = core;
        bcma_debug(core->bus, "Switched to core: 0x%X\n", core->id.id);
 }
 
        const struct bcma_host_ops *ops;
 
        enum bcma_hosttype hosttype;
+       bool host_is_pcie2; /* Used for BCMA_HOSTTYPE_PCI only */
        union {
                /* Pointer to the PCI bus (only for BCMA_HOSTTYPE_PCI) */
                struct pci_dev *host_pci;
 
 #define  BCMA_PCI_GPIO_XTAL            0x40    /* PCI config space GPIO 14 for Xtal powerup */
 #define  BCMA_PCI_GPIO_PLL             0x80    /* PCI config space GPIO 15 for PLL powerdown */
 
+#define BCMA_PCIE2_BAR0_WIN2           0x70
+
 /* SiliconBackplane Address Map.
  * All regions may not exist on all chips.
  */