Merge branch 'fixes-20090312' of git://git.kernel.org/pub/scm/linux/kernel/git/willy/pci

* 'fixes-20090312' of git://git.kernel.org/pub/scm/linux/kernel/git/willy/pci:
PCIe: portdrv: call pci_disable_device during remove
pci: Fix typo in message while disabling HT MSI mapping
pci: don't disable too many HT MSI mapping
powerpc/pseries: The RPA PCI hotplug driver depends on EEH
PCIe: AER: during disable, check subordinate before walking
PCI: Add PCI quirk to disable L0s ASPM state for 82575 and 82598

+35 -2
+1 -1
drivers/pci/hotplug/Kconfig
··· 143 143 144 144 config HOTPLUG_PCI_RPA 145 145 tristate "RPA PCI Hotplug driver" 146 - depends on PPC_PSERIES && PPC64 && !HOTPLUG_PCI_FAKE 146 + depends on PPC_PSERIES && EEH && !HOTPLUG_PCI_FAKE 147 147 help 148 148 Say Y here if you have a RPA system that supports PCI Hotplug. 149 149
+3
drivers/pci/pcie/aer/aerdrv_core.c
··· 133 133 bool enable) 134 134 { 135 135 set_device_error_reporting(dev, &enable); 136 + 137 + if (!dev->subordinate) 138 + return; 136 139 pci_walk_bus(dev->subordinate, set_device_error_reporting, &enable); 137 140 } 138 141
+1
drivers/pci/pcie/portdrv_pci.c
··· 103 103 static void pcie_portdrv_remove (struct pci_dev *dev) 104 104 { 105 105 pcie_port_device_remove(dev); 106 + pci_disable_device(dev); 106 107 kfree(pci_get_drvdata(dev)); 107 108 } 108 109
+30 -1
drivers/pci/quirks.c
··· 23 23 #include <linux/acpi.h> 24 24 #include <linux/kallsyms.h> 25 25 #include <linux/dmi.h> 26 + #include <linux/pci-aspm.h> 26 27 #include "pci.h" 27 28 28 29 int isa_dma_bridge_buggy; ··· 1750 1749 } 1751 1750 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_e100_interrupt); 1752 1751 1752 + /* 1753 + * The 82575 and 82598 may experience data corruption issues when transitioning 1754 + * out of L0S. To prevent this we need to disable L0S on the pci-e link 1755 + */ 1756 + static void __devinit quirk_disable_aspm_l0s(struct pci_dev *dev) 1757 + { 1758 + dev_info(&dev->dev, "Disabling L0s\n"); 1759 + pci_disable_link_state(dev, PCIE_LINK_STATE_L0S); 1760 + } 1761 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10a7, quirk_disable_aspm_l0s); 1762 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10a9, quirk_disable_aspm_l0s); 1763 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10b6, quirk_disable_aspm_l0s); 1764 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10c6, quirk_disable_aspm_l0s); 1765 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10c7, quirk_disable_aspm_l0s); 1766 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10c8, quirk_disable_aspm_l0s); 1767 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10d6, quirk_disable_aspm_l0s); 1768 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10db, quirk_disable_aspm_l0s); 1769 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10dd, quirk_disable_aspm_l0s); 1770 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10e1, quirk_disable_aspm_l0s); 1771 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10ec, quirk_disable_aspm_l0s); 1772 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10f1, quirk_disable_aspm_l0s); 1773 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10f4, quirk_disable_aspm_l0s); 1774 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1508, quirk_disable_aspm_l0s); 1775 + 1753 1776 static void __devinit fixup_rev1_53c810(struct pci_dev* dev) 1754 1777 { 1755 1778 /* rev 1 ncr53c810 chips don't set the class at all which means ··· 2122 2097 2123 2098 if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS, 2124 2099 &flags) == 0) { 2125 - dev_info(&dev->dev, "Enabling HT MSI Mapping\n"); 2100 + dev_info(&dev->dev, "Disabling HT MSI Mapping\n"); 2126 2101 2127 2102 pci_write_config_byte(dev, pos + HT_MSI_FLAGS, 2128 2103 flags & ~HT_MSI_FLAGS_ENABLE); ··· 2165 2140 struct pci_dev *host_bridge; 2166 2141 int pos; 2167 2142 int found; 2143 + 2144 + /* Enabling HT MSI mapping on this device breaks MCP51 */ 2145 + if (dev->device == 0x270) 2146 + return; 2168 2147 2169 2148 /* check if there is HT MSI cap or enabled on this device */ 2170 2149 found = ht_check_msi_mapping(dev);