Re: [PATCH RFC 1/2] thermal/cpu idle cooling: Introduce cpu idle cooling driver
From: Vincent Guittot <vincent.guittot@linaro.org>
Date: 2017-06-08 13:42:58
Also in:
lkml
On 8 June 2017 at 14:59, Jean Wangtao [off-list ref] wrote:
Hi Vincent, 2017年6月8日 下午3:19,"Vincent Guittot" [off-list ref]写道: Hi Kevin, On 5 June 2017 at 11:07, Tao Wang [off-list ref] wrote:quoted
cpu idle cooling driver performs synchronized idle injection across all cpu in same cluster, offers a new method to cooling down cpu, that is similar to intel_power_clamp driver, but is basically designed for ARM platform. Each cluster has its own idle cooling device, each core has its own idle injection thread, idle injection thread use play_idle to enter idle. In order to reach deepest idle state, all cores are aligned by jiffies. the injected idle ratio can be controlled through cooling device interface. Signed-off-by: Tao Wang <redacted> --- drivers/thermal/Kconfig | 13 + drivers/thermal/Makefile | 3 + drivers/thermal/cpu_idle_cooling.c | 648 ++++++++++++++++++++++++++++++++++++ 3 files changed, 664 insertions(+) create mode 100644 drivers/thermal/cpu_idle_cooling.cdiff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig index b5b5fac..f78e85c 100644 --- a/drivers/thermal/Kconfig +++ b/drivers/thermal/Kconfig@@ -154,6 +154,19 @@ config CPU_THERMAL If you want this support, you should say Y here. +config CPU_IDLE_THERMAL + tristate "generic cpu idle cooling support" + depends on CPU_FREQDoes CPU_IDLE_THERMAL really depend on CPU_FREQ ? because I use a interface of cpufreq to get cpu idle time and current wall time, that cause the dependency
IMO, you should better use directly get_cpu_idle_time_us and remove your dependency with cpufreq Furthermore, get_cpu_idle_time from cpufreq may consider iowait as busy time which could make sense for cpufreq but not really for idle injection
This dependency should be put for CPU_THERMAL_COMBO in the patch 2 CPU_THERMAL_COMBO depend on CPU_THERMAL and CPU_IDLE_THERMAL, but the code of patch 2 have no direct relationship with cpufreq, so I didn't add the dependency
yes you're right, CPU_THERMAL_COMBO depends already on CPUFREQ
quoted
+ help + This implements the generic cpu cooling mechanism through idle + injection. + + This will throttle cpu by injecting specified idle time in + a fixed cycle. All cpu in same cluster will enter idle synchronously + to reach deepest idle state when injecting idle. + + If you want this support, you should say Y here. + config CLOCK_THERMAL bool "Generic clock cooling support" depends on COMMON_CLKdiff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile index 094d703..a4db66e 100644 --- a/drivers/thermal/Makefile +++ b/drivers/thermal/Makefile@@ -26,6 +26,9 @@ thermal_sys-$(CONFIG_CLOCK_THERMAL) += clock_cooling.o # devfreq cooling thermal_sys-$(CONFIG_DEVFREQ_THERMAL) += devfreq_cooling.o +# cpu idle cooling +obj-$(CONFIG_CPU_IDLE_THERMAL) += cpu_idle_cooling.o + # platform thermal drivers obj-y += broadcom/ obj-$(CONFIG_QCOM_SPMI_TEMP_ALARM) += qcom-spmi-temp-alarm.odiff --git a/drivers/thermal/cpu_idle_cooling.cb/drivers/thermal/cpu_idle_cooling.c new file mode 100644 index 0000000..89a15c5--- /dev/null[snip]