libata: add whitelist for devices with known good pata-sata bridges
authorJens Axboe <jens.axboe@oracle.com>
Wed, 27 Aug 2008 13:23:18 +0000 (15:23 +0200)
committerJeff Garzik <jgarzik@redhat.com>
Fri, 31 Oct 2008 05:45:06 +0000 (01:45 -0400)
libata currently imposes a UDMA5 max transfer rate and 200 sector max
transfer size for SATA devices that sit behind a pata-sata bridge. Lots
of devices have known good bridges that don't need this limit applied.
The MTRON SSD disks are such devices. Transfer rates are increased by
20-30% with the restriction removed.

So add a "blacklist" entry for the MTRON devices, with a flag indicating
that the bridge is known good.

Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/libata-core.c
include/linux/libata.h

index 8824c8da3f2f88abea82ab1de951313ef811bf76..82af7011f2ddd137e2a601ae95c704a4219ada9e 100644 (file)
@@ -2158,6 +2158,10 @@ retry:
 static inline u8 ata_dev_knobble(struct ata_device *dev)
 {
        struct ata_port *ap = dev->link->ap;
+
+       if (ata_dev_blacklisted(dev) & ATA_HORKAGE_BRIDGE_OK)
+               return 0;
+
        return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id)));
 }
 
@@ -4062,6 +4066,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
        { "TSSTcorp CDDVDW SH-S202N", "SB00",     ATA_HORKAGE_IVB, },
        { "TSSTcorp CDDVDW SH-S202N", "SB01",     ATA_HORKAGE_IVB, },
 
+       /* Devices that do not need bridging limits applied */
+       { "MTRON MSP-SATA*",            NULL,   ATA_HORKAGE_BRIDGE_OK, },
+
        /* End Marker */
        { }
 };
index 507f53ef8038a7a7ffcbc8fb8a9655055553ec4c..f5441edee55f647be39b6432edb30f83bc81bb13 100644 (file)
@@ -372,6 +372,7 @@ enum {
        ATA_HORKAGE_IPM         = (1 << 7),     /* Link PM problems */
        ATA_HORKAGE_IVB         = (1 << 8),     /* cbl det validity bit bugs */
        ATA_HORKAGE_STUCK_ERR   = (1 << 9),     /* stuck ERR on next PACKET */
+       ATA_HORKAGE_BRIDGE_OK   = (1 << 10),    /* no bridge limits */
 
         /* DMA mask for user DMA control: User visible values; DO NOT
            renumber */