kernel_optimize_test/drivers/ata
Bartlomiej Zolnierkiewicz a75032e877 pata_pdc202xx_old: fix UDMA mode for Promise UDMA33 cards
On Monday 04 January 2010 02:30:24 pm Russell King wrote:

> Found the problem - getting rid of the read of the alt status register
> after the command has been written fixes the UDMA CRC errors on write:
>
> @@ -676,7 +676,8 @@ void ata_sff_exec_command(struct ata_port *ap, const struct
> ata_taskfile *tf)
>         DPRINTK("ata%u: cmd 0x%X\n", ap->print_id, tf->command);
>
>         iowrite8(tf->command, ap->ioaddr.command_addr);
> -       ata_sff_pause(ap);
> +       ndelay(400);
> +//     ata_sff_pause(ap);
>  }
>  EXPORT_SYMBOL_GPL(ata_sff_exec_command);
>
>
> This rather makes sense.  The PDC20247 handles the UDMA part of the
> protocol.  It has no way to tell the PDC20246 to wait while it suspends
> UDMA, so that a normal register access can take place - the 246 ploughs
> on with the register access without any regard to the state of the 247.
>
> If the drive immediately starts the UDMA protocol after a write to the
> command register (as it probably will for the DMA WRITE command), then
> we'll be accessing the taskfile in the middle of the UDMA setup, which
> can't be good.  It's certainly a violation of the ATA specs.

Fix it by adding custom ->sff_exec_command method for UDMA33 chipsets.

Debugged-by: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
2010-03-01 14:58:46 -05:00
..
ahci.c libata: make functions/variables static 2010-03-01 14:58:44 -05:00
ata_generic.c pata_piccolo: Driver for old Toshiba chipsets 2009-12-03 14:35:31 -05:00
ata_piix.c libata: implement spurious irq handling for SFF and apply it to piix 2010-03-01 14:58:44 -05:00
Kconfig ACPI: do not select ACPI_DOCK from ATA_ACPI 2009-12-24 00:04:40 -05:00
libata-acpi.c libata-acpi: missing _SDD is not an error 2009-12-03 02:46:33 -05:00
libata-core.c libata: fix CFA handling in ide_timing_compute() 2010-03-01 14:58:44 -05:00
libata-eh.c libata: retry FS IOs even if it has failed with AC_ERR_INVALID 2010-01-20 14:25:11 -05:00
libata-pmp.c libata: add SATA PMP revision information for spec 1.2 2009-09-08 21:21:14 -04:00
libata-scsi.c block: Rename blk_queue_max_sectors to blk_queue_max_hw_sectors 2010-02-26 13:58:08 +01:00
libata-sff.c libata: implement spurious irq handling for SFF and apply it to piix 2010-03-01 14:58:44 -05:00
libata.h libata: make gtf_filter per-dev 2009-10-06 00:26:27 -04:00
Makefile Merge commit 'origin/master' into next 2009-12-09 17:14:38 +11:00
pata_acpi.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_ali.c pata_ali: documentation fixes 2010-03-01 14:58:44 -05:00
pata_amd.c pata_amd: do not filter out valid modes in nv_mode_filter 2009-09-17 16:46:41 -04:00
pata_artop.c pata_artop: Serializing support 2009-03-24 22:45:05 -04:00
pata_at32.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_at91.c [libata] pata_at91: fix backslash-continued string 2010-03-01 14:58:46 -05:00
pata_atiixp.c ahci / atiixp / pci quirks: rename AMD SB900 into Hudson-2 2009-10-16 06:21:20 -04:00
pata_atp867x.c pata_atp867x: add Power Management support 2009-10-06 20:58:23 -04:00
pata_bf54x.c pata_bf54x: handle portmuxing of pins through GPIO PORTs 2009-12-21 13:55:38 -05:00
pata_cmd64x.c pata_cmd64x: remove unused definitions 2010-03-01 14:58:45 -05:00
pata_cmd640.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_cs5520.c pata_cs5520: remove dead VDMA support 2009-12-03 15:52:51 -05:00
pata_cs5530.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_cs5535.c pata_cs5535: use correct values for PIO1 and PIO2 data timings 2010-03-01 14:58:45 -05:00
pata_cs5536.c pata_cs5536: use 32-bit BM DMA template instead of 16-bit. 2009-12-03 02:46:34 -05:00
pata_cypress.c pata_cypress: fix PIO timings underclocking 2010-03-01 14:58:45 -05:00
pata_efar.c pata_efar: fix secondary port support 2010-03-01 14:58:45 -05:00
pata_hpt3x2n.c pata_hpt{37x|3x2n}: improve timing register documentation 2010-03-01 14:58:43 -05:00
pata_hpt3x3.c pata_hpt3x3: Power Management fix 2009-12-03 15:58:53 -05:00
pata_hpt37x.c pata_hpt{37x|3x2n}: improve timing register documentation 2010-03-01 14:58:43 -05:00
pata_hpt366.c pata_hpt366: remove irrelevant TODO 2010-03-01 14:58:43 -05:00
pata_icside.c Merge branch 'origin' into devel 2009-03-28 20:29:51 +00:00
pata_isapnp.c [libata] Improve timeout handling 2009-03-24 22:52:39 -04:00
pata_it821x.c pata-it821x: use PCI_DEVICE_ID_RDC_D1010 define 2009-12-03 02:46:35 -05:00
pata_it8213.c pata_it8213: MWDMA0 is unsupported 2009-12-03 17:53:27 -05:00
pata_ixp4xx_cf.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
pata_jmicron.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_legacy.c pata_legacy: add pointers to QDI65x0 documentation 2009-12-03 16:06:47 -05:00
pata_macio.c libata/drivers: Add driver for Apple "MacIO" IDE controller 2009-12-09 17:09:28 +11:00
pata_marvell.c pata_marvell: fix marvell_pre_reset() documentation 2009-12-03 16:07:12 -05:00
pata_mpc52xx.c powerpc/5xxx: Add common mpc5xxx_get_bus_frequency() function 2009-06-17 00:30:22 -06:00
pata_mpiix.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_netcell.c pata_netcell: Fix typo 2009-06-08 09:12:28 -07:00
pata_ninja32.c ata: Report 16/32bit PIO as best we can 2009-04-16 15:28:23 -04:00
pata_ns87410.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_ns87415.c pata_ns87415: Power Management fix 2009-12-03 16:08:30 -05:00
pata_octeon_cf.c pata_octeon_cf: use resource_size(), to fix resource sizing bug 2009-12-17 01:02:50 -05:00
pata_of_platform.c powerpc: Fix no interrupt handling in pata_of_platform 2008-10-10 15:55:17 +11:00
pata_oldpiix.c [libata] MWDMA0 is unsupported on PIIX-like PATA controllers 2009-12-03 17:52:16 -05:00
pata_opti.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_optidma.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_palmld.c [ARM] 5522/1: PalmLD: IDE support 2009-05-31 14:50:40 +01:00
pata_pcmcia.c libata: make functions/variables static 2010-03-01 14:58:44 -05:00
pata_pdc202xx_old.c pata_pdc202xx_old: fix UDMA mode for Promise UDMA33 cards 2010-03-01 14:58:46 -05:00
pata_pdc2027x.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_piccolo.c pata_piccolo: Driver for old Toshiba chipsets 2009-12-03 14:35:31 -05:00
pata_platform.c drivers/ata: use resource_size 2009-09-11 02:25:58 -04:00
pata_qdi.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_radisys.c pata_radisys: fix UDMA handling 2009-12-03 16:11:24 -05:00
pata_rb532_cf.c drivers/ata: use resource_size 2009-09-11 02:25:58 -04:00
pata_rdc.c [libata] MWDMA0 is unsupported on PIIX-like PATA controllers 2009-12-03 17:52:16 -05:00
pata_rz1000.c pata_rz1000: Power Management fix 2009-12-03 16:12:35 -05:00
pata_sc1200.c pata_sc1200: Fix crash on boot 2009-10-16 06:22:40 -04:00
pata_scc.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_sch.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_serverworks.c pata_serverworks: fix error message 2010-03-01 14:58:45 -05:00
pata_sil680.c ata: use pci_dev->revision 2009-12-03 14:36:17 -05:00
pata_sis.c Revert "pata_sis: Implement MWDMA for the UDMA 133 capable chips" 2009-12-07 11:41:25 -05:00
pata_sl82c105.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_triflex.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_via.c pata_via: store UDMA masks in via_isa_bridges table 2010-03-01 14:58:46 -05:00
pata_winbond.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pdc_adma.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
sata_fsl.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2009-12-09 19:43:33 -08:00
sata_inic162x.c drivers/ata: Remove unnecessary semicolons 2009-09-01 19:47:20 -04:00
sata_mv.c Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev 2009-12-19 11:04:29 -08:00
sata_nv.c block: Consolidate phys_segment and hw_segment limits 2010-02-26 13:58:08 +01:00
sata_promise.c sata_promise: don't classify overruns as HSM errors 2010-01-12 14:33:07 -05:00
sata_promise.h libata annotations and fixes 2008-01-23 05:24:15 -05:00
sata_qstor.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
sata_sil.c [libata] sata_sil: disable DMA engine in sil_freeze() 2009-09-01 19:47:19 -04:00
sata_sil24.c sata_sil24: MSI support, disabled by default 2009-12-03 02:46:34 -05:00
sata_sis.c sata_sis: convert to slave_link 2009-09-08 21:17:36 -04:00
sata_svw.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
sata_sx4.c sata_sx4: speed up ECC initialization 2009-06-10 07:50:17 -04:00
sata_uli.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
sata_via.c sata_via: Correctly setup PIO/DMA for pata slave on vt6421. 2010-03-01 14:58:44 -05:00
sata_vsc.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
sis.h libata: PATA-mode fixes for sis_sata 2007-07-02 10:17:42 -04:00