aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/ahci.c
diff options
context:
space:
mode:
authorAlan Cox <alan@lxorguk.ukuu.org.uk>2008-09-03 09:48:34 -0400
committerJeff Garzik <jgarzik@redhat.com>2008-09-08 12:11:36 -0400
commit5b66c829bf5c65663b2f68ee6b42f6e834cd39cd (patch)
treea0fef6e883fbaf583960563bf7e284784a7c6b95 /drivers/ata/ahci.c
parent7686ad5606f08d9dfb33a2087a36c8366366015b (diff)
ahci, pata_marvell: play nicely together
I've been chasing Jeff about this for months. Jeff added the Marvell device identifiers to the ahci driver without making the AHCI driver handle the PATA port. This means a lot of users can't use current kernels and in most distro cases can't even install. This has been going on since March 2008 for the 6121 Marvell, and late 2007 for the 6145!!! This was all pointed out at the time and repeatedly ignored. Bugs assigned to Jeff about this are ignored also. To quote Jeff in email > "Just switch the order of 'ahci' and 'pata_marvell' in > /etc/modprobe.conf, then use Fedora's tools regenerate the initrd. > See? It's not rocket science, and the current configuration can be > easily made to work for Fedora users." (Which isn't trivial, isn't end user, shouldn't be needed, and as it usually breaks at install time is in fact impossible) To quote Jeff in August 2007 > " mv-ahci-pata > Marvell 6121/6141 PATA support. Needs fixing in the 'PATA controller > command' area before it is usable, and can go upstream." Only he add the ids anyway later and caused regressions, adding a further id in March causing more regresions. The actual fix for the moment is very simple. If the user has included the pata_marvell driver let it drive the ports. If they've only selected for SATA support give them the AHCI driver which will run the port a fraction faster. Allow the user to control this decision via ahci.marvell_enable as a module parameter so that distributions can ship 'it works' defaults and smarter users (or config tools) can then flip it over it desired. Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata/ahci.c')
-rw-r--r--drivers/ata/ahci.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index c729e6988bbb..bce26ee3806e 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -610,6 +610,15 @@ module_param(ahci_em_messages, int, 0444);
610MODULE_PARM_DESC(ahci_em_messages, 610MODULE_PARM_DESC(ahci_em_messages,
611 "Set AHCI Enclosure Management Message type (0 = disabled, 1 = LED"); 611 "Set AHCI Enclosure Management Message type (0 = disabled, 1 = LED");
612 612
613#if defined(CONFIG_PATA_MARVELL) || defined(CONFIG_PATA_MARVELL_MODULE)
614static int marvell_enable;
615#else
616static int marvell_enable = 1;
617#endif
618module_param(marvell_enable, int, 0644);
619MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
620
621
613static inline int ahci_nr_ports(u32 cap) 622static inline int ahci_nr_ports(u32 cap)
614{ 623{
615 return (cap & 0x1f) + 1; 624 return (cap & 0x1f) + 1;
@@ -732,6 +741,8 @@ static void ahci_save_initial_config(struct pci_dev *pdev,
732 "MV_AHCI HACK: port_map %x -> %x\n", 741 "MV_AHCI HACK: port_map %x -> %x\n",
733 port_map, 742 port_map,
734 port_map & mv); 743 port_map & mv);
744 dev_printk(KERN_ERR, &pdev->dev,
745 "Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
735 746
736 port_map &= mv; 747 port_map &= mv;
737 } 748 }
@@ -2533,6 +2544,12 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2533 if (!printed_version++) 2544 if (!printed_version++)
2534 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 2545 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
2535 2546
2547 /* The AHCI driver can only drive the SATA ports, the PATA driver
2548 can drive them all so if both drivers are selected make sure
2549 AHCI stays out of the way */
2550 if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
2551 return -ENODEV;
2552
2536 /* acquire resources */ 2553 /* acquire resources */
2537 rc = pcim_enable_device(pdev); 2554 rc = pcim_enable_device(pdev);
2538 if (rc) 2555 if (rc)