Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/display: support new PMFW interface to disable Z9 only

[Why]
Need to disable Z9 on configurations that only support Z10

[How]
Support new PMFW interface to disable Z9

Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Eric Yang <Eric.Yang2@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Eric Yang and committed by
Alex Deucher
b4c55e52 fd9048dd

+22 -10
+3 -3
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c
··· 139 139 * also if safe to lower is false, we just go in the higher state 140 140 */ 141 141 if (safe_to_lower) { 142 - if (new_clocks->zstate_support == DCN_ZSTATE_SUPPORT_ALLOW && 142 + if (new_clocks->zstate_support != DCN_ZSTATE_SUPPORT_DISALLOW && 143 143 new_clocks->zstate_support != clk_mgr_base->clks.zstate_support) { 144 - dcn31_smu_set_Z9_support(clk_mgr, true); 144 + dcn31_smu_set_zstate_support(clk_mgr, new_clocks->zstate_support); 145 145 dm_helpers_enable_periodic_detection(clk_mgr_base->ctx, true); 146 146 clk_mgr_base->clks.zstate_support = new_clocks->zstate_support; 147 147 } ··· 167 167 } else { 168 168 if (new_clocks->zstate_support == DCN_ZSTATE_SUPPORT_DISALLOW && 169 169 new_clocks->zstate_support != clk_mgr_base->clks.zstate_support) { 170 - dcn31_smu_set_Z9_support(clk_mgr, false); 170 + dcn31_smu_set_zstate_support(clk_mgr, DCN_ZSTATE_SUPPORT_DISALLOW); 171 171 dm_helpers_enable_periodic_detection(clk_mgr_base->ctx, false); 172 172 clk_mgr_base->clks.zstate_support = new_clocks->zstate_support; 173 173 }
+10 -5
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c
··· 306 306 VBIOSSMC_MSG_TransferTableDram2Smu, TABLE_WATERMARKS); 307 307 } 308 308 309 - void dcn31_smu_set_Z9_support(struct clk_mgr_internal *clk_mgr, bool support) 309 + void dcn31_smu_set_zstate_support(struct clk_mgr_internal *clk_mgr, enum dcn_zstate_support_state support) 310 310 { 311 311 //TODO: Work with smu team to define optimization options. 312 - unsigned int msg_id; 312 + unsigned int msg_id, param; 313 313 314 314 if (!clk_mgr->smu_present) 315 315 return; 316 316 317 - if (support) 318 - msg_id = VBIOSSMC_MSG_AllowZstatesEntry; 317 + if (support == DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY) 318 + param = 1; 319 319 else 320 + param = 0; 321 + 322 + if (support == DCN_ZSTATE_SUPPORT_DISALLOW) 320 323 msg_id = VBIOSSMC_MSG_DisallowZstatesEntry; 324 + else 325 + msg_id = VBIOSSMC_MSG_AllowZstatesEntry; 321 326 322 327 dcn31_smu_send_msg_with_param( 323 328 clk_mgr, 324 329 msg_id, 325 - 0); 330 + param); 326 331 327 332 } 328 333
+1 -1
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.h
··· 265 265 void dcn31_smu_transfer_dpm_table_smu_2_dram(struct clk_mgr_internal *clk_mgr); 266 266 void dcn31_smu_transfer_wm_table_dram_2_smu(struct clk_mgr_internal *clk_mgr); 267 267 268 - void dcn31_smu_set_Z9_support(struct clk_mgr_internal *clk_mgr, bool support); 268 + void dcn31_smu_set_zstate_support(struct clk_mgr_internal *clk_mgr, enum dcn_zstate_support_state support); 269 269 void dcn31_smu_set_dtbclk(struct clk_mgr_internal *clk_mgr, bool enable); 270 270 271 271 #endif /* DAL_DC_31_SMU_H_ */
+1
drivers/gpu/drm/amd/display/dc/dc.h
··· 396 396 enum dcn_zstate_support_state { 397 397 DCN_ZSTATE_SUPPORT_UNKNOWN, 398 398 DCN_ZSTATE_SUPPORT_ALLOW, 399 + DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY, 399 400 DCN_ZSTATE_SUPPORT_DISALLOW, 400 401 }; 401 402 #endif
+7 -1
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
··· 3093 3093 else if (context->stream_count == 1 && context->streams[0]->signal == SIGNAL_TYPE_EDP) { 3094 3094 struct dc_link *link = context->streams[0]->sink->link; 3095 3095 3096 - if (link->link_index == 0 && context->bw_ctx.dml.vba.StutterPeriod > 5000.0) 3096 + /* zstate only supported on PWRSEQ0 */ 3097 + if (link->link_index != 0) 3098 + return DCN_ZSTATE_SUPPORT_DISALLOW; 3099 + 3100 + if (context->bw_ctx.dml.vba.StutterPeriod > 5000.0) 3097 3101 return DCN_ZSTATE_SUPPORT_ALLOW; 3102 + else if (link->psr_settings.psr_feature_enabled) 3103 + return DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY; 3098 3104 else 3099 3105 return DCN_ZSTATE_SUPPORT_DISALLOW; 3100 3106 } else