diff options
| -rw-r--r-- | arch/powerpc/platforms/powernv/pci-ioda.c | 1 | ||||
| -rw-r--r-- | arch/powerpc/platforms/powernv/pci.c | 20 | ||||
| -rw-r--r-- | arch/powerpc/platforms/powernv/pci.h | 1 |
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 | ||
| 3181 | static const struct pci_controller_ops pnv_pci_ioda_controller_ops = { | 3181 | static 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 | ||
| 763 | void 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 | |||
| 763 | void pnv_pci_shutdown(void) | 783 | void 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); | |||
| 242 | extern int pnv_eeh_phb_reset(struct pci_controller *hose, int option); | 242 | extern int pnv_eeh_phb_reset(struct pci_controller *hose, int option); |
| 243 | 243 | ||
| 244 | extern void pnv_pci_dma_dev_setup(struct pci_dev *pdev); | 244 | extern void pnv_pci_dma_dev_setup(struct pci_dev *pdev); |
| 245 | extern void pnv_pci_dma_bus_setup(struct pci_bus *bus); | ||
| 245 | extern int pnv_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type); | 246 | extern int pnv_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type); |
| 246 | extern void pnv_teardown_msi_irqs(struct pci_dev *pdev); | 247 | extern void pnv_teardown_msi_irqs(struct pci_dev *pdev); |
| 247 | 248 | ||
