|
@@ -114,17 +114,18 @@ static void qd65xx_select(ide_drive_t *drive)
|
|
|
|
|
|
static u8 qd6500_compute_timing (ide_hwif_t *hwif, int active_time, int recovery_time)
|
|
|
{
|
|
|
- u8 active_cycle,recovery_cycle;
|
|
|
+ int clk = ide_vlb_clk ? ide_vlb_clk : system_bus_clock();
|
|
|
+ u8 act_cyc, rec_cyc;
|
|
|
|
|
|
- if (system_bus_clock()<=33) {
|
|
|
- active_cycle = 9 - IDE_IN(active_time * system_bus_clock() / 1000 + 1, 2, 9);
|
|
|
- recovery_cycle = 15 - IDE_IN(recovery_time * system_bus_clock() / 1000 + 1, 0, 15);
|
|
|
+ if (clk <= 33) {
|
|
|
+ act_cyc = 9 - IDE_IN(active_time * clk / 1000 + 1, 2, 9);
|
|
|
+ rec_cyc = 15 - IDE_IN(recovery_time * clk / 1000 + 1, 0, 15);
|
|
|
} else {
|
|
|
- active_cycle = 8 - IDE_IN(active_time * system_bus_clock() / 1000 + 1, 1, 8);
|
|
|
- recovery_cycle = 18 - IDE_IN(recovery_time * system_bus_clock() / 1000 + 1, 3, 18);
|
|
|
+ act_cyc = 8 - IDE_IN(active_time * clk / 1000 + 1, 1, 8);
|
|
|
+ rec_cyc = 18 - IDE_IN(recovery_time * clk / 1000 + 1, 3, 18);
|
|
|
}
|
|
|
|
|
|
- return((recovery_cycle<<4) | 0x08 | active_cycle);
|
|
|
+ return (rec_cyc << 4) | 0x08 | act_cyc;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -135,10 +136,13 @@ static u8 qd6500_compute_timing (ide_hwif_t *hwif, int active_time, int recovery
|
|
|
|
|
|
static u8 qd6580_compute_timing (int active_time, int recovery_time)
|
|
|
{
|
|
|
- u8 active_cycle = 17 - IDE_IN(active_time * system_bus_clock() / 1000 + 1, 2, 17);
|
|
|
- u8 recovery_cycle = 15 - IDE_IN(recovery_time * system_bus_clock() / 1000 + 1, 2, 15);
|
|
|
+ int clk = ide_vlb_clk ? ide_vlb_clk : system_bus_clock();
|
|
|
+ u8 act_cyc, rec_cyc;
|
|
|
|
|
|
- return((recovery_cycle<<4) | active_cycle);
|
|
|
+ act_cyc = 17 - IDE_IN(active_time * clk / 1000 + 1, 2, 17);
|
|
|
+ rec_cyc = 15 - IDE_IN(recovery_time * clk / 1000 + 1, 2, 15);
|
|
|
+
|
|
|
+ return (rec_cyc << 4) | act_cyc;
|
|
|
}
|
|
|
|
|
|
/*
|