1
linux/drivers/ata
Robert Hancock 382a6652e9 sata_nv: use ADMA for NODATA commands
Some problems showed up recently with cache flush commands timing out on
sata_nv.  Previously these commands were always handled by transitioning to
legacy mode from ADMA mode first.  The timeout problem was worked around
already by a change to the interrupt handling code for legacy mode, but for
non-data commands like these it appears we can handle them in ADMA mode, so
the switch to legacy mode is not needed.

This patch changes the behavior so that we use ADMA mode to submit
interrupt-driven commands with ATA_PROT_NODATA protocol.  In addition to
avoiding the problem mentioned above entirely, this avoids the overhead of
switching to legacy mode and back to ADMA mode for handling cache flushes.
When handling non-DMA-mapped commands, we leave the APRD blank and clear
the NV_CPB_CTL_APRD_VALID field in the CPB so the controller does not
attempt to read it.

Signed-off-by: Robert Hancock <hancockr@shaw.ca>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: Tejun Heo <htejun@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2007-02-09 17:39:39 -05:00
..
ahci.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
ata_generic.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
ata_piix.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
Kconfig Kconfig: clarify ATA_PIIX description 2007-02-09 17:39:39 -05:00
libata-core.c libata: add 150ms between completion of hardreset and status checking 2007-02-09 17:39:38 -05:00
libata-eh.c libata: kill qc->nsect and cursect 2007-02-09 17:39:31 -05:00
libata-scsi.c libata: update libata core layer to use devres 2007-02-09 17:39:37 -05:00
libata-sff.c libata: add another IRQ calls (core and headers) 2007-02-09 17:39:38 -05:00
libata.h [libata] Shuffle DRV_xxx in core and SiS drivers, to kill warnings 2007-02-09 17:39:37 -05:00
Makefile sata_inic162x: finally, driver for initio 162x SATA controllers, take #2 2007-02-09 17:39:31 -05:00
pata_ali.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_amd.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_artop.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_atiixp.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cmd64x.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cs5520.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cs5530.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cs5535.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cypress.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_efar.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_hpt3x2n.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_hpt3x3.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_hpt37x.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_hpt366.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_isapnp.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_it821x.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_it8213.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_ixp4xx_cf.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_jmicron.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_legacy.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_marvell.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_mpc52xx.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_mpiix.c (2.6.20) pata_mpiix: probing cleanup (resend) 2007-02-09 17:39:39 -05:00
pata_netcell.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_ns87410.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_oldpiix.c (2.6.20) pata_oldpiix: fix PIO2 underclocking 2007-02-09 17:39:39 -05:00
pata_opti.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_optidma.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_pcmcia.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_pdc202xx_old.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_pdc2027x.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_platform.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_qdi.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_radisys.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_rz1000.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_sc1200.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_serverworks.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_sil680.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_sis.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_sl82c105.c pata_sl82c105: wrong assumptions about compatible PIO modes 2007-02-09 17:39:38 -05:00
pata_triflex.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_via.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_winbond.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pdc_adma.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_inic162x.c sata_inic162x: fix a few glitches in hardreset 2007-02-09 17:39:39 -05:00
sata_mv.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_nv.c sata_nv: use ADMA for NODATA commands 2007-02-09 17:39:39 -05:00
sata_promise.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_promise.h Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00
sata_qstor.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_sil24.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_sil.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_sis.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_svw.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_sx4.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_uli.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_via.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_vsc.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00