cpu frequency scaling autoloading
Andy Whitcroft
apw at canonical.com
Wed Jul 25 10:37:07 UTC 2012
TLDR: It was recently commented that we have a policy to building cpufreq
drivers because they are not autoloadable, but that there had been some
fixes made to fix this. As part of that we took an action to investigate.
This upstream work is not yet complete but it does appear we can pull
out a fair number of these drivers to modules and let them autoload.
In v3.4-rc1 the commit below added support for loading cpufreq drivers
via either CPU features or PCI ids:
commit fa8031aefec0cf7ea6c2387c93610d99d9659aa2
Author: Andi Kleen <ak at linux.intel.com>
Date: Thu Jan 26 00:09:12 2012 +0100
cpufreq: Add support for x86 cpuinfo auto loading v4
And the following commit added autoloading for acpi-cpufreq:
commit 9061e0e16700ef228837e96987ff51794c956197
Author: Andi Kleen <ak at linux.intel.com>
Date: Thu Jan 26 00:09:08 2012 +0100
ACPI: Load acpi-cpufreq from processor driver automatically
On the face of it this would let us pull all of these drivers to modules.
However, looking at these commits they do not as yet allow autoloading
of the three speedstep-drivers. The comments in the Makefile also infer
that there are a couple of further constraints to be considered:
# Link order matters. K8 is preferred to ACPI because of firmware bugs
in early
# K8 systems. ACPI is preferred to all other hardware-specific drivers.
# speedstep-* is preferred over p4-clockmod.
>From this I believe we would need to continue to build in powernow-k8 in
order to ensure it loads before acpi-cpufreq. Plus we have to build in the
speedstep-* drivers due to the lack of enabled autoload there. Finally
we we should build in acpi-cpufreq to maintain the described orderings.
The remainder may return to modules. Later should the speedstep-* drivers
be sorted out we could pull everything but the powernow-k8 drivers out.
In short currently we can move the following =m:
CONFIG_X86_POWERNOW_K6
CONFIG_X86_POWERNOW_K7
CONFIG_X86_LONGHAUL
CONFIG_X86_LONGRUN
CONFIG_X86_GX_SUSPMOD
CONFIG_X86_CPUFREQ_NFORCE2
I have pushed patches to move the above to modules to quantal. It would
be good to get some testing on these especially if you have any of the
specific hardware.
Full background data below.
-apw
obj-$(CONFIG_X86_POWERNOW_K8) += powernow-k8.o mperf.o
drivers/cpufreq/powernow-k8.c:MODULE_DEVICE_TABLE(x86cpu, powernow_k8_ids);
debian.master/config/config.common.ubuntu:CONFIG_X86_POWERNOW_K8=y
obj-$(CONFIG_X86_ACPI_CPUFREQ) += acpi-cpufreq.o mperf.o
autoloads on acpi table identifying specific control element
debian.master/config/config.common.ubuntu:CONFIG_X86_ACPI_CPUFREQ=y
obj-$(CONFIG_X86_PCC_CPUFREQ) += pcc-cpufreq.o
XXX NOT AUTOLOADABLE
debian.master/config/config.common.ubuntu:CONFIG_X86_PCC_CPUFREQ=m
obj-$(CONFIG_X86_POWERNOW_K6) += powernow-k6.o
drivers/cpufreq/powernow-k6.c:MODULE_DEVICE_TABLE(x86cpu, powernow_k6_ids);
debian.master/config/config.common.ubuntu:CONFIG_X86_POWERNOW_K6=y
obj-$(CONFIG_X86_POWERNOW_K7) += powernow-k7.o
drivers/cpufreq/powernow-k7.c:MODULE_DEVICE_TABLE(x86cpu, powernow_k7_cpuids);
debian.master/config/config.common.ubuntu:CONFIG_X86_POWERNOW_K7=y
obj-$(CONFIG_X86_LONGHAUL) += longhaul.o
drivers/cpufreq/longhaul.c:MODULE_DEVICE_TABLE(x86cpu, longhaul_id);
debian.master/config/config.common.ubuntu:CONFIG_X86_LONGHAUL=y
obj-$(CONFIG_X86_E_POWERSAVER) += e_powersaver.o
drivers/cpufreq/e_powersaver.c:MODULE_DEVICE_TABLE(x86cpu, eps_cpu_id);
debian.master/config/config.common.ubuntu:# CONFIG_X86_E_POWERSAVER is not set
obj-$(CONFIG_ELAN_CPUFREQ) += elanfreq.o
drivers/cpufreq/elanfreq.c:MODULE_DEVICE_TABLE(x86cpu, elan_id);
NO CONFIG MENTION -- not enableable
obj-$(CONFIG_SC520_CPUFREQ) += sc520_freq.o
drivers/cpufreq/sc520_freq.c:MODULE_DEVICE_TABLE(x86cpu, sc520_ids);
NO CONFIG MENTION -- not enableable
obj-$(CONFIG_X86_LONGRUN) += longrun.o
drivers/cpufreq/longrun.c:MODULE_DEVICE_TABLE(x86cpu, longrun_ids);
debian.master/config/config.common.ubuntu:CONFIG_X86_LONGRUN=y
obj-$(CONFIG_X86_GX_SUSPMOD) += gx-suspmod.o
drivers/cpufreq/gx-suspmod.c:MODULE_DEVICE_TABLE(pci, gx_chipset_tbl);
debian.master/config/config.common.ubuntu:CONFIG_X86_GX_SUSPMOD=y
obj-$(CONFIG_X86_SPEEDSTEP_ICH) += speedstep-ich.o
drivers/cpufreq/speedstep-ich.c:MODULE_DEVICE_TABLE(x86cpu, ss_smi_ids); /* XXX DISABLED */
debian.master/config/config.common.ubuntu:CONFIG_X86_SPEEDSTEP_ICH=y
obj-$(CONFIG_X86_SPEEDSTEP_SMI) += speedstep-smi.o
drivers/cpufreq/speedstep-smi.c:MODULE_DEVICE_TABLE(x86cpu, ss_smi_ids); /* XXX DISABLED */
debian.master/config/config.common.ubuntu:CONFIG_X86_SPEEDSTEP_SMI=y
obj-$(CONFIG_X86_SPEEDSTEP_CENTRINO) += speedstep-centrino.o
drivers/cpufreq/speedstep-centrino.c:MODULE_DEVICE_TABLE(x86cpu, centrino_ids); /* XXX DISABLED */
debian.master/config/config.common.ubuntu:CONFIG_X86_SPEEDSTEP_CENTRINO=y
obj-$(CONFIG_X86_P4_CLOCKMOD) += p4-clockmod.o
drivers/cpufreq/p4-clockmod.c: * Intentionally no MODULE_DEVICE_TABLE here: this driver should not
debian.master/config/config.common.ubuntu:CONFIG_X86_P4_CLOCKMOD=m
obj-$(CONFIG_X86_CPUFREQ_NFORCE2) += cpufreq-nforce2.o
drivers/cpufreq/cpufreq-nforce2.c:MODULE_DEVICE_TABLE(pci, nforce2_ids);
debian.master/config/config.common.ubuntu:CONFIG_X86_CPUFREQ_NFORCE2=y
More information about the kernel-team
mailing list