|
@@ -1,6 +1,6 @@
|
|
|
/*
|
|
|
*
|
|
|
- * Version 3.45
|
|
|
+ * Version 3.46
|
|
|
*
|
|
|
* VIA IDE driver for Linux. Supported southbridges:
|
|
|
*
|
|
@@ -203,10 +203,8 @@ static int via_set_drive(ide_drive_t *drive, u8 speed)
|
|
|
|
|
|
static void via82cxxx_tune_drive(ide_drive_t *drive, u8 pio)
|
|
|
{
|
|
|
- if (pio == 255) {
|
|
|
- via_set_drive(drive, ide_find_best_pio_mode(drive));
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (pio == 255)
|
|
|
+ pio = ide_get_best_pio_mode(drive, 255, 5);
|
|
|
|
|
|
via_set_drive(drive, XFER_PIO_0 + min_t(u8, pio, 5));
|
|
|
}
|
|
@@ -223,12 +221,14 @@ static int via82cxxx_ide_dma_check (ide_drive_t *drive)
|
|
|
{
|
|
|
u8 speed = ide_max_dma_mode(drive);
|
|
|
|
|
|
- if (speed == 0)
|
|
|
- speed = ide_find_best_pio_mode(drive);
|
|
|
+ if (speed == 0) {
|
|
|
+ via82cxxx_tune_drive(drive, 255);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
|
|
|
via_set_drive(drive, speed);
|
|
|
|
|
|
- if (drive->autodma && (speed & XFER_MODE) != XFER_PIO)
|
|
|
+ if (drive->autodma)
|
|
|
return 0;
|
|
|
|
|
|
return -1;
|
|
@@ -500,7 +500,9 @@ static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = {
|
|
|
.init_hwif = init_hwif_via82cxxx,
|
|
|
.autodma = NOAUTODMA,
|
|
|
.enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}},
|
|
|
- .bootable = ON_BOARD
|
|
|
+ .bootable = ON_BOARD,
|
|
|
+ .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST
|
|
|
+ | IDE_HFLAG_PIO_NO_DOWNGRADE,
|
|
|
},{ /* 1 */
|
|
|
.name = "VP_IDE",
|
|
|
.init_chipset = init_chipset_via82cxxx,
|
|
@@ -508,6 +510,8 @@ static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = {
|
|
|
.autodma = AUTODMA,
|
|
|
.enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}},
|
|
|
.bootable = ON_BOARD,
|
|
|
+ .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST
|
|
|
+ | IDE_HFLAG_PIO_NO_DOWNGRADE,
|
|
|
}
|
|
|
};
|
|
|
|