[kernel] r12505 - in dists/sid/linux-2.6/debian: . patches/bugfix/all patches/series
Bastian Blank
waldi at alioth.debian.org
Sat Dec 13 22:18:16 UTC 2008
Author: waldi
Date: Sat Dec 13 22:18:14 2008
New Revision: 12505
Log:
Fix coexistence of pata_marvell and ahci.
* debian/changelog: Update.
* debian/patches/bugfix/all/ata-pata_marvell-vs-ahci.patch: Add.
* debian/patches/series/12: Add new patch.
Added:
dists/sid/linux-2.6/debian/patches/bugfix/all/ata-pata_marvell-vs-ahci.patch
Modified:
dists/sid/linux-2.6/debian/changelog
dists/sid/linux-2.6/debian/patches/series/12
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog (original)
+++ dists/sid/linux-2.6/debian/changelog Sat Dec 13 22:18:14 2008
@@ -12,6 +12,7 @@
[ Bastian Blank ]
* [openvz, vserver] Fix descriptions.
* [sparc] Enable Sun Logical Domains support. (closes: #501684)
+ * Fix coexistence of pata_marvell and ahci. (closes: #507432)
-- dann frazier <dannf at debian.org> Fri, 05 Dec 2008 23:12:07 -0700
Added: dists/sid/linux-2.6/debian/patches/bugfix/all/ata-pata_marvell-vs-ahci.patch
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/ata-pata_marvell-vs-ahci.patch Sat Dec 13 22:18:14 2008
@@ -0,0 +1,195 @@
+commit 5b66c829bf5c65663b2f68ee6b42f6e834cd39cd
+Author: Alan Cox <alan at lxorguk.ukuu.org.uk>
+Date: Wed Sep 3 14:48:34 2008 +0100
+
+ 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 at redhat.com>
+ Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
+
+diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
+index ae84949..11c8c19 100644
+--- a/drivers/ata/Kconfig
++++ b/drivers/ata/Kconfig
+@@ -448,8 +448,10 @@ config PATA_MARVELL
+ tristate "Marvell PATA support via legacy mode"
+ depends on PCI
+ help
+- This option enables limited support for the Marvell 88SE6145 ATA
+- controller.
++ This option enables limited support for the Marvell 88SE61xx ATA
++ controllers. If you wish to use only the SATA ports then select
++ the AHCI driver alone. If you wish to the use the PATA port or
++ both SATA and PATA include this driver.
+
+ If unsure, say N.
+
+diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
+index c729e69..bce26ee 100644
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -610,6 +610,15 @@ module_param(ahci_em_messages, int, 0444);
+ };
+
+
++#if defined(CONFIG_PATA_MARVELL) || defined(CONFIG_PATA_MARVELL_MODULE)
++static int marvell_enable;
++#else
++static int marvell_enable = 1;
++#endif
++module_param(marvell_enable, int, 0644);
++MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
++
++
+ static inline int ahci_nr_ports(u32 cap)
+ {
+ return (cap & 0x1f) + 1;
+@@ -732,6 +741,8 @@ static void ahci_save_initial_config(struct pci_dev *pdev,
+ "MV_AHCI HACK: port_map %x -> %x\n",
+ port_map,
+ port_map & mv);
++ dev_printk(KERN_ERR, &pdev->dev,
++ "Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
+
+ port_map &= mv;
+ }
+@@ -2533,6 +2544,12 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
+ if (!printed_version++)
+ dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
+
++ /* The AHCI driver can only drive the SATA ports, the PATA driver
++ can drive them all so if both drivers are selected make sure
++ AHCI stays out of the way */
++ if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
++ return -ENODEV;
++
+ /* acquire resources */
+ rc = pcim_enable_device(pdev);
+ if (rc)
+diff --git a/drivers/ata/pata_marvell.c b/drivers/ata/pata_marvell.c
+index 24a011b..0d87eec 100644
+--- a/drivers/ata/pata_marvell.c
++++ b/drivers/ata/pata_marvell.c
+@@ -20,29 +20,30 @@
+ #include <linux/ata.h>
+
+ #define DRV_NAME "pata_marvell"
+-#define DRV_VERSION "0.1.4"
++#define DRV_VERSION "0.1.6"
+
+ /**
+- * marvell_pre_reset - check for 40/80 pin
+- * @link: link
+- * @deadline: deadline jiffies for the operation
++ * marvell_pata_active - check if PATA is active
++ * @pdev: PCI device
+ *
+- * Perform the PATA port setup we need.
++ * Returns 1 if the PATA port may be active. We know how to check this
++ * for the 6145 but not the other devices
+ */
+
+-static int marvell_pre_reset(struct ata_link *link, unsigned long deadline)
++static int marvell_pata_active(struct pci_dev *pdev)
+ {
+- struct ata_port *ap = link->ap;
+- struct pci_dev *pdev = to_pci_dev(ap->host->dev);
++ int i;
+ u32 devices;
+ void __iomem *barp;
+- int i;
+
+- /* Check if our port is enabled */
++ /* We don't yet know how to do this for other devices */
++ if (pdev->device != 0x6145)
++ return 1;
+
+ barp = pci_iomap(pdev, 5, 0x10);
+ if (barp == NULL)
+ return -ENOMEM;
++
+ printk("BAR5:");
+ for(i = 0; i <= 0x0F; i++)
+ printk("%02X:%02X ", i, ioread8(barp + i));
+@@ -51,9 +52,27 @@ static int marvell_pre_reset(struct ata_link *link, unsigned long deadline)
+ devices = ioread32(barp + 0x0C);
+ pci_iounmap(pdev, barp);
+
+- if ((pdev->device == 0x6145) && (ap->port_no == 0) &&
+- (!(devices & 0x10))) /* PATA enable ? */
+- return -ENOENT;
++ if (devices & 0x10)
++ return 1;
++ return 0;
++}
++
++/**
++ * marvell_pre_reset - check for 40/80 pin
++ * @link: link
++ * @deadline: deadline jiffies for the operation
++ *
++ * Perform the PATA port setup we need.
++ */
++
++static int marvell_pre_reset(struct ata_link *link, unsigned long deadline)
++{
++ struct ata_port *ap = link->ap;
++ struct pci_dev *pdev = to_pci_dev(ap->host->dev);
++
++ if (pdev->device == 0x6145 && ap->port_no == 0 &&
++ !marvell_pata_active(pdev)) /* PATA enable ? */
++ return -ENOENT;
+
+ return ata_sff_prereset(link, deadline);
+ }
+@@ -128,6 +147,12 @@ static int marvell_init_one (struct pci_dev *pdev, const struct pci_device_id *i
+ if (pdev->device == 0x6101)
+ ppi[1] = &ata_dummy_port_info;
+
++#if defined(CONFIG_AHCI) || defined(CONFIG_AHCI_MODULE)
++ if (!marvell_pata_active(pdev)) {
++ printk(KERN_INFO DRV_NAME ": PATA port not active, deferring to AHCI driver.\n");
++ return -ENODEV;
++ }
++#endif
+ return ata_pci_sff_init_one(pdev, ppi, &marvell_sht, NULL);
+ }
+
Modified: dists/sid/linux-2.6/debian/patches/series/12
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/12 (original)
+++ dists/sid/linux-2.6/debian/patches/series/12 Sat Dec 13 22:18:14 2008
@@ -1,3 +1,4 @@
+ bugfix/all/net-unix-gc-fix-soft-lockups-oom-issues.patch
+ bugfix/all/inotify-watch-removal-umount-races.patch
+ bugfix/all/atm-duplicate-listen-on-socket-corrupts-the-vcc-table.patch
++ bugfix/all/ata-pata_marvell-vs-ahci.patch
More information about the Kernel-svn-changes
mailing list