aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/platforms/powernv/pci-ioda.c1
-rw-r--r--arch/powerpc/platforms/powernv/pci.c20
-rw-r--r--arch/powerpc/platforms/powernv/pci.h1
3 files changed, 22 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 573ae1994097..f90dc04395bf 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -3180,6 +3180,7 @@ static void pnv_pci_ioda_shutdown(struct pci_controller *hose)
3180 3180
3181static const struct pci_controller_ops pnv_pci_ioda_controller_ops = { 3181static const struct pci_controller_ops pnv_pci_ioda_controller_ops = {
3182 .dma_dev_setup = pnv_pci_dma_dev_setup, 3182 .dma_dev_setup = pnv_pci_dma_dev_setup,
3183 .dma_bus_setup = pnv_pci_dma_bus_setup,
3183#ifdef CONFIG_PCI_MSI 3184#ifdef CONFIG_PCI_MSI
3184 .setup_msi_irqs = pnv_setup_msi_irqs, 3185 .setup_msi_irqs = pnv_setup_msi_irqs,
3185 .teardown_msi_irqs = pnv_teardown_msi_irqs, 3186 .teardown_msi_irqs = pnv_teardown_msi_irqs,
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index 2f55c86df703..d25ff2292ae2 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -760,6 +760,26 @@ void pnv_pci_dma_dev_setup(struct pci_dev *pdev)
760 phb->dma_dev_setup(phb, pdev); 760 phb->dma_dev_setup(phb, pdev);
761} 761}
762 762
763void pnv_pci_dma_bus_setup(struct pci_bus *bus)
764{
765 struct pci_controller *hose = bus->sysdata;
766 struct pnv_phb *phb = hose->private_data;
767 struct pnv_ioda_pe *pe;
768
769 list_for_each_entry(pe, &phb->ioda.pe_list, list) {
770 if (!(pe->flags & (PNV_IODA_PE_BUS | PNV_IODA_PE_BUS_ALL)))
771 continue;
772
773 if (!pe->pbus)
774 continue;
775
776 if (bus->number == ((pe->rid >> 8) & 0xFF)) {
777 pe->pbus = bus;
778 break;
779 }
780 }
781}
782
763void pnv_pci_shutdown(void) 783void pnv_pci_shutdown(void)
764{ 784{
765 struct pci_controller *hose; 785 struct pci_controller *hose;
diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h
index 7f56313e8d72..00691a9b99af 100644
--- a/arch/powerpc/platforms/powernv/pci.h
+++ b/arch/powerpc/platforms/powernv/pci.h
@@ -242,6 +242,7 @@ extern void pnv_pci_reset_secondary_bus(struct pci_dev *dev);
242extern int pnv_eeh_phb_reset(struct pci_controller *hose, int option); 242extern int pnv_eeh_phb_reset(struct pci_controller *hose, int option);
243 243
244extern void pnv_pci_dma_dev_setup(struct pci_dev *pdev); 244extern void pnv_pci_dma_dev_setup(struct pci_dev *pdev);
245extern void pnv_pci_dma_bus_setup(struct pci_bus *bus);
245extern int pnv_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type); 246extern int pnv_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type);
246extern void pnv_teardown_msi_irqs(struct pci_dev *pdev); 247extern void pnv_teardown_msi_irqs(struct pci_dev *pdev);
247 248