mbox series

[v4,0/8] add thermal throttling to Allwinner A33 SoC

Message ID 20170405090634.4649-1-quentin.schulz@free-electrons.com
Headers show
Series add thermal throttling to Allwinner A33 SoC | expand

Message

Quentin Schulz April 5, 2017, 9:06 a.m. UTC
The Allwinner SoCs all have an ADC that can also act as a touchscreen
controller and a thermal sensor. The first four channels can be used
either for the ADC or the touchscreen and the fifth channel is used for
the thermal sensor. We currently have a driver for the two latter
functions in drivers/input/touchscreen/sun4i-ts.c but we don't have
access to the ADC feature at all. It is meant to replace the current
driver by using MFD and subdrivers for existing bindings.

The Allwinner A33 only has a thermal sensor present in the GPADC. In
addition, there is not an existing DT binding for the GPADC. Thus, we do
not need the sun4i-gpadc MFD driver which was made to keep DT compatibility
and probe subdrivers without the need to add DT subnodes.

This series of patch adds the thermal sensor for the A33 and GPU/CPU
thermal throttling. It also adds the cpu-supply property to the CPU node
needed by the Sinlinx SinA33 and Olinuxino A33 to adapt their CPU regulator
voltage depending on the currently used OPP. The other A33 boards all have
their cpu-supply property set.

This series also fixes the missing operating-points-v2 property in cpu DT
nodes. Finally, it also adds all remaining OPPs which can be found in
Allwinner 3.4 linux and fex files of all A33 boards.

This series of patch is based on this[1] series of patch.

v4:
  - fixing patch name for DT bindings,

v3:
  - fixed compatible name in DT and in documentation,
  - fixed DT node name and label,
  - added explanations in commit logs,
  - moved frequencies that need overvolting to board DTS instead of A33 DTSI,
  - fixed a typo in if is_enabled condition,
  - removed all patches concerning Olimex Olinuxino (no HW to test on),

[1] https://lkml.org/lkml/2016/12/13/298 : "[PATCH v9] add support for Allwinner
SoCs ADC"

Thanks,
Quentin

Maxime Ripard (1):
  ARM: sun8i: a33: Add devfreq-based GPU cooling

Quentin Schulz (7):
  dt-bindings: mfd: add A33 GPADC binding
  dt-bindings: input: touschcreen: remove sun4i documentation
  iio: adc: sun4i-gpadc-iio: move code used in MFD probing to new
    function
  iio: adc: sun4i-gpadc-iio: add support for A33 thermal sensor
  ARM: sun8i: a33: add thermal sensor
  ARM: sun8i: a33: add CPU thermal throttling
  ARM: sun8i: sina33: add highest OPP of CPUs

 .../touchscreen/sun4i.txt => mfd/sun4i-gpadc.txt}  |  21 +++
 arch/arm/boot/dts/sun8i-a23-a33.dtsi               |   1 +
 arch/arm/boot/dts/sun8i-a33-sinlinx-sina33.dts     |  14 ++
 arch/arm/boot/dts/sun8i-a33.dtsi                   |  81 ++++++++++
 drivers/iio/adc/Kconfig                            |   2 +-
 drivers/iio/adc/sun4i-gpadc-iio.c                  | 170 +++++++++++++++++----
 include/linux/mfd/sun4i-gpadc.h                    |   4 +
 7 files changed, 260 insertions(+), 33 deletions(-)
 rename Documentation/devicetree/bindings/{input/touchscreen/sun4i.txt => mfd/sun4i-gpadc.txt} (64%)

-- 
2.9.3

Comments

Maxime Ripard April 5, 2017, 12:13 p.m. UTC | #1
On Wed, Apr 05, 2017 at 11:06:32AM +0200, Quentin Schulz wrote:
> This adds CPU thermal throttling for the Allwinner A33. It uses the

> thermal sensor present in the SoC's GPADC.

> 

> Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com>

> ---

> 

> v3:

>   - switched to new phandle because of modified DT node name for the GPADC

>   (named THS),

>   - got rid of cooling-min-level and cooling-max-level as it's not used in any

>   code in the kernel,

> 

> v2:

>   - updated cooling-max-level to reflect newly added OPPs,

> 

>  arch/arm/boot/dts/sun8i-a33.dtsi | 45 ++++++++++++++++++++++++++++++++++++++++

>  1 file changed, 45 insertions(+)

> 

> diff --git a/arch/arm/boot/dts/sun8i-a33.dtsi b/arch/arm/boot/dts/sun8i-a33.dtsi

> index 9734e63..b88c107 100644

> --- a/arch/arm/boot/dts/sun8i-a33.dtsi

> +++ b/arch/arm/boot/dts/sun8i-a33.dtsi

> @@ -43,6 +43,7 @@

>   */

>  

>  #include "sun8i-a23-a33.dtsi"

> +#include <dt-bindings/thermal/thermal.h>

>  

>  / {

>  	cpu0_opp_table: opp_table0 {

> @@ -127,6 +128,7 @@

>  			clocks = <&ccu CLK_CPUX>;

>  			clock-names = "cpu";

>  			operating-points-v2 = <&cpu0_opp_table>;

> +			#cooling-cells = <2>;

>  		};

>  

>  		cpu@1 {

> @@ -170,6 +172,49 @@

>  		};

>  	};

>  

> +	thermal-zones {

> +		cpu_thermal {

> +			/* milliseconds */

> +			polling-delay-passive = <250>;

> +			polling-delay = <1000>;

> +			thermal-sensors = <&ths>;

> +

> +			cooling-maps {

> +				map0 {

> +					trip = <&cpu_alert0>;

> +					cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;

> +				};

> +				map1 {

> +					trip = <&cpu_alert1>;

> +					cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;

> +				};

> +			};

> +

> +			trips {

> +				cpu_alert0: cpu_alert0 {

> +					/* milliCelsius */

> +					temperature = <75000>;

> +					hysteresis = <2000>;

> +					type = "passive";

> +				};

> +

> +				cpu_alert1: cpu_alert1 {

> +					/* milliCelsius */

> +					temperature = <90000>;

> +					hysteresis = <2000>;

> +					type = "hot";

> +				};

> +

> +				cpu_crit: cpu_crit {

> +					/* milliCelsius */

> +					temperature = <110000>;

> +					hysteresis = <2000>;

> +					type = "critical";

> +				};

> +			};

> +		};

> +	};

> +


This wasn't sorted properly (thermal is not between mali- and memory
in the alphabetical order). Fixed and applied, thanks!
Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
Maxime Ripard April 5, 2017, 12:17 p.m. UTC | #2
On Wed, Apr 05, 2017 at 11:06:34AM +0200, Quentin Schulz wrote:
> The A33 supports 1.1GHz and 1.2GHz frequencies at 1.32V and the Sinlinx

> SinA33 has its cpu-supply property set in the cpu DT node.

> 

> Therefore, CPUfreq knows how to handle the regulator in charge of the

> CPU and can adjust its voltage to match the OPP.

> 

> Add these two CPU frequencies to the CPU OPP table of the Sinlinx

> SinA33.

> 

> Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com>


Applied, thanks!
Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com