aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1845-drm-amd-powerplay-add-helper-function-to-get-smu-fir.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1845-drm-amd-powerplay-add-helper-function-to-get-smu-fir.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1845-drm-amd-powerplay-add-helper-function-to-get-smu-fir.patch110
1 files changed, 110 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1845-drm-amd-powerplay-add-helper-function-to-get-smu-fir.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1845-drm-amd-powerplay-add-helper-function-to-get-smu-fir.patch
new file mode 100644
index 00000000..13599ef3
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1845-drm-amd-powerplay-add-helper-function-to-get-smu-fir.patch
@@ -0,0 +1,110 @@
+From 09fa34cab1ad45541c6d1df647b5cb0bd0f39b33 Mon Sep 17 00:00:00 2001
+From: Kevin Wang <kevin1.wang@amd.com>
+Date: Mon, 29 Apr 2019 14:47:41 +0800
+Subject: [PATCH 1845/2940] drm/amd/powerplay: add helper function to get smu
+ firmware & if version
+
+add this helper function to get smc version.
+
+Change-Id: I6b06470cefd10fafcf06df8a5e8cb03bf79622c0
+Signed-off-by: Kevin Wang <kevin1.wang@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 30 +++++++++++++++++++
+ .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 1 +
+ drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 23 +++++++++-----
+ 3 files changed, 46 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+index c058c784180e..52d919a8b70a 100644
+--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
++++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+@@ -30,6 +30,36 @@
+ #include "atom.h"
+ #include "amd_pcie.h"
+
++int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version, uint32_t *smu_version)
++{
++ int ret = 0;
++
++ if (!if_version && !smu_version)
++ return -EINVAL;
++
++ if (if_version) {
++ ret = smu_send_smc_msg(smu, SMU_MSG_GetDriverIfVersion);
++ if (ret)
++ return ret;
++
++ ret = smu_read_smc_arg(smu, if_version);
++ if (ret)
++ return ret;
++ }
++
++ if (smu_version) {
++ ret = smu_send_smc_msg(smu, SMU_MSG_GetSmuVersion);
++ if (ret)
++ return ret;
++
++ ret = smu_read_smc_arg(smu, smu_version);
++ if (ret)
++ return ret;
++ }
++
++ return ret;
++}
++
+ int smu_dpm_set_power_gate(struct smu_context *smu, uint32_t block_type,
+ bool gate)
+ {
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+index c8b168b3413b..89052414e9f1 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -767,4 +767,5 @@ extern int smu_dpm_set_power_gate(struct smu_context *smu,uint32_t block_type, b
+ extern int smu_handle_task(struct smu_context *smu,
+ enum amd_dpm_forced_level level,
+ enum amd_pp_task task_id);
++int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version, uint32_t *smu_version);
+ #endif
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+index 92903a4cc4d8..cd36c4272659 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+@@ -223,20 +223,27 @@ static int smu_v11_0_check_fw_status(struct smu_context *smu)
+
+ static int smu_v11_0_check_fw_version(struct smu_context *smu)
+ {
+- uint32_t smu_version = 0xff;
++ uint32_t if_version = 0xff, smu_version = 0xff;
++ uint16_t smu_major;
++ uint8_t smu_minor, smu_debug;
+ int ret = 0;
+
+- ret = smu_send_smc_msg(smu, SMU_MSG_GetDriverIfVersion);
++ ret = smu_get_smc_version(smu, &if_version, &smu_version);
+ if (ret)
+- goto err;
++ return ret;
+
+- ret = smu_read_smc_arg(smu, &smu_version);
+- if (ret)
+- goto err;
++ smu_major = (smu_version >> 16) & 0xffff;
++ smu_minor = (smu_version >> 8) & 0xff;
++ smu_debug = (smu_version >> 0) & 0xff;
++
++ pr_info("SMU Driver IF Version = 0x%08x, SMU FW Version = 0x%08x (%d.%d.%d)\n",
++ if_version, smu_version, smu_major, smu_minor, smu_debug);
+
+- if (smu_version != smu->smc_if_version)
++ if (if_version != smu->smc_if_version) {
++ pr_err("SMU driver if version not matched\n");
+ ret = -EINVAL;
+-err:
++ }
++
+ return ret;
+ }
+
+--
+2.17.1
+