diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 8 | ||||
-rw-r--r-- | drivers/pci/quirks.c | 30 |
2 files changed, 38 insertions, 0 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 5dffcfefc3c7..61a56b100c62 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -633,6 +633,14 @@ running once the system is up. | |||
633 | inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver | 633 | inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver |
634 | Format: <irq> | 634 | Format: <irq> |
635 | 635 | ||
636 | combined_mode= [HW] control which driver uses IDE ports in combined | ||
637 | mode: legacy IDE driver, libata, or both | ||
638 | (in the libata case, libata.atapi_enabled=1 may be | ||
639 | useful as well). Note that using the ide or libata | ||
640 | options may affect your device naming (e.g. by | ||
641 | changing hdc to sdb). | ||
642 | Format: combined (default), ide, or libata | ||
643 | |||
636 | inttest= [IA64] | 644 | inttest= [IA64] |
637 | 645 | ||
638 | io7= [HW] IO7 for Marvel based alpha systems | 646 | io7= [HW] IO7 for Marvel based alpha systems |
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 |