pata_artop: fix UDMA5 for AEC6280[R] and UDMA6 for AEC6880[R]
PATCH 1/1 pata_artop: fix UDMA5 for AEC6280[R] and UDMA6 for AEC6880[R]
Maximum supported UDMA mode for AEC6280[R] is UDMA5 (not UDMA4) and for AEC6880[R] it is UDMA6 (not UDMA5):
* Fix the problem by adding missing struct ata_port_info to artop_init_one().
* Use the right naming (s/626/628/).
* Bump driver version.
Fixes IDE->libata regression, problem was never present in IDE aec62xx driver.
--- drivers/ata/pata_artop.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
drivers/ata/pata_artop.c +14 -5
@@ -2,6 +2,7 @@* pata_artop.c - ARTOP ATA controller driver * * (C) 2006 Red Hat <[email protected]> +* (C) 2007 Bartlomiej Zolnierkiewicz * * Based in part on drivers/ide/pci/aec62xx.c * Copyright (C) 1999-2002 Andre Hedrick <[email protected]>
@@ -28,7 +29,7 @@#include <linux/ata.h> #define DRV_NAME "pata_artop" -#define DRV_VERSION "0.4.3" +#define DRV_VERSION "0.4.4"/* * The ARTOP has 33 Mhz and "over clocked" timing tables. Until we
@@ -430,7 +431,7 @@ static int artop_init_one (struct pci_de .udma_mask = ATA_UDMA4, .port_ops = &artop6260_ops, }; -static const struct ata_port_info info_626x_fast = { +static const struct ata_port_info info_628x = { .sht = &artop_sht, .flags =ATA_FLAG_SLAVE_POSS , .pio_mask =0x1f ,/* pio0-4 */
@@ -438,6 +439,14 @@ static int artop_init_one (struct pci_de .udma_mask = ATA_UDMA5, .port_ops = &artop6260_ops, }; +static const struct ata_port_info info_628x_fast = { + .sht = &artop_sht, + .flags =ATA_FLAG_SLAVE_POSS , + .pio_mask =0x1f ,/* pio0-4 */ + .mwdma_mask =0x07 ,/* mwdma0-2 */ + .udma_mask =ATA_UDMA6 , + .port_ops = &artop6260_ops, + };const struct ata_port_info *ppi[] = {NULL ,NULL };if (!printed_version++)
@@ -455,13 +464,13 @@ static int artop_init_one (struct pci_de }else if (id->driver_data ==1 )/* 6260 */ ppi[0 ] = &info_626x; -else if (id->driver_data ==2 ) {/* 6260 or 6260 + fast */ +else if (id->driver_data ==2 ) {/* 6280 or 6280 + fast */ unsigned long io =pci_resource_start (pdev,4 );u8 reg; - ppi[0 ] = &info_626x; + ppi[0 ] = &info_628x;if (inb (io) &0x10 ) - ppi[0 ] = &info_626x_fast; + ppi[0 ] = &info_628x_fast;/* Mac systems come up with some registers not set as we will need them */
Quoted 11 lines · On Thu, 9 Aug 2007 23:19:34 +0200 Bartlomiej Zolnierkiewicz…
Maximum supported UDMA mode for AEC6280[R] is UDMA5 (not UDMA4) and for AEC6880[R] it is UDMA6 (not UDMA5):
* Fix the problem by adding missing struct
ata_port_infotoartop_init_one().* Use the right naming (s/626/628/).
* Bump driver version.
Fixes
IDE->libataregression, problem was never present in IDE aec62xx driver.
Have you tested this ??
Quoted 9 lines · Alan Cox
Quoted 6 lines · On Thu, 9 Aug 2007 23:19:34 +0200 Bartlomiej Zolnierkiewicz…
Maximum supported UDMA mode for AEC6280[R] is UDMA5 (not UDMA4) and for AEC6880[R] it is UDMA6 (not UDMA5):
* Fix the problem by adding missing struct
ata_port_infotoartop_init_one().
Quoted 7 lines
Quoted 5 lines
* Use the right naming (s/626/628/).
* Bump driver version.
Fixes
IDE->libataregression, problem was never present in IDE aec62xx driver.Have you tested this ??
-ENODEV so no and testing is welcomed.
However I went over both drivers to make sure that this change is safe and correct.
BTW presence of the above bugs would strongly indicate that pata_artop has never been tested (properly) with AEC6x80[R], otherwise these bugs should have been noticed and fixed much earlier.
Thanks,
Bart
Quoted 3 lines
BTW presence of the above bugs would strongly indicate that
pata_artophas never been tested (properly) with AEC6x80[R], otherwise these bugs should have been noticed and fixed much earlier.
People don't seem to notice minor speed limiting errors, and its a pretty obscure controller too. Not suprised (it took ages for them to notice the CMD64x one too).
It has however been tested and works pretty well for most cases. There's one platform where you have to hack both drivers to make them work which I need to investigate further.
Quoted 6 lines · On Thu, 9 Aug 2007 23:19:34 +0200 Bartlomiej Zolnierkiewicz…
Maximum supported UDMA mode for AEC6280[R] is UDMA5 (not UDMA4) and for AEC6880[R] it is UDMA6 (not UDMA5):
* Fix the problem by adding missing struct
ata_port_infotoartop_init_one().
Quoted 8 lines
* Use the right naming (s/626/628/).
* Bump driver version.
Fixes
IDE->libataregression, problem was never present in IDE aec62xx driver.Cc Alan Cox <[email protected]>Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
Jeff Garzik
AppliedQuoted 9 lines · Bartlomiej Zolnierkiewicz
Maximum supported UDMA mode for AEC6280[R] is UDMA5 (not UDMA4) and for AEC6880[R] it is UDMA6 (not UDMA5):
* Fix the problem by adding missing struct
ata_port_infotoartop_init_one().* Use the right naming (s/626/628/).
* Bump driver version.
Quoted 7 lines
Fixes
IDE->libataregression, problem was never present in IDE aec62xx driver.Cc Alan Cox <[email protected]>Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>--- drivers/ata/pata_artop.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
applied to #upstream-fixes