[PATCH 3/3] acpi-cpufreq: Make use of firmware bug report interface

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Thomas Renninger
Date: Wednesday, August 20, 2008 - 10:02 am

Enhance check for processor cpufreq support, but missing or wrong ACPI
cpufreq package information. This often happens if the BIOS is older
as the CPU. Users should be told to update the BIOS then.

Not sure whether the check will show false negatives, e.g. some old
Pentium M (Banias/Dothan) worked with static compiled-in cpufreq tables.
-> needs review.
Best probably is to check whether a _PPC function exists in the processor
object, but this must be done in drivers/acpi/processor_*.c.
This should always be an indicator for an too old BIOS.

Signed-off-by: Thomas Renninger <trenn@suse.de>
---
 arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
index dd097b8..1288142 100644
--- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
+++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
@@ -26,6 +26,7 @@
  */
 
 #include <linux/kernel.h>
+#include <linux/firmware_error.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/smp.h>
@@ -67,6 +68,8 @@ struct acpi_cpufreq_data {
 	unsigned int cpu_feature;
 };
 
+#define PFX "acpi-cpufreq: "
+
 static DEFINE_PER_CPU(struct acpi_cpufreq_data *, drv_data);
 
 /* acpi_perf_data is a pointer to percpu data. */
@@ -354,7 +357,12 @@ static unsigned int get_cur_freq_on_cpu(unsigned int cpu)
 		/*
 		 * The dreaded BIOS frequency change behind our back.
 		 * Force set the frequency on next target call.
+		 * Dell tends to do this on their laptops and it is evil.
 		 */
+		FW_PRINT_WARN(FW_WARN, PFX " BIOS must not change frequency "
+			      "on _PPC changes, let OS do this");
+
+		
 		data->resume = 1;
 	}
 
@@ -587,8 +595,14 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
 		acpi_cpufreq_driver.flags |= CPUFREQ_CONST_LOOPS;
 
 	result = acpi_processor_register_performance(data->acpi_data, cpu);
-	if (result)
+	if (result) {
+		if (cpu_has(c, X86_FEATURE_EST)) {
+			FW_PRINT_CRIT(FW_ERR, PFX "Speedstep supported, but "
+				      "invalid ACPI CPU information, BIOS "
+				      "update needed");
+		}
 		goto err_free;
+	}
 
 	perf = data->acpi_data;
 	policy->shared_type = perf->shared_type;
-- 
1.5.4.5

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC] Introduce interface to report BIOS bugs, Thomas Renninger, (Wed Aug 20, 10:02 am)
[PATCH 1/3] Introduce interface to report BIOS bugs, Thomas Renninger, (Wed Aug 20, 10:02 am)
[PATCH 2/3] Powernow-k8: Make use of firmware bug report i ..., Thomas Renninger, (Wed Aug 20, 10:02 am)
[PATCH 3/3] acpi-cpufreq: Make use of firmware bug report ..., Thomas Renninger, (Wed Aug 20, 10:02 am)
Re: [PATCH 1/3] Introduce interface to report BIOS bugs, Bjorn Helgaas, (Wed Aug 20, 11:37 am)
Re: [PATCH 1/3] Introduce interface to report BIOS bugs, Thomas Renninger, (Thu Aug 21, 6:52 am)
Re: [PATCH 1/3] Introduce interface to report BIOS bugs, Bjorn Helgaas, (Thu Aug 21, 8:19 am)
Re: [PATCH 1/3] Introduce interface to report BIOS bugs, Pavel Machek, (Fri Aug 22, 3:19 am)
Introduce interface to report BIOS bugs (reworked, FW_BUG ..., Thomas Renninger, (Wed Aug 27, 6:27 am)
[PATCH 2/3] CPUFREQ: powernow-k8: Try to detect old BIOS, ..., Thomas Renninger, (Wed Aug 27, 6:27 am)