pcie foo
diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h index 44e9051..e7bcccd 100644 --- a/arch/powerpc/include/asm/machdep.h +++ b/arch/powerpc/include/asm/machdep.h
@@ -253,6 +253,8 @@ /* Reset the secondary bus of bridge */ void (*pcibios_reset_secondary_bus)(struct pci_dev *dev); + int (*pcie_port_platform_notify)(struct pci_dev *port, int *mask); + /* Called to shutdown machine specific hardware not already controlled * by other drivers. */
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c index b854b57..1c4ee02 100644 --- a/arch/powerpc/platforms/powernv/pci.c +++ b/arch/powerpc/platforms/powernv/pci.c
@@ -809,6 +809,17 @@ return PCI_PROBE_NORMAL; } +static int pnv_pcie_port_platform_notify(struct pci_dev *port, int *mask) +{ + /* + * Disable all PCIe port services capabilities for now, they + * collide with platform specific EEH and HotPlug mechanisms + */ + *mask = 0; + + return 0; +} + void __init pnv_pci_init(void) { struct device_node *np; @@ -856,6 +867,7 @@ ppc_md.tce_free_rm = pnv_tce_free_rm; ppc_md.tce_get = pnv_tce_get; ppc_md.pci_probe_mode = pnv_pci_probe_mode; + ppc_md.pcie_port_platform_notify = pnv_pcie_port_platform_notify; set_pci_dma_ops(&dma_iommu_ops); /* Configure MSIs */
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index cfe8a63..6633b2c 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c
@@ -755,6 +755,17 @@ return PCI_PROBE_NORMAL; } +static int pseries_pcie_port_platform_notify(struct pci_dev *port, int *mask) +{ + /* + * Disable all PCIe port services capabilities for now, they + * collide with platform specific EEH and HotPlug mechanisms + */ + *mask = 0; + + return 0; +} + /** * pSeries_power_off - tell firmware about how to power off the system. * @@ -796,6 +807,7 @@ .log_error = pSeries_log_error, .pcibios_fixup = pSeries_final_fixup, .pci_probe_mode = pSeries_pci_probe_mode, + .pcie_port_platform_notify = pseries_pcie_port_platform_notify, .restart = rtas_restart, .power_off = pSeries_power_off, .halt = rtas_halt,
diff --git a/drivers/pci/pcie/portdrv.h b/drivers/pci/pcie/portdrv.h index d525548..0b1cf17 100644 --- a/drivers/pci/pcie/portdrv.h +++ b/drivers/pci/pcie/portdrv.h
@@ -74,10 +74,20 @@ return pcie_port_acpi_setup(port, mask); } #else /* !CONFIG_ACPI */ +#ifdef CONFIG_PPC +#include <asm/machdep.h> +static inline int pcie_port_platform_notify(struct pci_dev *port, int *mask) +{ + if (ppc_md.pcie_port_platform_notify) + return ppc_md.pcie_port_platform_notify(port, mask); + return 0; +} +#else static inline int pcie_port_platform_notify(struct pci_dev *port, int *mask) { return 0; } +#endif /* CONFIG_PPC */ #endif /* !CONFIG_ACPI */ #endif /* _PORTDRV_H_ */