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