diff options
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;  }  |