lkml.org 
[lkml]   [2002]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH] duplicate clock calculation code in 3 IDE drivers
On Wed, May 22, 2002 at 10:42:10AM +0200, Martin Dalecki wrote:
> Uz.ytkownik Vojtech Pavlik napisa?:
> > On Wed, May 22, 2002 at 01:30:13PM +0400, Andrey Panin wrote:
> >
> >>Hi,
> >>
> >>now it is more interesting patch. AMD, PIIX and VIA IDE drivers contain
> >>some duplicated code for (amd|piix|via)_clock calculation. Attached
> >>patch moves this code into one function in ata-timing.c file.
> >>
> >>Please take a look at it.
> >
> >
> > Looks quite OK - though it'd be better if "system_bus_speed" already
> > could be giving these reasonable values - this way we could get rid of
> > the (amd|piix|via)_clock variables altogether.
>
>
> Yes indeed this would be the "kings road".
>
> Any one of you who cares enough?

Here you go ...

--
Vojtech Pavlik
SuSE Labs
ChangeSet@1.584, 2002-05-22 13:05:17+02:00, vojtech@twilight.ucw.cz
In the last cset I removed the *_clock variables, but due to
just search-replace the definitions stayed. This removes them.

ChangeSet@1.583, 2002-05-22 13:00:03+02:00, vojtech@twilight.ucw.cz
This cset changes system_bus_speed to kHz, because the additional precisioin
is needed for UDMA133 timing computations. It can also move the triplicated sanity
checking and MHz->kHz converting code from the drivers to the common code as a result.

aec62xx.c | 4 ++--
ali14xx.c | 4 ++--
alim15x3.c | 8 ++++----
amd74xx.c | 45 +++++++++++++--------------------------------
cmd640.c | 2 +-
cmd64x.c | 2 +-
cy82c693.c | 2 +-
ht6560b.c | 4 ++--
ide.c | 56 ++++++++++++++++++++++++++++++++------------------------
opti621.c | 2 +-
piix.c | 43 ++++++++++++-------------------------------
qd65xx.c | 14 +++++++-------
via82cxxx.c | 53 +++++++++++++++++------------------------------------
13 files changed, 95 insertions(+), 144 deletions(-)

diff -Nru a/drivers/ide/aec62xx.c b/drivers/ide/aec62xx.c
--- a/drivers/ide/aec62xx.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/aec62xx.c Wed May 22 13:09:12 2002
@@ -206,7 +206,7 @@
{
for ( ; chipset_table->xfer_speed ; chipset_table++)
if (chipset_table->xfer_speed == speed) {
- return ((byte) ((system_bus_speed <= 33) ? chipset_table->chipset_settings_33 : chipset_table->chipset_settings_34));
+ return ((byte) ((system_bus_speed <= 33333) ? chipset_table->chipset_settings_33 : chipset_table->chipset_settings_34));
}
return 0x00;
}
@@ -215,7 +215,7 @@
{
for ( ; chipset_table->xfer_speed ; chipset_table++)
if (chipset_table->xfer_speed == speed) {
- return ((byte) ((system_bus_speed <= 33) ? chipset_table->ultra_settings_33 : chipset_table->ultra_settings_34));
+ return ((byte) ((system_bus_speed <= 33333) ? chipset_table->ultra_settings_33 : chipset_table->ultra_settings_34));
}
return 0x00;
}
diff -Nru a/drivers/ide/ali14xx.c b/drivers/ide/ali14xx.c
--- a/drivers/ide/ali14xx.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/ali14xx.c Wed May 22 13:09:12 2002
@@ -124,8 +124,8 @@
/* calculate timing, according to PIO mode */
time1 = t->cycle;
time2 = t->active;
- param3 = param1 = (time2 * system_bus_speed + 999) / 1000;
- param4 = param2 = (time1 * system_bus_speed + 999) / 1000 - param1;
+ param3 = param1 = (time2 * system_bus_speed + 999999) / 1000000;
+ param4 = param2 = (time1 * system_bus_speed + 999999) / 1000000 - param1;
if (pio < XFER_PIO_3) {
param3 += 8;
param4 += 8;
diff -Nru a/drivers/ide/alim15x3.c b/drivers/ide/alim15x3.c
--- a/drivers/ide/alim15x3.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/alim15x3.c Wed May 22 13:09:12 2002
@@ -261,18 +261,18 @@

s_time = t->setup;
a_time = t->active;
- if ((s_clc = (s_time * system_bus_speed + 999) / 1000) >= 8)
+ if ((s_clc = (s_time * system_bus_speed + 999999) / 1000000) >= 8)
s_clc = 0;
- if ((a_clc = (a_time * system_bus_speed + 999) / 1000) >= 8)
+ if ((a_clc = (a_time * system_bus_speed + 999999) / 1000000) >= 8)
a_clc = 0;
c_time = t->cycle;

#if 0
- if ((r_clc = ((c_time - s_time - a_time) * system_bus_speed + 999) / 1000) >= 16)
+ if ((r_clc = ((c_time - s_time - a_time) * system_bus_speed + 999999) / 1000000) >= 16)
r_clc = 0;
#endif

- if (!(r_clc = (c_time * system_bus_speed + 999) / 1000 - a_clc - s_clc)) {
+ if (!(r_clc = (c_time * system_bus_speed + 999999) / 1000000 - a_clc - s_clc)) {
r_clc = 1;
} else {
if (r_clc >= 16)
diff -Nru a/drivers/ide/amd74xx.c b/drivers/ide/amd74xx.c
--- a/drivers/ide/amd74xx.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/amd74xx.c Wed May 22 13:09:12 2002
@@ -87,7 +87,6 @@
static struct amd_ide_chip *amd_config;
static unsigned char amd_enabled;
static unsigned int amd_80w;
-static unsigned int amd_clock;

static unsigned char amd_cyc2udma[] = { 6, 6, 5, 4, 0, 1, 1, 2, 2, 3, 3 };
static unsigned char amd_udma2cyc[] = { 4, 6, 8, 10, 3, 2, 1, 1 };
@@ -131,7 +130,7 @@
amd_print("Highest DMA rate: %s", amd_dma[amd_config->flags & AMD_UDMA]);

amd_print("BM-DMA base: %#x", amd_base);
- amd_print("PCI clock: %d.%dMHz", amd_clock / 1000, amd_clock / 100 % 10);
+ amd_print("PCI clock: %d.%dMHz", system_bus_speed / 1000, system_bus_speed / 100 % 10);

amd_print("-----------------------Primary IDE-------Secondary IDE------");

@@ -147,7 +146,7 @@

amd_print("Cable Type: %10s%20s", (amd_80w & 1) ? "80w" : "40w", (amd_80w & 2) ? "80w" : "40w");

- if (!amd_clock)
+ if (!system_bus_speed)
return p - buffer;

amd_print("-------------------drive0----drive1----drive2----drive3-----");
@@ -169,22 +168,22 @@
den[i] = (c & ((i & 1) ? 0x40 : 0x20) << ((i & 2) << 2));

if (den[i] && uen[i] && udma[i] == 1) {
- speed[i] = amd_clock * 3;
- cycle[i] = 666666 / amd_clock;
+ speed[i] = system_bus_speed * 3;
+ cycle[i] = 666666 / system_bus_speed;
continue;
}

- speed[i] = 4 * amd_clock / ((den[i] && uen[i]) ? udma[i] : (active[i] + recover[i]) * 2);
- cycle[i] = 1000000 * ((den[i] && uen[i]) ? udma[i] : (active[i] + recover[i]) * 2) / amd_clock / 2;
+ speed[i] = 4 * system_bus_speed / ((den[i] && uen[i]) ? udma[i] : (active[i] + recover[i]) * 2);
+ cycle[i] = 1000000 * ((den[i] && uen[i]) ? udma[i] : (active[i] + recover[i]) * 2) / system_bus_speed / 2;
}

amd_print_drive("Transfer Mode: ", "%10s", den[i] ? (uen[i] ? "UDMA" : "DMA") : "PIO");

- amd_print_drive("Address Setup: ", "%8dns", 1000000 * setup[i] / amd_clock);
- amd_print_drive("Cmd Active: ", "%8dns", 1000000 * active8b[i] / amd_clock);
- amd_print_drive("Cmd Recovery: ", "%8dns", 1000000 * recover8b[i] / amd_clock);
- amd_print_drive("Data Active: ", "%8dns", 1000000 * active[i] / amd_clock);
- amd_print_drive("Data Recovery: ", "%8dns", 1000000 * recover[i] / amd_clock);
+ amd_print_drive("Address Setup: ", "%8dns", 1000000 * setup[i] / system_bus_speed);
+ amd_print_drive("Cmd Active: ", "%8dns", 1000000 * active8b[i] / system_bus_speed);
+ amd_print_drive("Cmd Recovery: ", "%8dns", 1000000 * recover8b[i] / system_bus_speed);
+ amd_print_drive("Data Active: ", "%8dns", 1000000 * active[i] / system_bus_speed);
+ amd_print_drive("Data Recovery: ", "%8dns", 1000000 * recover[i] / system_bus_speed);
amd_print_drive("Cycle Time: ", "%8dns", cycle[i]);
amd_print_drive("Transfer Rate: ", "%4d.%dMB/s", speed[i] / 1000, speed[i] / 100 % 10);

@@ -238,7 +237,7 @@
printk(KERN_WARNING "ide%d: Drive %d didn't accept speed setting. Oh, well.\n",
drive->dn >> 1, drive->dn & 1);

- T = 1000000000 / amd_clock;
+ T = 1000000000 / system_bus_speed;
UT = T / min_t(int, max_t(int, amd_config->flags & AMD_UDMA, 1), 2);

ata_timing_compute(drive, speed, &t, T, UT);
@@ -248,7 +247,7 @@
ata_timing_merge(&p, &t, &t, IDE_TIMING_8BIT);
}

- if (speed == XFER_UDMA_5 && amd_clock <= 33333) t.udma = 1;
+ if (speed == XFER_UDMA_5 && system_bus_speed <= 33333) t.udma = 1;

amd_set_speed(drive->channel->pci_dev, drive->dn, &t);

@@ -356,24 +355,6 @@
pci_read_config_byte(dev, AMD_IDE_CONFIG, &t);
pci_write_config_byte(dev, AMD_IDE_CONFIG,
(amd_config->flags & AMD_BAD_FIFO) ? (t & 0x0f) : (t | 0xf0));
-
-/*
- * Determine the system bus clock.
- */
-
- amd_clock = system_bus_speed * 1000;
-
- switch (amd_clock) {
- case 33000: amd_clock = 33333; break;
- case 37000: amd_clock = 37500; break;
- case 41000: amd_clock = 41666; break;
- }
-
- if (amd_clock < 20000 || amd_clock > 50000) {
- printk(KERN_WARNING "AMD_IDE: User given PCI clock speed impossible (%d), using 33 MHz instead.\n", amd_clock);
- printk(KERN_WARNING "AMD_IDE: Use ide0=ata66 if you want to assume 80-wire cable\n");
- amd_clock = 33333;
- }

/*
* Print the boot message.
diff -Nru a/drivers/ide/cmd640.c b/drivers/ide/cmd640.c
--- a/drivers/ide/cmd640.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/cmd640.c Wed May 22 13:09:12 2002
@@ -603,7 +603,7 @@
u8 cycle_count;

recovery_time = cycle_time - (setup_time + active_time);
- clock_time = 1000 / system_bus_speed;
+ clock_time = 1000000 / system_bus_speed;
cycle_count = (cycle_time + clock_time - 1) / clock_time;

setup_count = (setup_time + clock_time - 1) / clock_time;
diff -Nru a/drivers/ide/cmd64x.c b/drivers/ide/cmd64x.c
--- a/drivers/ide/cmd64x.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/cmd64x.c Wed May 22 13:09:12 2002
@@ -305,7 +305,7 @@
*/

recovery_time = t->cycle - (t->setup + t->active);
- clock_time = 1000 / system_bus_speed;
+ clock_time = 1000000 / system_bus_speed;
cycle_count = (t->cycle + clock_time - 1) / clock_time;
setup_count = (t->setup + clock_time - 1) / clock_time;
active_count = (t->active + clock_time - 1) / clock_time;
diff -Nru a/drivers/ide/cy82c693.c b/drivers/ide/cy82c693.c
--- a/drivers/ide/cy82c693.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/cy82c693.c Wed May 22 13:09:12 2002
@@ -121,7 +121,7 @@
{
int clocks;

- clocks = (time*bus_speed+999)/1000 -1;
+ clocks = (time*bus_speed+999999)/1000000 -1;

if (clocks < 0)
clocks = 0;
diff -Nru a/drivers/ide/ht6560b.c b/drivers/ide/ht6560b.c
--- a/drivers/ide/ht6560b.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/ht6560b.c Wed May 22 13:09:12 2002
@@ -219,8 +219,8 @@
/*
* Cycle times should be Vesa bus cycles
*/
- active_cycles = (active_time * system_bus_speed + 999) / 1000;
- recovery_cycles = (recovery_time * system_bus_speed + 999) / 1000;
+ active_cycles = (active_time * system_bus_speed + 999999) / 1000000;
+ recovery_cycles = (recovery_time * system_bus_speed + 999999) / 1000000;
/*
* Upper and lower limits
*/
diff -Nru a/drivers/ide/ide.c b/drivers/ide/ide.c
--- a/drivers/ide/ide.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/ide.c Wed May 22 13:09:12 2002
@@ -241,8 +241,6 @@

/* Add default hw interfaces */
ide_init_default_hwifs();
-
- idebus_parameter = 0;
}

/*
@@ -2785,10 +2783,7 @@
if (!strncmp(s, "idebus", 6)) {
if (match_parm(&s[6], NULL, vals, 1) != 1)
goto bad_option;
- if (vals[0] >= 20 && vals[0] <= 66) {
- idebus_parameter = vals[0];
- } else
- printk(" -- BAD BUS SPEED! Expected value from 20 to 66");
+ idebus_parameter = vals[0];
goto done;
}

@@ -3217,27 +3212,40 @@

ide_devfs_handle = devfs_mk_dir (NULL, "ide", NULL);

- /* Initialize system bus speed.
- *
- * This can be changed by a particular chipse initialization module.
- * Otherwise we assume 33MHz as a safe value for PCI bus based systems.
- * 50MHz will be assumed for abolitions like VESA, since higher values
- * result in more conservative timing setups.
- *
- * The kernel parameter idebus=XX overrides the default settings.
- */
+/*
+ * Because most of the ATA adapters represent the timings in unit of bus
+ * clocks, and there is no known reliable way to detect the bus clock
+ * frequency, we assume 50 MHz for non-PCI (VLB, EISA) and 33 MHz for PCI based
+ * systems. Since assuming only hurts performance and not stability, this is
+ * OK. The user can change this on the command line by using the "idebus=XX"
+ * parameter. While the system_bus_speed variable is in kHz units, we accept
+ * both MHz and kHz entry on the command line for backward compatibility.
+ */

- system_bus_speed = 50;
- if (idebus_parameter)
- system_bus_speed = idebus_parameter;
-#ifdef CONFIG_PCI
- else if (pci_present())
- system_bus_speed = 33;
-#endif
+ system_bus_speed = 50000;

- printk(KERN_INFO "ATA: system bus speed %dMHz\n", system_bus_speed);
+ if (pci_present())
+ system_bus_speed = 33333;

- init_ide_data ();
+ if (idebus_parameter >= 20 && idebus_parameter <= 80) {
+
+ system_bus_speed = idebus_parameter * 1000;
+
+ switch (system_bus_speed) {
+ case 33000: system_bus_speed = 33333; break;
+ case 37000: system_bus_speed = 37500; break;
+ case 41000: system_bus_speed = 41666; break;
+ case 66000: system_bus_speed = 66666; break;
+ }
+ }
+
+ if (idebus_parameter >= 20000 && idebus_parameter <= 80000)
+ system_bus_speed = idebus_parameter;
+
+ printk(KERN_INFO "ATA: %s bus speed %d.%dMHz\n",
+ pci_present() ? "PCI" : "System", system_bus_speed / 1000, system_bus_speed / 100 % 10);
+
+ init_ide_data();

initializing = 1;

diff -Nru a/drivers/ide/opti621.c b/drivers/ide/opti621.c
--- a/drivers/ide/opti621.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/opti621.c Wed May 22 13:09:12 2002
@@ -175,7 +175,7 @@
* Use idebus=xx to select right frequency.
*/
{
- return ((time*bus_speed+999)/1000);
+ return ((time*bus_speed+999999)/1000000);
}

static void write_reg(byte value, int reg)
diff -Nru a/drivers/ide/piix.c b/drivers/ide/piix.c
--- a/drivers/ide/piix.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/piix.c Wed May 22 13:09:12 2002
@@ -105,7 +105,6 @@
static struct piix_ide_chip *piix_config;
static unsigned char piix_enabled;
static unsigned int piix_80w;
-static unsigned int piix_clock;

static char *piix_dma[] = { "MWDMA16", "UDMA33", "UDMA66", "UDMA100", "UDMA133" };

@@ -147,7 +146,7 @@
: piix_dma[piix_config->flags & PIIX_UDMA]);

piix_print("BM-DMA base: %#x", piix_base);
- piix_print("PCI clock: %d.%dMHz", piix_clock / 1000, piix_clock / 100 % 10);
+ piix_print("PCI clock: %d.%dMHz", system_bus_speed / 1000, system_bus_speed / 100 % 10);

piix_print("-----------------------Primary IDE-------Secondary IDE------");

@@ -160,7 +159,7 @@

piix_print("Cable Type: %10s%20s", (piix_80w & 1) ? "80w" : "40w", (piix_80w & 2) ? "80w" : "40w");

- if (!piix_clock)
+ if (!system_bus_speed)
return p - buffer;

piix_print("-------------------drive0----drive1----drive2----drive3-----");
@@ -192,8 +191,8 @@
}

dmaen[i] = (c & ((i & 1) ? 0x40 : 0x20) << ((i & 2) << 2));
- cycle[i] = 1000000 / piix_clock * (active[i] + recover[i]);
- speed[i] = 2 * piix_clock / (active[i] + recover[i]);
+ cycle[i] = 1000000 / system_bus_speed * (active[i] + recover[i]);
+ speed[i] = 2 * system_bus_speed / (active[i] + recover[i]);

if (!(piix_config->flags & PIIX_UDMA))
continue;
@@ -213,17 +212,17 @@
udma[i] = (4 - ((e >> (i << 2)) & 3)) * umul;
} else udma[i] = (8 - ((e >> (i << 2)) & 7)) * 2;

- speed[i] = 8 * piix_clock / udma[i];
- cycle[i] = 250000 * udma[i] / piix_clock;
+ speed[i] = 8 * system_bus_speed / udma[i];
+ cycle[i] = 250000 * udma[i] / system_bus_speed;
}

piix_print_drive("Transfer Mode: ", "%10s", dmaen[i] ? (uen[i] ? "UDMA" : "DMA") : "PIO");

- piix_print_drive("Address Setup: ", "%8dns", (1000000 / piix_clock) * 3);
- piix_print_drive("Cmd Active: ", "%8dns", (1000000 / piix_clock) * 12);
- piix_print_drive("Cmd Recovery: ", "%8dns", (1000000 / piix_clock) * 18);
- piix_print_drive("Data Active: ", "%8dns", (1000000 / piix_clock) * active[i]);
- piix_print_drive("Data Recovery: ", "%8dns", (1000000 / piix_clock) * recover[i]);
+ piix_print_drive("Address Setup: ", "%8dns", (1000000 / system_bus_speed) * 3);
+ piix_print_drive("Cmd Active: ", "%8dns", (1000000 / system_bus_speed) * 12);
+ piix_print_drive("Cmd Recovery: ", "%8dns", (1000000 / system_bus_speed) * 18);
+ piix_print_drive("Data Active: ", "%8dns", (1000000 / system_bus_speed) * active[i]);
+ piix_print_drive("Data Recovery: ", "%8dns", (1000000 / system_bus_speed) * recover[i]);
piix_print_drive("Cycle Time: ", "%8dns", cycle[i]);
piix_print_drive("Transfer Rate: ", "%4d.%dMB/s", speed[i] / 1000, speed[i] / 100 % 10);

@@ -339,7 +338,7 @@
if (speed > XFER_UDMA_4 && (piix_config->flags & PIIX_UDMA) >= PIIX_UDMA_100)
umul = 4;

- T = 1000000000 / piix_clock;
+ T = 1000000000 / system_bus_speed;
UT = T / umul;

ata_timing_compute(drive, speed, &t, T, UT);
@@ -491,24 +490,6 @@
if (~piix_config->flags & PIIX_NO_SITRE) w |= 0x4000;
w |= 0x44;
pci_write_config_word(dev, PIIX_IDETIM0 + (i << 1), w);
- }
-
-/*
- * Determine the system bus clock.
- */
-
- piix_clock = system_bus_speed * 1000;
-
- switch (piix_clock) {
- case 33000: piix_clock = 33333; break;
- case 37000: piix_clock = 37500; break;
- case 41000: piix_clock = 41666; break;
- }
-
- if (piix_clock < 20000 || piix_clock > 50000) {
- printk(KERN_WARNING "PIIX: User given PCI clock speed impossible (%d), using 33 MHz instead.\n", piix_clock);
- printk(KERN_WARNING "PIIX: Use ide0=ata66 if you want to assume 80-wire cable\n");
- piix_clock = 33333;
}

/*
diff -Nru a/drivers/ide/qd65xx.c b/drivers/ide/qd65xx.c
--- a/drivers/ide/qd65xx.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/qd65xx.c Wed May 22 13:09:12 2002
@@ -133,12 +133,12 @@
{
byte active_cycle,recovery_cycle;

- if (system_bus_speed <= 33) {
- active_cycle = 9 - IDE_IN(active_time * system_bus_speed / 1000 + 1, 2, 9);
- recovery_cycle = 15 - IDE_IN(recovery_time * system_bus_speed / 1000 + 1, 0, 15);
+ if (system_bus_speed <= 33333) {
+ active_cycle = 9 - IDE_IN(active_time * system_bus_speed / 1000000 + 1, 2, 9);
+ recovery_cycle = 15 - IDE_IN(recovery_time * system_bus_speed / 1000000 + 1, 0, 15);
} else {
- active_cycle = 8 - IDE_IN(active_time * system_bus_speed / 1000 + 1, 1, 8);
- recovery_cycle = 18 - IDE_IN(recovery_time * system_bus_speed / 1000 + 1, 3, 18);
+ active_cycle = 8 - IDE_IN(active_time * system_bus_speed / 1000000 + 1, 1, 8);
+ recovery_cycle = 18 - IDE_IN(recovery_time * system_bus_speed / 1000000 + 1, 3, 18);
}

return((recovery_cycle<<4) | 0x08 | active_cycle);
@@ -152,8 +152,8 @@

static byte qd6580_compute_timing (int active_time, int recovery_time)
{
- byte active_cycle = 17-IDE_IN(active_time * system_bus_speed / 1000 + 1, 2, 17);
- byte recovery_cycle = 15-IDE_IN(recovery_time * system_bus_speed / 1000 + 1, 2, 15);
+ byte active_cycle = 17-IDE_IN(active_time * system_bus_speed / 1000000 + 1, 2, 17);
+ byte recovery_cycle = 15-IDE_IN(recovery_time * system_bus_speed / 1000000 + 1, 2, 15);

return((recovery_cycle<<4) | active_cycle);
}
diff -Nru a/drivers/ide/via82cxxx.c b/drivers/ide/via82cxxx.c
--- a/drivers/ide/via82cxxx.c Wed May 22 13:09:12 2002
+++ b/drivers/ide/via82cxxx.c Wed May 22 13:09:12 2002
@@ -132,7 +132,6 @@
static struct via_isa_bridge *via_config;
static unsigned char via_enabled;
static unsigned int via_80w;
-static unsigned int via_clock;
static char *via_dma[] = { "MWDMA16", "UDMA33", "UDMA66", "UDMA100", "UDMA133" };

/*
@@ -175,7 +174,7 @@
via_print("Highest DMA rate: %s", via_dma[via_config->flags & VIA_UDMA]);

via_print("BM-DMA base: %#x", via_base);
- via_print("PCI clock: %d.%dMHz", via_clock / 1000, via_clock / 100 % 10);
+ via_print("PCI clock: %d.%dMHz", system_bus_speed / 1000, system_bus_speed / 100 % 10);

pci_read_config_byte(dev, VIA_MISC_1, &t);
via_print("Master Read Cycle IRDY: %dws", (t & 64) >> 6);
@@ -223,8 +222,8 @@
uen[i] = ((u >> ((3 - i) << 3)) & 0x20);
den[i] = (c & ((i & 1) ? 0x40 : 0x20) << ((i & 2) << 2));

- speed[i] = 2 * via_clock / (active[i] + recover[i]);
- cycle[i] = 1000000 * (active[i] + recover[i]) / via_clock;
+ speed[i] = 2 * system_bus_speed / (active[i] + recover[i]);
+ cycle[i] = 1000000 * (active[i] + recover[i]) / system_bus_speed;

if (!uen[i] || !den[i])
continue;
@@ -232,34 +231,34 @@
switch (via_config->flags & VIA_UDMA) {

case VIA_UDMA_33:
- speed[i] = 2 * via_clock / udma[i];
- cycle[i] = 1000000 * udma[i] / via_clock;
+ speed[i] = 2 * system_bus_speed / udma[i];
+ cycle[i] = 1000000 * udma[i] / system_bus_speed;
break;

case VIA_UDMA_66:
- speed[i] = 4 * via_clock / (udma[i] * umul[i]);
- cycle[i] = 500000 * (udma[i] * umul[i]) / via_clock;
+ speed[i] = 4 * system_bus_speed / (udma[i] * umul[i]);
+ cycle[i] = 500000 * (udma[i] * umul[i]) / system_bus_speed;
break;

case VIA_UDMA_100:
- speed[i] = 6 * via_clock / udma[i];
- cycle[i] = 333333 * udma[i] / via_clock;
+ speed[i] = 6 * system_bus_speed / udma[i];
+ cycle[i] = 333333 * udma[i] / system_bus_speed;
break;

case VIA_UDMA_133:
- speed[i] = 8 * via_clock / udma[i];
- cycle[i] = 250000 * udma[i] / via_clock;
+ speed[i] = 8 * system_bus_speed / udma[i];
+ cycle[i] = 250000 * udma[i] / system_bus_speed;
break;
}
}

via_print_drive("Transfer Mode: ", "%10s", den[i] ? (uen[i] ? "UDMA" : "DMA") : "PIO");

- via_print_drive("Address Setup: ", "%8dns", 1000000 * setup[i] / via_clock);
- via_print_drive("Cmd Active: ", "%8dns", 1000000 * active8b[i] / via_clock);
- via_print_drive("Cmd Recovery: ", "%8dns", 1000000 * recover8b[i] / via_clock);
- via_print_drive("Data Active: ", "%8dns", 1000000 * active[i] / via_clock);
- via_print_drive("Data Recovery: ", "%8dns", 1000000 * recover[i] / via_clock);
+ via_print_drive("Address Setup: ", "%8dns", 1000000 * setup[i] / system_bus_speed);
+ via_print_drive("Cmd Active: ", "%8dns", 1000000 * active8b[i] / system_bus_speed);
+ via_print_drive("Cmd Recovery: ", "%8dns", 1000000 * recover8b[i] / system_bus_speed);
+ via_print_drive("Data Active: ", "%8dns", 1000000 * active[i] / system_bus_speed);
+ via_print_drive("Data Recovery: ", "%8dns", 1000000 * recover[i] / system_bus_speed);
via_print_drive("Cycle Time: ", "%8dns", cycle[i]);
via_print_drive("Transfer Rate: ", "%4d.%dMB/s", speed[i] / 1000, speed[i] / 100 % 10);

@@ -314,7 +313,7 @@
printk(KERN_WARNING "ide%d: Drive %d didn't accept speed setting. Oh, well.\n",
drive->dn >> 1, drive->dn & 1);

- T = 1000000000 / via_clock;
+ T = 1000000000 / system_bus_speed;

switch (via_config->flags & VIA_UDMA) {
case VIA_UDMA_33: UT = T; break;
@@ -469,24 +468,6 @@
}

pci_write_config_byte(dev, VIA_FIFO_CONFIG, t);
-
-/*
- * Determine system bus clock.
- */
-
- via_clock = system_bus_speed * 1000;
-
- switch (via_clock) {
- case 33000: via_clock = 33333; break;
- case 37000: via_clock = 37500; break;
- case 41000: via_clock = 41666; break;
- }
-
- if (via_clock < 20000 || via_clock > 50000) {
- printk(KERN_WARNING "VP_IDE: User given PCI clock speed impossible (%d), using 33 MHz instead.\n", via_clock);
- printk(KERN_WARNING "VP_IDE: Use ide0=ata66 if you want to assume 80-wire cable.\n");
- via_clock = 33333;
- }

/*
* Print the boot message.
\
 
 \ /
  Last update: 2005-03-22 13:26    [W:0.066 / U:0.404 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site