On Mon, 17 Mar 2025 at 15:15, Alex Deucher <alexdeuc...@gmail.com> wrote: > > On Mon, Mar 17, 2025 at 6:53 AM Tomasz Pakuła > <tomasz.pakula.oficja...@gmail.com> wrote: > > > > Hook up zero RPM stop temperature for 9070 and 9070 XT based on RDNA3 > > (smu 13.0.0 and 13.0.7) code. > > > > Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficja...@gmail.com> > > --- > > .../swsmu/inc/pmfw_if/smu14_driver_if_v14_0.h | 3 +- > > .../drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 50 ++++++++++++++++++- > > 2 files changed, 51 insertions(+), 2 deletions(-) > > > > diff --git > > a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu14_driver_if_v14_0.h > > b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu14_driver_if_v14_0.h > > index c2fd0a4a13e5..a5eba7b91e2f 100644 > > --- a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu14_driver_if_v14_0.h > > +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu14_driver_if_v14_0.h > > @@ -846,9 +846,10 @@ typedef struct { > > uint16_t FanTargetTemperature; // Degree Celcius > > //zero fan > > uint8_t FanZeroRpmEnable; > > + uint8_t FanZeroRpmStopTemp; > > //temperature > > uint8_t MaxOpTemp; > > - uint8_t Padding1[2]; > > + uint8_t Padding1; > > > > //Full Ctrl > > uint16_t GfxVoltageFullCtrlMode; > > This makes a change to the firmware interface. Presumably it works > differently here. @Kenneth Feng or @Wang, Yang(Kevin) to confirm how > this works with respect to the firmware.
This change in `smu14_driver_if_v14_0.h` to `OverDriveLimits_t` is based on the `OverDriveTable_t` which already has FanZeroRpmStopTemp. It was just missing from the limits table. I chalked it up to an omission. Here's the fan control part of the OverDriveTable_t: //Fan control uint8_t FanLinearPwmPoints[NUM_OD_FAN_MAX_POINTS]; uint8_t FanLinearTempPoints[NUM_OD_FAN_MAX_POINTS]; uint16_t FanMinimumPwm; uint16_t AcousticTargetRpmThreshold; uint16_t AcousticLimitRpmThreshold; uint16_t FanTargetTemperature; // Degree Celcius uint8_t FanZeroRpmEnable; uint8_t FanZeroRpmStopTemp; uint8_t FanMode; uint8_t MaxOpTemp; Based on my logical guess, `Padding1` which I changed from [2] to just a single `uint8_t` is still probably in a place where `MaxOpTemp` should actually be and `FanMode` should be added as well? Or maybe just MaxOpTemp and Padding should be swapped? Of course, all that is just my best guess as I don't have the firmware tables to confirm. The only thing I can compare to is smu 13.0.0 and 13.0.7 code and they have identical layout in their respective `OverDriveTable_t` and `OverDriveLimits_t`. In testing on my RX 9070 XT Hellhound, I was able to get range and adjust the Zero RPM stop temperature from `gpu_od/fan_ctrl/fan_zero_rpm_*`: tomek@komputr /sys/class/drm/card1/device/gpu_od/fan_ctrl $ cat fan_zero_rpm_enable FAN_ZERO_RPM_ENABLE: 1 OD_RANGE: ZERO_RPM_ENABLE: 0 1 tomek@komputr /sys/class/drm/card1/device/gpu_od/fan_ctrl $ cat fan_zero_rpm_stop_temperature FAN_ZERO_RPM_STOP_TEMPERATURE: 50 OD_RANGE: ZERO_RPM_STOP_TEMPERATURE: 50 110 tomek@komputr /sys/class/drm/card1/device/gpu_od/fan_ctrl $ sudo tee fan_target_temperature <<< "65" 65 tomek@komputr /sys/class/drm/card1/device/gpu_od/fan_ctrl $ sudo tee fan_target_temperature <<< "c" c tomek@komputr /sys/class/drm/card1/device/gpu_od/fan_ctrl $ cat fan_zero_rpm_stop_temperature FAN_ZERO_RPM_STOP_TEMPERATURE: 50 OD_RANGE: ZERO_RPM_STOP_TEMPERATURE: 50 110 tomek@komputr /sys/class/drm/card1/device/gpu_od/fan_ctrl $ sudo tee fan_zero_rpm_stop_temperature <<< "45" 45 tee: fan_zero_rpm_stop_temperature: Invalid argument And some dmesg info when trying to set a value that's out of range: amdgpu 0000:0f:00.0: amdgpu: zero RPM stop temperature setting(45) must be within [50, 110]! Tomasz