alim15x3: use ide_tune_dma()
Use ide_tune_dma() in ali15x3_config_drive_for_dma() and remove all the open coded DMA tuning code and also config_chipset_for_dma(). Set ->atapi_dma flag correctly in init_hwif_common_ali15x3() so ide_tune_dma() can take care of checking if ATAPI DMA is allowed and remove open coded ATAPI DMA check from ali15x3_config_drive_for_dma(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
6b8cf7724b
commit
38ff8a74e8
@ -455,28 +455,6 @@ static int ali15x3_tune_chipset (ide_drive_t *drive, u8 xferspeed)
|
|||||||
return (ide_config_drive_speed(drive, speed));
|
return (ide_config_drive_speed(drive, speed));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* config_chipset_for_dma - set up DMA mode
|
|
||||||
* @drive: drive to configure for
|
|
||||||
*
|
|
||||||
* Place a drive into DMA mode and tune the chipset for
|
|
||||||
* the selected speed.
|
|
||||||
*
|
|
||||||
* Returns true if DMA mode can be used
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int config_chipset_for_dma (ide_drive_t *drive)
|
|
||||||
{
|
|
||||||
u8 speed = ide_max_dma_mode(drive);
|
|
||||||
|
|
||||||
if (!(speed))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
(void) ali15x3_tune_chipset(drive, speed);
|
|
||||||
return ide_dma_enable(drive);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ali15x3_config_drive_for_dma - configure for DMA
|
* ali15x3_config_drive_for_dma - configure for DMA
|
||||||
* @drive: drive to configure
|
* @drive: drive to configure
|
||||||
@ -487,48 +465,14 @@ static int config_chipset_for_dma (ide_drive_t *drive)
|
|||||||
|
|
||||||
static int ali15x3_config_drive_for_dma(ide_drive_t *drive)
|
static int ali15x3_config_drive_for_dma(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = HWIF(drive);
|
|
||||||
struct hd_driveid *id = drive->id;
|
|
||||||
|
|
||||||
if ((m5229_revision<=0x20) && (drive->media!=ide_disk))
|
|
||||||
goto ata_pio;
|
|
||||||
|
|
||||||
drive->init_speed = 0;
|
drive->init_speed = 0;
|
||||||
|
|
||||||
if ((id != NULL) && ((id->capability & 1) != 0) && drive->autodma) {
|
if (ide_tune_dma(drive))
|
||||||
/* Consult the list of known "bad" drives */
|
|
||||||
if (__ide_dma_bad_drive(drive))
|
|
||||||
goto ata_pio;
|
|
||||||
if ((id->field_valid & 4) && (m5229_revision >= 0xC2)) {
|
|
||||||
if (id->dma_ultra & hwif->ultra_mask) {
|
|
||||||
/* Force if Capable UltraDMA */
|
|
||||||
int dma = config_chipset_for_dma(drive);
|
|
||||||
if ((id->field_valid & 2) && !dma)
|
|
||||||
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 (!config_chipset_for_dma(drive))
|
|
||||||
goto ata_pio;
|
|
||||||
}
|
|
||||||
} else if (__ide_dma_good_drive(drive) &&
|
|
||||||
(id->eide_dma_time < 150)) {
|
|
||||||
/* Consult the list of known "good" drives */
|
|
||||||
if (!config_chipset_for_dma(drive))
|
|
||||||
goto ata_pio;
|
|
||||||
} else {
|
|
||||||
goto ata_pio;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ata_pio:
|
|
||||||
hwif->tuneproc(drive, 255);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
ali15x3_tune_drive(drive, 255);
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -739,6 +683,7 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m5229_revision > 0x20)
|
||||||
hwif->atapi_dma = 1;
|
hwif->atapi_dma = 1;
|
||||||
|
|
||||||
if (m5229_revision <= 0x20)
|
if (m5229_revision <= 0x20)
|
||||||
|
Loading…
Reference in New Issue
Block a user