diff options
Diffstat (limited to 'drivers/ide/pci/amd74xx.c')
-rw-r--r-- | drivers/ide/pci/amd74xx.c | 24 |
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 | ||
273 | static void amd74xx_tune_drive(ide_drive_t *drive, u8 pio) | 273 | static 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 | ||
468 | static ide_pci_device_t amd74xx_chipsets[] __devinitdata = { | 472 | static ide_pci_device_t amd74xx_chipsets[] __devinitdata = { |