aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlbert Lee <albertcc@tw.ibm.com>2007-04-01 23:34:15 -0400
committerJeff Garzik <jeff@garzik.org>2007-04-04 02:12:27 -0400
commit18d6e9d51891f91af4e7351cbab3cb180bb9f430 (patch)
tree5ba793fd334c4afbbcdfeb00353f46c9d3aaf6a2
parent56287768e31268969abd94b38b931a29d1ced1ce (diff)
libata: Limit max sector to 128 for TORiSAN DVD drives (take 3)
patch 3/4: The TORiSAN drive locks up when max sector == 256. Limit max sector to 128 for the TORiSAN DRD-N216 drives. (http://bugzilla.kernel.org/show_bug.cgi?id=6710) Signed-off-by: Albert Lee <albertcc@tw.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/ata/libata-core.c6
-rw-r--r--include/linux/ata.h1
-rw-r--r--include/linux/libata.h1
3 files changed, 8 insertions, 0 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index e07142b4bb54..84f6f8575966 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1784,6 +1784,9 @@ int ata_dev_configure(struct ata_device *dev)
1784 dev->max_sectors = ATA_MAX_SECTORS; 1784 dev->max_sectors = ATA_MAX_SECTORS;
1785 } 1785 }
1786 1786
1787 if (ata_device_blacklisted(dev) & ATA_HORKAGE_MAX_SEC_128)
1788 dev->max_sectors = min(ATA_MAX_SECTORS_128, dev->max_sectors);
1789
1787 if (ap->ops->dev_config) 1790 if (ap->ops->dev_config)
1788 ap->ops->dev_config(ap, dev); 1791 ap->ops->dev_config(ap, dev);
1789 1792
@@ -3352,6 +3355,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
3352 { "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA }, 3355 { "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA },
3353 { "SAMSUNG CD-ROM SN-124","N001", ATA_HORKAGE_NODMA }, 3356 { "SAMSUNG CD-ROM SN-124","N001", ATA_HORKAGE_NODMA },
3354 3357
3358 /* Weird ATAPI devices */
3359 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
3360
3355 /* Devices we expect to fail diagnostics */ 3361 /* Devices we expect to fail diagnostics */
3356 3362
3357 /* Devices where NCQ should be avoided */ 3363 /* Devices where NCQ should be avoided */
diff --git a/include/linux/ata.h b/include/linux/ata.h
index c331da2da5f7..6caeb98e29dd 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -40,6 +40,7 @@ enum {
40 ATA_MAX_DEVICES = 2, /* per bus/port */ 40 ATA_MAX_DEVICES = 2, /* per bus/port */
41 ATA_MAX_PRD = 256, /* we could make these 256/256 */ 41 ATA_MAX_PRD = 256, /* we could make these 256/256 */
42 ATA_SECT_SIZE = 512, 42 ATA_SECT_SIZE = 512,
43 ATA_MAX_SECTORS_128 = 128,
43 ATA_MAX_SECTORS = 256, 44 ATA_MAX_SECTORS = 256,
44 ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */ 45 ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */
45 46
diff --git a/include/linux/libata.h b/include/linux/libata.h
index c7b5e661fe59..c04aec360406 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -311,6 +311,7 @@ enum {
311 ATA_HORKAGE_DIAGNOSTIC = (1 << 0), /* Failed boot diag */ 311 ATA_HORKAGE_DIAGNOSTIC = (1 << 0), /* Failed boot diag */
312 ATA_HORKAGE_NODMA = (1 << 1), /* DMA problems */ 312 ATA_HORKAGE_NODMA = (1 << 1), /* DMA problems */
313 ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */ 313 ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */
314 ATA_HORKAGE_MAX_SEC_128 = (1 << 3), /* Limit max sects to 128 */
314}; 315};
315 316
316enum hsm_task_states { 317enum hsm_task_states {