PROBLEM: Corruption problems in pata_via for Via NanoBook owners (Cloudbook, EasyNote XS etc.)

From: Andrew Smith
Date: Sun Feb 17 2008 - 09:22:07 EST


One Line : Changes in 2.24 have rendered the ide handling on the Via NanoBook unstable resulting in data loss under heavy load.

Keywords : modules, pata_via, viac82xxxx

Kernel version : 2.24

Environment : Packard Bell Easynote XS - based on Via Nanobook reference platform. (same as Everex Cloudbook in the USA).

Detail:

In v2.23 Kernel the following patch could be applied to viac82xxxx (see end of document), this works stably.

In 2.24 the device ID 0x581 for Vendor VIA was added to the pata_via driver causing some problems.

It builds fine and seems to start up OK, however, on large IOs then the kernel starts to throw errors about MULTICMDs (I think that was the term) returning an invalid response.

I have lost 2 builds so far (disk corruption) and have reverted to 2.23 with the attached patch which does work fine (and gives UDMA133).

Suggestions:

Re-implement 0x581 handling in via82xxxx based on patch shown below.

Drop 0x581 support from pata_ide unless it is known to work with other hardware variants reliably.

If 0x581 is more desirable in pata_ide then make the via82cxxxx and pata_ide drivers mutually exclusive in a kernel configuration.


Regards,

-Andy Smith

*** linux-2.6.23/drivers/ide/pci/via82cxxx.c 2007-10-09 22:31:38.000000000 +0200
--- linux-2.6.23-via-patch/drivers/ide/pci/via82cxxx.c 2007-11-02 01:03:57.000000000 +0100
***************
*** 61,66 ****
--- 61,68 ----
#define VIA_NO_UNMASK 0x08 /* Doesn't work with IRQ unmasking on */
#define VIA_BAD_ID 0x10 /* Has wrong vendor ID (0x1107) */
#define VIA_BAD_AST 0x20 /* Don't touch Address Setup Timing */
+ #define PCI_DEVICE_ID_VIA_CX700 0x8324
+ #define PCI_DEVICE_ID_VIA_CX700_IDE 0x0581

/*
* VIA SouthBridge chips.
***************
*** 545,550 ****
--- 547,553 ----
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_6410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
+ { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_CX700_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_SATA_EIDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
{ 0, },
};

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/