aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
index 8c1fa985c7d4..60a22d8da7f0 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
@@ -2170,6 +2170,12 @@ static int vega20_force_dpm_highest(struct pp_hwmgr *hwmgr)
2170 data->dpm_table.mem_table.dpm_state.soft_max_level = 2170 data->dpm_table.mem_table.dpm_state.soft_max_level =
2171 data->dpm_table.mem_table.dpm_levels[soft_level].value; 2171 data->dpm_table.mem_table.dpm_levels[soft_level].value;
2172 2172
2173 soft_level = vega20_find_highest_dpm_level(&(data->dpm_table.soc_table));
2174
2175 data->dpm_table.soc_table.dpm_state.soft_min_level =
2176 data->dpm_table.soc_table.dpm_state.soft_max_level =
2177 data->dpm_table.soc_table.dpm_levels[soft_level].value;
2178
2173 ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF); 2179 ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF);
2174 PP_ASSERT_WITH_CODE(!ret, 2180 PP_ASSERT_WITH_CODE(!ret,
2175 "Failed to upload boot level to highest!", 2181 "Failed to upload boot level to highest!",
@@ -2202,6 +2208,12 @@ static int vega20_force_dpm_lowest(struct pp_hwmgr *hwmgr)
2202 data->dpm_table.mem_table.dpm_state.soft_max_level = 2208 data->dpm_table.mem_table.dpm_state.soft_max_level =
2203 data->dpm_table.mem_table.dpm_levels[soft_level].value; 2209 data->dpm_table.mem_table.dpm_levels[soft_level].value;
2204 2210
2211 soft_level = vega20_find_lowest_dpm_level(&(data->dpm_table.soc_table));
2212
2213 data->dpm_table.soc_table.dpm_state.soft_min_level =
2214 data->dpm_table.soc_table.dpm_state.soft_max_level =
2215 data->dpm_table.soc_table.dpm_levels[soft_level].value;
2216
2205 ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF); 2217 ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF);
2206 PP_ASSERT_WITH_CODE(!ret, 2218 PP_ASSERT_WITH_CODE(!ret,
2207 "Failed to upload boot level to highest!", 2219 "Failed to upload boot level to highest!",
@@ -2218,8 +2230,32 @@ static int vega20_force_dpm_lowest(struct pp_hwmgr *hwmgr)
2218 2230
2219static int vega20_unforce_dpm_levels(struct pp_hwmgr *hwmgr) 2231static int vega20_unforce_dpm_levels(struct pp_hwmgr *hwmgr)
2220{ 2232{
2233 struct vega20_hwmgr *data =
2234 (struct vega20_hwmgr *)(hwmgr->backend);
2235 uint32_t soft_min_level, soft_max_level;
2221 int ret = 0; 2236 int ret = 0;
2222 2237
2238 soft_min_level = vega20_find_lowest_dpm_level(&(data->dpm_table.gfx_table));
2239 soft_max_level = vega20_find_highest_dpm_level(&(data->dpm_table.gfx_table));
2240 data->dpm_table.gfx_table.dpm_state.soft_min_level =
2241 data->dpm_table.gfx_table.dpm_levels[soft_min_level].value;
2242 data->dpm_table.gfx_table.dpm_state.soft_max_level =
2243 data->dpm_table.gfx_table.dpm_levels[soft_max_level].value;
2244
2245 soft_min_level = vega20_find_lowest_dpm_level(&(data->dpm_table.mem_table));
2246 soft_max_level = vega20_find_highest_dpm_level(&(data->dpm_table.mem_table));
2247 data->dpm_table.mem_table.dpm_state.soft_min_level =
2248 data->dpm_table.mem_table.dpm_levels[soft_min_level].value;
2249 data->dpm_table.mem_table.dpm_state.soft_max_level =
2250 data->dpm_table.mem_table.dpm_levels[soft_max_level].value;
2251
2252 soft_min_level = vega20_find_lowest_dpm_level(&(data->dpm_table.soc_table));
2253 soft_max_level = vega20_find_highest_dpm_level(&(data->dpm_table.soc_table));
2254 data->dpm_table.soc_table.dpm_state.soft_min_level =
2255 data->dpm_table.soc_table.dpm_levels[soft_min_level].value;
2256 data->dpm_table.soc_table.dpm_state.soft_max_level =
2257 data->dpm_table.soc_table.dpm_levels[soft_max_level].value;
2258
2223 ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF); 2259 ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF);
2224 PP_ASSERT_WITH_CODE(!ret, 2260 PP_ASSERT_WITH_CODE(!ret,
2225 "Failed to upload DPM Bootup Levels!", 2261 "Failed to upload DPM Bootup Levels!",
@@ -2457,6 +2493,7 @@ static int vega20_dpm_force_dpm_level(struct pp_hwmgr *hwmgr,
2457 return ret; 2493 return ret;
2458 vega20_force_clock_level(hwmgr, PP_SCLK, 1 << sclk_mask); 2494 vega20_force_clock_level(hwmgr, PP_SCLK, 1 << sclk_mask);
2459 vega20_force_clock_level(hwmgr, PP_MCLK, 1 << mclk_mask); 2495 vega20_force_clock_level(hwmgr, PP_MCLK, 1 << mclk_mask);
2496 vega20_force_clock_level(hwmgr, PP_SOCCLK, 1 << soc_mask);
2460 break; 2497 break;
2461 2498
2462 case AMD_DPM_FORCED_LEVEL_MANUAL: 2499 case AMD_DPM_FORCED_LEVEL_MANUAL: