aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4718-drm-amd-powerplay-pre-check-the-SMU-state-before-iss.patch
diff options
context:
space:
mode:
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.patch95
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
+