diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3188-drm-amd-powerplay-fix-arcturus-real-time-clock-frequ.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3188-drm-amd-powerplay-fix-arcturus-real-time-clock-frequ.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3188-drm-amd-powerplay-fix-arcturus-real-time-clock-frequ.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3188-drm-amd-powerplay-fix-arcturus-real-time-clock-frequ.patch new file mode 100644 index 00000000..23b3c1ce --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3188-drm-amd-powerplay-fix-arcturus-real-time-clock-frequ.patch @@ -0,0 +1,60 @@ +From 359b0648b0975416ff29526fc5df4c398120e555 Mon Sep 17 00:00:00 2001 +From: Evan Quan <evan.quan@amd.com> +Date: Tue, 23 Jul 2019 11:42:24 +0800 +Subject: [PATCH 3188/4256] drm/amd/powerplay: fix arcturus real-time clock + frequency retrieval + +Make sure we can still get the accurate gfxclk/uclk/socclk frequency +even on dpm disabled. + +Signed-off-by: Evan Quan <evan.quan@amd.com> +Reviewed-by: Kenneth Feng <kenneth.feng@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/powerplay/arcturus_ppt.c | 30 +++++++++++++++++++- + 1 file changed, 29 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c +index 932a3cc7c1bc..ecbc1aad2697 100644 +--- a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c ++++ b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c +@@ -1055,7 +1055,35 @@ static int arcturus_get_current_clk_freq_by_table(struct smu_context *smu, + if (ret) + return ret; + +- *value = metrics.CurrClock[clk_id]; ++ switch (clk_id) { ++ case PPCLK_GFXCLK: ++ /* ++ * CurrClock[clk_id] can provide accurate ++ * output only when the dpm feature is enabled. ++ * We can use Average_* for dpm disabled case. ++ * But this is available for gfxclk/uclk/socclk. ++ */ ++ if (smu_feature_is_enabled(smu, SMU_FEATURE_DPM_GFXCLK_BIT)) ++ *value = metrics.CurrClock[PPCLK_GFXCLK]; ++ else ++ *value = metrics.AverageGfxclkFrequency; ++ break; ++ case PPCLK_UCLK: ++ if (smu_feature_is_enabled(smu, SMU_FEATURE_DPM_UCLK_BIT)) ++ *value = metrics.CurrClock[PPCLK_UCLK]; ++ else ++ *value = metrics.AverageUclkFrequency; ++ break; ++ case PPCLK_SOCCLK: ++ if (smu_feature_is_enabled(smu, SMU_FEATURE_DPM_SOCCLK_BIT)) ++ *value = metrics.CurrClock[PPCLK_SOCCLK]; ++ else ++ *value = metrics.AverageSocclkFrequency; ++ break; ++ default: ++ *value = metrics.CurrClock[clk_id]; ++ break; ++ } + + return ret; + } +-- +2.17.1 + |