diff options
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.patch | 110 |
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 + |