Re: CPU/GPU fan control with safety via hwmon

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/8/24 09:22, Armin Wolf wrote:
Am 08.11.24 um 17:57 schrieb Werner Sembach:

Hi Guenter,

Am 08.11.24 um 17:26 schrieb Guenter Roeck:
On 11/8/24 08:13, Werner Sembach wrote:
Hi,

Am 08.11.24 um 15:30 schrieb Guenter Roeck:
On 11/8/24 04:05, Werner Sembach wrote:
Hi everyone,

I'm currently conceptualizing an upstream implementation for the
fan control on our Sirius 16 Gen 1 & 2 devices which has the
following custom WMI functions (pseudo code):

void SMOD(bool mode): Toggle firmware controlled fans vs manually
(aka via the commands below) controlled fans
bool GMOD(): Get current SMOD setting
int GCNT(): Get number of fans
enum GTYP(int index): Returns "CPU-fan" or "GPU-fan"
void SSPD(int index, int value): Set fan speed target as a
fraction of max speed
int GSPD(int index): Get current fan speed target as a fraction of
max speed
int GRPM(int index): Get current actual fan speed in revolutions
per minute
int GTMP(int index): Get temperature of thing fan with respective
index is pointed at (CPU or GPU die, see GTYP)

However there are some physical limitations that are not in the
firmware and I would like to implement as low as possible in
software, aka the driver, to avoid hardware damage:

1. Valid fan speeds are 0% (fan off) and 25-100%. Values from
1%-24% must not be written.

2. As long as GTMP is > 80°C fan speed must be at least 30%.

We would love to see the same driver enforced restrictions in the
Uniwil driver Armin is working on and the Clevo driver Juno
Computers is working on.

My Idea so far:

1. Round SSPD input: 0-12% -> 0%, 13-25% -> 25%


That is acceptable.

2. Periodically check GTMP (every second should be enough) in
driver and if the temperature is over 80°C set current and
incoming speed commands to at at least 30%.

Is this legitimate with the hwmon design?


No. That would have to utilize the thermal subsystem. hwmon is not
intended to
_control_ the environment, only to monitor it.

Thanks for the hint, I was not aware of the thermal subsystem until
now.

But still wondering, doesn't have the hwmon interface also some
write functionality? Or am I completely mistaken here?


That is to set limits and other chip configuration, not for active
environmental control.

From the thermal subsystem I found my way to this page:
https://www.kernel.org/doc/html/latest/driver-api/thermal/nouveau_thermal.html
-> "1: The fan can be driven in manual (use pwm1 to change the speed);"

So it seems like the thermal subsystem is exposing a pwm hwmon
attribute itself which can be used for manual control.

I don't think so, the hwmon interface is exposed by the nouveau driver itself, see drivers/gpu/drm/nouveau/nouveau_hwmon.c for details.


Agreed, the use of the term "thermal" in the context of the nouveau
hwmon driver is misleading.

Guenter





[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux