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 |
