linux/drivers/ata
Tejun Heo b06ce3e51e libata: use ata_exec_internal() for PMP register access
PMP registers used to be accessed with dedicated accessors ->pmp_read
and ->pmp_write.  During reset, those callbacks are called with the
port frozen so they should be able to run without depending on
interrupt delivery.  To achieve this, they were implemented polling.

However, as resetting the host port makes the PMP to isolate fan-out
ports until SError.X is cleared, resetting fan-out ports while port is
frozen doesn't buy much additional safety.

This patch updates libata PMP support such that PMP registers are
accessed using regular ata_exec_internal() mechanism and kills
->pmp_read/write() callbacks.  The following changes are made.

* PMP access helpers - sata_pmp_read_init_tf(), sata_pmp_read_val(),
  sata_pmp_write_init_tf() are folded into sata_pmp_read/write() which
  are now standalone PMP register access functions.

* sata_pmp_read/write() returns err_mask instead of rc.  This is
  consistent with other functions which issue internal commands and
  allows more detailed error reporting.

* ahci interrupt handler is modified to ignore BAD_PMP and
  spurious/illegal completion IRQs while reset is in progress.  These
  conditions are expected during reset.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2007-10-12 14:55:47 -04:00
..
Kconfig pata_acpi: ACPI driver support 2007-10-12 14:55:46 -04:00
Makefile pata_acpi: ACPI driver support 2007-10-12 14:55:46 -04:00
ahci.c libata: use ata_exec_internal() for PMP register access 2007-10-12 14:55:47 -04:00
ata_generic.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
ata_piix.c [libata] ata_piix: add HP compaq laptop to short cable list 2007-10-12 14:55:43 -04:00
libata-acpi.c libata: add @timeout to ata_exec_internal[_sg]() 2007-10-12 14:55:47 -04:00
libata-core.c libata: use ata_exec_internal() for PMP register access 2007-10-12 14:55:47 -04:00
libata-eh.c libata: use ata_exec_internal() for PMP register access 2007-10-12 14:55:47 -04:00
libata-pmp.c libata: use ata_exec_internal() for PMP register access 2007-10-12 14:55:47 -04:00
libata-scsi.c libata_scsi: Fix ATAPI transfer lengths 2007-10-12 14:55:45 -04:00
libata-sff.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
libata.h libata: add @timeout to ata_exec_internal[_sg]() 2007-10-12 14:55:47 -04:00
pata_acpi.c pata_acpi: ACPI driver support 2007-10-12 14:55:46 -04:00
pata_ali.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_amd.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_artop.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_at32.c AVR32 PATA driver 2007-10-12 14:55:37 -04:00
pata_atiixp.c pata_atiixp: Audit notes on locking 2007-10-12 14:55:42 -04:00
pata_bf54x.c libata driver for bf548 on chip ATAPI controller. 2007-10-12 14:55:37 -04:00
pata_cmd64x.c [libata] Remove ->port_disable() hook 2007-10-12 14:55:35 -04:00
pata_cmd640.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_cs5520.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_cs5530.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_cs5535.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_cypress.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_efar.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_hpt3x2n.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_hpt3x3.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_hpt37x.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_hpt366.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_icside.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_isapnp.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_it821x.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_it8213.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_ixp4xx_cf.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_jmicron.c pata_jmicron: match vendor and class code only 2007-10-12 14:55:46 -04:00
pata_legacy.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_marvell.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_mpc52xx.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_mpiix.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_netcell.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_ns87410.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_ns87415.c pata_ns87415: Initial cut at 87415/87560 IDE support 2007-10-12 14:55:43 -04:00
pata_oldpiix.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_opti.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_optidma.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_pcmcia.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_pdc202xx_old.c pata_pdc202xx_old MWDMA fixes, and notes 2007-10-12 14:55:42 -04:00
pata_pdc2027x.c pdc2027x: Switch properly to ioread/iowrite 2007-10-12 14:55:38 -04:00
pata_platform.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_qdi.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pata_radisys.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_rz1000.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_sc1200.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_scc.c libata: Fix build failure on ppc64 drivers/ata/pata_scc.c 2007-10-12 14:55:42 -04:00
pata_serverworks.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_sil680.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_sis.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_sl82c105.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_triflex.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_via.c libata: Switch most of the remaining SFF drivers to ata_sff_port_start 2007-10-12 14:55:36 -04:00
pata_winbond.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
pdc_adma.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
sata_inic162x.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
sata_mv.c libata: update ata_dev_try_classify() arguments 2007-10-12 14:55:39 -04:00
sata_nv.c libata-pmp-prep: implement ops->qc_defer() 2007-10-12 14:55:41 -04:00
sata_promise.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
sata_promise.h Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00
sata_qstor.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
sata_sil.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
sata_sil24.c libata: use ata_exec_internal() for PMP register access 2007-10-12 14:55:47 -04:00
sata_sis.c [libata] Remove ->port_disable() hook 2007-10-12 14:55:35 -04:00
sata_svw.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
sata_sx4.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
sata_uli.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
sata_via.c sata_via: kill SATA_PATA_SHARING register handling 2007-10-12 14:55:42 -04:00
sata_vsc.c libata: implement and use ata_port_desc() to report port configuration 2007-10-12 14:55:37 -04:00
sis.h libata: PATA-mode fixes for sis_sata 2007-07-02 10:17:42 -04:00