The CPUfreq HW present in some Mediatek chipsets offloads the steps necessary for changing the frequency of CPUs. The driver implements the cpufreq driver interface for this hardware engine. >From v14 to v15, there are three modifications. 1. Move platform data from per-policy to probe 2. Update energy model register to callback function >From v13 to v14, there are three modifications. 1. Replace cpu domain map to policy driver data 2. Remove dummy performance-domain parsing 3. Separate modification in cpufreq.h to another patch >From v12 to v13, there are two modifications. 1. Move related_cpus function to common place, so all performance-domain cpufreq driver can refer. 2. Make cpu resource init to each policy rather than per-cpu >From v11 to v12, there are two modifications. 1. Based on patchset[1], align binding with scmi for performance domain(latest version). 2. Shrink binding example wording. >From v8 to v9, there are three more modifications. 1. Based on patchset[2], align binding with scmi for performance domain. 2. Add the CPUFREQ fast switch function support and define DVFS latency. 3. Based on patchser[3], add energy model API parameter for mW. >From v7 to v8, there are three more patches based on patchset v8[4]. This patchset is about to register power table to Energy model for EAS and thermal usage. 1. EM CPU power table - Register energy model table for EAS and thermal cooling device usage. - Read the coresponding LUT for power table. 2. SVS initialization - The SVS(Smart Voltage Scaling) engine is a hardware which is used to calculate optimized voltage values for CPU power domain. DVFS driver could apply those optimized voltage values to reduce power consumption. - Driver will polling if HW engine is done for SVS initialization. After that, driver will read power table and register it to EAS. - CPUs must be in power on state when doing SVS. Use pm_qos to block cpu-idle state for SVS initializing. 3. Cooling device flag - Add cooling device flag for thermal [1] https://lore.kernel.org/linux-devicetree/20210517155458.1016707-1-sudeep.holla@xxxxxxx/ [2] https://lore.kernel.org/lkml/20201116181356.804590-1-sudeep.holla@xxxxxxx/ [3] https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git/commit/?h=linux-next&id=c250d50fe2ce627ca9805d9c8ac11cbbf922a4a6 [4] https://lkml.org/lkml/2020/9/23/384 Hector.Yuan (3): dt-bindings: cpufreq: add bindings for MediaTek cpufreq HW cpufreq: Add of_perf_domain_get_sharing_cpumask cpufreq: mediatek-hw: Add support for CPUFREQ HW .../bindings/cpufreq/cpufreq-mediatek-hw.yaml | 70 ++++ drivers/cpufreq/Kconfig.arm | 12 + drivers/cpufreq/Makefile | 1 + drivers/cpufreq/mediatek-cpufreq-hw.c | 340 ++++++++++++++++++ include/linux/cpufreq.h | 46 ++- 5 files changed, 468 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/cpufreq/cpufreq-mediatek-hw.yaml create mode 100644 drivers/cpufreq/mediatek-cpufreq-hw.c