|
@@ -615,24 +615,25 @@ out:
|
|
static void
|
|
static void
|
|
pmac_ide_tuneproc(ide_drive_t *drive, u8 pio)
|
|
pmac_ide_tuneproc(ide_drive_t *drive, u8 pio)
|
|
{
|
|
{
|
|
- ide_pio_data_t d;
|
|
|
|
u32 *timings;
|
|
u32 *timings;
|
|
unsigned accessTicks, recTicks;
|
|
unsigned accessTicks, recTicks;
|
|
unsigned accessTime, recTime;
|
|
unsigned accessTime, recTime;
|
|
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
|
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
|
-
|
|
|
|
|
|
+ unsigned int cycle_time;
|
|
|
|
+
|
|
if (pmif == NULL)
|
|
if (pmif == NULL)
|
|
return;
|
|
return;
|
|
|
|
|
|
/* which drive is it ? */
|
|
/* which drive is it ? */
|
|
timings = &pmif->timings[drive->select.b.unit & 0x01];
|
|
timings = &pmif->timings[drive->select.b.unit & 0x01];
|
|
|
|
|
|
- pio = ide_get_best_pio_mode(drive, pio, 4, &d);
|
|
|
|
|
|
+ pio = ide_get_best_pio_mode(drive, pio, 4, NULL);
|
|
|
|
+ cycle_time = ide_pio_cycle_time(drive, pio);
|
|
|
|
|
|
switch (pmif->kind) {
|
|
switch (pmif->kind) {
|
|
case controller_sh_ata6: {
|
|
case controller_sh_ata6: {
|
|
/* 133Mhz cell */
|
|
/* 133Mhz cell */
|
|
- u32 tr = kauai_lookup_timing(shasta_pio_timings, d.cycle_time);
|
|
|
|
|
|
+ u32 tr = kauai_lookup_timing(shasta_pio_timings, cycle_time);
|
|
if (tr == 0)
|
|
if (tr == 0)
|
|
return;
|
|
return;
|
|
*timings = ((*timings) & ~TR_133_PIOREG_PIO_MASK) | tr;
|
|
*timings = ((*timings) & ~TR_133_PIOREG_PIO_MASK) | tr;
|
|
@@ -641,7 +642,7 @@ pmac_ide_tuneproc(ide_drive_t *drive, u8 pio)
|
|
case controller_un_ata6:
|
|
case controller_un_ata6:
|
|
case controller_k2_ata6: {
|
|
case controller_k2_ata6: {
|
|
/* 100Mhz cell */
|
|
/* 100Mhz cell */
|
|
- u32 tr = kauai_lookup_timing(kauai_pio_timings, d.cycle_time);
|
|
|
|
|
|
+ u32 tr = kauai_lookup_timing(kauai_pio_timings, cycle_time);
|
|
if (tr == 0)
|
|
if (tr == 0)
|
|
return;
|
|
return;
|
|
*timings = ((*timings) & ~TR_100_PIOREG_PIO_MASK) | tr;
|
|
*timings = ((*timings) & ~TR_100_PIOREG_PIO_MASK) | tr;
|
|
@@ -649,7 +650,7 @@ pmac_ide_tuneproc(ide_drive_t *drive, u8 pio)
|
|
}
|
|
}
|
|
case controller_kl_ata4:
|
|
case controller_kl_ata4:
|
|
/* 66Mhz cell */
|
|
/* 66Mhz cell */
|
|
- recTime = d.cycle_time - ide_pio_timings[pio].active_time
|
|
|
|
|
|
+ recTime = cycle_time - ide_pio_timings[pio].active_time
|
|
- ide_pio_timings[pio].setup_time;
|
|
- ide_pio_timings[pio].setup_time;
|
|
recTime = max(recTime, 150U);
|
|
recTime = max(recTime, 150U);
|
|
accessTime = ide_pio_timings[pio].active_time;
|
|
accessTime = ide_pio_timings[pio].active_time;
|
|
@@ -665,7 +666,7 @@ pmac_ide_tuneproc(ide_drive_t *drive, u8 pio)
|
|
default: {
|
|
default: {
|
|
/* 33Mhz cell */
|
|
/* 33Mhz cell */
|
|
int ebit = 0;
|
|
int ebit = 0;
|
|
- recTime = d.cycle_time - ide_pio_timings[pio].active_time
|
|
|
|
|
|
+ recTime = cycle_time - ide_pio_timings[pio].active_time
|
|
- ide_pio_timings[pio].setup_time;
|
|
- ide_pio_timings[pio].setup_time;
|
|
recTime = max(recTime, 150U);
|
|
recTime = max(recTime, 150U);
|
|
accessTime = ide_pio_timings[pio].active_time;
|
|
accessTime = ide_pio_timings[pio].active_time;
|