Message ID | 20250103-topic-sm8650-thermal-cpu-idle-v1-2-faa1f011ecd9@linaro.org (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | arm64: dts: qcom: sm8650: rework CPU & GPU thermal zones | expand |
On Fri, Jan 3, 2025 at 6:38 AM Neil Armstrong <neil.armstrong@linaro.org> wrote: > > On the SM8650, the dynamic clock and voltage scaling (DCVS) for the GPU > is done in an hardware controlled loop by the GPU Management Unit (GMU). > > Since the GMU does a better job at maintaining the GPUs temperature in an > acceptable range by taking in account more parameters like the die > characteristics or other internal sensors, it makes no sense to try > and reproduce a similar set of constraints with the Linux devfreq thermal > core. > > Instead, set higher temperatures in the GPU trip points corresponding to > the temperatures provided by Qualcomm in the dowstream source, which will > trigger the devfreq thermal core if the GMU cannot handle the temperature > surge, and try our best to avoid reaching the critical temperature trip > point which should trigger an inevitable thermal shutdown. to we need something like this on other recent SoCs, like x1e? BR, -R > Fixes: 497624ed5506 ("arm64: dts: qcom: sm8650: Throttle the GPU when overheating") > Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> > --- > arch/arm64/boot/dts/qcom/sm8650.dtsi | 48 ++++++++++++++++++------------------ > 1 file changed, 24 insertions(+), 24 deletions(-) > > diff --git a/arch/arm64/boot/dts/qcom/sm8650.dtsi b/arch/arm64/boot/dts/qcom/sm8650.dtsi > index 448374a32e07151e35727d92fab77356769aea8a..ddcb57886eb5eac2a70d28e6ad68fc6820b5dcf1 100644 > --- a/arch/arm64/boot/dts/qcom/sm8650.dtsi > +++ b/arch/arm64/boot/dts/qcom/sm8650.dtsi > @@ -6507,19 +6507,19 @@ map0 { > > trips { > gpu0_alert0: trip-point0 { > - temperature = <85000>; > + temperature = <95000>; > hysteresis = <1000>; > type = "passive"; > }; > > trip-point1 { > - temperature = <90000>; > + temperature = <115000>; > hysteresis = <1000>; > type = "hot"; > }; > > trip-point2 { > - temperature = <110000>; > + temperature = <125000>; > hysteresis = <1000>; > type = "critical"; > }; > @@ -6540,19 +6540,19 @@ map0 { > > trips { > gpu1_alert0: trip-point0 { > - temperature = <85000>; > + temperature = <95000>; > hysteresis = <1000>; > type = "passive"; > }; > > trip-point1 { > - temperature = <90000>; > + temperature = <115000>; > hysteresis = <1000>; > type = "hot"; > }; > > trip-point2 { > - temperature = <110000>; > + temperature = <125000>; > hysteresis = <1000>; > type = "critical"; > }; > @@ -6573,19 +6573,19 @@ map0 { > > trips { > gpu2_alert0: trip-point0 { > - temperature = <85000>; > + temperature = <95000>; > hysteresis = <1000>; > type = "passive"; > }; > > trip-point1 { > - temperature = <90000>; > + temperature = <115000>; > hysteresis = <1000>; > type = "hot"; > }; > > trip-point2 { > - temperature = <110000>; > + temperature = <125000>; > hysteresis = <1000>; > type = "critical"; > }; > @@ -6606,19 +6606,19 @@ map0 { > > trips { > gpu3_alert0: trip-point0 { > - temperature = <85000>; > + temperature = <95000>; > hysteresis = <1000>; > type = "passive"; > }; > > trip-point1 { > - temperature = <90000>; > + temperature = <115000>; > hysteresis = <1000>; > type = "hot"; > }; > > trip-point2 { > - temperature = <110000>; > + temperature = <125000>; > hysteresis = <1000>; > type = "critical"; > }; > @@ -6639,19 +6639,19 @@ map0 { > > trips { > gpu4_alert0: trip-point0 { > - temperature = <85000>; > + temperature = <95000>; > hysteresis = <1000>; > type = "passive"; > }; > > trip-point1 { > - temperature = <90000>; > + temperature = <115000>; > hysteresis = <1000>; > type = "hot"; > }; > > trip-point2 { > - temperature = <110000>; > + temperature = <125000>; > hysteresis = <1000>; > type = "critical"; > }; > @@ -6672,19 +6672,19 @@ map0 { > > trips { > gpu5_alert0: trip-point0 { > - temperature = <85000>; > + temperature = <95000>; > hysteresis = <1000>; > type = "passive"; > }; > > trip-point1 { > - temperature = <90000>; > + temperature = <115000>; > hysteresis = <1000>; > type = "hot"; > }; > > trip-point2 { > - temperature = <110000>; > + temperature = <125000>; > hysteresis = <1000>; > type = "critical"; > }; > @@ -6705,19 +6705,19 @@ map0 { > > trips { > gpu6_alert0: trip-point0 { > - temperature = <85000>; > + temperature = <95000>; > hysteresis = <1000>; > type = "passive"; > }; > > trip-point1 { > - temperature = <90000>; > + temperature = <115000>; > hysteresis = <1000>; > type = "hot"; > }; > > trip-point2 { > - temperature = <110000>; > + temperature = <125000>; > hysteresis = <1000>; > type = "critical"; > }; > @@ -6738,19 +6738,19 @@ map0 { > > trips { > gpu7_alert0: trip-point0 { > - temperature = <85000>; > + temperature = <95000>; > hysteresis = <1000>; > type = "passive"; > }; > > trip-point1 { > - temperature = <90000>; > + temperature = <115000>; > hysteresis = <1000>; > type = "hot"; > }; > > trip-point2 { > - temperature = <110000>; > + temperature = <125000>; > hysteresis = <1000>; > type = "critical"; > }; > > -- > 2.34.1 > >
On 03/01/2025 21:00, Rob Clark wrote: > On Fri, Jan 3, 2025 at 6:38 AM Neil Armstrong <neil.armstrong@linaro.org> wrote: >> >> On the SM8650, the dynamic clock and voltage scaling (DCVS) for the GPU >> is done in an hardware controlled loop by the GPU Management Unit (GMU). >> >> Since the GMU does a better job at maintaining the GPUs temperature in an >> acceptable range by taking in account more parameters like the die >> characteristics or other internal sensors, it makes no sense to try >> and reproduce a similar set of constraints with the Linux devfreq thermal >> core. >> >> Instead, set higher temperatures in the GPU trip points corresponding to >> the temperatures provided by Qualcomm in the dowstream source, which will >> trigger the devfreq thermal core if the GMU cannot handle the temperature >> surge, and try our best to avoid reaching the critical temperature trip >> point which should trigger an inevitable thermal shutdown. > > to we need something like this on other recent SoCs, like x1e? Probably yes, but I don't have physical access to the platorm.. Neil > > BR, > -R > >> Fixes: 497624ed5506 ("arm64: dts: qcom: sm8650: Throttle the GPU when overheating") >> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> >> --- >> arch/arm64/boot/dts/qcom/sm8650.dtsi | 48 ++++++++++++++++++------------------ >> 1 file changed, 24 insertions(+), 24 deletions(-) >> >> diff --git a/arch/arm64/boot/dts/qcom/sm8650.dtsi b/arch/arm64/boot/dts/qcom/sm8650.dtsi >> index 448374a32e07151e35727d92fab77356769aea8a..ddcb57886eb5eac2a70d28e6ad68fc6820b5dcf1 100644 >> --- a/arch/arm64/boot/dts/qcom/sm8650.dtsi >> +++ b/arch/arm64/boot/dts/qcom/sm8650.dtsi >> @@ -6507,19 +6507,19 @@ map0 { >> >> trips { >> gpu0_alert0: trip-point0 { >> - temperature = <85000>; >> + temperature = <95000>; >> hysteresis = <1000>; >> type = "passive"; >> }; >> >> trip-point1 { >> - temperature = <90000>; >> + temperature = <115000>; >> hysteresis = <1000>; >> type = "hot"; >> }; >> >> trip-point2 { >> - temperature = <110000>; >> + temperature = <125000>; >> hysteresis = <1000>; >> type = "critical"; >> }; >> @@ -6540,19 +6540,19 @@ map0 { >> >> trips { >> gpu1_alert0: trip-point0 { >> - temperature = <85000>; >> + temperature = <95000>; >> hysteresis = <1000>; >> type = "passive"; >> }; >> >> trip-point1 { >> - temperature = <90000>; >> + temperature = <115000>; >> hysteresis = <1000>; >> type = "hot"; >> }; >> >> trip-point2 { >> - temperature = <110000>; >> + temperature = <125000>; >> hysteresis = <1000>; >> type = "critical"; >> }; >> @@ -6573,19 +6573,19 @@ map0 { >> >> trips { >> gpu2_alert0: trip-point0 { >> - temperature = <85000>; >> + temperature = <95000>; >> hysteresis = <1000>; >> type = "passive"; >> }; >> >> trip-point1 { >> - temperature = <90000>; >> + temperature = <115000>; >> hysteresis = <1000>; >> type = "hot"; >> }; >> >> trip-point2 { >> - temperature = <110000>; >> + temperature = <125000>; >> hysteresis = <1000>; >> type = "critical"; >> }; >> @@ -6606,19 +6606,19 @@ map0 { >> >> trips { >> gpu3_alert0: trip-point0 { >> - temperature = <85000>; >> + temperature = <95000>; >> hysteresis = <1000>; >> type = "passive"; >> }; >> >> trip-point1 { >> - temperature = <90000>; >> + temperature = <115000>; >> hysteresis = <1000>; >> type = "hot"; >> }; >> >> trip-point2 { >> - temperature = <110000>; >> + temperature = <125000>; >> hysteresis = <1000>; >> type = "critical"; >> }; >> @@ -6639,19 +6639,19 @@ map0 { >> >> trips { >> gpu4_alert0: trip-point0 { >> - temperature = <85000>; >> + temperature = <95000>; >> hysteresis = <1000>; >> type = "passive"; >> }; >> >> trip-point1 { >> - temperature = <90000>; >> + temperature = <115000>; >> hysteresis = <1000>; >> type = "hot"; >> }; >> >> trip-point2 { >> - temperature = <110000>; >> + temperature = <125000>; >> hysteresis = <1000>; >> type = "critical"; >> }; >> @@ -6672,19 +6672,19 @@ map0 { >> >> trips { >> gpu5_alert0: trip-point0 { >> - temperature = <85000>; >> + temperature = <95000>; >> hysteresis = <1000>; >> type = "passive"; >> }; >> >> trip-point1 { >> - temperature = <90000>; >> + temperature = <115000>; >> hysteresis = <1000>; >> type = "hot"; >> }; >> >> trip-point2 { >> - temperature = <110000>; >> + temperature = <125000>; >> hysteresis = <1000>; >> type = "critical"; >> }; >> @@ -6705,19 +6705,19 @@ map0 { >> >> trips { >> gpu6_alert0: trip-point0 { >> - temperature = <85000>; >> + temperature = <95000>; >> hysteresis = <1000>; >> type = "passive"; >> }; >> >> trip-point1 { >> - temperature = <90000>; >> + temperature = <115000>; >> hysteresis = <1000>; >> type = "hot"; >> }; >> >> trip-point2 { >> - temperature = <110000>; >> + temperature = <125000>; >> hysteresis = <1000>; >> type = "critical"; >> }; >> @@ -6738,19 +6738,19 @@ map0 { >> >> trips { >> gpu7_alert0: trip-point0 { >> - temperature = <85000>; >> + temperature = <95000>; >> hysteresis = <1000>; >> type = "passive"; >> }; >> >> trip-point1 { >> - temperature = <90000>; >> + temperature = <115000>; >> hysteresis = <1000>; >> type = "hot"; >> }; >> >> trip-point2 { >> - temperature = <110000>; >> + temperature = <125000>; >> hysteresis = <1000>; >> type = "critical"; >> }; >> >> -- >> 2.34.1 >> >>
diff --git a/arch/arm64/boot/dts/qcom/sm8650.dtsi b/arch/arm64/boot/dts/qcom/sm8650.dtsi index 448374a32e07151e35727d92fab77356769aea8a..ddcb57886eb5eac2a70d28e6ad68fc6820b5dcf1 100644 --- a/arch/arm64/boot/dts/qcom/sm8650.dtsi +++ b/arch/arm64/boot/dts/qcom/sm8650.dtsi @@ -6507,19 +6507,19 @@ map0 { trips { gpu0_alert0: trip-point0 { - temperature = <85000>; + temperature = <95000>; hysteresis = <1000>; type = "passive"; }; trip-point1 { - temperature = <90000>; + temperature = <115000>; hysteresis = <1000>; type = "hot"; }; trip-point2 { - temperature = <110000>; + temperature = <125000>; hysteresis = <1000>; type = "critical"; }; @@ -6540,19 +6540,19 @@ map0 { trips { gpu1_alert0: trip-point0 { - temperature = <85000>; + temperature = <95000>; hysteresis = <1000>; type = "passive"; }; trip-point1 { - temperature = <90000>; + temperature = <115000>; hysteresis = <1000>; type = "hot"; }; trip-point2 { - temperature = <110000>; + temperature = <125000>; hysteresis = <1000>; type = "critical"; }; @@ -6573,19 +6573,19 @@ map0 { trips { gpu2_alert0: trip-point0 { - temperature = <85000>; + temperature = <95000>; hysteresis = <1000>; type = "passive"; }; trip-point1 { - temperature = <90000>; + temperature = <115000>; hysteresis = <1000>; type = "hot"; }; trip-point2 { - temperature = <110000>; + temperature = <125000>; hysteresis = <1000>; type = "critical"; }; @@ -6606,19 +6606,19 @@ map0 { trips { gpu3_alert0: trip-point0 { - temperature = <85000>; + temperature = <95000>; hysteresis = <1000>; type = "passive"; }; trip-point1 { - temperature = <90000>; + temperature = <115000>; hysteresis = <1000>; type = "hot"; }; trip-point2 { - temperature = <110000>; + temperature = <125000>; hysteresis = <1000>; type = "critical"; }; @@ -6639,19 +6639,19 @@ map0 { trips { gpu4_alert0: trip-point0 { - temperature = <85000>; + temperature = <95000>; hysteresis = <1000>; type = "passive"; }; trip-point1 { - temperature = <90000>; + temperature = <115000>; hysteresis = <1000>; type = "hot"; }; trip-point2 { - temperature = <110000>; + temperature = <125000>; hysteresis = <1000>; type = "critical"; }; @@ -6672,19 +6672,19 @@ map0 { trips { gpu5_alert0: trip-point0 { - temperature = <85000>; + temperature = <95000>; hysteresis = <1000>; type = "passive"; }; trip-point1 { - temperature = <90000>; + temperature = <115000>; hysteresis = <1000>; type = "hot"; }; trip-point2 { - temperature = <110000>; + temperature = <125000>; hysteresis = <1000>; type = "critical"; }; @@ -6705,19 +6705,19 @@ map0 { trips { gpu6_alert0: trip-point0 { - temperature = <85000>; + temperature = <95000>; hysteresis = <1000>; type = "passive"; }; trip-point1 { - temperature = <90000>; + temperature = <115000>; hysteresis = <1000>; type = "hot"; }; trip-point2 { - temperature = <110000>; + temperature = <125000>; hysteresis = <1000>; type = "critical"; }; @@ -6738,19 +6738,19 @@ map0 { trips { gpu7_alert0: trip-point0 { - temperature = <85000>; + temperature = <95000>; hysteresis = <1000>; type = "passive"; }; trip-point1 { - temperature = <90000>; + temperature = <115000>; hysteresis = <1000>; type = "hot"; }; trip-point2 { - temperature = <110000>; + temperature = <125000>; hysteresis = <1000>; type = "critical"; };
On the SM8650, the dynamic clock and voltage scaling (DCVS) for the GPU is done in an hardware controlled loop by the GPU Management Unit (GMU). Since the GMU does a better job at maintaining the GPUs temperature in an acceptable range by taking in account more parameters like the die characteristics or other internal sensors, it makes no sense to try and reproduce a similar set of constraints with the Linux devfreq thermal core. Instead, set higher temperatures in the GPU trip points corresponding to the temperatures provided by Qualcomm in the dowstream source, which will trigger the devfreq thermal core if the GMU cannot handle the temperature surge, and try our best to avoid reaching the critical temperature trip point which should trigger an inevitable thermal shutdown. Fixes: 497624ed5506 ("arm64: dts: qcom: sm8650: Throttle the GPU when overheating") Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> --- arch/arm64/boot/dts/qcom/sm8650.dtsi | 48 ++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 24 deletions(-)