diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-07-18 13:31:12 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-18 13:31:12 -0400 |
commit | 3e370b29d35fb01bfb92c2814d6f79bf6a2cb970 (patch) | |
tree | 3b8fb467d60bfe6a34686f4abdc3a60050ba40a4 /drivers/pci/quirks.c | |
parent | 88d1dce3a74367291f65a757fbdcaf17f042f30c (diff) | |
parent | 5b664cb235e97afbf34db9c4d77f08ebd725335e (diff) |
Merge branch 'linus' into x86/pci-ioapic-boot-irq-quirks
Conflicts:
drivers/pci/quirks.c
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 132 |
1 files changed, 96 insertions, 36 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 6f77675d6131..0911b0c60b64 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -556,7 +556,7 @@ static void quirk_via_ioapic(struct pci_dev *dev) | |||
556 | pci_write_config_byte (dev, 0x58, tmp); | 556 | pci_write_config_byte (dev, 0x58, tmp); |
557 | } | 557 | } |
558 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic); | 558 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic); |
559 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic); | 559 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic); |
560 | 560 | ||
561 | /* | 561 | /* |
562 | * VIA 8237: Some BIOSs don't set the 'Bypass APIC De-Assert Message' Bit. | 562 | * VIA 8237: Some BIOSs don't set the 'Bypass APIC De-Assert Message' Bit. |
@@ -576,7 +576,7 @@ static void quirk_via_vt8237_bypass_apic_deassert(struct pci_dev *dev) | |||
576 | } | 576 | } |
577 | } | 577 | } |
578 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_vt8237_bypass_apic_deassert); | 578 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_vt8237_bypass_apic_deassert); |
579 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_vt8237_bypass_apic_deassert); | 579 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_vt8237_bypass_apic_deassert); |
580 | 580 | ||
581 | /* | 581 | /* |
582 | * The AMD io apic can hang the box when an apic irq is masked. | 582 | * The AMD io apic can hang the box when an apic irq is masked. |
@@ -753,7 +753,7 @@ static void quirk_cardbus_legacy(struct pci_dev *dev) | |||
753 | pci_write_config_dword(dev, PCI_CB_LEGACY_MODE_BASE, 0); | 753 | pci_write_config_dword(dev, PCI_CB_LEGACY_MODE_BASE, 0); |
754 | } | 754 | } |
755 | DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, quirk_cardbus_legacy); | 755 | DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, quirk_cardbus_legacy); |
756 | DECLARE_PCI_FIXUP_RESUME(PCI_ANY_ID, PCI_ANY_ID, quirk_cardbus_legacy); | 756 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_ANY_ID, PCI_ANY_ID, quirk_cardbus_legacy); |
757 | 757 | ||
758 | /* | 758 | /* |
759 | * Following the PCI ordering rules is optional on the AMD762. I'm not | 759 | * Following the PCI ordering rules is optional on the AMD762. I'm not |
@@ -776,7 +776,7 @@ static void quirk_amd_ordering(struct pci_dev *dev) | |||
776 | } | 776 | } |
777 | } | 777 | } |
778 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering); | 778 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering); |
779 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering); | 779 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering); |
780 | 780 | ||
781 | /* | 781 | /* |
782 | * DreamWorks provided workaround for Dunord I-3000 problem | 782 | * DreamWorks provided workaround for Dunord I-3000 problem |
@@ -844,7 +844,7 @@ static void quirk_disable_pxb(struct pci_dev *pdev) | |||
844 | } | 844 | } |
845 | } | 845 | } |
846 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb); | 846 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb); |
847 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb); | 847 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb); |
848 | 848 | ||
849 | static void __devinit quirk_amd_ide_mode(struct pci_dev *pdev) | 849 | static void __devinit quirk_amd_ide_mode(struct pci_dev *pdev) |
850 | { | 850 | { |
@@ -864,9 +864,9 @@ static void __devinit quirk_amd_ide_mode(struct pci_dev *pdev) | |||
864 | } | 864 | } |
865 | } | 865 | } |
866 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode); | 866 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode); |
867 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode); | 867 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode); |
868 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode); | 868 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode); |
869 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode); | 869 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode); |
870 | 870 | ||
871 | /* | 871 | /* |
872 | * Serverworks CSB5 IDE does not fully support native mode | 872 | * Serverworks CSB5 IDE does not fully support native mode |
@@ -1033,6 +1033,20 @@ static void __init asus_hides_smbus_hostbridge(struct pci_dev *dev) | |||
1033 | * its on-board VGA controller */ | 1033 | * its on-board VGA controller */ |
1034 | asus_hides_smbus = 1; | 1034 | asus_hides_smbus = 1; |
1035 | } | 1035 | } |
1036 | else if (dev->device == PCI_DEVICE_ID_INTEL_82845G_IG) | ||
1037 | switch(dev->subsystem_device) { | ||
1038 | case 0x00b8: /* Compaq Evo D510 CMT */ | ||
1039 | case 0x00b9: /* Compaq Evo D510 SFF */ | ||
1040 | asus_hides_smbus = 1; | ||
1041 | } | ||
1042 | else if (dev->device == PCI_DEVICE_ID_INTEL_82815_CGC) | ||
1043 | switch (dev->subsystem_device) { | ||
1044 | case 0x001A: /* Compaq Deskpro EN SSF P667 815E */ | ||
1045 | /* Motherboard doesn't have host bridge | ||
1046 | * subvendor/subdevice IDs, therefore checking | ||
1047 | * its on-board VGA controller */ | ||
1048 | asus_hides_smbus = 1; | ||
1049 | } | ||
1036 | } | 1050 | } |
1037 | } | 1051 | } |
1038 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845_HB, asus_hides_smbus_hostbridge); | 1052 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845_HB, asus_hides_smbus_hostbridge); |
@@ -1047,6 +1061,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855GM_HB, as | |||
1047 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82915GM_HB, asus_hides_smbus_hostbridge); | 1061 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82915GM_HB, asus_hides_smbus_hostbridge); |
1048 | 1062 | ||
1049 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3, asus_hides_smbus_hostbridge); | 1063 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3, asus_hides_smbus_hostbridge); |
1064 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845G_IG, asus_hides_smbus_hostbridge); | ||
1065 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_CGC, asus_hides_smbus_hostbridge); | ||
1050 | 1066 | ||
1051 | static void asus_hides_smbus_lpc(struct pci_dev *dev) | 1067 | static void asus_hides_smbus_lpc(struct pci_dev *dev) |
1052 | { | 1068 | { |
@@ -1072,31 +1088,61 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, asu | |||
1072 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, asus_hides_smbus_lpc); | 1088 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, asus_hides_smbus_lpc); |
1073 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc); | 1089 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc); |
1074 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc); | 1090 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc); |
1075 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, asus_hides_smbus_lpc); | 1091 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, asus_hides_smbus_lpc); |
1076 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, asus_hides_smbus_lpc); | 1092 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, asus_hides_smbus_lpc); |
1077 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, asus_hides_smbus_lpc); | 1093 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, asus_hides_smbus_lpc); |
1078 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, asus_hides_smbus_lpc); | 1094 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, asus_hides_smbus_lpc); |
1079 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, asus_hides_smbus_lpc); | 1095 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, asus_hides_smbus_lpc); |
1080 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc); | 1096 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc); |
1081 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc); | 1097 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc); |
1082 | 1098 | ||
1083 | static void asus_hides_smbus_lpc_ich6(struct pci_dev *dev) | 1099 | /* It appears we just have one such device. If not, we have a warning */ |
1100 | static void __iomem *asus_rcba_base; | ||
1101 | static void asus_hides_smbus_lpc_ich6_suspend(struct pci_dev *dev) | ||
1084 | { | 1102 | { |
1085 | u32 val, rcba; | 1103 | u32 rcba; |
1086 | void __iomem *base; | ||
1087 | 1104 | ||
1088 | if (likely(!asus_hides_smbus)) | 1105 | if (likely(!asus_hides_smbus)) |
1089 | return; | 1106 | return; |
1107 | WARN_ON(asus_rcba_base); | ||
1108 | |||
1090 | pci_read_config_dword(dev, 0xF0, &rcba); | 1109 | pci_read_config_dword(dev, 0xF0, &rcba); |
1091 | base = ioremap_nocache(rcba & 0xFFFFC000, 0x4000); /* use bits 31:14, 16 kB aligned */ | 1110 | /* use bits 31:14, 16 kB aligned */ |
1092 | if (base == NULL) return; | 1111 | asus_rcba_base = ioremap_nocache(rcba & 0xFFFFC000, 0x4000); |
1093 | val=readl(base + 0x3418); /* read the Function Disable register, dword mode only */ | 1112 | if (asus_rcba_base == NULL) |
1094 | writel(val & 0xFFFFFFF7, base + 0x3418); /* enable the SMBus device */ | 1113 | return; |
1095 | iounmap(base); | 1114 | } |
1115 | |||
1116 | static void asus_hides_smbus_lpc_ich6_resume_early(struct pci_dev *dev) | ||
1117 | { | ||
1118 | u32 val; | ||
1119 | |||
1120 | if (likely(!asus_hides_smbus || !asus_rcba_base)) | ||
1121 | return; | ||
1122 | /* read the Function Disable register, dword mode only */ | ||
1123 | val = readl(asus_rcba_base + 0x3418); | ||
1124 | writel(val & 0xFFFFFFF7, asus_rcba_base + 0x3418); /* enable the SMBus device */ | ||
1125 | } | ||
1126 | |||
1127 | static void asus_hides_smbus_lpc_ich6_resume(struct pci_dev *dev) | ||
1128 | { | ||
1129 | if (likely(!asus_hides_smbus || !asus_rcba_base)) | ||
1130 | return; | ||
1131 | iounmap(asus_rcba_base); | ||
1132 | asus_rcba_base = NULL; | ||
1096 | dev_info(&dev->dev, "Enabled ICH6/i801 SMBus device\n"); | 1133 | dev_info(&dev->dev, "Enabled ICH6/i801 SMBus device\n"); |
1097 | } | 1134 | } |
1135 | |||
1136 | static void asus_hides_smbus_lpc_ich6(struct pci_dev *dev) | ||
1137 | { | ||
1138 | asus_hides_smbus_lpc_ich6_suspend(dev); | ||
1139 | asus_hides_smbus_lpc_ich6_resume_early(dev); | ||
1140 | asus_hides_smbus_lpc_ich6_resume(dev); | ||
1141 | } | ||
1098 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6); | 1142 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6); |
1099 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6); | 1143 | DECLARE_PCI_FIXUP_SUSPEND(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6_suspend); |
1144 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6_resume); | ||
1145 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6_resume_early); | ||
1100 | 1146 | ||
1101 | /* | 1147 | /* |
1102 | * SiS 96x south bridge: BIOS typically hides SMBus device... | 1148 | * SiS 96x south bridge: BIOS typically hides SMBus device... |
@@ -1114,10 +1160,10 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_961, quirk_sis_96x_ | |||
1114 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_962, quirk_sis_96x_smbus); | 1160 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_962, quirk_sis_96x_smbus); |
1115 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_963, quirk_sis_96x_smbus); | 1161 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_963, quirk_sis_96x_smbus); |
1116 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_LPC, quirk_sis_96x_smbus); | 1162 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_LPC, quirk_sis_96x_smbus); |
1117 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_961, quirk_sis_96x_smbus); | 1163 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_961, quirk_sis_96x_smbus); |
1118 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_962, quirk_sis_96x_smbus); | 1164 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_962, quirk_sis_96x_smbus); |
1119 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_963, quirk_sis_96x_smbus); | 1165 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_963, quirk_sis_96x_smbus); |
1120 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_LPC, quirk_sis_96x_smbus); | 1166 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_LPC, quirk_sis_96x_smbus); |
1121 | 1167 | ||
1122 | /* | 1168 | /* |
1123 | * ... This is further complicated by the fact that some SiS96x south | 1169 | * ... This is further complicated by the fact that some SiS96x south |
@@ -1151,7 +1197,7 @@ static void quirk_sis_503(struct pci_dev *dev) | |||
1151 | quirk_sis_96x_smbus(dev); | 1197 | quirk_sis_96x_smbus(dev); |
1152 | } | 1198 | } |
1153 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, quirk_sis_503); | 1199 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, quirk_sis_503); |
1154 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, quirk_sis_503); | 1200 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, quirk_sis_503); |
1155 | 1201 | ||
1156 | 1202 | ||
1157 | /* | 1203 | /* |
@@ -1184,7 +1230,7 @@ static void asus_hides_ac97_lpc(struct pci_dev *dev) | |||
1184 | } | 1230 | } |
1185 | } | 1231 | } |
1186 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, asus_hides_ac97_lpc); | 1232 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, asus_hides_ac97_lpc); |
1187 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, asus_hides_ac97_lpc); | 1233 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, asus_hides_ac97_lpc); |
1188 | 1234 | ||
1189 | #if defined(CONFIG_ATA) || defined(CONFIG_ATA_MODULE) | 1235 | #if defined(CONFIG_ATA) || defined(CONFIG_ATA_MODULE) |
1190 | 1236 | ||
@@ -1249,12 +1295,12 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, qui | |||
1249 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata); | 1295 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata); |
1250 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata); | 1296 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata); |
1251 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, quirk_jmicron_ata); | 1297 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, quirk_jmicron_ata); |
1252 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB360, quirk_jmicron_ata); | 1298 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB360, quirk_jmicron_ata); |
1253 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, quirk_jmicron_ata); | 1299 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, quirk_jmicron_ata); |
1254 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, quirk_jmicron_ata); | 1300 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, quirk_jmicron_ata); |
1255 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata); | 1301 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata); |
1256 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata); | 1302 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata); |
1257 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, quirk_jmicron_ata); | 1303 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, quirk_jmicron_ata); |
1258 | 1304 | ||
1259 | #endif | 1305 | #endif |
1260 | 1306 | ||
@@ -1649,6 +1695,10 @@ extern struct pci_fixup __start_pci_fixups_enable[]; | |||
1649 | extern struct pci_fixup __end_pci_fixups_enable[]; | 1695 | extern struct pci_fixup __end_pci_fixups_enable[]; |
1650 | extern struct pci_fixup __start_pci_fixups_resume[]; | 1696 | extern struct pci_fixup __start_pci_fixups_resume[]; |
1651 | extern struct pci_fixup __end_pci_fixups_resume[]; | 1697 | extern struct pci_fixup __end_pci_fixups_resume[]; |
1698 | extern struct pci_fixup __start_pci_fixups_resume_early[]; | ||
1699 | extern struct pci_fixup __end_pci_fixups_resume_early[]; | ||
1700 | extern struct pci_fixup __start_pci_fixups_suspend[]; | ||
1701 | extern struct pci_fixup __end_pci_fixups_suspend[]; | ||
1652 | 1702 | ||
1653 | 1703 | ||
1654 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev) | 1704 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev) |
@@ -1681,6 +1731,16 @@ void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev) | |||
1681 | end = __end_pci_fixups_resume; | 1731 | end = __end_pci_fixups_resume; |
1682 | break; | 1732 | break; |
1683 | 1733 | ||
1734 | case pci_fixup_resume_early: | ||
1735 | start = __start_pci_fixups_resume_early; | ||
1736 | end = __end_pci_fixups_resume_early; | ||
1737 | break; | ||
1738 | |||
1739 | case pci_fixup_suspend: | ||
1740 | start = __start_pci_fixups_suspend; | ||
1741 | end = __end_pci_fixups_suspend; | ||
1742 | break; | ||
1743 | |||
1684 | default: | 1744 | default: |
1685 | /* stupid compiler warning, you would think with an enum... */ | 1745 | /* stupid compiler warning, you would think with an enum... */ |
1686 | return; | 1746 | return; |
@@ -1757,7 +1817,7 @@ static void quirk_nvidia_ck804_pcie_aer_ext_cap(struct pci_dev *dev) | |||
1757 | } | 1817 | } |
1758 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE, | 1818 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE, |
1759 | quirk_nvidia_ck804_pcie_aer_ext_cap); | 1819 | quirk_nvidia_ck804_pcie_aer_ext_cap); |
1760 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE, | 1820 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE, |
1761 | quirk_nvidia_ck804_pcie_aer_ext_cap); | 1821 | quirk_nvidia_ck804_pcie_aer_ext_cap); |
1762 | 1822 | ||
1763 | static void __devinit quirk_via_cx700_pci_parking_caching(struct pci_dev *dev) | 1823 | static void __devinit quirk_via_cx700_pci_parking_caching(struct pci_dev *dev) |