diff options
author | Albert Lee <albertcc@tw.ibm.com> | 2007-04-01 23:34:15 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-04-04 02:12:27 -0400 |
commit | 18d6e9d51891f91af4e7351cbab3cb180bb9f430 (patch) | |
tree | 5ba793fd334c4afbbcdfeb00353f46c9d3aaf6a2 | |
parent | 56287768e31268969abd94b38b931a29d1ced1ce (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.c | 6 | ||||
-rw-r--r-- | include/linux/ata.h | 1 | ||||
-rw-r--r-- | include/linux/libata.h | 1 |
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 | ||
316 | enum hsm_task_states { | 317 | enum hsm_task_states { |