]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.drivers/libata-ahci-Withdraw-IGN_SERR_INTERNAL-for-SB800
Move xen patchset to new version's subdir.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.drivers / libata-ahci-Withdraw-IGN_SERR_INTERNAL-for-SB800
diff --git a/src/patches/suse-2.6.27.31/patches.drivers/libata-ahci-Withdraw-IGN_SERR_INTERNAL-for-SB800 b/src/patches/suse-2.6.27.31/patches.drivers/libata-ahci-Withdraw-IGN_SERR_INTERNAL-for-SB800
new file mode 100644 (file)
index 0000000..27f8276
--- /dev/null
@@ -0,0 +1,52 @@
+From e427fe042cf90c0652eed9a85e57a8fd8af89890 Mon Sep 17 00:00:00 2001
+From: Shane Huang <shane.huang@amd.com>
+Date: Tue, 30 Dec 2008 10:53:41 +0800
+Subject: ahci: Withdraw IGN_SERR_INTERNAL for SB800 SATA
+References: bnc#449873
+
+There is an issue in ATI SB600/SB700 SATA that PxSERR.E should not be
+set on some conditions, which will lead to many SATA ODD error messages.
+commit 55a61604cd1354e1783364e1c901034f2f474b7d is the workaround.
+Since SB800 fixed this HW issue, IGN_SERR_INTERNAL should be withdrawn
+for SB800.
+
+Signed-off-by: Shane Huang <shane.huang@amd.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Tejun Heo <teheo@suse.de>
+---
+ drivers/ata/ahci.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+Index: linux-2.6.27-SLE11_BRANCH/drivers/ata/ahci.c
+===================================================================
+--- linux-2.6.27-SLE11_BRANCH.orig/drivers/ata/ahci.c
++++ linux-2.6.27-SLE11_BRANCH/drivers/ata/ahci.c
+@@ -95,7 +95,7 @@ enum {
+       board_ahci_ign_iferr    = 2,
+       board_ahci_sb600        = 3,
+       board_ahci_mv           = 4,
+-      board_ahci_sb700        = 5,
++      board_ahci_sb700        = 5, /* for SB700 and SB800 */
+       board_ahci_mcp65        = 6,
+       board_ahci_nopmp        = 7,
+@@ -428,7 +428,7 @@ static const struct ata_port_info ahci_p
+               .udma_mask      = ATA_UDMA6,
+               .port_ops       = &ahci_ops,
+       },
+-      /* board_ahci_sb700 */
++      /* board_ahci_sb700, for SB700 and SB800 */
+       {
+               AHCI_HFLAGS     (AHCI_HFLAG_IGN_SERR_INTERNAL),
+               .flags          = AHCI_FLAG_COMMON,
+@@ -2631,6 +2631,10 @@ static int ahci_init_one(struct pci_dev
+           (pdev->revision == 0xa1 || pdev->revision == 0xa2))
+               hpriv->flags |= AHCI_HFLAG_NO_MSI;
++      /* SB800 does NOT need the workaround to ignore SERR_INTERNAL */
++      if (board_id == board_ahci_sb700 && pdev->revision >= 0x40)
++              hpriv->flags &= ~AHCI_HFLAG_IGN_SERR_INTERNAL;
++
+       if ((hpriv->flags & AHCI_HFLAG_NO_MSI) || pci_enable_msi(pdev))
+               pci_intx(pdev, 1);