diff options
| -rw-r--r-- | drivers/ata/pata_via.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index 65e4be6be220..8e9f5048a10a 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c | |||
| @@ -124,6 +124,17 @@ static const struct via_isa_bridge { | |||
| 124 | { NULL } | 124 | { NULL } |
| 125 | }; | 125 | }; |
| 126 | 126 | ||
| 127 | static const struct dmi_system_id no_atapi_dma_dmi_table[] = { | ||
| 128 | { | ||
| 129 | .ident = "AVERATEC 3200", | ||
| 130 | .matches = { | ||
| 131 | DMI_MATCH(DMI_BOARD_VENDOR, "AVERATEC"), | ||
| 132 | DMI_MATCH(DMI_BOARD_NAME, "3200"), | ||
| 133 | }, | ||
| 134 | }, | ||
| 135 | { } | ||
| 136 | }; | ||
| 137 | |||
| 127 | struct via_port { | 138 | struct via_port { |
| 128 | u8 cached_device; | 139 | u8 cached_device; |
| 129 | }; | 140 | }; |
| @@ -355,6 +366,13 @@ static unsigned long via_mode_filter(struct ata_device *dev, unsigned long mask) | |||
| 355 | mask &= ~ ATA_MASK_UDMA; | 366 | mask &= ~ ATA_MASK_UDMA; |
| 356 | } | 367 | } |
| 357 | } | 368 | } |
| 369 | |||
| 370 | if (dev->class == ATA_DEV_ATAPI && | ||
| 371 | dmi_check_system(no_atapi_dma_dmi_table)) { | ||
| 372 | ata_dev_warn(dev, "controller locks up on ATAPI DMA, forcing PIO\n"); | ||
| 373 | mask &= ATA_MASK_PIO; | ||
| 374 | } | ||
| 375 | |||
| 358 | return mask; | 376 | return mask; |
| 359 | } | 377 | } |
| 360 | 378 | ||
