Commit 18d6e9d5 authored by Albert Lee's avatar Albert Lee Committed by Jeff Garzik

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: default avatarAlbert Lee <albertcc@tw.ibm.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 56287768
...@@ -1784,6 +1784,9 @@ int ata_dev_configure(struct ata_device *dev) ...@@ -1784,6 +1784,9 @@ int ata_dev_configure(struct ata_device *dev)
dev->max_sectors = ATA_MAX_SECTORS; dev->max_sectors = ATA_MAX_SECTORS;
} }
if (ata_device_blacklisted(dev) & ATA_HORKAGE_MAX_SEC_128)
dev->max_sectors = min(ATA_MAX_SECTORS_128, dev->max_sectors);
if (ap->ops->dev_config) if (ap->ops->dev_config)
ap->ops->dev_config(ap, dev); ap->ops->dev_config(ap, dev);
...@@ -3352,6 +3355,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { ...@@ -3352,6 +3355,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
{ "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA }, { "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA },
{ "SAMSUNG CD-ROM SN-124","N001", ATA_HORKAGE_NODMA }, { "SAMSUNG CD-ROM SN-124","N001", ATA_HORKAGE_NODMA },
/* Weird ATAPI devices */
{ "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
/* Devices we expect to fail diagnostics */ /* Devices we expect to fail diagnostics */
/* Devices where NCQ should be avoided */ /* Devices where NCQ should be avoided */
......
...@@ -40,6 +40,7 @@ enum { ...@@ -40,6 +40,7 @@ enum {
ATA_MAX_DEVICES = 2, /* per bus/port */ ATA_MAX_DEVICES = 2, /* per bus/port */
ATA_MAX_PRD = 256, /* we could make these 256/256 */ ATA_MAX_PRD = 256, /* we could make these 256/256 */
ATA_SECT_SIZE = 512, ATA_SECT_SIZE = 512,
ATA_MAX_SECTORS_128 = 128,
ATA_MAX_SECTORS = 256, ATA_MAX_SECTORS = 256,
ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */ ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */
......
...@@ -311,6 +311,7 @@ enum { ...@@ -311,6 +311,7 @@ enum {
ATA_HORKAGE_DIAGNOSTIC = (1 << 0), /* Failed boot diag */ ATA_HORKAGE_DIAGNOSTIC = (1 << 0), /* Failed boot diag */
ATA_HORKAGE_NODMA = (1 << 1), /* DMA problems */ ATA_HORKAGE_NODMA = (1 << 1), /* DMA problems */
ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */ ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */
ATA_HORKAGE_MAX_SEC_128 = (1 << 3), /* Limit max sects to 128 */
}; };
enum hsm_task_states { enum hsm_task_states {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment