aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2008-03-24 22:40:40 -0400
committerJeff Garzik <jeff@garzik.org>2008-03-24 22:40:40 -0400
commit4cde32fc4b32e96a99063af3183acdfd54c563f0 (patch)
tree1aaf39e056f1f9470fae9e8e9bc84ee603afca64
parentc07a9c4995827a4f4bcdbd07cec40ec87467f308 (diff)
[libata] ahci: SB600 workaround is suspect... play it safe for now
At least one report claims that a878539ef994787c447a98c2e3ba0fe3dad984ec failed to solve lockups, whereas the old limit-to-32-bit trick worked. Restore the 32-bit limit, but also leave the 255-sector limit in place, because we know that's needed as well. Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
-rw-r--r--drivers/ata/ahci.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 17ee6ed985d9..b1eb4e24c86a 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -433,6 +433,7 @@ static const struct ata_port_info ahci_port_info[] = {
433 /* board_ahci_sb600 */ 433 /* board_ahci_sb600 */
434 { 434 {
435 AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL | 435 AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL |
436 AHCI_HFLAG_32BIT_ONLY |
436 AHCI_HFLAG_SECT255 | AHCI_HFLAG_NO_PMP), 437 AHCI_HFLAG_SECT255 | AHCI_HFLAG_NO_PMP),
437 .flags = AHCI_FLAG_COMMON, 438 .flags = AHCI_FLAG_COMMON,
438 .link_flags = AHCI_LFLAG_COMMON, 439 .link_flags = AHCI_LFLAG_COMMON,
@@ -1217,8 +1218,11 @@ static void ahci_dev_config(struct ata_device *dev)
1217{ 1218{
1218 struct ahci_host_priv *hpriv = dev->link->ap->host->private_data; 1219 struct ahci_host_priv *hpriv = dev->link->ap->host->private_data;
1219 1220
1220 if (hpriv->flags & AHCI_HFLAG_SECT255) 1221 if (hpriv->flags & AHCI_HFLAG_SECT255) {
1221 dev->max_sectors = 255; 1222 dev->max_sectors = 255;
1223 ata_dev_printk(dev, KERN_INFO,
1224 "SB600 AHCI: limiting to 255 sectors per cmd\n");
1225 }
1222} 1226}
1223 1227
1224static unsigned int ahci_dev_classify(struct ata_port *ap) 1228static unsigned int ahci_dev_classify(struct ata_port *ap)