drive->init_speed = 0;
if ((id->capability & 1) && drive->autodma) {
+
/* Consult the list of known "bad" drives */
if (__ide_dma_bad_drive(drive))
goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- if ((id->field_valid & 2) &&
- (!piix_config_drive_for_dma(drive)))
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!piix_config_drive_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!piix_config_drive_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+
+ /**
+ * Try to turn DMA on if:
+ * - UDMA or EIDE modes are supported or
+ * - drive is a known "good" drive
+ *
+ * Checks for best mode supported are down later by
+ * piix_config_drive_for_dma() -> ide_dma_speed()
+ */
+ if ((id->field_valid & (4 | 2)) ||
+ (__ide_dma_good_drive(drive) && id->eide_dma_time < 150)) {
+ if (piix_config_drive_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ /* For some reason DMA wasn't turned on, so try PIO. */
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
+ /* Find best PIO mode. */
hwif->tuneproc(drive, 255);
return hwif->ide_dma_off_quietly(drive);
}
MODULE_DEVICE_TABLE(pci, piix_pci_tbl);
static struct pci_driver driver = {
- .name = "PIIX IDE",
+ .name = "PIIX_IDE",
.id_table = piix_pci_tbl,
.probe = piix_init_one,
};