|
@@ -1098,6 +1098,23 @@ static void __init quirk_alder_ioapic(struct pci_dev *pdev)
|
|
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic );
|
|
|
#endif
|
|
|
|
|
|
+enum ide_combined_type { COMBINED = 0, IDE = 1, LIBATA = 2 };
|
|
|
+/* Defaults to combined */
|
|
|
+static enum ide_combined_type combined_mode;
|
|
|
+
|
|
|
+static int __init combined_setup(char *str)
|
|
|
+{
|
|
|
+ if (!strncmp(str, "ide", 3))
|
|
|
+ combined_mode = IDE;
|
|
|
+ else if (!strncmp(str, "libata", 6))
|
|
|
+ combined_mode = LIBATA;
|
|
|
+ else /* "combined" or anything else defaults to old behavior */
|
|
|
+ combined_mode = COMBINED;
|
|
|
+
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+__setup("combined_mode=", combined_setup);
|
|
|
+
|
|
|
#ifdef CONFIG_SCSI_SATA_INTEL_COMBINED
|
|
|
static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
|
|
|
{
|
|
@@ -1164,6 +1181,19 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
|
|
|
if (prog & comb)
|
|
|
return;
|
|
|
|
|
|
+ /* Don't reserve any so the IDE driver can get them (but only if
|
|
|
+ * combined_mode=ide).
|
|
|
+ */
|
|
|
+ if (combined_mode == IDE)
|
|
|
+ return;
|
|
|
+
|
|
|
+ /* Grab them both for libata if combined_mode=libata. */
|
|
|
+ if (combined_mode == LIBATA) {
|
|
|
+ request_region(0x1f0, 8, "libata"); /* port 0 */
|
|
|
+ request_region(0x170, 8, "libata"); /* port 1 */
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
/* SATA port is in legacy mode. Reserve port so that
|
|
|
* IDE driver does not attempt to use it. If request_region
|
|
|
* fails, it will be obvious at boot time, so we don't bother
|