linux/drivers/ide
Bartlomiej Zolnierkiewicz 6636487e8d 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>
2008-12-02 20:40:03 +01:00
..
aec62xx.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
ali14xx.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
alim15x3.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
amd74xx.c amd74xx: workaround unreliable AltStatus register for nVidia controllers 2008-12-02 20:40:03 +01:00
atiixp.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
au1xxx-ide.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
buddha.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
cmd64x.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
cmd640.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
cs5520.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
cs5530.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
cs5535.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
cy82c693.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
delkin_cb.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
dtc2278.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
falconide.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
gayle.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
hpt366.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
ht6560b.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
icside.c icside section warnings 2008-11-30 10:03:36 -08:00
ide_arm.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
ide_platform.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
ide-4drives.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
ide-acpi.c ide: add device flags 2008-10-13 21:39:36 +02:00
ide-atapi.c ide: remove IDE_AFLAG_NO_DOORLOCKING 2008-10-17 18:09:11 +02:00
ide-cd_ioctl.c ide: remove IDE_AFLAG_NO_DOORLOCKING 2008-10-17 18:09:11 +02:00
ide-cd_verbose.c block: replace sizeof(rq->cmd) with BLK_MAX_CDB 2008-04-29 14:48:55 +02:00
ide-cd.c ide-cd: fix DMA alignment regression 2008-11-02 21:40:07 +01:00
ide-cd.h ide-cd: move cdrom_info.dma to ide_drive_t.dma 2008-10-13 21:39:49 +02:00
ide-cs.c pcmcia: add another pata/ide ID 2008-11-09 21:35:36 +01:00
ide-disk_ioctl.c [PATCH] switch ide_disk_ops ->ioctl() to sane prototype 2008-10-21 07:47:30 -04:00
ide-disk_proc.c ide-disk: factor out generic disk handling code to ide-gd.c 2008-10-17 18:09:12 +02:00
ide-disk.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
ide-disk.h [PATCH] switch ide_disk_ops ->ioctl() to sane prototype 2008-10-21 07:47:30 -04:00
ide-dma-sff.c ide: re-add TRM290 fix lost during ide_build_dmatable() cleanup 2008-10-17 18:09:18 +02:00
ide-dma.c ide: move SFF DMA code to ide-dma-sff.c 2008-10-13 21:39:47 +02:00
ide-floppy_ioctl.c [PATCH] switch ide_disk_ops ->ioctl() to sane prototype 2008-10-21 07:47:30 -04:00
ide-floppy_proc.c ide: prepare for merging ide-gd-floppy.c with ide-gd.c 2008-10-17 18:09:13 +02:00
ide-floppy.c ide-floppy: remove idefloppy_floppy_t typedef 2008-10-17 18:09:16 +02:00
ide-floppy.h [PATCH] switch ide_disk_ops ->ioctl() to sane prototype 2008-10-21 07:47:30 -04:00
ide-gd.c ide-gd: re-get capacity on revalidate 2008-11-02 21:40:10 +01:00
ide-gd.h ide: add generic ATA/ATAPI disk driver 2008-10-17 18:09:14 +02:00
ide-generic.c ide-generic: remove no longer needed ide_probe_legacy() 2008-10-13 21:39:42 +02:00
ide-h8300.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
ide-io.c ide: fix the ide_release_lock imbalance 2008-12-02 20:40:02 +01:00
ide-ioctls.c [PATCH] lose the unused file argument in generic_ide_ioctl() 2008-10-21 07:47:16 -04:00
ide-iops.c amd74xx: workaround unreliable AltStatus register for nVidia controllers 2008-12-02 20:40:03 +01:00
ide-lib.c ide: add device flags 2008-10-13 21:39:36 +02:00
ide-park.c ide: Implement disk shock protection support (v4) 2008-10-13 21:39:50 +02:00
ide-pci-generic.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
ide-pio-blacklist.c ide: move PIO blacklist to ide-pio-blacklist.c 2008-07-16 20:33:39 +02:00
ide-pnp.c ide: add ide_host_add() helper 2008-07-23 19:55:57 +02:00
ide-probe.c amd74xx: workaround unreliable AltStatus register for nVidia controllers 2008-12-02 20:40:03 +01:00
ide-proc.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
ide-scan-pci.c ide: replace remaining __FUNCTION__ occurrences 2008-04-26 22:25:20 +02:00
ide-tape.c [PATCH] switch ide-tape 2008-10-21 07:48:27 -04:00
ide-taskfile.c ide: Implement disk shock protection support (v4) 2008-10-13 21:39:50 +02:00
ide-timings.c ide: include <linux/hdreg.h> only when needed 2008-10-10 22:39:27 +02:00
ide.c ide: Implement disk shock protection support (v4) 2008-10-13 21:39:50 +02:00
it821x.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
it8213.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
jmicron.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
Kconfig ide: Add tx4938ide driver (v2) 2008-10-23 23:22:08 +02:00
macide.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
Makefile ide: drivers/ide/generic.c -> drivers/ide/ide-pci-generic.c 2008-10-23 23:24:20 +02:00
ns87415.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
opti621.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
palm_bk3710.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
pdc202xx_new.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
pdc202xx_old.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
piix.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
pmac.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
q40ide.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
qd65xx.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
qd65xx.h ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
rapide.c arm ide breakage 2008-10-26 09:35:05 -07:00
rz1000.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
sc1200.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
scc_pata.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
serverworks.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
setup-pci.c ide: add proper PCI PM support (v2) 2008-10-10 22:39:32 +02:00
sgiioc4.c pci: use pci_ioremap_bar() in drivers/ide 2008-10-23 23:22:07 +02:00
siimage.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
sis5513.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
sl82c105.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
slc90e66.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
tc86c001.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
triflex.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
trm290.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
tx4938ide.c tx4938ide: Avoid underflow on calculation of a wait cycle 2008-11-02 21:40:10 +01:00
tx4939ide.c ide: Add tx4939ide driver (v6) 2008-10-23 23:22:07 +02:00
umc8672.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
via82cxxx.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00