aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/libata-core.c4
-rw-r--r--include/linux/libata.h2
2 files changed, 5 insertions, 1 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 82af7011f2dd..91b478f20557 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -4024,6 +4024,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
4024 4024
4025 /* Weird ATAPI devices */ 4025 /* Weird ATAPI devices */
4026 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, 4026 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
4027 { "QUANTUM DAT DAT72-000", NULL, ATA_HORKAGE_ATAPI_MOD16_DMA },
4027 4028
4028 /* Devices we expect to fail diagnostics */ 4029 /* Devices we expect to fail diagnostics */
4029 4030
@@ -4444,7 +4445,8 @@ int atapi_check_dma(struct ata_queued_cmd *qc)
4444 /* Don't allow DMA if it isn't multiple of 16 bytes. Quite a 4445 /* Don't allow DMA if it isn't multiple of 16 bytes. Quite a
4445 * few ATAPI devices choke on such DMA requests. 4446 * few ATAPI devices choke on such DMA requests.
4446 */ 4447 */
4447 if (unlikely(qc->nbytes & 15)) 4448 if (!(qc->dev->horkage & ATA_HORKAGE_ATAPI_MOD16_DMA) &&
4449 unlikely(qc->nbytes & 15))
4448 return 1; 4450 return 1;
4449 4451
4450 if (ap->ops->check_atapi_dma) 4452 if (ap->ops->check_atapi_dma)
diff --git a/include/linux/libata.h b/include/linux/libata.h
index f5441edee55f..c7665a4134c5 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -373,6 +373,8 @@ enum {
373 ATA_HORKAGE_IVB = (1 << 8), /* cbl det validity bit bugs */ 373 ATA_HORKAGE_IVB = (1 << 8), /* cbl det validity bit bugs */
374 ATA_HORKAGE_STUCK_ERR = (1 << 9), /* stuck ERR on next PACKET */ 374 ATA_HORKAGE_STUCK_ERR = (1 << 9), /* stuck ERR on next PACKET */
375 ATA_HORKAGE_BRIDGE_OK = (1 << 10), /* no bridge limits */ 375 ATA_HORKAGE_BRIDGE_OK = (1 << 10), /* no bridge limits */
376 ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11), /* use ATAPI DMA for commands
377 not multiple of 16 bytes */
376 378
377 /* DMA mask for user DMA control: User visible values; DO NOT 379 /* DMA mask for user DMA control: User visible values; DO NOT
378 renumber */ 380 renumber */