forked from Minki/linux
it821x: Add ultra_mask quirk for Vortex86SX
On Vortex86SX with IDE controller revision 0x11 ultra DMA must be disabled. This patch was tested by DMP and seems to work. It is a cleaned up version of their older Kernel patch: http://www.dmp.com.tw/tech/vortex86sx/patch-2.6.24-DMP.gz Tested-by: Shawn Lin <shawn@dmp.com.tw> Signed-off-by: Brandon Philips <bphilips@suse.de> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
9b896033aa
commit
b94b898f31
@ -68,6 +68,8 @@
|
|||||||
|
|
||||||
#define DRV_NAME "it821x"
|
#define DRV_NAME "it821x"
|
||||||
|
|
||||||
|
#define QUIRK_VORTEX86 1
|
||||||
|
|
||||||
struct it821x_dev
|
struct it821x_dev
|
||||||
{
|
{
|
||||||
unsigned int smart:1, /* Are we in smart raid mode */
|
unsigned int smart:1, /* Are we in smart raid mode */
|
||||||
@ -79,6 +81,7 @@ struct it821x_dev
|
|||||||
u16 pio[2]; /* Cached PIO values */
|
u16 pio[2]; /* Cached PIO values */
|
||||||
u16 mwdma[2]; /* Cached MWDMA values */
|
u16 mwdma[2]; /* Cached MWDMA values */
|
||||||
u16 udma[2]; /* Cached UDMA values (per drive) */
|
u16 udma[2]; /* Cached UDMA values (per drive) */
|
||||||
|
u16 quirks;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ATA_66 0
|
#define ATA_66 0
|
||||||
@ -577,6 +580,12 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
|
|||||||
|
|
||||||
hwif->ultra_mask = ATA_UDMA6;
|
hwif->ultra_mask = ATA_UDMA6;
|
||||||
hwif->mwdma_mask = ATA_MWDMA2;
|
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)
|
static void it8212_disable_raid(struct pci_dev *dev)
|
||||||
@ -649,6 +658,8 @@ static int __devinit it821x_init_one(struct pci_dev *dev, const struct pci_devic
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itdevs->quirks = id->driver_data;
|
||||||
|
|
||||||
rc = ide_pci_init_one(dev, &it821x_chipset, itdevs);
|
rc = ide_pci_init_one(dev, &it821x_chipset, itdevs);
|
||||||
if (rc)
|
if (rc)
|
||||||
kfree(itdevs);
|
kfree(itdevs);
|
||||||
@ -668,6 +679,7 @@ static void __devexit it821x_remove(struct pci_dev *dev)
|
|||||||
static const struct pci_device_id it821x_pci_tbl[] = {
|
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_8211), 0 },
|
||||||
{ PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8212), 0 },
|
{ PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8212), 0 },
|
||||||
|
{ PCI_VDEVICE(RDC, PCI_DEVICE_ID_RDC_D1010), QUIRK_VORTEX86 },
|
||||||
{ 0, },
|
{ 0, },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2174,6 +2174,7 @@
|
|||||||
#define PCI_DEVICE_ID_RDC_R6040 0x6040
|
#define PCI_DEVICE_ID_RDC_R6040 0x6040
|
||||||
#define PCI_DEVICE_ID_RDC_R6060 0x6060
|
#define PCI_DEVICE_ID_RDC_R6060 0x6060
|
||||||
#define PCI_DEVICE_ID_RDC_R6061 0x6061
|
#define PCI_DEVICE_ID_RDC_R6061 0x6061
|
||||||
|
#define PCI_DEVICE_ID_RDC_D1010 0x1010
|
||||||
|
|
||||||
#define PCI_VENDOR_ID_LENOVO 0x17aa
|
#define PCI_VENDOR_ID_LENOVO 0x17aa
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user