summaryrefslogtreecommitdiff
path: root/drivers/ata/ahci.c
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 /drivers/ata/ahci.c
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>
Diffstat (limited to 'drivers/ata/ahci.c')
-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[] = {
/* board_ahci_sb600 */
{
AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL |
+ AHCI_HFLAG_32BIT_ONLY |
AHCI_HFLAG_SECT255 | AHCI_HFLAG_NO_PMP),
.flags = AHCI_FLAG_COMMON,
.link_flags = AHCI_LFLAG_COMMON,
@@ -1217,8 +1218,11 @@ static void ahci_dev_config(struct ata_device *dev)
{
struct ahci_host_priv *hpriv = dev->link->ap->host->private_data;
- if (hpriv->flags & AHCI_HFLAG_SECT255)
+ if (hpriv->flags & AHCI_HFLAG_SECT255) {
dev->max_sectors = 255;
+ ata_dev_printk(dev, KERN_INFO,
+ "SB600 AHCI: limiting to 255 sectors per cmd\n");
+ }
}
static unsigned int ahci_dev_classify(struct ata_port *ap)