* [PATCH] Longhaul - Only for "Powersaver"
@ 2006-07-13 5:57 Rafał Bilski
2006-07-13 6:27 ` Dave Jones
0 siblings, 1 reply; 3+ messages in thread
From: Rafał Bilski @ 2006-07-13 5:57 UTC (permalink / raw)
To: Dave Jones; +Cc: cpufreq
Looks like ACPI C3 don't work with older VIA CPUs. Motherboard is
ACPI C3 capable, but after C3 frequency is same as before.
So this patch below will make "longhaul" fail for older CPU's.
There is nothing what I can do to fix this. Looks like CPU with
BCR2 MSR is changing frequency only on halt. Processor with
Longhaul MSR is changing frequency on halt or ACPI C3.
Btw typo fixes.
Thanks to David for bug report.
Signed-off-by: Rafa³ Bilski <rafalbilski@interia.pl>
---
diff -uprN -X linux-2.6.17-git20-vanilla/Documentation/dontdiff linux-2.6.17-git20-vanilla/arch/i386/kernel/cpu/cpufreq/longhaul.c linux-2.6.17-git20/arch/i386/kernel/cpu/cpufreq/longhaul.c
--- linux-2.6.17-git20-vanilla/arch/i386/kernel/cpu/cpufreq/longhaul.c 2006-07-13 07:39:41.000000000 +0200
+++ linux-2.6.17-git20/arch/i386/kernel/cpu/cpufreq/longhaul.c 2006-07-13 07:38:35.000000000 +0200
@@ -550,7 +550,7 @@ static int __init longhaul_cpu_init(stru
if (pr == NULL) goto err_acpi;
cx = &pr->power.states[ACPI_STATE_C3];
- if (cx == NULL || cx->latency > 1000) goto err_acpi;
+ if (cx->address == 0 || cx->latency > 1000) goto err_acpi;
/* Now check what we have on this motherboard */
switch (c->x86_model) {
@@ -627,7 +627,9 @@ static int __init longhaul_cpu_init(stru
switch (longhaul_version) {
case TYPE_LONGHAUL_V1:
case TYPE_LONGHAUL_V2:
- printk ("Longhaul v%d supported.\n", longhaul_version);
+// printk ("Longhaul v%d supported.\n", longhaul_version);
+ printk(KERN_ERR PFX "Processor don't support ACPI. Aborting.\n");
+ return -ENODEV;
break;
case TYPE_POWERSAVER:
printk ("Powersaver supported.\n");
@@ -691,8 +693,8 @@ static int __init longhaul_init(void)
#ifdef CONFIG_SMP
if (num_online_cpus() > 1) {
- return -ENODEV;
printk(KERN_ERR PFX "More than 1 CPU detected, longhaul disabled.\n");
+ return -ENODEV;
}
#endif
#ifdef CONFIG_X86_IO_APIC
--------------------------------------------------------------------
12 000 SMS-ow gratis! Promocja na http://link.interia.pl/f1971
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Longhaul - Only for "Powersaver"
2006-07-13 5:57 [PATCH] Longhaul - Only for "Powersaver" Rafał Bilski
@ 2006-07-13 6:27 ` Dave Jones
2006-07-13 6:59 ` Rafał Bilski
0 siblings, 1 reply; 3+ messages in thread
From: Dave Jones @ 2006-07-13 6:27 UTC (permalink / raw)
To: Rafał Bilski; +Cc: cpufreq
On Thu, Jul 13, 2006 at 07:57:49AM +0200, Rafał Bilski wrote:
> Looks like ACPI C3 don't work with older VIA CPUs. Motherboard is
> ACPI C3 capable, but after C3 frequency is same as before.
> So this patch below will make "longhaul" fail for older CPU's.
> There is nothing what I can do to fix this. Looks like CPU with
> BCR2 MSR is changing frequency only on halt. Processor with
> Longhaul MSR is changing frequency on halt or ACPI C3.
> Btw typo fixes.
Falling back to what we did in 2.6.17 for BCR2 systems may
get some of those working at least. The whole notion of tying the
longhaul driver closely to acpi makes me nervous, as a lot of
those socket-370 boards have _dreadful_ ACPI BIOS implementations,
and in a large number of cases, will lack the necessary functionality
needed, as socket 370 Celerons were boring and had no fancy power
saving features to run in C3.
I really need to find time to dig out some of those old test systems, but that
won't happen now until after kernel summit/OLS/vacation.
> @@ -627,7 +627,9 @@ static int __init longhaul_cpu_init(stru
> switch (longhaul_version) {
> case TYPE_LONGHAUL_V1:
> case TYPE_LONGHAUL_V2:
> - printk ("Longhaul v%d supported.\n", longhaul_version);
> +// printk ("Longhaul v%d supported.\n", longhaul_version);
> + printk(KERN_ERR PFX "Processor don't support ACPI. Aborting.\n");
It's really a BIOS failing. The CPU cares nothing about how it's driven,
but if the DSDT lacks methods to do anything interesting, nothing happens.
> @@ -691,8 +693,8 @@ static int __init longhaul_init(void)
>
> #ifdef CONFIG_SMP
> if (num_online_cpus() > 1) {
> - return -ENODEV;
> printk(KERN_ERR PFX "More than 1 CPU detected, longhaul disabled.\n");
> + return -ENODEV;
Applied this bit, but the other bit I need to think about some more.
Dave
--
http://www.codemonkey.org.uk
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Longhaul - Only for "Powersaver"
2006-07-13 6:27 ` Dave Jones
@ 2006-07-13 6:59 ` Rafał Bilski
0 siblings, 0 replies; 3+ messages in thread
From: Rafał Bilski @ 2006-07-13 6:59 UTC (permalink / raw)
To: Dave Jones; +Cc: cpufreq
> It's really a BIOS failing. The CPU cares nothing about how it's driven,
> but if the DSDT lacks methods to do anything interesting, nothing happens.
>
No it isn't. I have checked FADT and DSDT and everything is OK. David spend
last 2 days checking changes in code that I send him. ACPI C3 is working on
EPIA 800. It really don't work for BCR2 MSR. Frequency is ONLY changed on
"halt" instruction. NEVER on ACPI C3. Maybe it works on lower ACPI states,
but if I understand ACPI spec correcly only C3 state is good for this.
Worst part is that this is mentioned in documentation: AUTOHALT only.
Information about Longhaul is stripped from later datasheets. Probably
designers from Centaur add support for ACPI later. I didn't know that
AUTOHALT don't mean ACPI C3 capable. There is SLEEP signal and probably
this signal is used to put processor in C3 state.
Sorry. I'm still learning.
Rafa³
--------------------------------------------------------------------
12 000 SMS-ow gratis! Promocja na http://link.interia.pl/f1971
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-07-13 6:59 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-13 5:57 [PATCH] Longhaul - Only for "Powersaver" Rafał Bilski
2006-07-13 6:27 ` Dave Jones
2006-07-13 6:59 ` Rafał Bilski
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.