| From 91acd317b2bde867ab270884b2d366e2754bfbd2 Mon Sep 17 00:00:00 2001 |
| From: Kenneth Feng <kenneth.feng@amd.com> |
| Date: Fri, 18 Jan 2019 18:08:19 +0800 |
| Subject: drm/amd/powerplay: OD setting fix on Vega10 |
| |
| [ Upstream commit 6d87dc97eb3341de3f7b1efa3156cb0e014f4a96 ] |
| |
| gfxclk for OD setting is limited to 1980M for non-acg |
| ASICs of Vega10 |
| |
| Signed-off-by: Kenneth Feng <kenneth.feng@amd.com> |
| Reviewed-by: Evan Quan <evan.quan@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../powerplay/hwmgr/vega10_processpptables.c | 22 ++++++++++++++++++- |
| 1 file changed, 21 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c |
| index e343df1903754..05bb87a54e909 100644 |
| --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c |
| +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c |
| @@ -32,6 +32,7 @@ |
| #include "vega10_pptable.h" |
| |
| #define NUM_DSPCLK_LEVELS 8 |
| +#define VEGA10_ENGINECLOCK_HARDMAX 198000 |
| |
| static void set_hw_cap(struct pp_hwmgr *hwmgr, bool enable, |
| enum phm_platform_caps cap) |
| @@ -258,7 +259,26 @@ static int init_over_drive_limits( |
| struct pp_hwmgr *hwmgr, |
| const ATOM_Vega10_POWERPLAYTABLE *powerplay_table) |
| { |
| - hwmgr->platform_descriptor.overdriveLimit.engineClock = |
| + const ATOM_Vega10_GFXCLK_Dependency_Table *gfxclk_dep_table = |
| + (const ATOM_Vega10_GFXCLK_Dependency_Table *) |
| + (((unsigned long) powerplay_table) + |
| + le16_to_cpu(powerplay_table->usGfxclkDependencyTableOffset)); |
| + bool is_acg_enabled = false; |
| + ATOM_Vega10_GFXCLK_Dependency_Record_V2 *patom_record_v2; |
| + |
| + if (gfxclk_dep_table->ucRevId == 1) { |
| + patom_record_v2 = |
| + (ATOM_Vega10_GFXCLK_Dependency_Record_V2 *)gfxclk_dep_table->entries; |
| + is_acg_enabled = |
| + (bool)patom_record_v2[gfxclk_dep_table->ucNumEntries-1].ucACGEnable; |
| + } |
| + |
| + if (powerplay_table->ulMaxODEngineClock > VEGA10_ENGINECLOCK_HARDMAX && |
| + !is_acg_enabled) |
| + hwmgr->platform_descriptor.overdriveLimit.engineClock = |
| + VEGA10_ENGINECLOCK_HARDMAX; |
| + else |
| + hwmgr->platform_descriptor.overdriveLimit.engineClock = |
| le32_to_cpu(powerplay_table->ulMaxODEngineClock); |
| hwmgr->platform_descriptor.overdriveLimit.memoryClock = |
| le32_to_cpu(powerplay_table->ulMaxODMemoryClock); |
| -- |
| 2.19.1 |
| |