serverworks: fix CSB6 tuning logic
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 8 Jun 2007 13:14:28 +0000 (15:14 +0200)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 8 Jun 2007 13:14:28 +0000 (15:14 +0200)
commit1abb8a8b841354e7a09ba2009376f0a6368b5cec
treee51070e52ab7e4490a1a45b4e1deebed4a24e031
parented84fad5002c00dfb318f797dbf591320eebc1c0
serverworks: fix CSB6 tuning logic

Problem noticed by Joe Zbiciak, see

http://kerneltrap.org/node/8252

for details.

On CSB6 the driver is using BIOS settings and not programming DMA/PIO timings
itself.  However the logic was completely broken and resulted in wrong timings
being silently allowed (instead of being corrected by the driver).

This bug would explain some data corruption/timeout issues with Serverworks
MegaIDE in RAID mode that Alan Cox has fixed recently with:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=2074a106f52b6371885afbd714e929d60d0e3f64

For 2.6.23 we may be better off with completely switching the driver to always
programming timings (libata pata_serverworks.c driver is doing things this way
and there were no problems reported so far) but for 2.6.22 lets fix the bug
in the simplest and the least intrusive way.

Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/pci/serverworks.c