aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/quirks.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r--drivers/pci/quirks.c284
1 files changed, 265 insertions, 19 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 4364d793f73..08cd86a6dd6 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -15,7 +15,6 @@
15 * use the PowerTweak utility (see http://powertweak.sourceforge.net). 15 * use the PowerTweak utility (see http://powertweak.sourceforge.net).
16 */ 16 */
17 17
18#include <linux/config.h>
19#include <linux/types.h> 18#include <linux/types.h>
20#include <linux/kernel.h> 19#include <linux/kernel.h>
21#include <linux/pci.h> 20#include <linux/pci.h>
@@ -401,6 +400,7 @@ static void __devinit quirk_piix4_acpi(struct pci_dev *dev)
401 piix4_io_quirk(dev, "PIIX4 devres J", 0x7c, 1 << 20); 400 piix4_io_quirk(dev, "PIIX4 devres J", 0x7c, 1 << 20);
402} 401}
403DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4_acpi ); 402DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4_acpi );
403DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_3, quirk_piix4_acpi );
404 404
405/* 405/*
406 * ICH4, ICH4-M, ICH5, ICH5-M ACPI: Three IO regions pointed to by longwords at 406 * ICH4, ICH4-M, ICH5, ICH5-M ACPI: Three IO regions pointed to by longwords at
@@ -438,6 +438,7 @@ static void __devinit quirk_ich6_lpc_acpi(struct pci_dev *dev)
438 pci_read_config_dword(dev, 0x48, &region); 438 pci_read_config_dword(dev, 0x48, &region);
439 quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1, "ICH6 GPIO"); 439 quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1, "ICH6 GPIO");
440} 440}
441DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_0, quirk_ich6_lpc_acpi );
441DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, quirk_ich6_lpc_acpi ); 442DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, quirk_ich6_lpc_acpi );
442 443
443/* 444/*
@@ -576,8 +577,6 @@ static void __init quirk_ioapic_rmw(struct pci_dev *dev)
576} 577}
577DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_ANY_ID, quirk_ioapic_rmw ); 578DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_ANY_ID, quirk_ioapic_rmw );
578 579
579int pci_msi_quirk;
580
581#define AMD8131_revA0 0x01 580#define AMD8131_revA0 0x01
582#define AMD8131_revB0 0x11 581#define AMD8131_revB0 0x11
583#define AMD8131_MISC 0x40 582#define AMD8131_MISC 0x40
@@ -586,12 +585,6 @@ static void __init quirk_amd_8131_ioapic(struct pci_dev *dev)
586{ 585{
587 unsigned char revid, tmp; 586 unsigned char revid, tmp;
588 587
589 if (dev->subordinate) {
590 printk(KERN_WARNING "PCI: MSI quirk detected. "
591 "PCI_BUS_FLAGS_NO_MSI set for subordinate bus.\n");
592 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
593 }
594
595 if (nr_ioapics == 0) 588 if (nr_ioapics == 0)
596 return; 589 return;
597 590
@@ -604,13 +597,6 @@ static void __init quirk_amd_8131_ioapic(struct pci_dev *dev)
604 } 597 }
605} 598}
606DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic); 599DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic);
607
608static void __init quirk_svw_msi(struct pci_dev *dev)
609{
610 pci_msi_quirk = 1;
611 printk(KERN_WARNING "PCI: MSI quirk detected. pci_msi_quirk set.\n");
612}
613DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_svw_msi );
614#endif /* CONFIG_X86_IO_APIC */ 600#endif /* CONFIG_X86_IO_APIC */
615 601
616 602
@@ -666,6 +652,7 @@ DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, quirk_vi
666DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, quirk_via_irq); 652DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, quirk_via_irq);
667DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2, quirk_via_irq); 653DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2, quirk_via_irq);
668DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_via_irq); 654DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_via_irq);
655DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235_USB_2, quirk_via_irq);
669DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_irq); 656DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_irq);
670DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_irq); 657DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_irq);
671DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, quirk_via_irq); 658DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, quirk_via_irq);
@@ -683,6 +670,33 @@ static void __devinit quirk_vt82c598_id(struct pci_dev *dev)
683} 670}
684DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C597_0, quirk_vt82c598_id ); 671DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C597_0, quirk_vt82c598_id );
685 672
673#ifdef CONFIG_ACPI_SLEEP
674
675/*
676 * Some VIA systems boot with the abnormal status flag set. This can cause
677 * the BIOS to re-POST the system on resume rather than passing control
678 * back to the OS. Clear the flag on boot
679 */
680static void __devinit quirk_via_abnormal_poweroff(struct pci_dev *dev)
681{
682 u32 reg;
683
684 acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS,
685 &reg);
686
687 if (reg & 0x800) {
688 printk("Clearing abnormal poweroff flag\n");
689 acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
690 ACPI_REGISTER_PM1_STATUS,
691 (u16)0x800);
692 }
693}
694
695DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, quirk_via_abnormal_poweroff);
696DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_abnormal_poweroff);
697
698#endif
699
686/* 700/*
687 * CardBus controllers have a legacy base address that enables them 701 * CardBus controllers have a legacy base address that enables them
688 * to respond as i82365 pcmcia controllers. We don't want them to 702 * to respond as i82365 pcmcia controllers. We don't want them to
@@ -963,6 +977,11 @@ static void __init asus_hides_smbus_hostbridge(struct pci_dev *dev)
963 case 0x8070: /* P4G8X Deluxe */ 977 case 0x8070: /* P4G8X Deluxe */
964 asus_hides_smbus = 1; 978 asus_hides_smbus = 1;
965 } 979 }
980 if (dev->device == PCI_DEVICE_ID_INTEL_E7501_MCH)
981 switch (dev->subsystem_device) {
982 case 0x80c9: /* PU-DLS */
983 asus_hides_smbus = 1;
984 }
966 if (dev->device == PCI_DEVICE_ID_INTEL_82855GM_HB) 985 if (dev->device == PCI_DEVICE_ID_INTEL_82855GM_HB)
967 switch (dev->subsystem_device) { 986 switch (dev->subsystem_device) {
968 case 0x1751: /* M2N notebook */ 987 case 0x1751: /* M2N notebook */
@@ -1031,6 +1050,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845G_HB, asu
1031DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82850_HB, asus_hides_smbus_hostbridge ); 1050DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82850_HB, asus_hides_smbus_hostbridge );
1032DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82865_HB, asus_hides_smbus_hostbridge ); 1051DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82865_HB, asus_hides_smbus_hostbridge );
1033DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_7205_0, asus_hides_smbus_hostbridge ); 1052DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_7205_0, asus_hides_smbus_hostbridge );
1053DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7501_MCH, asus_hides_smbus_hostbridge );
1034DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge ); 1054DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge );
1035DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855GM_HB, asus_hides_smbus_hostbridge ); 1055DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855GM_HB, asus_hides_smbus_hostbridge );
1036DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82915GM_HB, asus_hides_smbus_hostbridge ); 1056DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82915GM_HB, asus_hides_smbus_hostbridge );
@@ -1054,10 +1074,10 @@ static void __init asus_hides_smbus_lpc(struct pci_dev *dev)
1054} 1074}
1055DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, asus_hides_smbus_lpc ); 1075DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, asus_hides_smbus_lpc );
1056DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, asus_hides_smbus_lpc ); 1076DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, asus_hides_smbus_lpc );
1077DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, asus_hides_smbus_lpc );
1057DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, asus_hides_smbus_lpc ); 1078DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, asus_hides_smbus_lpc );
1058DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc ); 1079DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc );
1059DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc ); 1080DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc );
1060DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc );
1061 1081
1062static void __init asus_hides_smbus_lpc_ich6(struct pci_dev *dev) 1082static void __init asus_hides_smbus_lpc_ich6(struct pci_dev *dev)
1063{ 1083{
@@ -1175,6 +1195,55 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_962, quirk_sis_96x_
1175DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_963, quirk_sis_96x_smbus ); 1195DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_963, quirk_sis_96x_smbus );
1176DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_LPC, quirk_sis_96x_smbus ); 1196DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_LPC, quirk_sis_96x_smbus );
1177 1197
1198#if defined(CONFIG_ATA) || defined(CONFIG_ATA_MODULE)
1199
1200/*
1201 * If we are using libata we can drive this chip properly but must
1202 * do this early on to make the additional device appear during
1203 * the PCI scanning.
1204 */
1205
1206static void __devinit quirk_jmicron_dualfn(struct pci_dev *pdev)
1207{
1208 u32 conf;
1209 u8 hdr;
1210
1211 /* Only poke fn 0 */
1212 if (PCI_FUNC(pdev->devfn))
1213 return;
1214
1215 switch(pdev->device) {
1216 case PCI_DEVICE_ID_JMICRON_JMB365:
1217 case PCI_DEVICE_ID_JMICRON_JMB366:
1218 /* Redirect IDE second PATA port to the right spot */
1219 pci_read_config_dword(pdev, 0x80, &conf);
1220 conf |= (1 << 24);
1221 /* Fall through */
1222 pci_write_config_dword(pdev, 0x80, conf);
1223 case PCI_DEVICE_ID_JMICRON_JMB361:
1224 case PCI_DEVICE_ID_JMICRON_JMB363:
1225 pci_read_config_dword(pdev, 0x40, &conf);
1226 /* Enable dual function mode, AHCI on fn 0, IDE fn1 */
1227 /* Set the class codes correctly and then direct IDE 0 */
1228 conf &= ~0x000F0200; /* Clear bit 9 and 16-19 */
1229 conf |= 0x00C20002; /* Set bit 1, 17, 22, 23 */
1230 pci_write_config_dword(pdev, 0x40, conf);
1231
1232 /* Reconfigure so that the PCI scanner discovers the
1233 device is now multifunction */
1234
1235 pci_read_config_byte(pdev, PCI_HEADER_TYPE, &hdr);
1236 pdev->hdr_type = hdr & 0x7f;
1237 pdev->multifunction = !!(hdr & 0x80);
1238
1239 break;
1240 }
1241}
1242
1243DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, quirk_jmicron_dualfn);
1244
1245#endif
1246
1178#ifdef CONFIG_X86_IO_APIC 1247#ifdef CONFIG_X86_IO_APIC
1179static void __init quirk_alder_ioapic(struct pci_dev *pdev) 1248static void __init quirk_alder_ioapic(struct pci_dev *pdev)
1180{ 1249{
@@ -1216,7 +1285,7 @@ static int __init combined_setup(char *str)
1216} 1285}
1217__setup("combined_mode=", combined_setup); 1286__setup("combined_mode=", combined_setup);
1218 1287
1219#ifdef CONFIG_SCSI_SATA_INTEL_COMBINED 1288#ifdef CONFIG_SATA_INTEL_COMBINED
1220static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) 1289static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
1221{ 1290{
1222 u8 prog, comb, tmp; 1291 u8 prog, comb, tmp;
@@ -1309,7 +1378,7 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
1309 request_region(0x170, 8, "libata"); /* port 1 */ 1378 request_region(0x170, 8, "libata"); /* port 1 */
1310} 1379}
1311DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_intel_ide_combined ); 1380DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_intel_ide_combined );
1312#endif /* CONFIG_SCSI_SATA_INTEL_COMBINED */ 1381#endif /* CONFIG_SATA_INTEL_COMBINED */
1313 1382
1314 1383
1315int pcie_mch_quirk; 1384int pcie_mch_quirk;
@@ -1342,6 +1411,37 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0, quirk_pc
1342DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_pcie_pxh); 1411DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_pcie_pxh);
1343DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh); 1412DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh);
1344 1413
1414/*
1415 * Some Intel PCI Express chipsets have trouble with downstream
1416 * device power management.
1417 */
1418static void quirk_intel_pcie_pm(struct pci_dev * dev)
1419{
1420 pci_pm_d3_delay = 120;
1421 dev->no_d1d2 = 1;
1422}
1423
1424DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e2, quirk_intel_pcie_pm);
1425DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e3, quirk_intel_pcie_pm);
1426DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e4, quirk_intel_pcie_pm);
1427DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e5, quirk_intel_pcie_pm);
1428DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e6, quirk_intel_pcie_pm);
1429DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e7, quirk_intel_pcie_pm);
1430DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25f7, quirk_intel_pcie_pm);
1431DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25f8, quirk_intel_pcie_pm);
1432DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25f9, quirk_intel_pcie_pm);
1433DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25fa, quirk_intel_pcie_pm);
1434DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2601, quirk_intel_pcie_pm);
1435DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2602, quirk_intel_pcie_pm);
1436DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2603, quirk_intel_pcie_pm);
1437DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2604, quirk_intel_pcie_pm);
1438DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2605, quirk_intel_pcie_pm);
1439DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2606, quirk_intel_pcie_pm);
1440DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2607, quirk_intel_pcie_pm);
1441DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2608, quirk_intel_pcie_pm);
1442DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2609, quirk_intel_pcie_pm);
1443DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260a, quirk_intel_pcie_pm);
1444DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260b, quirk_intel_pcie_pm);
1345 1445
1346/* 1446/*
1347 * Fixup the cardbus bridges on the IBM Dock II docking station 1447 * Fixup the cardbus bridges on the IBM Dock II docking station
@@ -1404,6 +1504,63 @@ static void __devinit quirk_netmos(struct pci_dev *dev)
1404} 1504}
1405DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETMOS, PCI_ANY_ID, quirk_netmos); 1505DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETMOS, PCI_ANY_ID, quirk_netmos);
1406 1506
1507static void __devinit quirk_e100_interrupt(struct pci_dev *dev)
1508{
1509 u16 command;
1510 u32 bar;
1511 u8 __iomem *csr;
1512 u8 cmd_hi;
1513
1514 switch (dev->device) {
1515 /* PCI IDs taken from drivers/net/e100.c */
1516 case 0x1029:
1517 case 0x1030 ... 0x1034:
1518 case 0x1038 ... 0x103E:
1519 case 0x1050 ... 0x1057:
1520 case 0x1059:
1521 case 0x1064 ... 0x106B:
1522 case 0x1091 ... 0x1095:
1523 case 0x1209:
1524 case 0x1229:
1525 case 0x2449:
1526 case 0x2459:
1527 case 0x245D:
1528 case 0x27DC:
1529 break;
1530 default:
1531 return;
1532 }
1533
1534 /*
1535 * Some firmware hands off the e100 with interrupts enabled,
1536 * which can cause a flood of interrupts if packets are
1537 * received before the driver attaches to the device. So
1538 * disable all e100 interrupts here. The driver will
1539 * re-enable them when it's ready.
1540 */
1541 pci_read_config_word(dev, PCI_COMMAND, &command);
1542 pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar);
1543
1544 if (!(command & PCI_COMMAND_MEMORY) || !bar)
1545 return;
1546
1547 csr = ioremap(bar, 8);
1548 if (!csr) {
1549 printk(KERN_WARNING "PCI: Can't map %s e100 registers\n",
1550 pci_name(dev));
1551 return;
1552 }
1553
1554 cmd_hi = readb(csr + 3);
1555 if (cmd_hi == 0) {
1556 printk(KERN_WARNING "PCI: Firmware left %s e100 interrupts "
1557 "enabled, disabling\n", pci_name(dev));
1558 writeb(1, csr + 3);
1559 }
1560
1561 iounmap(csr);
1562}
1563DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_e100_interrupt);
1407 1564
1408static void __devinit fixup_rev1_53c810(struct pci_dev* dev) 1565static void __devinit fixup_rev1_53c810(struct pci_dev* dev)
1409{ 1566{
@@ -1518,6 +1675,95 @@ static void __devinit quirk_nvidia_ck804_pcie_aer_ext_cap(struct pci_dev *dev)
1518DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE, 1675DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
1519 quirk_nvidia_ck804_pcie_aer_ext_cap); 1676 quirk_nvidia_ck804_pcie_aer_ext_cap);
1520 1677
1678#ifdef CONFIG_PCI_MSI
1679/* To disable MSI globally */
1680int pci_msi_quirk;
1681
1682/* The Serverworks PCI-X chipset does not support MSI. We cannot easily rely
1683 * on setting PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
1684 * some other busses controlled by the chipset even if Linux is not aware of it.
1685 * Instead of setting the flag on all busses in the machine, simply disable MSI
1686 * globally.
1687 */
1688static void __init quirk_svw_msi(struct pci_dev *dev)
1689{
1690 pci_msi_quirk = 1;
1691 printk(KERN_WARNING "PCI: MSI quirk detected. pci_msi_quirk set.\n");
1692}
1693DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_svw_msi);
1694
1695/* Disable MSI on chipsets that are known to not support it */
1696static void __devinit quirk_disable_msi(struct pci_dev *dev)
1697{
1698 if (dev->subordinate) {
1699 printk(KERN_WARNING "PCI: MSI quirk detected. "
1700 "PCI_BUS_FLAGS_NO_MSI set for %s subordinate bus.\n",
1701 pci_name(dev));
1702 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
1703 }
1704}
1705DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi);
1706
1707/* Go through the list of Hypertransport capabilities and
1708 * return 1 if a HT MSI capability is found and enabled */
1709static int __devinit msi_ht_cap_enabled(struct pci_dev *dev)
1710{
1711 u8 pos;
1712 int ttl;
1713 for (pos = pci_find_capability(dev, PCI_CAP_ID_HT), ttl = 48;
1714 pos && ttl;
1715 pos = pci_find_next_capability(dev, pos, PCI_CAP_ID_HT), ttl--) {
1716 u32 cap_hdr;
1717 /* MSI mapping section according to Hypertransport spec */
1718 if (pci_read_config_dword(dev, pos, &cap_hdr) == 0
1719 && (cap_hdr & 0xf8000000) == 0xa8000000 /* MSI mapping */) {
1720 printk(KERN_INFO "PCI: Found HT MSI mapping on %s with capability %s\n",
1721 pci_name(dev), cap_hdr & 0x10000 ? "enabled" : "disabled");
1722 return (cap_hdr & 0x10000) != 0; /* MSI mapping cap enabled */
1723 }
1724 }
1725 return 0;
1726}
1727
1728/* Check the hypertransport MSI mapping to know whether MSI is enabled or not */
1729static void __devinit quirk_msi_ht_cap(struct pci_dev *dev)
1730{
1731 if (dev->subordinate && !msi_ht_cap_enabled(dev)) {
1732 printk(KERN_WARNING "PCI: MSI quirk detected. "
1733 "MSI disabled on chipset %s.\n",
1734 pci_name(dev));
1735 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
1736 }
1737}
1738DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE,
1739 quirk_msi_ht_cap);
1740
1741/* The nVidia CK804 chipset may have 2 HT MSI mappings.
1742 * MSI are supported if the MSI capability set in any of these mappings.
1743 */
1744static void __devinit quirk_nvidia_ck804_msi_ht_cap(struct pci_dev *dev)
1745{
1746 struct pci_dev *pdev;
1747
1748 if (!dev->subordinate)
1749 return;
1750
1751 /* check HT MSI cap on this chipset and the root one.
1752 * a single one having MSI is enough to be sure that MSI are supported.
1753 */
1754 pdev = pci_find_slot(dev->bus->number, 0);
1755 if (dev->subordinate && !msi_ht_cap_enabled(dev)
1756 && !msi_ht_cap_enabled(pdev)) {
1757 printk(KERN_WARNING "PCI: MSI quirk detected. "
1758 "MSI disabled on chipset %s.\n",
1759 pci_name(dev));
1760 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
1761 }
1762}
1763DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
1764 quirk_nvidia_ck804_msi_ht_cap);
1765#endif /* CONFIG_PCI_MSI */
1766
1521EXPORT_SYMBOL(pcie_mch_quirk); 1767EXPORT_SYMBOL(pcie_mch_quirk);
1522#ifdef CONFIG_HOTPLUG 1768#ifdef CONFIG_HOTPLUG
1523EXPORT_SYMBOL(pci_fixup_device); 1769EXPORT_SYMBOL(pci_fixup_device);