From: Bartlomiej Zolnierkiewicz * Don't program UDMA timings when programming PIO or MWDMA modes. This has also a nice side-effect of fixing regression added by commit 681c80b5d96076f447e8101ac4325c82d8dce508 ("libata: correct handling of SRST reset sequences") (->set_piomode method for PIO0 is called before ->cable_detect method which checks UDMA timings to get the cable type). * Bump driver version. Signed-off-by: Bartlomiej Zolnierkiewicz Cc: "Thomas Lindroth" Cc: Alan Cox Cc: Jeff Garzik Cc: Tejun Heo Signed-off-by: Andrew Morton --- drivers/ata/pata_amd.c | 5 +++-- drivers/ata/pata_via.c | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff -puN drivers/ata/pata_amd.c~pata_amd-pata_via-de-couple-programming-of-pio-mwdma-and-udma-timings drivers/ata/pata_amd.c --- a/drivers/ata/pata_amd.c~pata_amd-pata_via-de-couple-programming-of-pio-mwdma-and-udma-timings +++ a/drivers/ata/pata_amd.c @@ -25,7 +25,7 @@ #include #define DRV_NAME "pata_amd" -#define DRV_VERSION "0.3.9" +#define DRV_VERSION "0.3.10" /** * timing_setup - shared timing computation and load @@ -115,7 +115,8 @@ static void timing_setup(struct ata_port } /* UDMA timing */ - pci_write_config_byte(pdev, offset + 0x10 + (3 - dn), t); + if (at.udma) + pci_write_config_byte(pdev, offset + 0x10 + (3 - dn), t); } /** diff -puN drivers/ata/pata_via.c~pata_amd-pata_via-de-couple-programming-of-pio-mwdma-and-udma-timings drivers/ata/pata_via.c --- a/drivers/ata/pata_via.c~pata_amd-pata_via-de-couple-programming-of-pio-mwdma-and-udma-timings +++ a/drivers/ata/pata_via.c @@ -63,7 +63,7 @@ #include #define DRV_NAME "pata_via" -#define DRV_VERSION "0.3.2" +#define DRV_VERSION "0.3.3" /* * The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx @@ -297,7 +297,7 @@ static void via_do_set_mode(struct ata_p } /* Set UDMA unless device is not UDMA capable */ - if (udma_type) { + if (udma_type && t.udma) { u8 cable80_status; /* Get 80-wire cable detection bit */ _