[PATCHv3 0/6] CPPC optional registers AMD support

From: Natarajan, Janakarajan
Date: Wed Jul 10 2019 - 14:37:18 EST


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