From d8f4469d5f2c35e0b8272f254b42737a2b8ce877 Mon Sep 17 00:00:00 2001 From: Bartlomiej Zolnierkiewicz Date: Sat, 17 Feb 2007 02:40:25 +0100 Subject: [PATCH] ide: disable DMA in ->ide_dma_check for "no IORDY" case (v2) If DMA is unsupported ->ide_dma_check should disable DMA. v2: * updated for scc_pata Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ide/pci/aec62xx.c | 8 +++----- drivers/ide/pci/atiixp.c | 5 ++--- drivers/ide/pci/cmd64x.c | 8 +++----- drivers/ide/pci/cs5535.c | 5 ++--- drivers/ide/pci/hpt34x.c | 8 +++----- drivers/ide/pci/hpt366.c | 8 +++----- drivers/ide/pci/pdc202xx_new.c | 8 +++----- drivers/ide/pci/pdc202xx_old.c | 8 +++----- drivers/ide/pci/piix.c | 8 +++----- drivers/ide/pci/serverworks.c | 9 +++------ drivers/ide/pci/siimage.c | 8 +++----- drivers/ide/pci/sis5513.c | 8 +++----- drivers/ide/pci/slc90e66.c | 8 +++----- drivers/ide/pci/tc86c001.c | 8 +++----- drivers/ide/ppc/scc_pata.c | 7 +++---- 15 files changed, 43 insertions(+), 71 deletions(-) diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c index 30f8de6176dd..25892814b314 100644 --- a/drivers/ide/pci/aec62xx.c +++ b/drivers/ide/pci/aec62xx.c @@ -214,12 +214,10 @@ static int aec62xx_config_drive_xfer_rate (ide_drive_t *drive) if (ide_use_dma(drive) && config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) aec62xx_tune_drive(drive, 5); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } static int aec62xx_irq_timeout (ide_drive_t *drive) diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c index dfc738c42228..6d372c4e1d81 100644 --- a/drivers/ide/pci/atiixp.c +++ b/drivers/ide/pci/atiixp.c @@ -264,10 +264,9 @@ static int atiixp_dma_check(ide_drive_t *drive) tspeed = ide_get_best_pio_mode(drive, 255, 5, NULL); speed = atiixp_dma_2_pio(XFER_PIO_0 + tspeed) + XFER_PIO_0; hwif->speedproc(drive, speed); - return hwif->ide_dma_off_quietly(drive); } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } /** diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c index a76451a074c6..28f580886693 100644 --- a/drivers/ide/pci/cmd64x.c +++ b/drivers/ide/pci/cmd64x.c @@ -479,12 +479,10 @@ static int cmd64x_config_drive_for_dma (ide_drive_t *drive) if (ide_use_dma(drive) && config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) config_chipset_for_pio(drive, 1); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } static int cmd64x_alt_dma_status (struct pci_dev *dev) diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c index e47653f4d1dd..cd7c4190ad6e 100644 --- a/drivers/ide/pci/cs5535.c +++ b/drivers/ide/pci/cs5535.c @@ -206,10 +206,9 @@ static int cs5535_dma_check(ide_drive_t *drive) if (ide_use_fast_pio(drive)) { speed = ide_get_best_pio_mode(drive, 255, 4, NULL); cs5535_set_drive(drive, speed); - return hwif->ide_dma_off_quietly(drive); } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } static u8 __devinit cs5535_cable_detect(struct pci_dev *dev) diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c index 0830089c77fd..c65971d8d6ad 100644 --- a/drivers/ide/pci/hpt34x.c +++ b/drivers/ide/pci/hpt34x.c @@ -120,12 +120,10 @@ static int hpt34x_config_drive_xfer_rate (ide_drive_t *drive) return hwif->ide_dma_on(drive); #endif - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) hpt34x_tune_drive(drive, 255); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } /* diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index eccf29f7f89d..752b6d6dde04 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c @@ -743,12 +743,10 @@ static int hpt366_config_drive_xfer_rate(ide_drive_t *drive) if (ide_use_dma(drive) && config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) hpt3xx_tune_drive(drive, 255); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } /* diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c index 32f37e4c1292..b780e15e9f32 100644 --- a/drivers/ide/pci/pdc202xx_new.c +++ b/drivers/ide/pci/pdc202xx_new.c @@ -288,12 +288,10 @@ static int pdcnew_config_drive_xfer_rate(ide_drive_t *drive) if (ide_use_dma(drive) && config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) hwif->tuneproc(drive, 255); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } static int pdcnew_quirkproc(ide_drive_t *drive) diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c index d3be342e5162..b2b8e6ea7e90 100644 --- a/drivers/ide/pci/pdc202xx_old.c +++ b/drivers/ide/pci/pdc202xx_old.c @@ -329,12 +329,10 @@ static int pdc202xx_config_drive_xfer_rate (ide_drive_t *drive) if (ide_use_dma(drive) && config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) pdc202xx_tune_drive(drive, 255); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } static int pdc202xx_quirkproc (ide_drive_t *drive) diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c index 85e8a78e10ad..caf606a1ee86 100644 --- a/drivers/ide/pci/piix.c +++ b/drivers/ide/pci/piix.c @@ -393,14 +393,12 @@ static int piix_config_drive_xfer_rate (ide_drive_t *drive) if (ide_use_dma(drive) && piix_config_drive_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) /* Find best PIO mode. */ (void) hwif->speedproc(drive, XFER_PIO_0 + ide_get_best_pio_mode(drive, 255, 4, NULL)); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } /** diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index 36decbe3afcb..f44a5ab8fe00 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c @@ -322,13 +322,10 @@ static int svwks_config_drive_xfer_rate (ide_drive_t *drive) if (ide_use_dma(drive) && config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) config_chipset_for_pio(drive); - // hwif->tuneproc(drive, 5); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const char *name) diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index 40e992af0005..1e5b8b17e6d8 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c @@ -419,12 +419,10 @@ static int siimage_config_drive_for_dma (ide_drive_t *drive) if (ide_use_dma(drive) && config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) config_chipset_for_pio(drive, 1); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } /* returns 1 if dma irq issued, 0 otherwise */ diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index 4fff663a6432..53ffeced06ff 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c @@ -678,12 +678,10 @@ static int sis5513_config_xfer_rate(ide_drive_t *drive) if (ide_use_dma(drive) && config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) sis5513_tune_drive(drive, 5); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } /* Chip detection and general config */ diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index 4042fd8e2308..917cc8e61e47 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c @@ -186,13 +186,11 @@ static int slc90e66_config_drive_xfer_rate (ide_drive_t *drive) if (ide_use_dma(drive) && slc90e66_config_drive_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) (void) hwif->speedproc(drive, XFER_PIO_0 + ide_get_best_pio_mode(drive, 255, 4, NULL)); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) diff --git a/drivers/ide/pci/tc86c001.c b/drivers/ide/pci/tc86c001.c index b408508a96ee..3703fc87d150 100644 --- a/drivers/ide/pci/tc86c001.c +++ b/drivers/ide/pci/tc86c001.c @@ -190,12 +190,10 @@ static int tc86c001_config_drive_xfer_rate(ide_drive_t *drive) if (ide_use_dma(drive) && config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) tc86c001_tune_drive(drive, 255); - return hwif->ide_dma_off_quietly(drive); - } - /* IORDY not supported */ - return 0; + + return hwif->ide_dma_off_quietly(drive); } static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) diff --git a/drivers/ide/ppc/scc_pata.c b/drivers/ide/ppc/scc_pata.c index f05117e8fdb9..7e3e93caafd0 100644 --- a/drivers/ide/ppc/scc_pata.c +++ b/drivers/ide/ppc/scc_pata.c @@ -376,11 +376,10 @@ static int scc_config_drive_for_dma(ide_drive_t *drive) if (ide_use_dma(drive) && scc_config_chipset_for_dma(drive)) return hwif->ide_dma_on(drive); - if (ide_use_fast_pio(drive)) { + if (ide_use_fast_pio(drive)) hwif->tuneproc(drive, 4); - hwif->ide_dma_off_quietly(drive); - } - return 1; /* DMA is not supported */ + + return hwif->ide_dma_off_quietly(drive); } /**