diff options
Diffstat (limited to 'drivers/ide/it821x.c')
| -rw-r--r-- | drivers/ide/it821x.c | 15 | 
1 files changed, 13 insertions, 2 deletions
| diff --git a/drivers/ide/it821x.c b/drivers/ide/it821x.c index 0be27ac1f077..e1c4f5437396 100644 --- a/drivers/ide/it821x.c +++ b/drivers/ide/it821x.c @@ -68,6 +68,8 @@  #define DRV_NAME "it821x" +#define QUIRK_VORTEX86 1 +  struct it821x_dev  {  	unsigned int smart:1,		/* Are we in smart raid mode */ @@ -79,6 +81,7 @@ struct it821x_dev  	u16	pio[2];			/* Cached PIO values */  	u16	mwdma[2];		/* Cached MWDMA values */  	u16	udma[2];		/* Cached UDMA values (per drive) */ +	u16	quirks;  };  #define ATA_66		0 @@ -557,8 +560,7 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)  	 *	this is necessary.  	 */ -	pci_read_config_byte(dev, 0x08, &conf); -	if (conf == 0x10) { +	if (dev->revision == 0x10) {  		idev->timing10 = 1;  		hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;  		if (idev->smart == 0) @@ -577,6 +579,12 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)  	hwif->ultra_mask = ATA_UDMA6;  	hwif->mwdma_mask = ATA_MWDMA2; + +	/* Vortex86SX quirk: prevent Ultra-DMA mode to fix BadCRC issue */ +	if (idev->quirks & QUIRK_VORTEX86) { +		if (dev->revision == 0x11) +			hwif->ultra_mask = 0; +	}  }  static void it8212_disable_raid(struct pci_dev *dev) @@ -649,6 +657,8 @@ static int __devinit it821x_init_one(struct pci_dev *dev, const struct pci_devic  		return -ENOMEM;  	} +	itdevs->quirks = id->driver_data; +  	rc = ide_pci_init_one(dev, &it821x_chipset, itdevs);  	if (rc)  		kfree(itdevs); @@ -668,6 +678,7 @@ static void __devexit it821x_remove(struct pci_dev *dev)  static const struct pci_device_id it821x_pci_tbl[] = {  	{ PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8211), 0 },  	{ PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8212), 0 }, +	{ PCI_VDEVICE(RDC, PCI_DEVICE_ID_RDC_D1010), QUIRK_VORTEX86 },  	{ 0, },  }; | 
