sata_nv: fix ADMA freeze/thaw/irq_clear issues
commit53014e2526dff68628adb11c44bd1e8f2a2a9ae9
authorRobert Hancock <hancockr@shaw.ca>
Sat, 5 May 2007 21:36:36 +0000 (5 15:36 -0600)
committerJeff Garzik <jeff@garzik.org>
Thu, 10 May 2007 00:15:46 +0000 (9 20:15 -0400)
tree50908a1ef9967d221bc80ae32cb7c27b90ff3235
parent7871e74acbf5013970daaa1d032854210282340c
sata_nv: fix ADMA freeze/thaw/irq_clear issues

This patch fixes some problems with ADMA-capable controllers with
regard to freeze, thaw and irq_clear libata callbacks. Freeze and
thaw didn't switch the ADMA-specific interrupts on or off, and more
critically the irq_clear function didn't respect the restriction that
the notifier clear registers for both ports have to be written at
the same time even when only one port is being cleared. This could
result in timeouts on one port when error handling (i.e. as a result
of hotplug) occurred on the other port.

As well, this fixes some issues in the interrupt handler: we shouldn't
check any ADMA status if the port has ADMA switched off because of
an ATAPI device, and it also checks to see if any ADMA interrupt has
been raised even when we are in port-register mode.

Signed-off-by: Robert Hancock <hancockr@shaw.ca>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/sata_nv.c