diff mbox series

[PATCHv3] arm64: dts: meson: Enable active coling using gpio-fan on Odroid N2/N2+

Message ID 20221022084737.1028-1-linux.amoon@gmail.com
State New
Headers show
Series [PATCHv3] arm64: dts: meson: Enable active coling using gpio-fan on Odroid N2/N2+ | expand

Commit Message

Anand Moon Oct. 22, 2022, 8:47 a.m. UTC
Odroid N2/N2+ support active cooling via gpio-fan controller.
Add fan controls and tip point for cpu and ddr thermal sensor
on this boards. Drop bias-disable from set pwm_ao_d_10 the pin
as to allow transition from say pull-up to pull-down for on/off
of the fan.

Signed-off-by: Anand Moon <linux.amoon@gmail.com>
---
v2: changes tip name cpu-active --> ddr-active
v3: drop bias-disable for pwm_ao_d_10 pine.
---
 .../boot/dts/amlogic/meson-g12-common.dtsi    |  1 -
 .../dts/amlogic/meson-g12b-odroid-n2.dtsi     | 42 +++++++++++++++++++
 2 files changed, 42 insertions(+), 1 deletion(-)


base-commit: 4da34b7d175dc99b8befebd69e96546c960d526c

Comments

Neil Armstrong Oct. 26, 2022, 8:02 a.m. UTC | #1
Hi,

On 25/10/2022 20:06, Anand Moon wrote:
> Hi Martin,
> 
> On Sat, 22 Oct 2022 at 17:22, Martin Blumenstingl
> <martin.blumenstingl@googlemail.com> wrote:
>>
>> Hi Anand,
>>
>> On Sat, Oct 22, 2022 at 1:27 PM Anand Moon <linux.amoon@gmail.com> wrote:
>> [...]
>>>>> @@ -1982,7 +1982,6 @@ pwm_ao_d_10_pins: pwm-ao-d-10 {
>>>>>                                                  mux {
>>>>>                                                          groups = "pwm_ao_d_10";
>>>>>                                                          function = "pwm_ao_d";
>>>>> -                                                       bias-disable;
>>>> &pwm_ao_d_10_pins is not referenced anywhere so it seems that this
>>>> change has no impact on controlling the fan on Odroid-N2(+).
>>>> How did you test this change?
>>>>
>>> Ok I felt these changes affect the behavior of the pinctrl
>>>
>>>    * @PIN_CONFIG_BIAS_DISABLE: disable any pin bias on the pin, a
>>>   *  transition from say pull-up to pull-down implies that you disable
>>>   *  pull-up in the process, this setting disables all biasing.
>>>
>>> I mapped this is linked in pinctrl driver, pwm_ao_d_10_pins GPIOAO_10 see below
>> Yes, I understand this part.
>> My concern is: &pwm_ao_d_10_pins settings only become active when this
>> node is actively referenced. You can even see it in your output
>> below...
>>
>> [...]
>>> pin 10 (GPIOAO_10): (MUX UNCLAIMED) aobus-banks:1958
>> This shows that it's used as a GPIO. If the &pwm_ao_d_10_pins setting
>> was used then it would show "function pwm_ao_d group pwm_ao_d_10"
>> (similar to what GPIOE_1 shows in your output)
>>
>> If you want to know if a pull-up/down is enabled you can look at the output of:
>> $ cat /sys/kernel/debug/pinctrl/ff800000.sys-ctrl\:pinctrl@14-pinctrl-meson/pinconf-pins
>> (I'm sure this can also be retrieved from some userspace tools, but I
>> don't know how)
>>
> 
> I now switch using pwm-fan with the local changes I am able to link
> pwm_ao_d_10_pins
> but now the issue is fan keeps on spinning on boot-up and stays on.
> 
> I can manually turn on off by using
> $ sudo gpioset gpiochip1 10=1   // fan on
> $ sudo gpioset gpiochip1 10=0   // fan off

By doing that actually override the PWM function of the pin and set it as a GPIO.

> 
> It is not controlled by the thermal tip as expected.
> I feel some configuration is missing in pwm-meson driver.
> Any input for me?
> 
> $ sudo cat /sys/kernel/debug/pinctrl/ff800000.sys-ctrl\:pinctrl@14-pinctrl-meson/pinmux-pins
> [sudo] password for alarm:
> Pinmux settings per pin
> Format: pin (name): mux_owner gpio_owner hog?
> pin 0 (GPIOAO_0): ff803000.serial (GPIO UNCLAIMED) function uart_ao_a
> group uart_ao_a_tx
> pin 1 (GPIOAO_1): ff803000.serial (GPIO UNCLAIMED) function uart_ao_a
> group uart_ao_a_rx
> pin 2 (GPIOAO_2): (MUX UNCLAIMED) aobus-banks:1950
> pin 3 (GPIOAO_3): (MUX UNCLAIMED) (GPIO UNCLAIMED)
> pin 4 (GPIOAO_4): (MUX UNCLAIMED) (GPIO UNCLAIMED)
> pin 5 (GPIOAO_5): ff808000.ir (GPIO UNCLAIMED) function
> remote_ao_input group remote_ao_input
> pin 6 (GPIOAO_6): (MUX UNCLAIMED) (GPIO UNCLAIMED)
> pin 7 (GPIOAO_7): (MUX UNCLAIMED) (GPIO UNCLAIMED)
> pin 8 (GPIOAO_8): (MUX UNCLAIMED) aobus-banks:1956
> pin 9 (GPIOAO_9): (MUX UNCLAIMED) aobus-banks:1957
> pin 10 (GPIOAO_10): ff807000.pwm (GPIO UNCLAIMED) function pwm_ao_d
> group pwm_ao_d_10
> pin 11 (GPIOAO_11): (MUX UNCLAIMED) aobus-banks:1959
> pin 12 (GPIOE_0): (MUX UNCLAIMED) (GPIO UNCLAIMED)
> pin 13 (GPIOE_1): ff802000.pwm (GPIO UNCLAIMED) function pwm_ao_d
> group pwm_ao_d_e
> pin 14 (GPIOE_2): ffd1b000.pwm (GPIO UNCLAIMED) function pwm_a_e group pwm_a_e
> 
> $ sudo cat /sys/kernel/debug/pwm
> platform/ffd1b000.pwm, 2 PWM devices
>   pwm-0   (regulator-vddcpu-a  ): requested enabled period: 1250 ns
> duty: 838 ns polarity: normal
>   pwm-1   ((null)              ): period: 0 ns duty: 0 ns polarity: normal
> 
> platform/ff807000.pwm, 2 PWM devices
>   pwm-0   (pwm-fan             ): requested period: 1250 ns duty: 0 ns
> polarity: normal
>   pwm-1   ((null)              ): period: 0 ns duty: 0 ns polarity: normal

This should be on the pwm-1, hence the "pwm_AO_cd" name, "c" and "d" and the
names of the outputs.

So you need to use 1 as first PWM phandle argument instead of 0.

> 
> platform/ff802000.pwm, 2 PWM devices
>   pwm-0   ((null)              ): period: 0 ns duty: 0 ns polarity: normal
>   pwm-1   (regulator-vddcpu-b  ): requested enabled period: 1250 ns
> duty: 1213 ns polarity: normal
> 
> I could observe a change in duty when we have stress testing the CPU.

Can you share the complete change you did here ?

> 
> Thanks
> 
> -Anand

Neil
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
index 45947c1031c4..10a09fe362fa 100644
--- a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
@@ -1982,7 +1982,6 @@  pwm_ao_d_10_pins: pwm-ao-d-10 {
 						mux {
 							groups = "pwm_ao_d_10";
 							function = "pwm_ao_d";
-							bias-disable;
 						};
 					};
 
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
index fd3fa82e4c33..667d2b774924 100644
--- a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
@@ -39,6 +39,14 @@  emmc_pwrseq: emmc-pwrseq {
 		reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
 	};
 
+	fan: gpio-fan {
+		compatible = "gpio-fan";
+		gpios = <&gpio_ao GPIOAO_10 GPIO_ACTIVE_HIGH>;
+		/* Using Dummy Speed */
+		gpio-fan,speed-map = <0 0>, <1 1>;
+		#cooling-cells = <2>;
+	};
+
 	leds {
 		compatible = "gpio-leds";
 
@@ -410,6 +418,40 @@  &cpu103 {
 	clock-latency = <50000>;
 };
 
+&cpu_thermal {
+	trips {
+		cpu_active: cpu-active {
+			temperature = <60000>; /* millicelsius */
+			hysteresis = <2000>; /* millicelsius */
+			type = "active";
+		};
+	};
+
+	cooling-maps {
+		map {
+			trip = <&cpu_active>;
+			cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+		};
+	};
+};
+
+&ddr_thermal {
+	trips {
+		ddr_active: ddr-active {
+			temperature = <60000>; /* millicelsius */
+			hysteresis = <2000>; /* millicelsius */
+			type = "active";
+		};
+	};
+
+	cooling-maps {
+		map {
+			trip = <&ddr_active>;
+			cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+		};
+	};
+};
+
 &ext_mdio {
 	external_phy: ethernet-phy@0 {
 		/* Realtek RTL8211F (0x001cc916) */