On Wednesday, August 05, 2015 09:40:23 AM Ashwin Chaugule wrote: > CPPC: > ==== > > CPPC (Collaborative Processor Performance Control) is a new way to control CPU > performance using an abstract continous scale as against a discretized P-state scale > which is tied to CPU frequency only. It is defined in the ACPI 5.0+ spec. In brief, > the basic operation involves: > - OS makes a CPU performance request. (Can provide min and max tolerable bounds) > > - Platform (such as BMC) is free to optimize request within requested bounds depending > on power/thermal budgets etc. > > - Platform conveys its decision back to OS > > The communication between OS and platform occurs through another medium called (PCC) > Platform communication Channel. This is a generic mailbox like mechanism which includes > doorbell semantics to indicate register updates. See drivers/mailbox/pcc.c > > This patchset introduces a CPPC based CPUFreq driver that works with existing governors > such as ondemand. The CPPC table parsing and the CPPC communication semantics are > abstracted into separate files to allow future CPPC based drivers to implement their > own governors if required. > > Initial patchsets included an adaptation of the PID governor from intel_pstate.c. However > recent experiments led to extensive modifications of the algorithm to calculate CPU > busyness. Until it is verified that these changes are worthwhile, the existing governors > should provide for a good enough starting point for ARM64 servers. > > Finer details about the PCC and CPPC spec are available in the latest ACPI 5.1 > specification.[2] > > Testing: > ======= > > This was tested on an SBSA compatible ARMv8 server with CPPCv2 > firmware running on a remote processor. I verified that each CPUs > performance limits were detected and that new performance requests > were made by the on-demand governor proportional to the load on each > CPU. I also verified that using the acpi_processor driver correctly > maps the physical CPU ids to logical CPU ids, which helps in picking > up the proper _CPC details from a processor object, in the case where > CPU physical ids may not be contiguous. > > Changes since V7: > - Simplied new kconfig options for PSS and idle. > - Separated patch to enable acpi processor on ARM64. > - Removed redundant kconfig cross deps on PCC. > - Decoupled processor_perflib from new PSS kconfig option. > > Changes since V6: > - Separated PSS and CST from ACPI processor driver in two patches. > - Made new Kconfig symbols auto selectable from Arch Kconfigs. > > Changes since V5: > - Checkpatch cleanups. > - Change pss_init to pss_perf_init. Rec by Srinivas Pandruvada. > - Explicit comment explaining why postcore_initcall to pcc mailbox. > - Fold acpi_processor_syscore_init/exit into CONFIG_ACPI_CST. > - Added patch with dummy functions used by ACPI_HOTPLUG_CPU. > > Changes since V4: > - Misc cleanups. Addressed feedback from Rafael. > - Made acpi_processor.c independent of C-states, P-states and others. > - Per CPU scanning for _CPC is now made from acpi_processor.c > - Added new Kconfig options for legacy C states and P states to enable future > support for newer alternatives as defined in the ACPI spec 6.0. > > Changes since V3: > - Split CPPC backend methods into separate files. > - Add frontend driver which plugs into existing CPUfreq governors. > - Simplify PCC driver by moving communication space mapping and read/write > into client drivers. > > Changes since V2: > - Select driver if !X86, since intel_pstate will use HWP extensions instead. > - Added more comments. > - Added Freq domain awareness and PSD parsing. > > Changes since V1: > - Create a new driver based on Dirks suggestion. > - Fold in CPPC backend hooks into main driver. > > Changes since V0: [1] > - Split intel_pstate.c into a generic PID governor and platform specific backend. > - Add CPPC accessors as PID backend. > > [1] - http://lwn.net/Articles/608715/ > [2] - http://www.uefi.org/sites/default/files/resources/ACPI_5_1release.pdf > [3] - https://patches.linaro.org/40705/ > > > Ashwin Chaugule (9): > PCC: Initialize PCC Mailbox earlier at boot > ACPI: Split out ACPI PSS from ACPI Processor driver > ACPI: Decouple ACPI idle and ACPI processor drivers > ACPI: Introduce CPU performance controls using CPPC > CPPC: Add a CPUFreq driver for use with CPPC > ACPI: Add weak routines for ACPI CPU Hotplug > CPPC: Probe for CPPC tables for each ACPI Processor object > PCC: Disable compilation by default > ACPI: Allow selection of the ACPI processor driver for ARM64 I've queued up [1-3/9] for 4.3, but I still have a couple of questions/comments regarding [4/9] and the rest of the series (I'll respond to the patch messages with those). Thanks! -- I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center. -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html