* thermal: mediatek: Add cpu power cooling model
@ 2015-09-04 9:01 Dawei Chien
2015-09-04 9:01 ` [PATCH 1/2] " Dawei Chien
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Dawei Chien @ 2015-09-04 9:01 UTC (permalink / raw)
To: linux-arm-kernel
Use Intelligent Power Allocation (IPA) technical to add
static/dynamic power model for binding CPU thermal zone.
The power allocator governor allocates power budget to control
CPU temperature.
Dawei.Chien (2):
thermal: mediatek: Add cpu power cooling model.
arm64: dts: mt8173: Add thermal zone node for mt8173.
arch/arm64/boot/dts/mediatek/mt8173.dtsi | 44 ++++++++++++++
drivers/cpufreq/mt8173-cpufreq.c | 97 ++++++++++++++++++++++++++----
2 files changed, 130 insertions(+), 11 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] thermal: mediatek: Add cpu power cooling model
2015-09-04 9:01 thermal: mediatek: Add cpu power cooling model Dawei Chien
@ 2015-09-04 9:01 ` Dawei Chien
2015-09-04 9:01 ` [PATCH 2/2] arm64: dts: mt8173: Add thermal zone node for mt8173 Dawei Chien
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Dawei Chien @ 2015-09-04 9:01 UTC (permalink / raw)
To: linux-arm-kernel
Use Intelligent Power Allocation (IPA) technical to add
static/dynamic power model for binding CPU thermal zone.
The power allocator governor allocates power budget to control
CPU temperature.
Signed-off-by: Dawei Chien <dawei.chien@mediatek.com>
---
This patch is base on
https://patchwork.kernel.org/patch/7034601/
---
drivers/cpufreq/mt8173-cpufreq.c | 97 +++++++++++++++++++++++++++++++++-----
1 file changed, 86 insertions(+), 11 deletions(-)
diff --git a/drivers/cpufreq/mt8173-cpufreq.c b/drivers/cpufreq/mt8173-cpufreq.c
index 49caed2..9233ec5 100644
--- a/drivers/cpufreq/mt8173-cpufreq.c
+++ b/drivers/cpufreq/mt8173-cpufreq.c
@@ -28,7 +28,8 @@
#define MAX_VOLT_SHIFT (200000)
#define MAX_VOLT_LIMIT (1150000)
#define VOLT_TOL (10000)
-
+#define CAPACITANCE_CA53 (263)
+#define CAPACITANCE_CA57 (530)
/*
* The struct mtk_cpu_dvfs_info holds necessary information for doing CPU DVFS
* on each CPU power/clock domain of Mediatek SoCs. Each CPU cluster in
@@ -51,6 +52,72 @@ struct mtk_cpu_dvfs_info {
bool need_voltage_tracking;
};
+struct mtk_cpu_static_power {
+ unsigned long voltage;
+ unsigned int power;
+};
+
+/* measured by WA program. */
+static const struct mtk_cpu_static_power mtk_ca53_static_power[] = {
+ {859000, 43},
+ {908000, 52},
+ {983000, 86},
+ {1009000, 123},
+ {1028000, 138},
+ {1083000, 172},
+ {1109000, 180},
+ {1125000, 192},
+};
+
+/* measured by WA program. */
+static const struct mtk_cpu_static_power mtk_ca57_static_power[] = {
+ {828000, 72},
+ {867000, 90},
+ {927000, 156},
+ {968000, 181},
+ {1007000, 298},
+ {1049000, 435},
+ {1089000, 533},
+ {1125000, 533},
+};
+
+unsigned int mtk_cpufreq_lookup_power(const struct mtk_cpu_static_power *table,
+ unsigned int count, unsigned long voltage)
+{
+ int i;
+
+ for (i = 0; i < count; i++) {
+ if (voltage <= table[i].voltage)
+ return table[i].power;
+ }
+
+ return table[count - 1].power;
+}
+
+int mtk_cpufreq_get_static(cpumask_t *cpumask, int interval,
+ unsigned long voltage, u32 *power)
+{
+ int nr_cpus = cpumask_weight(cpumask);
+
+ *power = 0;
+
+ if (nr_cpus) {
+
+ if (cpumask_test_cpu(0, cpumask))
+ *power += mtk_cpufreq_lookup_power(
+ mtk_ca53_static_power,
+ ARRAY_SIZE(mtk_ca53_static_power),
+ voltage);
+
+ if (cpumask_test_cpu(2, cpumask))
+ *power += mtk_cpufreq_lookup_power(
+ mtk_ca57_static_power,
+ ARRAY_SIZE(mtk_ca57_static_power),
+ voltage);
+ }
+ return 0;
+}
+
static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
int new_vproc)
{
@@ -272,15 +339,21 @@ static void mtk_cpufreq_ready(struct cpufreq_policy *policy)
return;
if (of_find_property(np, "#cooling-cells", NULL)) {
- info->cdev = of_cpufreq_cooling_register(np,
- policy->related_cpus);
-
- if (IS_ERR(info->cdev)) {
- dev_err(info->cpu_dev,
- "running cpufreq without cooling device: %ld\n",
- PTR_ERR(info->cdev));
-
- info->cdev = NULL;
+ u32 capacitance = cpumask_test_cpu(0, policy->related_cpus) ?
+ CAPACITANCE_CA53 : CAPACITANCE_CA57;
+
+ if (!info->cdev) {
+ info->cdev = of_cpufreq_power_cooling_register(np,
+ policy->related_cpus,
+ capacitance,
+ mtk_cpufreq_get_static);
+
+ if (IS_ERR(info->cdev)) {
+ dev_err(info->cpu_dev,
+ "running cpufreq without cooling device: %ld\n",
+ PTR_ERR(info->cdev));
+ info->cdev = NULL;
+ }
}
}
@@ -460,7 +533,9 @@ static int mtk_cpufreq_exit(struct cpufreq_policy *policy)
{
struct mtk_cpu_dvfs_info *info = policy->driver_data;
- cpufreq_cooling_unregister(info->cdev);
+ if (info->cdev)
+ cpufreq_cooling_unregister(info->cdev);
+
dev_pm_opp_free_cpufreq_table(info->cpu_dev, &policy->freq_table);
mtk_cpu_dvfs_info_release(info);
kfree(info);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2] arm64: dts: mt8173: Add thermal zone node for mt8173.
2015-09-04 9:01 thermal: mediatek: Add cpu power cooling model Dawei Chien
2015-09-04 9:01 ` [PATCH 1/2] " Dawei Chien
@ 2015-09-04 9:01 ` Dawei Chien
2015-09-07 4:00 ` Daniel Kurtz
2015-09-04 10:00 ` thermal: mediatek: Add cpu power cooling model dawei chien
2015-09-07 6:09 ` Viresh Kumar
3 siblings, 1 reply; 9+ messages in thread
From: Dawei Chien @ 2015-09-04 9:01 UTC (permalink / raw)
To: linux-arm-kernel
Add thermal zone node to mt8173.dtsi.
Signed-off-by: Dawei Chien <dawei.chien@mediatek.com>
---
This patch is base on following patches
https://patchwork.kernel.org/patch/6969581/
https://patchwork.kernel.org/patch/6969571/
https://patchwork.kernel.org/patch/6969381/
---
arch/arm64/boot/dts/mediatek/mt8173.dtsi | 44 ++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
index 208051a..6493bfd 100644
--- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
@@ -17,6 +17,7 @@
#include <dt-bindings/power/mt8173-power.h>
#include <dt-bindings/reset-controller/mt8173-resets.h>
#include "mt8173-pinfunc.h"
+#include <dt-bindings/thermal/thermal.h>
/ {
compatible = "mediatek,mt8173";
@@ -116,6 +117,49 @@
clock-output-names = "clk32k";
};
+ thermal-zones {
+ cpu_thermal: cpu_thermal {
+ polling-delay-passive = <1000>; /* milliseconds */
+ polling-delay = <1000>; /* milliseconds */
+
+ thermal-sensors = <&thermal MT8173_THERMAL_ZONE_CA57>;
+ sustainable-power = <1500>;
+
+ trips {
+ threshold: trip-point at 0 {
+ temperature = <68000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ target: trip-point at 1 {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cpu_crit: cpu_crit at 0 {
+ temperature = <115000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map at 0 {
+ trip = <&target>;
+ cooling-device = <&cpu0 0 0>;
+ contribution = <1024>;
+ };
+ map at 1 {
+ trip = <&target>;
+ cooling-device = <&cpu2 0 0>;
+ contribution = <2048>;
+ };
+ };
+ };
+ };
+
timer {
compatible = "arm,armv8-timer";
interrupt-parent = <&gic>;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* thermal: mediatek: Add cpu power cooling model
2015-09-04 9:01 thermal: mediatek: Add cpu power cooling model Dawei Chien
2015-09-04 9:01 ` [PATCH 1/2] " Dawei Chien
2015-09-04 9:01 ` [PATCH 2/2] arm64: dts: mt8173: Add thermal zone node for mt8173 Dawei Chien
@ 2015-09-04 10:00 ` dawei chien
2015-09-07 6:09 ` Viresh Kumar
3 siblings, 0 replies; 9+ messages in thread
From: dawei chien @ 2015-09-04 10:00 UTC (permalink / raw)
To: linux-arm-kernel
Sorry, forgot to add Rafael and Viresh as reviewer.
On Fri, 2015-09-04 at 17:01 +0800, Dawei Chien wrote:
> Use Intelligent Power Allocation (IPA) technical to add
> static/dynamic power model for binding CPU thermal zone.
> The power allocator governor allocates power budget to control
> CPU temperature.
>
> Dawei.Chien (2):
> thermal: mediatek: Add cpu power cooling model.
> arm64: dts: mt8173: Add thermal zone node for mt8173.
>
> arch/arm64/boot/dts/mediatek/mt8173.dtsi | 44 ++++++++++++++
> drivers/cpufreq/mt8173-cpufreq.c | 97 ++++++++++++++++++++++++++----
> 2 files changed, 130 insertions(+), 11 deletions(-)
>
> --
> 1.7.9.5
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/2] arm64: dts: mt8173: Add thermal zone node for mt8173.
2015-09-04 9:01 ` [PATCH 2/2] arm64: dts: mt8173: Add thermal zone node for mt8173 Dawei Chien
@ 2015-09-07 4:00 ` Daniel Kurtz
2015-09-07 4:05 ` Daniel Kurtz
0 siblings, 1 reply; 9+ messages in thread
From: Daniel Kurtz @ 2015-09-07 4:00 UTC (permalink / raw)
To: linux-arm-kernel
Hi Dawei,
On Fri, Sep 4, 2015 at 5:01 PM, Dawei Chien <dawei.chien@mediatek.com> wrote:
> Add thermal zone node to mt8173.dtsi.
>
> Signed-off-by: Dawei Chien <dawei.chien@mediatek.com>
> ---
> This patch is base on following patches
> https://patchwork.kernel.org/patch/6969581/
> https://patchwork.kernel.org/patch/6969571/
> https://patchwork.kernel.org/patch/6969381/
> ---
> arch/arm64/boot/dts/mediatek/mt8173.dtsi | 44 ++++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
> index 208051a..6493bfd 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
> @@ -17,6 +17,7 @@
> #include <dt-bindings/power/mt8173-power.h>
> #include <dt-bindings/reset-controller/mt8173-resets.h>
> #include "mt8173-pinfunc.h"
> +#include <dt-bindings/thermal/thermal.h>
This include is not necessary, however...
>
> / {
> compatible = "mediatek,mt8173";
> @@ -116,6 +117,49 @@
> clock-output-names = "clk32k";
> };
>
> + thermal-zones {
> + cpu_thermal: cpu_thermal {
> + polling-delay-passive = <1000>; /* milliseconds */
> + polling-delay = <1000>; /* milliseconds */
> +
> + thermal-sensors = <&thermal MT8173_THERMAL_ZONE_CA57>;
this fails to compile, because MT8173_THERMAL_ZONE_CA57 is defined in:
include/dt-bindings/thermal/mt8173.h
-Dan
> + sustainable-power = <1500>;
> +
> + trips {
> + threshold: trip-point at 0 {
> + temperature = <68000>;
> + hysteresis = <2000>;
> + type = "passive";
> + };
> +
> + target: trip-point at 1 {
> + temperature = <85000>;
> + hysteresis = <2000>;
> + type = "passive";
> + };
> +
> + cpu_crit: cpu_crit at 0 {
> + temperature = <115000>;
> + hysteresis = <2000>;
> + type = "critical";
> + };
> + };
> +
> + cooling-maps {
> + map at 0 {
> + trip = <&target>;
> + cooling-device = <&cpu0 0 0>;
> + contribution = <1024>;
> + };
> + map at 1 {
> + trip = <&target>;
> + cooling-device = <&cpu2 0 0>;
> + contribution = <2048>;
> + };
> + };
> + };
> + };
> +
> timer {
> compatible = "arm,armv8-timer";
> interrupt-parent = <&gic>;
> --
> 1.7.9.5
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/2] arm64: dts: mt8173: Add thermal zone node for mt8173.
2015-09-07 4:00 ` Daniel Kurtz
@ 2015-09-07 4:05 ` Daniel Kurtz
2015-09-08 15:50 ` dawei chien
0 siblings, 1 reply; 9+ messages in thread
From: Daniel Kurtz @ 2015-09-07 4:05 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Sep 7, 2015 at 12:00 PM, Daniel Kurtz <djkurtz@chromium.org> wrote:
> Hi Dawei,
>
> On Fri, Sep 4, 2015 at 5:01 PM, Dawei Chien <dawei.chien@mediatek.com> wrote:
>> Add thermal zone node to mt8173.dtsi.
>>
>> Signed-off-by: Dawei Chien <dawei.chien@mediatek.com>
>> ---
>> This patch is base on following patches
>> https://patchwork.kernel.org/patch/6969581/
>> https://patchwork.kernel.org/patch/6969571/
>> https://patchwork.kernel.org/patch/6969381/
>> ---
>> arch/arm64/boot/dts/mediatek/mt8173.dtsi | 44 ++++++++++++++++++++++++++++++
>> 1 file changed, 44 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
>> index 208051a..6493bfd 100644
>> --- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
>> +++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
>> @@ -17,6 +17,7 @@
>> #include <dt-bindings/power/mt8173-power.h>
>> #include <dt-bindings/reset-controller/mt8173-resets.h>
>> #include "mt8173-pinfunc.h"
>> +#include <dt-bindings/thermal/thermal.h>
Also, as a nit, (#include <dt-bindings/thermal/mt8173.h>) should be
above '#include "mt8173-pinfunc.h"'
-djk
^ permalink raw reply [flat|nested] 9+ messages in thread
* thermal: mediatek: Add cpu power cooling model
2015-09-04 9:01 thermal: mediatek: Add cpu power cooling model Dawei Chien
` (2 preceding siblings ...)
2015-09-04 10:00 ` thermal: mediatek: Add cpu power cooling model dawei chien
@ 2015-09-07 6:09 ` Viresh Kumar
2015-09-08 15:46 ` dawei chien
3 siblings, 1 reply; 9+ messages in thread
From: Viresh Kumar @ 2015-09-07 6:09 UTC (permalink / raw)
To: linux-arm-kernel
On 04-09-15, 17:01, Dawei Chien wrote:
> Use Intelligent Power Allocation (IPA) technical to add
> static/dynamic power model for binding CPU thermal zone.
> The power allocator governor allocates power budget to control
> CPU temperature.
Sorry but this isn't enough really.. I don't have time to go through
the code and understand the purpose of the series.
Please explain here in detail:
- Why this is needed.
- What/How you are doing it.
(Don't resend, just reply to this email :) )
--
viresh
^ permalink raw reply [flat|nested] 9+ messages in thread
* thermal: mediatek: Add cpu power cooling model
2015-09-07 6:09 ` Viresh Kumar
@ 2015-09-08 15:46 ` dawei chien
0 siblings, 0 replies; 9+ messages in thread
From: dawei chien @ 2015-09-08 15:46 UTC (permalink / raw)
To: linux-arm-kernel
Hi Viresh,
On Mon, 2015-09-07 at 11:39 +0530, Viresh Kumar wrote:
> On 04-09-15, 17:01, Dawei Chien wrote:
> > Use Intelligent Power Allocation (IPA) technical to add
> > static/dynamic power model for binding CPU thermal zone.
> > The power allocator governor allocates power budget to control
> > CPU temperature.
>
> Sorry but this isn't enough really.. I don't have time to go through
> the code and understand the purpose of the series.
>
> Please explain here in detail:
> - Why this is needed.
Power Allocator governor is able to keep SOC temperature within a
defined temperature range to avoid SOC overheat and keep it's
performance. mt8173-cpufreq.c need to register its' own power model with
power allocator thermal governor, so that power allocator governor can
allocates suitable power budget to control CPU temperature.
> - What/How you are doing it.
Measure and create dynamic/static power model, and register cooling
device of_cpufreq_power_cooling_register for MT8173.
>
> (Don't resend, just reply to this email :) )
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/2] arm64: dts: mt8173: Add thermal zone node for mt8173.
2015-09-07 4:05 ` Daniel Kurtz
@ 2015-09-08 15:50 ` dawei chien
0 siblings, 0 replies; 9+ messages in thread
From: dawei chien @ 2015-09-08 15:50 UTC (permalink / raw)
To: linux-arm-kernel
Hi Daniel,
On Mon, 2015-09-07 at 12:05 +0800, Daniel Kurtz wrote:
> On Mon, Sep 7, 2015 at 12:00 PM, Daniel Kurtz <djkurtz@chromium.org> wrote:
> > Hi Dawei,
> >
> > On Fri, Sep 4, 2015 at 5:01 PM, Dawei Chien <dawei.chien@mediatek.com> wrote:
> >> Add thermal zone node to mt8173.dtsi.
> >>
> >> Signed-off-by: Dawei Chien <dawei.chien@mediatek.com>
> >> ---
> >> This patch is base on following patches
> >> https://patchwork.kernel.org/patch/6969581/
> >> https://patchwork.kernel.org/patch/6969571/
> >> https://patchwork.kernel.org/patch/6969381/
> >> ---
> >> arch/arm64/boot/dts/mediatek/mt8173.dtsi | 44 ++++++++++++++++++++++++++++++
> >> 1 file changed, 44 insertions(+)
> >>
> >> diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
> >> index 208051a..6493bfd 100644
> >> --- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
> >> +++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
> >> @@ -17,6 +17,7 @@
> >> #include <dt-bindings/power/mt8173-power.h>
> >> #include <dt-bindings/reset-controller/mt8173-resets.h>
> >> #include "mt8173-pinfunc.h"
> >> +#include <dt-bindings/thermal/thermal.h>
>
> Also, as a nit, (#include <dt-bindings/thermal/mt8173.h>) should be
> above '#include "mt8173-pinfunc.h"'
Thank you, I will resend this patch with mt8171.h and sort header file.
> -djk
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2015-09-08 15:50 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-04 9:01 thermal: mediatek: Add cpu power cooling model Dawei Chien
2015-09-04 9:01 ` [PATCH 1/2] " Dawei Chien
2015-09-04 9:01 ` [PATCH 2/2] arm64: dts: mt8173: Add thermal zone node for mt8173 Dawei Chien
2015-09-07 4:00 ` Daniel Kurtz
2015-09-07 4:05 ` Daniel Kurtz
2015-09-08 15:50 ` dawei chien
2015-09-04 10:00 ` thermal: mediatek: Add cpu power cooling model dawei chien
2015-09-07 6:09 ` Viresh Kumar
2015-09-08 15:46 ` dawei chien
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).