diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4718-drm-amd-powerplay-pre-check-the-SMU-state-before-iss.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4718-drm-amd-powerplay-pre-check-the-SMU-state-before-iss.patch | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4718-drm-amd-powerplay-pre-check-the-SMU-state-before-iss.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4718-drm-amd-powerplay-pre-check-the-SMU-state-before-iss.patch new file mode 100644 index 00000000..c9ef1e20 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4718-drm-amd-powerplay-pre-check-the-SMU-state-before-iss.patch @@ -0,0 +1,95 @@ +From cfa7c454a7f8b3e20067bf4b6e8084c40d5bab3c Mon Sep 17 00:00:00 2001 +From: Evan Quan <evan.quan@amd.com> +Date: Wed, 4 Dec 2019 17:29:52 +0800 +Subject: [PATCH 4718/4736] drm/amd/powerplay: pre-check the SMU state before + issuing message + +Abort the message issuing if the SMU was not in the right state. + +Change-Id: Ida9f911e051f6e78de4f475956c78637e56e6ea3 +Signed-off-by: Evan Quan <evan.quan@amd.com> +Reviewed-by: Kenneth Feng <kenneth.feng@amd.com> +--- + drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 16 ++++++++-------- + drivers/gpu/drm/amd/powerplay/smu_v12_0.c | 16 ++++++++-------- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c +index 9e405a60ee6e..d65187993ef9 100644 +--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c ++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c +@@ -77,15 +77,13 @@ static int smu_v11_0_wait_for_response(struct smu_context *smu) + for (i = 0; i < timeout; i++) { + cur_value = RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90); + if ((cur_value & MP1_C2PMSG_90__CONTENT_MASK) != 0) +- break; ++ return cur_value == 0x1 ? 0 : -EIO; ++ + udelay(1); + } + + /* timeout means wrong logic */ +- if (i == timeout) +- return -ETIME; +- +- return RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90) == 0x1 ? 0 : -EIO; ++ return -ETIME; + } + + int +@@ -101,9 +99,11 @@ smu_v11_0_send_msg_with_param(struct smu_context *smu, + return index; + + ret = smu_v11_0_wait_for_response(smu); +- if (ret) +- pr_err("failed send message: %10s (%d) \tparam: 0x%08x response %#x\n", +- smu_get_message_name(smu, msg), index, param, ret); ++ if (ret) { ++ pr_err("Msg issuing pre-check failed and " ++ "SMU may be not in the right state!\n"); ++ return ret; ++ } + + WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); + +diff --git a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c +index 269a7d73b58d..951aa4570a04 100644 +--- a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c ++++ b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c +@@ -66,15 +66,13 @@ int smu_v12_0_wait_for_response(struct smu_context *smu) + for (i = 0; i < adev->usec_timeout; i++) { + cur_value = RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90); + if ((cur_value & MP1_C2PMSG_90__CONTENT_MASK) != 0) +- break; ++ return cur_value == 0x1 ? 0 : -EIO; ++ + udelay(1); + } + + /* timeout means wrong logic */ +- if (i == adev->usec_timeout) +- return -ETIME; +- +- return RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90) == 0x1 ? 0 : -EIO; ++ return -ETIME; + } + + int +@@ -90,9 +88,11 @@ smu_v12_0_send_msg_with_param(struct smu_context *smu, + return index; + + ret = smu_v12_0_wait_for_response(smu); +- if (ret) +- pr_err("Failed to send message 0x%x, response 0x%x, param 0x%x\n", +- index, ret, param); ++ if (ret) { ++ pr_err("Msg issuing pre-check failed and " ++ "SMU may be not in the right state!\n"); ++ return ret; ++ } + + WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); + +-- +2.17.1 + |