diff options
author | Paul Mundt <lethal@linux-sh.org> | 2011-08-26 16:49:51 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2011-08-26 16:49:51 +0900 |
commit | 2d0b579a9831c927bcebf5f61055e7462f0af2dc (patch) | |
tree | 3181c183b463e745601b1f4efda0f8fff3f1c08b /drivers/ata/pata_via.c | |
parent | e80ca144ea902efa7aed446780fd9fad421fd8d3 (diff) | |
parent | 671ee7f0ce62e4b991b47fcf1c161c3f710dabbc (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into sh-fixes-for-linus
Diffstat (limited to 'drivers/ata/pata_via.c')
-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 65e4be6be22..8e9f5048a10 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c @@ -124,6 +124,17 @@ static const struct via_isa_bridge { { NULL } }; +static const struct dmi_system_id no_atapi_dma_dmi_table[] = { + { + .ident = "AVERATEC 3200", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "AVERATEC"), + DMI_MATCH(DMI_BOARD_NAME, "3200"), + }, + }, + { } +}; + struct via_port { u8 cached_device; }; @@ -355,6 +366,13 @@ static unsigned long via_mode_filter(struct ata_device *dev, unsigned long mask) mask &= ~ ATA_MASK_UDMA; } } + + if (dev->class == ATA_DEV_ATAPI && + dmi_check_system(no_atapi_dma_dmi_table)) { + ata_dev_warn(dev, "controller locks up on ATAPI DMA, forcing PIO\n"); + mask &= ATA_MASK_PIO; + } + return mask; } |