* [PATCH][4/4] Longhaul - Check ACPI "BM DMA in progress" bit
@ 2007-05-17 20:39 Rafał Bilski
0 siblings, 0 replies; only message in thread
From: Rafał Bilski @ 2007-05-17 20:39 UTC (permalink / raw)
To: Dave Jones; +Cc: cpufreq
It is good idea to wait for PCI bus to become idle before
frequency change. Thanks to ACPI it is possible. It makes
sense only when northbridge support is in use because it is
only case in which we can disable arbiter after check if PCI
bus is busy.
Signed-off-by: Rafal Bilski <rafalbilski@interia.pl>
---
arch/i386/kernel/cpu/cpufreq/longhaul.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/arch/i386/kernel/cpu/cpufreq/longhaul.c b/arch/i386/kernel/cpu/cpufreq/longhaul.c
--- a/arch/i386/kernel/cpu/cpufreq/longhaul.c
+++ b/arch/i386/kernel/cpu/cpufreq/longhaul.c
@@ -254,6 +254,8 @@ static void longhaul_setstate(unsigned int clock_ratio_index)
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;
@@ -284,6 +286,18 @@ static void longhaul_setstate(unsigned int clock_ratio_index)
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);
@@ -335,6 +349,10 @@ static void longhaul_setstate(unsigned int clock_ratio_index)
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");
}
/*
--
----------------------------------------------------------------------
NIE KUPUJ!!!
...zanim nie porownasz cen >> http://link.interia.pl/f1a5e
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2007-05-17 20:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-17 20:39 [PATCH][4/4] Longhaul - Check ACPI "BM DMA in progress" bit Rafał Bilski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox