[PATCH 4/5] platform/x86: hp-wmi: normalize GPU thermal mode errors

From: Emre Cecanpunar

Date: Thu Jul 16 2026 - 05:56:47 EST


The GPU thermal mode helpers return positive firmware error codes, but
their callers only treat negative values as failures. If the mode query
is rejected, its output parameters remain uninitialized and are then
used to select a profile or sent back to firmware as the GPU slowdown
temperature. A rejected mode update is likewise reported as successful.

Zero the query buffer and convert positive firmware status codes to
-EINVAL in both helpers so callers never consume missing output or ignore
a failed update.

Fixes: 6e4ab59b8391 ("platform/x86: hp-wmi: Add fan and thermal profile support for Victus 16-s1000")
Signed-off-by: Emre Cecanpunar <emreleno@xxxxxxxxx>
---
drivers/platform/x86/hp/hp-wmi.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 29881749aae6..65c3bac17ad6 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -1885,20 +1885,21 @@ static int victus_s_gpu_thermal_profile_get(bool *ctgp_enable,
u8 *dstate,
u8 *gpu_slowdown_temp)
{
- struct victus_gpu_power_modes gpu_power_modes;
+ struct victus_gpu_power_modes gpu_power_modes = {};
int ret;

ret = hp_wmi_perform_query(HPWMI_GET_GPU_THERMAL_MODES_QUERY, HPWMI_GM,
&gpu_power_modes, sizeof(gpu_power_modes),
sizeof(gpu_power_modes));
- if (ret == 0) {
- *ctgp_enable = gpu_power_modes.ctgp_enable ? true : false;
- *ppab_enable = gpu_power_modes.ppab_enable ? true : false;
- *dstate = gpu_power_modes.dstate;
- *gpu_slowdown_temp = gpu_power_modes.gpu_slowdown_temp;
- }
+ if (ret)
+ return ret < 0 ? ret : -EINVAL;

- return ret;
+ *ctgp_enable = gpu_power_modes.ctgp_enable ? true : false;
+ *ppab_enable = gpu_power_modes.ppab_enable ? true : false;
+ *dstate = gpu_power_modes.dstate;
+ *gpu_slowdown_temp = gpu_power_modes.gpu_slowdown_temp;
+
+ return 0;
}

static int victus_s_gpu_thermal_profile_set(bool ctgp_enable,
@@ -1929,8 +1930,10 @@ static int victus_s_gpu_thermal_profile_set(bool ctgp_enable,

ret = hp_wmi_perform_query(HPWMI_SET_GPU_THERMAL_MODES_QUERY, HPWMI_GM,
&gpu_power_modes, sizeof(gpu_power_modes), 0);
+ if (ret)
+ return ret < 0 ? ret : -EINVAL;

- return ret;
+ return 0;
}

/* Note: HP_POWER_LIMIT_DEFAULT can be used to restore default PL1 and PL2 */