]> git.baikalelectronics.ru Git - kernel.git/commit
amd74xx: workaround unreliable AltStatus register for nVidia controllers
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Tue, 2 Dec 2008 19:40:03 +0000 (20:40 +0100)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Tue, 2 Dec 2008 19:40:03 +0000 (20:40 +0100)
commit2a3773a783e37542b68419a892f586e9caa5a462
treef23a8f126cd63a199907bd8c20f3d2f4423ca006
parent1e88bac605c13e10dad140f0551effcb0cc59b00
amd74xx: workaround unreliable AltStatus register for nVidia controllers

It seems that on some nVidia controllers using AltStatus register
can be unreliable so default to Status register if the PCI device
is in Compatibility Mode.  In order to achieve this:

* Add ide_pci_is_in_compatibility_mode() inline helper to <linux/ide.h>.

* Add IDE_HFLAG_BROKEN_ALTSTATUS host flag and set it in amd74xx host
  driver for nVidia controllers in Compatibility Mode.

* Teach actual_try_to_identify() and drive_is_ready() about the new flag.

This fixes the regression caused by removal of CONFIG_IDEPCI_SHARE_IRQ
config option in 2.6.25 and using AltStatus register unconditionally when
available (kernel.org bugs #11659 and #10216).

[ Moreover for CONFIG_IDEPCI_SHARE_IRQ=y (which is what most people
  and distributions use) it never worked correctly. ]

Thanks to Remy LABENE and Lars Winterfeld for help with debugging the problem.

More info at:
http://bugzilla.kernel.org/show_bug.cgi?id=11659
http://bugzilla.kernel.org/show_bug.cgi?id=10216

Reported-by: Remy LABENE <remy.labene@free.fr>
Tested-by: Remy LABENE <remy.labene@free.fr>
Tested-by: Lars Winterfeld <lars.winterfeld@tu-ilmenau.de>
Acked-by: Borislav Petkov <petkovbb@gmail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/amd74xx.c
drivers/ide/ide-iops.c
drivers/ide/ide-probe.c
include/linux/ide.h