]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From e427fe042cf90c0652eed9a85e57a8fd8af89890 Mon Sep 17 00:00:00 2001 |
2 | From: Shane Huang <shane.huang@amd.com> | |
3 | Date: Tue, 30 Dec 2008 10:53:41 +0800 | |
4 | Subject: ahci: Withdraw IGN_SERR_INTERNAL for SB800 SATA | |
5 | References: bnc#449873 | |
6 | ||
7 | There is an issue in ATI SB600/SB700 SATA that PxSERR.E should not be | |
8 | set on some conditions, which will lead to many SATA ODD error messages. | |
9 | commit 55a61604cd1354e1783364e1c901034f2f474b7d is the workaround. | |
10 | Since SB800 fixed this HW issue, IGN_SERR_INTERNAL should be withdrawn | |
11 | for SB800. | |
12 | ||
13 | Signed-off-by: Shane Huang <shane.huang@amd.com> | |
14 | Signed-off-by: Jeff Garzik <jgarzik@redhat.com> | |
15 | Signed-off-by: Tejun Heo <teheo@suse.de> | |
16 | --- | |
17 | drivers/ata/ahci.c | 8 ++++++-- | |
18 | 1 file changed, 6 insertions(+), 2 deletions(-) | |
19 | ||
20 | Index: linux-2.6.27-SLE11_BRANCH/drivers/ata/ahci.c | |
21 | =================================================================== | |
22 | --- linux-2.6.27-SLE11_BRANCH.orig/drivers/ata/ahci.c | |
23 | +++ linux-2.6.27-SLE11_BRANCH/drivers/ata/ahci.c | |
24 | @@ -95,7 +95,7 @@ enum { | |
25 | board_ahci_ign_iferr = 2, | |
26 | board_ahci_sb600 = 3, | |
27 | board_ahci_mv = 4, | |
28 | - board_ahci_sb700 = 5, | |
29 | + board_ahci_sb700 = 5, /* for SB700 and SB800 */ | |
30 | board_ahci_mcp65 = 6, | |
31 | board_ahci_nopmp = 7, | |
32 | ||
33 | @@ -428,7 +428,7 @@ static const struct ata_port_info ahci_p | |
34 | .udma_mask = ATA_UDMA6, | |
35 | .port_ops = &ahci_ops, | |
36 | }, | |
37 | - /* board_ahci_sb700 */ | |
38 | + /* board_ahci_sb700, for SB700 and SB800 */ | |
39 | { | |
40 | AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL), | |
41 | .flags = AHCI_FLAG_COMMON, | |
42 | @@ -2631,6 +2631,10 @@ static int ahci_init_one(struct pci_dev | |
43 | (pdev->revision == 0xa1 || pdev->revision == 0xa2)) | |
44 | hpriv->flags |= AHCI_HFLAG_NO_MSI; | |
45 | ||
46 | + /* SB800 does NOT need the workaround to ignore SERR_INTERNAL */ | |
47 | + if (board_id == board_ahci_sb700 && pdev->revision >= 0x40) | |
48 | + hpriv->flags &= ~AHCI_HFLAG_IGN_SERR_INTERNAL; | |
49 | + | |
50 | if ((hpriv->flags & AHCI_HFLAG_NO_MSI) || pci_enable_msi(pdev)) | |
51 | pci_intx(pdev, 1); | |
52 |