Skip to content

Commit

Permalink
it821x: Add ultra_mask quirk for Vortex86SX
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Brandon Philips authored and Bartlomiej Zolnierkiewicz committed Jan 14, 2009
1 parent 9b89603 commit b94b898
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
12 changes: 12 additions & 0 deletions drivers/ide/it821x.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand All @@ -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
Expand Down Expand Up @@ -577,6 +580,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)
Expand Down Expand Up @@ -649,6 +658,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);
Expand All @@ -668,6 +679,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, },
};

Expand Down
1 change: 1 addition & 0 deletions include/linux/pci_ids.h
Original file line number Diff line number Diff line change
Expand Up @@ -2174,6 +2174,7 @@
#define PCI_DEVICE_ID_RDC_R6040 0x6040
#define PCI_DEVICE_ID_RDC_R6060 0x6060
#define PCI_DEVICE_ID_RDC_R6061 0x6061
#define PCI_DEVICE_ID_RDC_D1010 0x1010

#define PCI_VENDOR_ID_LENOVO 0x17aa

Expand Down

0 comments on commit b94b898

Please sign in to comment.