CPPC (Collaborative Processor Performance Control) offers optional registers which can be used to tune the system based on energy and/or performance requirements. Newer AMD processors (>= Family 17h) add support for a subset of these optional CPPC registers, based on ACPI v6.1. The following are the supported CPPC registers for which sysfs entries are created: * enable (NEW) * max_perf (NEW) * min_perf (NEW) * energy_perf * lowest_perf * nominal_perf * desired_perf (NEW) * feedback_ctrs * auto_sel_enable (NEW) * lowest_nonlinear_perf First, update cppc_acpi to create sysfs entries only when the optional registers are known to be supported. Next, a new CPUFreq driver is introduced to enable the OSPM and the userspace to access the newly supported registers through sysfs entries found in /sys/devices/system/cpu/cpu<num>/amd_cpufreq/. This new CPUFreq driver can only be used by providing a module parameter, amd_cpufreq.cppc_enable=1. The purpose of exposing the registers via the amd-cpufreq sysfs entries is to allow the userspace to: * Tweak the values to fit its workload. * Apply a profile from AMD's optimization guides. Profiles will be documented in the performance/optimization guides. Note: * AMD systems will not have a policy applied in the kernel at this time. TODO: * Create a linux userspace tool that will help users generate a CPPC profile for their target workload. * Create a general CPPC policy in the kernel. v1->v2: * Add macro to ensure BUFFER only registers have BUFFER type. * Add support macro to make the right check based on register type. * Remove support checks for registers which are mandatory. v2->v3: * Introduce new amd-cpufreq driver which will have priority over acpi-cpufreq. * Move new sysfs entries creation to amd-cpufreq. Janakarajan Natarajan (3): acpi/cppc: Add macros for CPPC register checks acpi/cppc: Ensure only supported CPPC sysfs entries are created drivers/cpufreq: Add a CPUFreq driver for AMD processors (Fam17h and later) Yazen Ghannam (3): acpi/cppc: Rework cppc_set_perf() to use cppc_regs index acpi/cppc: Add support for optional CPPC registers acpi/cppc: Add support for CPPC Enable register drivers/acpi/cppc_acpi.c | 244 ++++++++++++++++++++++++++++----- drivers/cpufreq/Kconfig.x86 | 14 ++ drivers/cpufreq/Makefile | 4 +- drivers/cpufreq/amd-cpufreq.c | 233 +++++++++++++++++++++++++++++++ drivers/cpufreq/cppc_cpufreq.c | 6 +- include/acpi/cppc_acpi.h | 11 +- 6 files changed, 474 insertions(+), 38 deletions(-) create mode 100644 drivers/cpufreq/amd-cpufreq.c -- 2.17.1