drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC
authorDarren Powell <darren.powell@amd.com>
Sat, 21 Aug 2021 02:08:07 +0000 (22:08 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 13 Oct 2021 18:15:02 +0000 (14:15 -0400)
 when smu->adev->pm.ac_power == 0, message parameter with bit 16 set is saved
 to smu->current_power_limit.

Fixes: 0cb4c62125a9 ("drm/amd/pm: correct power limit setting for SMU V11)"

Signed-off-by: Darren Powell <darren.powell@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c

index b9386c5..aa4d34f 100644 (file)
@@ -984,6 +984,7 @@ int smu_v11_0_set_power_limit(struct smu_context *smu,
 {
        int power_src;
        int ret = 0;
+       uint32_t limit_param;
 
        if (limit_type != SMU_DEFAULT_PPT_LIMIT)
                return -EINVAL;
@@ -1006,10 +1007,10 @@ int smu_v11_0_set_power_limit(struct smu_context *smu,
         * BIT 16-23: PowerSource
         * BIT 0-15: PowerLimit
         */
-       limit &= 0xFFFF;
-       limit |= 0 << 24;
-       limit |= (power_src) << 16;
-       ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit, NULL);
+       limit_param  = (limit & 0xFFFF);
+       limit_param |= 0 << 24;
+       limit_param |= (power_src) << 16;
+       ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit_param, NULL);
        if (ret) {
                dev_err(smu->adev->dev, "[%s] Set power limit Failed!\n", __func__);
                return ret;