aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bcma
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2012-09-29 14:40:18 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-10-19 15:52:59 -0400
commitdfae714361ba75323914da19eb411aaae53d6af0 (patch)
treeab36b15dca4e8d17f87f86f9f5ad03e0eafc9b68 /drivers/bcma
parent017c4c3bdeb4e6c38094eb2330a57370f68f4853 (diff)
bcma: add an extra pcie core struct
The BCM4706 has two PCIe host controller on the bcma bus. For PCIe client mode it is assumed that there is only one PCIe controller so the PCIe driver, like b43 and brcmsmac are accessing the first PCIe controller when they want to issue a operation on the host controller. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/bcma')
-rw-r--r--drivers/bcma/driver_pci_host.c4
-rw-r--r--drivers/bcma/main.c25
2 files changed, 26 insertions, 3 deletions
diff --git a/drivers/bcma/driver_pci_host.c b/drivers/bcma/driver_pci_host.c
index 9baf886e82df..63172c9f871a 100644
--- a/drivers/bcma/driver_pci_host.c
+++ b/drivers/bcma/driver_pci_host.c
@@ -452,6 +452,8 @@ void __devinit bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc)
452 pc_host->mem_resource.start = BCMA_SOC_PCI_MEM; 452 pc_host->mem_resource.start = BCMA_SOC_PCI_MEM;
453 pc_host->mem_resource.end = BCMA_SOC_PCI_MEM + 453 pc_host->mem_resource.end = BCMA_SOC_PCI_MEM +
454 BCMA_SOC_PCI_MEM_SZ - 1; 454 BCMA_SOC_PCI_MEM_SZ - 1;
455 pc_host->io_resource.start = 0x100;
456 pc_host->io_resource.end = 0x47F;
455 pci_membase_1G = BCMA_SOC_PCIE_DMA_H32; 457 pci_membase_1G = BCMA_SOC_PCIE_DMA_H32;
456 pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI0, 458 pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI0,
457 tmp | BCMA_SOC_PCI_MEM); 459 tmp | BCMA_SOC_PCI_MEM);
@@ -459,6 +461,8 @@ void __devinit bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc)
459 pc_host->mem_resource.start = BCMA_SOC_PCI1_MEM; 461 pc_host->mem_resource.start = BCMA_SOC_PCI1_MEM;
460 pc_host->mem_resource.end = BCMA_SOC_PCI1_MEM + 462 pc_host->mem_resource.end = BCMA_SOC_PCI1_MEM +
461 BCMA_SOC_PCI_MEM_SZ - 1; 463 BCMA_SOC_PCI_MEM_SZ - 1;
464 pc_host->io_resource.start = 0x480;
465 pc_host->io_resource.end = 0x7FF;
462 pci_membase_1G = BCMA_SOC_PCIE1_DMA_H32; 466 pci_membase_1G = BCMA_SOC_PCIE1_DMA_H32;
463 pc_host->host_cfg_addr = BCMA_SOC_PCI1_CFG; 467 pc_host->host_cfg_addr = BCMA_SOC_PCI1_CFG;
464 pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI0, 468 pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI0,
diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
index d6b5c4ca4c43..7f473cf0469e 100644
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -81,6 +81,18 @@ struct bcma_device *bcma_find_core(struct bcma_bus *bus, u16 coreid)
81} 81}
82EXPORT_SYMBOL_GPL(bcma_find_core); 82EXPORT_SYMBOL_GPL(bcma_find_core);
83 83
84static struct bcma_device *bcma_find_core_unit(struct bcma_bus *bus, u16 coreid,
85 u8 unit)
86{
87 struct bcma_device *core;
88
89 list_for_each_entry(core, &bus->cores, list) {
90 if (core->id.id == coreid && core->core_unit == unit)
91 return core;
92 }
93 return NULL;
94}
95
84static void bcma_release_core_dev(struct device *dev) 96static void bcma_release_core_dev(struct device *dev)
85{ 97{
86 struct bcma_device *core = container_of(dev, struct bcma_device, dev); 98 struct bcma_device *core = container_of(dev, struct bcma_device, dev);
@@ -211,10 +223,17 @@ int __devinit bcma_bus_register(struct bcma_bus *bus)
211 } 223 }
212 224
213 /* Init PCIE core */ 225 /* Init PCIE core */
214 core = bcma_find_core(bus, BCMA_CORE_PCIE); 226 core = bcma_find_core_unit(bus, BCMA_CORE_PCIE, 0);
227 if (core) {
228 bus->drv_pci[0].core = core;
229 bcma_core_pci_init(&bus->drv_pci[0]);
230 }
231
232 /* Init PCIE core */
233 core = bcma_find_core_unit(bus, BCMA_CORE_PCIE, 1);
215 if (core) { 234 if (core) {
216 bus->drv_pci.core = core; 235 bus->drv_pci[1].core = core;
217 bcma_core_pci_init(&bus->drv_pci); 236 bcma_core_pci_init(&bus->drv_pci[1]);
218 } 237 }
219 238
220 /* Init GBIT MAC COMMON core */ 239 /* Init GBIT MAC COMMON core */