struct cpufreq_freqs freqs;
unsigned long flags;
unsigned int pic1_mask, pic2_mask;
+ u32 bm_status = 0;
+ u32 bm_timeout = 100000;
if (old_ratio == clock_ratio_index)
return;
outb(0xFF,0xA1); /* Overkill */
outb(0xFE,0x21); /* TMR0 only */
+ /* Wait while PCI bus is busy. */
+ if (longhaul_flags & USE_NORTHBRIDGE
+ || ((pr != NULL) && pr->flags.bm_control)) {
+ acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status);
+ while (bm_status && bm_timeout) {
+ acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 1);
+ bm_timeout--;
+ acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS,
+ &bm_status);
+ }
+ }
+
if (longhaul_flags & USE_NORTHBRIDGE) {
/* Disable AGP and PCI arbiters */
outb(3, 0x22);
freqs.new = calc_speed(longhaul_get_cpu_mult());
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
+
+ if (!bm_timeout)
+ printk(KERN_INFO PFX "Warning: Timeout while waiting for "
+ "idle PCI bus.\n");
}
/*