Messages in this thread Patch in this message | | | Subject | RE: [2.6 patch] the overdue removal of X86_SPEEDSTEP_CENTRINO_ACPI | Date | Sat, 24 Feb 2007 06:20:17 -0800 | From | "Pallipadi, Venkatesh" <> |
| |
Ack.
Dave: Can you add this patch to cpufreq.git -> mm.
Thanks, Venki
>-----Original Message----- >From: Adrian Bunk [mailto:bunk@stusta.de] >Sent: Monday, February 19, 2007 4:07 PM >To: Pallipadi, Venkatesh >Cc: davej@codemonkey.org.uk; cpufreq@lists.linux.org.uk; >linux-kernel@vger.kernel.org >Subject: [2.6 patch] the overdue removal of X86_SPEEDSTEP_CENTRINO_ACPI > >This patch contains the overdue removal of X86_SPEEDSTEP_CENTRINO_ACPI. > >Signed-off-by: Adrian Bunk <bunk@stusta.de> > >--- > > Documentation/feature-removal-schedule.txt | 22 - > arch/i386/kernel/cpu/cpufreq/Kconfig | 19 > arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c | 280 >-------------- > arch/x86_64/kernel/cpufreq/Kconfig | 7 > 4 files changed, 21 insertions(+), 307 deletions(-) > >--- >linux-2.6.19-rc6-mm2/arch/i386/kernel/cpu/cpufreq/Kconfig.old >2006-12-01 07:23:38.000000000 +0100 >+++ linux-2.6.19-rc6-mm2/arch/i386/kernel/cpu/cpufreq/Kconfig >2006-12-01 07:24:02.000000000 +0100 >@@ -109,7 +109,7 @@ > config X86_SPEEDSTEP_CENTRINO > tristate "Intel Enhanced SpeedStep" > select CPU_FREQ_TABLE >- select X86_SPEEDSTEP_CENTRINO_TABLE if >(!X86_SPEEDSTEP_CENTRINO_ACPI) >+ select X86_SPEEDSTEP_CENTRINO_TABLE > help > This adds the CPUFreq driver for Enhanced SpeedStep enabled > mobile CPUs. This means Intel Pentium M (Centrino) >CPUs. However, >@@ -121,21 +121,6 @@ > > If in doubt, say N. > >-config X86_SPEEDSTEP_CENTRINO_ACPI >- bool "Use ACPI tables to decode valid frequency/voltage >(deprecated)" >- depends on X86_SPEEDSTEP_CENTRINO && ACPI_PROCESSOR >- depends on !(X86_SPEEDSTEP_CENTRINO = y && ACPI_PROCESSOR = m) >- default y >- help >- This is deprecated and this functionality is now merged into >- acpi_cpufreq (X86_ACPI_CPUFREQ). Use that driver instead of >- speedstep_centrino. >- Use primarily the information provided in the BIOS ACPI tables >- to determine valid CPU frequency and voltage pairings. It is >- required for the driver to work on non-Banias CPUs. >- >- If in doubt, say Y. >- > config X86_SPEEDSTEP_CENTRINO_TABLE > bool "Built-in tables for Banias CPUs" > depends on X86_SPEEDSTEP_CENTRINO >@@ -222,7 +207,7 @@ > config X86_ACPI_CPUFREQ_PROC_INTF > bool "/proc/acpi/processor/../performance interface >(deprecated)" > depends on PROC_FS >- depends on X86_ACPI_CPUFREQ || >X86_SPEEDSTEP_CENTRINO_ACPI || X86_POWERNOW_K7_ACPI || >X86_POWERNOW_K8_ACPI >+ depends on X86_ACPI_CPUFREQ || X86_POWERNOW_K7_ACPI || >X86_POWERNOW_K8_ACPI > help > This enables the deprecated >/proc/acpi/processor/../performance > interface. While it is helpful for debugging, the generic, >--- >linux-2.6.19-rc6-mm2/arch/x86_64/kernel/cpufreq/Kconfig.old >2006-12-01 07:24:11.000000000 +0100 >+++ linux-2.6.19-rc6-mm2/arch/x86_64/kernel/cpufreq/Kconfig >2006-12-01 07:24:21.000000000 +0100 >@@ -42,11 +42,6 @@ > > If in doubt, say N. > >-config X86_SPEEDSTEP_CENTRINO_ACPI >- bool >- depends on X86_SPEEDSTEP_CENTRINO >- default y >- > config X86_ACPI_CPUFREQ > tristate "ACPI Processor P-States driver" > select CPU_FREQ_TABLE >@@ -65,7 +60,7 @@ > config X86_ACPI_CPUFREQ_PROC_INTF > bool "/proc/acpi/processor/../performance interface >(deprecated)" > depends on PROC_FS >- depends on X86_ACPI_CPUFREQ || >X86_SPEEDSTEP_CENTRINO_ACPI || X86_POWERNOW_K8_ACPI >+ depends on X86_ACPI_CPUFREQ || X86_POWERNOW_K8_ACPI > help > This enables the deprecated >/proc/acpi/processor/../performance > interface. While it is helpful for debugging, the generic, >--- >linux-2.6.20-mm1/arch/i386/kernel/cpu/cpufreq/speedstep-centrin o.c.old 2007-02-17 23:29:53.000000000 +0100 >+++ >linux-2.6.20-mm1/arch/i386/kernel/cpu/cpufreq/speedstep-cen trino.c 2007-02-17 23:30:44.000000000 +0100 >@@ -21,12 +21,6 @@ > #include <linux/delay.h> > #include <linux/compiler.h> > >-#ifdef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI >-#include <linux/acpi.h> >-#include <linux/dmi.h> >-#include <acpi/processor.h> >-#endif >- > #include <asm/msr.h> > #include <asm/processor.h> > #include <asm/cpufeature.h> >@@ -257,9 +251,7 @@ > /* Matched a non-match */ > dprintk("no table support for CPU model \"%s\"\n", > cpu->x86_model_id); >-#ifndef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI >- dprintk("try compiling with >CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI enabled\n"); >-#endif >+ dprintk("try using the acpi-cpufreq driver\n"); > return -ENOENT; > } > >@@ -346,213 +338,6 @@ > } > > >-#ifdef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI >- >-static struct acpi_processor_performance *acpi_perf_data[NR_CPUS]; >- >-/* >- * centrino_cpu_early_init_acpi - Do the preregistering with >ACPI P-States >- * library >- * >- * Before doing the actual init, we need to do _PSD related >setup whenever >- * supported by the BIOS. These are handled by this >early_init routine. >- */ >-static int centrino_cpu_early_init_acpi(void) >-{ >- unsigned int i, j; >- struct acpi_processor_performance *data; >- >- for_each_possible_cpu(i) { >- data = kzalloc(sizeof(struct >acpi_processor_performance), >- GFP_KERNEL); >- if (!data) { >- for_each_possible_cpu(j) { >- kfree(acpi_perf_data[j]); >- acpi_perf_data[j] = NULL; >- } >- return (-ENOMEM); >- } >- acpi_perf_data[i] = data; >- } >- >- acpi_processor_preregister_performance(acpi_perf_data); >- return 0; >-} >- >- >-#ifdef CONFIG_SMP >-/* >- * Some BIOSes do SW_ANY coordination internally, either set >it up in hw >- * or do it in BIOS firmware and won't inform about it to OS. If not >- * detected, this has a side effect of making CPU run at a >different speed >- * than OS intended it to run at. Detect it and handle it cleanly. >- */ >-static int bios_with_sw_any_bug; >-static int sw_any_bug_found(struct dmi_system_id *d) >-{ >- bios_with_sw_any_bug = 1; >- return 0; >-} >- >-static struct dmi_system_id sw_any_bug_dmi_table[] = { >- { >- .callback = sw_any_bug_found, >- .ident = "Supermicro Server X6DLP", >- .matches = { >- DMI_MATCH(DMI_SYS_VENDOR, "Supermicro"), >- DMI_MATCH(DMI_BIOS_VERSION, "080010"), >- DMI_MATCH(DMI_PRODUCT_NAME, "X6DLP"), >- }, >- }, >- { } >-}; >-#endif >- >-/* >- * centrino_cpu_init_acpi - register with ACPI P-States library >- * >- * Register with the ACPI P-States library (part of >drivers/acpi/processor.c) >- * in order to determine correct frequency and voltage >pairings by reading >- * the _PSS of the ACPI DSDT or SSDT tables. >- */ >-static int centrino_cpu_init_acpi(struct cpufreq_policy *policy) >-{ >- unsigned long cur_freq; >- int result = 0, i; >- unsigned int cpu = policy->cpu; >- struct acpi_processor_performance *p; >- >- p = acpi_perf_data[cpu]; >- >- /* register with ACPI core */ >- if (acpi_processor_register_performance(p, cpu)) { >- dprintk(PFX "obtaining ACPI data failed\n"); >- return -EIO; >- } >- >- policy->shared_type = p->shared_type; >- /* >- * Will let policy->cpus know about dependency only >when software >- * coordination is required. >- */ >- if (policy->shared_type == CPUFREQ_SHARED_TYPE_ALL || >- policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) { >- policy->cpus = p->shared_cpu_map; >- } >- >-#ifdef CONFIG_SMP >- dmi_check_system(sw_any_bug_dmi_table); >- if (bios_with_sw_any_bug && cpus_weight(policy->cpus) == 1) { >- policy->shared_type = CPUFREQ_SHARED_TYPE_ALL; >- policy->cpus = cpu_core_map[cpu]; >- } >-#endif >- >- /* verify the acpi_data */ >- if (p->state_count <= 1) { >- dprintk("No P-States\n"); >- result = -ENODEV; >- goto err_unreg; >- } >- >- if ((p->control_register.space_id != >ACPI_ADR_SPACE_FIXED_HARDWARE) || >- (p->status_register.space_id != >ACPI_ADR_SPACE_FIXED_HARDWARE)) { >- dprintk("Invalid control/status registers (%x - %x)\n", >- p->control_register.space_id, >p->status_register.space_id); >- result = -EIO; >- goto err_unreg; >- } >- >- for (i=0; i<p->state_count; i++) { >- if ((p->states[i].control & INTEL_MSR_RANGE) != >- (p->states[i].status & INTEL_MSR_RANGE)) { >- dprintk("Different MSR bits in control >(%llu) and status (%llu)\n", >- p->states[i].control, >p->states[i].status); >- result = -EINVAL; >- goto err_unreg; >- } >- >- if (!p->states[i].core_frequency) { >- dprintk("Zero core frequency for state >%u\n", i); >- result = -EINVAL; >- goto err_unreg; >- } >- >- if (p->states[i].core_frequency > >p->states[0].core_frequency) { >- dprintk("P%u has larger frequency >(%llu) than P0 (%llu), skipping\n", i, >- p->states[i].core_frequency, >p->states[0].core_frequency); >- p->states[i].core_frequency = 0; >- continue; >- } >- } >- >- centrino_model[cpu] = kzalloc(sizeof(struct cpu_model), >GFP_KERNEL); >- if (!centrino_model[cpu]) { >- result = -ENOMEM; >- goto err_unreg; >- } >- >- centrino_model[cpu]->model_name=NULL; >- centrino_model[cpu]->max_freq = >p->states[0].core_frequency * 1000; >- centrino_model[cpu]->op_points = kmalloc(sizeof(struct >cpufreq_frequency_table) * >- (p->state_count + >1), GFP_KERNEL); >- if (!centrino_model[cpu]->op_points) { >- result = -ENOMEM; >- goto err_kfree; >- } >- >- for (i=0; i<p->state_count; i++) { >- centrino_model[cpu]->op_points[i].index = >p->states[i].control & INTEL_MSR_RANGE; >- centrino_model[cpu]->op_points[i].frequency = >p->states[i].core_frequency * 1000; >- dprintk("adding state %i with frequency %u and >control value %04x\n", >- i, >centrino_model[cpu]->op_points[i].frequency, >centrino_model[cpu]->op_points[i].index); >- } >- >centrino_model[cpu]->op_points[p->state_count].frequency = >CPUFREQ_TABLE_END; >- >- cur_freq = get_cur_freq(cpu); >- >- for (i=0; i<p->state_count; i++) { >- if (!p->states[i].core_frequency) { >- dprintk("skipping state %u\n", i); >- >centrino_model[cpu]->op_points[i].frequency = CPUFREQ_ENTRY_INVALID; >- continue; >- } >- >- if >(extract_clock(centrino_model[cpu]->op_points[i].index, cpu, 0) != >- (centrino_model[cpu]->op_points[i].frequency)) { >- dprintk("Invalid encoded frequency (%u >vs. %u)\n", >- >extract_clock(centrino_model[cpu]->op_points[i].index, cpu, 0), >- >centrino_model[cpu]->op_points[i].frequency); >- result = -EINVAL; >- goto err_kfree_all; >- } >- >- if (cur_freq == >centrino_model[cpu]->op_points[i].frequency) >- p->state = i; >- } >- >- /* notify BIOS that we exist */ >- acpi_processor_notify_smm(THIS_MODULE); >- printk("speedstep-centrino with X86_SPEEDSTEP_CENTRINO_ACPI " >- "config is deprecated.\n " >- "Use X86_ACPI_CPUFREQ (acpi-cpufreq) instead.\n" ); >- >- return 0; >- >- err_kfree_all: >- kfree(centrino_model[cpu]->op_points); >- err_kfree: >- kfree(centrino_model[cpu]); >- err_unreg: >- acpi_processor_unregister_performance(p, cpu); >- dprintk(PFX "invalid ACPI data\n"); >- return (result); >-} >-#else >-static inline int centrino_cpu_init_acpi(struct >cpufreq_policy *policy) { return -ENODEV; } >-static inline int centrino_cpu_early_init_acpi(void) { return 0; } >-#endif >- > static int centrino_cpu_init(struct cpufreq_policy *policy) > { > struct cpuinfo_x86 *cpu = &cpu_data[policy->cpu]; >@@ -568,27 +353,25 @@ > if (cpu_has(cpu, X86_FEATURE_CONSTANT_TSC)) > centrino_driver.flags |= CPUFREQ_CONST_LOOPS; > >- if (centrino_cpu_init_acpi(policy)) { >- if (policy->cpu != 0) >- return -ENODEV; >+ if (policy->cpu != 0) >+ return -ENODEV; > >- for (i = 0; i < N_IDS; i++) >- if (centrino_verify_cpu_id(cpu, &cpu_ids[i])) >- break; >- >- if (i != N_IDS) >- centrino_cpu[policy->cpu] = &cpu_ids[i]; >- >- if (!centrino_cpu[policy->cpu]) { >- dprintk("found unsupported CPU with " >- "Enhanced SpeedStep: send /proc/cpuinfo to " >- MAINTAINER "\n"); >- return -ENODEV; >- } >+ for (i = 0; i < N_IDS; i++) >+ if (centrino_verify_cpu_id(cpu, &cpu_ids[i])) >+ break; > >- if (centrino_cpu_init_table(policy)) { >- return -ENODEV; >- } >+ if (i != N_IDS) >+ centrino_cpu[policy->cpu] = &cpu_ids[i]; >+ >+ if (!centrino_cpu[policy->cpu]) { >+ dprintk("found unsupported CPU with " >+ "Enhanced SpeedStep: send /proc/cpuinfo to " >+ MAINTAINER "\n"); >+ return -ENODEV; >+ } >+ >+ if (centrino_cpu_init_table(policy)) { >+ return -ENODEV; > } > > /* Check to see if Enhanced SpeedStep is enabled, and try to >@@ -634,20 +417,6 @@ > > cpufreq_frequency_table_put_attr(cpu); > >-#ifdef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI >- if (!centrino_model[cpu]->model_name) { >- static struct acpi_processor_performance *p; >- >- if (acpi_perf_data[cpu]) { >- p = acpi_perf_data[cpu]; >- dprintk("unregistering and freeing ACPI >data\n"); >- acpi_processor_unregister_performance(p, cpu); >- kfree(centrino_model[cpu]->op_points); >- kfree(centrino_model[cpu]); >- } >- } >-#endif >- > centrino_model[cpu] = NULL; > > return 0; >@@ -841,25 +610,12 @@ > if (!cpu_has(cpu, X86_FEATURE_EST)) > return -ENODEV; > >- centrino_cpu_early_init_acpi(); >- > return cpufreq_register_driver(¢rino_driver); > } > > static void __exit centrino_exit(void) > { >-#ifdef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI >- unsigned int j; >-#endif >- > cpufreq_unregister_driver(¢rino_driver); >- >-#ifdef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI >- for_each_possible_cpu(j) { >- kfree(acpi_perf_data[j]); >- acpi_perf_data[j] = NULL; >- } >-#endif > } > > MODULE_AUTHOR ("Jeremy Fitzhardinge <jeremy@goop.org>"); >--- >linux-2.6.20-mm1/Documentation/feature-removal-schedule. >txt.old 2007-02-17 23:33:09.000000000 +0100 >+++ >linux-2.6.20-mm1/Documentation/feature-removal-schedule.txt >2007-02-17 23:33:46.000000000 +0100 >@@ -214,28 +214,6 @@ > > --------------------------- > >-What: ACPI hooks (X86_SPEEDSTEP_CENTRINO_ACPI) in >speedstep-centrino driver >-When: December 2006 >-Why: Speedstep-centrino driver with ACPI hooks and >acpi-cpufreq driver are >- functionally very much similar. They talk to ACPI in >same way. Only >- difference between them is the way they do frequency >transitions. >- One uses MSRs and the other one uses IO ports. Functionaliy of >- speedstep_centrino with ACPI hooks is now merged into >acpi-cpufreq. >- That means one common driver will support all Intel >Enhanced Speedstep >- capable CPUs. That means less confusion over name of >- speedstep-centrino driver (with that driver supposed to >be used on >- non-centrino platforms). That means less duplication of code and >- less maintenance effort and no possibility of these two drivers >- going out of sync. >- Current users of speedstep_centrino with ACPI hooks are >requested to >- switch over to acpi-cpufreq driver. speedstep-centrino >will continue >- to work using older non-ACPI static table based scheme >even after this >- date. >- >-Who: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> >- >---------------------------- >- > What: /sys/firmware/acpi/namespace > When: 2.6.21 > Why: The ACPI namespace is effectively the symbol list for > - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |