diff options
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 3a4f49f4effb..f28ebdd3958a 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -1098,6 +1098,23 @@ static void __init quirk_alder_ioapic(struct pci_dev *pdev) | |||
1098 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic ); | 1098 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic ); |
1099 | #endif | 1099 | #endif |
1100 | 1100 | ||
1101 | enum ide_combined_type { COMBINED = 0, IDE = 1, LIBATA = 2 }; | ||
1102 | /* Defaults to combined */ | ||
1103 | static enum ide_combined_type combined_mode; | ||
1104 | |||
1105 | static int __init combined_setup(char *str) | ||
1106 | { | ||
1107 | if (!strncmp(str, "ide", 3)) | ||
1108 | combined_mode = IDE; | ||
1109 | else if (!strncmp(str, "libata", 6)) | ||
1110 | combined_mode = LIBATA; | ||
1111 | else /* "combined" or anything else defaults to old behavior */ | ||
1112 | combined_mode = COMBINED; | ||
1113 | |||
1114 | return 1; | ||
1115 | } | ||
1116 | __setup("combined_mode=", combined_setup); | ||
1117 | |||
1101 | #ifdef CONFIG_SCSI_SATA_INTEL_COMBINED | 1118 | #ifdef CONFIG_SCSI_SATA_INTEL_COMBINED |
1102 | static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) | 1119 | static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) |
1103 | { | 1120 | { |
@@ -1164,6 +1181,19 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) | |||
1164 | if (prog & comb) | 1181 | if (prog & comb) |
1165 | return; | 1182 | return; |
1166 | 1183 | ||
1184 | /* Don't reserve any so the IDE driver can get them (but only if | ||
1185 | * combined_mode=ide). | ||
1186 | */ | ||
1187 | if (combined_mode == IDE) | ||
1188 | return; | ||
1189 | |||
1190 | /* Grab them both for libata if combined_mode=libata. */ | ||
1191 | if (combined_mode == LIBATA) { | ||
1192 | request_region(0x1f0, 8, "libata"); /* port 0 */ | ||
1193 | request_region(0x170, 8, "libata"); /* port 1 */ | ||
1194 | return; | ||
1195 | } | ||
1196 | |||
1167 | /* SATA port is in legacy mode. Reserve port so that | 1197 | /* SATA port is in legacy mode. Reserve port so that |
1168 | * IDE driver does not attempt to use it. If request_region | 1198 | * IDE driver does not attempt to use it. If request_region |
1169 | * fails, it will be obvious at boot time, so we don't bother | 1199 | * fails, it will be obvious at boot time, so we don't bother |