diff mbox series

[RESEND] arm64: dts: mediatek: mt7986: fix pwn fan settings for sinovoip bpi-r3 board

Message ID 20250226050132.547353-1-mikhail.kshevetskiy@iopsys.eu (mailing list archive)
State New
Headers show
Series [RESEND] arm64: dts: mediatek: mt7986: fix pwn fan settings for sinovoip bpi-r3 board | expand

Commit Message

Mikhail Kshevetskiy Feb. 26, 2025, 5:01 a.m. UTC
Popular bpi-r3 pwm fans like this one

  https://www.amazon.com/youyeetoo-Barebone-Fan-BPI-R3-Integrated/dp/B0CCCTY8PS

will not work properly. Trying different pwm setting using a command

  echo $value > /sys/devices/platform/pwm-fan/hwmon/hwmon1/pwm1

I found:

  pwm1 value     fan rotation speed   cpu temperature     notes
  -----------------------------------------------------------------
    0            maximal              31.5 Celsius        too noisy
   40            optimal              35.2 Celsius        no noise hearable
   95            minimal
   above 95      does not rotate      55.5 Celsius
  -----------------------------------------------------------------

At the moment we have following cooling levels defined:

  cooling-levels = <255 96 0>;

for cpu-active-low, cpu-active-medium and cpu-active-high modes
correspondingly. Thus only cpu-active-high and cpu-active-low are usable.
I think this is wrong.

This patch fixes cpu-active-medium settings for bpi-r3 board.

PS: I know, the patch is not ideal as it can break pwm fan for some users.
    There are some peoples that use handmade cooling solutions, but:
      * discussed cooler is the only 'official' pwm cooler for bpi-r3
        available on the market.
      * most peoples will use passive cooling available on the market or
        the discussed cooler.
      * the pwm-fan dts section was added before the official cooler
        appears on the market.
    Thus it should not be a lot of harm from this fix.

This patch may not be enough. Users may wants to tweak their thermal_zone0
trip points, thus tuning fan rotation speed depending on cpu temperature.
That can be done on the base of the folloving example:

  === example =========
  # cpu temterature below 25 Celsius degrees, no rotation
  echo 25000 > /sys/class/thermal/thermal_zone0/trip_point_4_temp
  # cpu temperature in [25..32] Celsius degrees, normal rotation speed
  echo 32000 > /sys/class/thermal/thermal_zone0/trip_point_3_temp
  # cpu temperature above 50 Celsius degrees, max rotation speed
  echo 50000 > /sys/class/thermal/thermal_zone0/trip_point_2_temp
  =====================

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
---
 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

AngeloGioacchino Del Regno Feb. 26, 2025, 9:46 a.m. UTC | #1
Il 26/02/25 06:01, Mikhail Kshevetskiy ha scritto:

Please reformat the title...

arm64: dts: mediatek: mt7986-bpi-r3: Change fan PWM value for mid speed

> Popular bpi-r3 pwm fans like this one
> 
>    https://www.amazon.com/youyeetoo-Barebone-Fan-BPI-R3-Integrated/dp/B0CCCTY8PS

Such links to products do expire over time, so this commit will eventually have
missing info in the future.

"Popular cheap PWM fans for this machine, like the ones coming in heatsink+fan
combos will not work properly at the currently defined medium speed"

> 
> will not work properly. Trying different pwm setting using a command
> 
>    echo $value > /sys/devices/platform/pwm-fan/hwmon/hwmon1/pwm1
> 
> I found:
> 
>    pwm1 value     fan rotation speed   cpu temperature     notes
>    -----------------------------------------------------------------
>      0            maximal              31.5 Celsius        too noisy
>     40            optimal              35.2 Celsius        no noise hearable
>     95            minimal
>     above 95      does not rotate      55.5 Celsius
>    -----------------------------------------------------------------
> 
> At the moment we have following cooling levels defined:
> 
>    cooling-levels = <255 96 0>;

Yes, we can see that in the actual DT, not necessary to repeat in the description.

"The current cooling levels define a PWM value of 96 for the cpu-active-medium
step..."

> 
> for cpu-active-low, cpu-active-medium and cpu-active-high modes
> correspondingly. Thus only cpu-active-high and cpu-active-low are usable.
> I think this is wrong.
> 
> This patch fixes cpu-active-medium settings for bpi-r3 board.
> 
> PS: I know, the patch is not ideal as it can break pwm fan for some users.
>      There are some peoples that use handmade cooling solutions, but:
>        * discussed cooler is the only 'official' pwm cooler for bpi-r3
>          available on the market.
>        * most peoples will use passive cooling available on the market or
>          the discussed cooler.
>        * the pwm-fan dts section was added before the official cooler
>          appears on the market.
>      Thus it should not be a lot of harm from this fix.

I get that the cheapest fans you can get are not working correctly with the current
mid pwm setting, but you can't break things.

This devicetree should, at this point, hold default values that would generally
make the vast majority of fans to actually spin, because it's impossible to have
something perfectly (or vaguely, sometimes) optimized for each fan on the market.

Of course this means that you need to properly configure your fans in userspace
if you want to reach the sweet spot.

I added Frank and Daniel to this thread, as they are the ones who originally did
upstream this device.

Frank, Daniel, any suggestion regarding the PWM values here?

P.S.: Remember that the fan will still spin to HIGH when temperature gets high,
so the SoC is still thermally protected until users start tuning their fan speed
in userspace.

> 
> This patch may not be enough. Users may wants to tweak their thermal_zone0
> trip points, thus tuning fan rotation speed depending on cpu temperature.
> That can be done on the base of the folloving example:

P.P.S.: Fix typos please.

Thanks,
Angelo


> 
>    === example =========
>    # cpu temterature below 25 Celsius degrees, no rotation
>    echo 25000 > /sys/class/thermal/thermal_zone0/trip_point_4_temp
>    # cpu temperature in [25..32] Celsius degrees, normal rotation speed
>    echo 32000 > /sys/class/thermal/thermal_zone0/trip_point_3_temp
>    # cpu temperature above 50 Celsius degrees, max rotation speed
>    echo 50000 > /sys/class/thermal/thermal_zone0/trip_point_2_temp
>    =====================
> 
> Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
> ---
>   arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> index ed79ad1ae871..b0cc0cbdff0f 100644
> --- a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> @@ -42,7 +42,7 @@ fan: pwm-fan {
>   		compatible = "pwm-fan";
>   		#cooling-cells = <2>;
>   		/* cooling level (0, 1, 2) - pwm inverted */
> -		cooling-levels = <255 96 0>;
> +		cooling-levels = <255 40 0>;
>   		pwms = <&pwm 0 10000>;
>   		status = "okay";
>   	};
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
index ed79ad1ae871..b0cc0cbdff0f 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
@@ -42,7 +42,7 @@  fan: pwm-fan {
 		compatible = "pwm-fan";
 		#cooling-cells = <2>;
 		/* cooling level (0, 1, 2) - pwm inverted */
-		cooling-levels = <255 96 0>;
+		cooling-levels = <255 40 0>;
 		pwms = <&pwm 0 10000>;
 		status = "okay";
 	};