aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pci/amd74xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/pci/amd74xx.c')
-rw-r--r--drivers/ide/pci/amd74xx.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c
index 8d30b99a54d8..06c15a6a3e7d 100644
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Version 2.20 2 * Version 2.21
3 * 3 *
4 * AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04 4 * AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04
5 * IDE driver for Linux. 5 * IDE driver for Linux.
@@ -272,10 +272,8 @@ static int amd_set_drive(ide_drive_t *drive, u8 speed)
272 272
273static void amd74xx_tune_drive(ide_drive_t *drive, u8 pio) 273static void amd74xx_tune_drive(ide_drive_t *drive, u8 pio)
274{ 274{
275 if (pio == 255) { 275 if (pio == 255)
276 amd_set_drive(drive, ide_find_best_pio_mode(drive)); 276 pio = ide_get_best_pio_mode(drive, 255, 5);
277 return;
278 }
279 277
280 amd_set_drive(drive, XFER_PIO_0 + min_t(byte, pio, 5)); 278 amd_set_drive(drive, XFER_PIO_0 + min_t(byte, pio, 5));
281} 279}
@@ -284,12 +282,14 @@ static int amd74xx_ide_dma_check(ide_drive_t *drive)
284{ 282{
285 u8 speed = ide_max_dma_mode(drive); 283 u8 speed = ide_max_dma_mode(drive);
286 284
287 if (speed == 0) 285 if (speed == 0) {
288 speed = ide_find_best_pio_mode(drive); 286 amd74xx_tune_drive(drive, 255);
287 return -1;
288 }
289 289
290 amd_set_drive(drive, speed); 290 amd_set_drive(drive, speed);
291 291
292 if (drive->autodma && (speed & XFER_MODE) != XFER_PIO) 292 if (drive->autodma)
293 return 0; 293 return 0;
294 294
295 return -1; 295 return -1;
@@ -448,10 +448,12 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)
448 .name = name_str, \ 448 .name = name_str, \
449 .init_chipset = init_chipset_amd74xx, \ 449 .init_chipset = init_chipset_amd74xx, \
450 .init_hwif = init_hwif_amd74xx, \ 450 .init_hwif = init_hwif_amd74xx, \
451 .channels = 2, \
452 .autodma = AUTODMA, \ 451 .autodma = AUTODMA, \
453 .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \ 452 .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \
454 .bootable = ON_BOARD, \ 453 .bootable = ON_BOARD, \
454 .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST \
455 | IDE_HFLAG_PIO_NO_DOWNGRADE, \
456 .pio_mask = ATA_PIO5, \
455 } 457 }
456 458
457#define DECLARE_NV_DEV(name_str) \ 459#define DECLARE_NV_DEV(name_str) \
@@ -459,10 +461,12 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)
459 .name = name_str, \ 461 .name = name_str, \
460 .init_chipset = init_chipset_amd74xx, \ 462 .init_chipset = init_chipset_amd74xx, \
461 .init_hwif = init_hwif_amd74xx, \ 463 .init_hwif = init_hwif_amd74xx, \
462 .channels = 2, \
463 .autodma = AUTODMA, \ 464 .autodma = AUTODMA, \
464 .enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \ 465 .enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \
465 .bootable = ON_BOARD, \ 466 .bootable = ON_BOARD, \
467 .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST \
468 | IDE_HFLAG_PIO_NO_DOWNGRADE, \
469 .pio_mask = ATA_PIO5, \
466 } 470 }
467 471
468static ide_pci_device_t amd74xx_chipsets[] __devinitdata = { 472static ide_pci_device_t amd74xx_chipsets[] __devinitdata = {