Eraden/amdgpud

Does not works on AMD Vega

Closed this issue · 3 comments

Does not works on AMD Vega

Sapphire Vega56 Pulse
Kernel 5.12.14
Arch
Fancontrol config in use:

DEVPATH=hwmon1=devices/platform/it87.656 
DEVNAME=hwmon1=it8665
FCTEMPS=hwmon1/pwm1=hwmon1/temp1_input hwmon1/pwm2=hwmon1/temp1_input hwmon1/pwm3=hwmon1/temp1_input hwmon1/pwm4=hwmon1/temp1_input hwmon1/pwm6=hwmon1/temp1_input 
FCFANS=hwmon1/pwm1=hwmon1/fan1_input hwmon1/pwm2=hwmon1/fan2_input hwmon1/pwm3=hwmon1/fan3_input hwmon1/pwm4=hwmon1/fan4_input hwmon1/pwm6=hwmon1/fan6_input 
MINTEMP=hwmon1/pwm1=42 hwmon1/pwm2=55 hwmon1/pwm3=57 hwmon1/pwm4=59 hwmon1/pwm6=56 
MAXTEMP=hwmon1/pwm1=78 hwmon1/pwm2=81 hwmon1/pwm3=82 hwmon1/pwm4=79 hwmon1/pwm6=81 
MINSTART=hwmon1/pwm1=255 hwmon1/pwm2=255 hwmon1/pwm3=255 hwmon1/pwm4=255 hwmon1/pwm6=255 
MINSTOP=hwmon1/pwm1=77 hwmon1/pwm2=86 hwmon1/pwm3=79 hwmon1/pwm4=107 hwmon1/pwm6=97 
MINPWM=hwmon1/pwm1=77 hwmon1/pwm2=86 hwmon1/pwm3=79 hwmon1/pwm4=107 hwmon1/pwm6=97 
MAXPWM=hwmon1/pwm1=240 hwmon1/pwm2=196 hwmon1/pwm3=202 hwmon1/pwm4=237 hwmon1/pwm6=207 
AVERAGE=hwmon1/pwm1=1 hwmon1/pwm2=1 hwmon1/pwm3=1 hwmon1/pwm4=1 hwmon1/pwm6=1```

I have a Vega 56 and I can confirm that the service is not working.

In service() the speed from the config file (a PWM value) is compared to fan_min() and fan_max() but those functions return the fan RPM.

amdgpud/src/main.rs

Lines 291 to 294 in 0794605

let speed = config.speed_for_temp(gpu_temp);
if controller.hw_mon.fan_min() > speed || controller.hw_mon.fan_max() < speed {
continue;
}

In my case, the outputs are:

fan1_min   = 400
fan1_max   = 3300
fan1_input = 637 (rpm)
pwm1_min   = 0
pwm1_max   = 255
pwm1       = 48

Setting the PWM target to 30 for example will result in:

fan1_min (400) > 30 || fan1_max (3330) < 30

And that's not working 😄

Adding RPM values into the config will also not work because set_speed() writes to pwm1 and not fan1_input.

@r15ch13 I just wanted to comment the exact same thing.
Also the default config makes it look like speed has to be a percentage between 4 and 100, but the value gets directly, without conversion, written to pwm1 which goes from 0 to 255.
I think it would be best to keep it as a percentage from 0 to 100 (also allowing floats) in the config and then convert it to an int in the correct range.

And I'm not sure which would be better to change. Either use pwm1_min and pwm1_max for the boundaries and let set_speed write to pwm1, or use fan1_min and fan1_max for the boundaries and write to fan1_target. I don't know if every AMD card has both options though.

EDIT: Ok, according to this the pwm interface should be used for the manual fan speed control (pwm1_enable=1).