Skip to content

Commit 93b6bd3

Browse files
Eric Yangalexdeucher
authored andcommitted
drm/amd/display: change zstate allow msg condition
[Why] PMFW message which previously thought to only control Z9 controls both Z9 and Z10. Also HW design team requested that Z9 must only be supported on eDP due to content protection interop. [How] Change zstate support condition to match updated policy Reviewed-by: Nicholas Kazlauskas <[email protected]> Acked-by: Rodrigo Siqueira <[email protected]> Signed-off-by: Eric Yang <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent ce350c6 commit 93b6bd3

File tree

3 files changed

+45
-25
lines changed

3 files changed

+45
-25
lines changed

drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,10 @@ static void dcn31_update_clocks(struct clk_mgr *clk_mgr_base,
139139
* also if safe to lower is false, we just go in the higher state
140140
*/
141141
if (safe_to_lower) {
142-
if (new_clocks->z9_support == DCN_Z9_SUPPORT_ALLOW &&
143-
new_clocks->z9_support != clk_mgr_base->clks.z9_support) {
142+
if (new_clocks->zstate_support == DCN_ZSTATE_SUPPORT_ALLOW &&
143+
new_clocks->zstate_support != clk_mgr_base->clks.zstate_support) {
144144
dcn31_smu_set_Z9_support(clk_mgr, true);
145-
clk_mgr_base->clks.z9_support = new_clocks->z9_support;
145+
clk_mgr_base->clks.zstate_support = new_clocks->zstate_support;
146146
}
147147

148148
if (clk_mgr_base->clks.dtbclk_en && !new_clocks->dtbclk_en) {
@@ -163,10 +163,10 @@ static void dcn31_update_clocks(struct clk_mgr *clk_mgr_base,
163163
}
164164
}
165165
} else {
166-
if (new_clocks->z9_support == DCN_Z9_SUPPORT_DISALLOW &&
167-
new_clocks->z9_support != clk_mgr_base->clks.z9_support) {
166+
if (new_clocks->zstate_support == DCN_ZSTATE_SUPPORT_DISALLOW &&
167+
new_clocks->zstate_support != clk_mgr_base->clks.zstate_support) {
168168
dcn31_smu_set_Z9_support(clk_mgr, false);
169-
clk_mgr_base->clks.z9_support = new_clocks->z9_support;
169+
clk_mgr_base->clks.zstate_support = new_clocks->zstate_support;
170170
}
171171

172172
if (!clk_mgr_base->clks.dtbclk_en && new_clocks->dtbclk_en) {
@@ -286,7 +286,7 @@ static void dcn31_init_clocks(struct clk_mgr *clk_mgr)
286286
clk_mgr->clks.p_state_change_support = true;
287287
clk_mgr->clks.prev_p_state_change_support = true;
288288
clk_mgr->clks.pwr_state = DCN_PWR_STATE_UNKNOWN;
289-
clk_mgr->clks.z9_support = DCN_Z9_SUPPORT_UNKNOWN;
289+
clk_mgr->clks.zstate_support = DCN_ZSTATE_SUPPORT_UNKNOWN;
290290
}
291291

292292
static bool dcn31_are_clock_states_equal(struct dc_clocks *a,
@@ -300,7 +300,7 @@ static bool dcn31_are_clock_states_equal(struct dc_clocks *a,
300300
return false;
301301
else if (a->dcfclk_deep_sleep_khz != b->dcfclk_deep_sleep_khz)
302302
return false;
303-
else if (a->z9_support != b->z9_support)
303+
else if (a->zstate_support != b->zstate_support)
304304
return false;
305305
else if (a->dtbclk_en != b->dtbclk_en)
306306
return false;

drivers/gpu/drm/amd/display/dc/dc.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -354,10 +354,10 @@ enum dcn_pwr_state {
354354
};
355355

356356
#if defined(CONFIG_DRM_AMD_DC_DCN)
357-
enum dcn_z9_support_state {
358-
DCN_Z9_SUPPORT_UNKNOWN,
359-
DCN_Z9_SUPPORT_ALLOW,
360-
DCN_Z9_SUPPORT_DISALLOW,
357+
enum dcn_zstate_support_state {
358+
DCN_ZSTATE_SUPPORT_UNKNOWN,
359+
DCN_ZSTATE_SUPPORT_ALLOW,
360+
DCN_ZSTATE_SUPPORT_DISALLOW,
361361
};
362362
#endif
363363
/*
@@ -378,7 +378,7 @@ struct dc_clocks {
378378
int dramclk_khz;
379379
bool p_state_change_support;
380380
#if defined(CONFIG_DRM_AMD_DC_DCN)
381-
enum dcn_z9_support_state z9_support;
381+
enum dcn_zstate_support_state zstate_support;
382382
bool dtbclk_en;
383383
#endif
384384
enum dcn_pwr_state pwr_state;

drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3081,14 +3081,44 @@ static bool is_dtbclk_required(struct dc *dc, struct dc_state *context)
30813081
return false;
30823082
}
30833083

3084+
static enum dcn_zstate_support_state decide_zstate_support(struct dc *dc, struct dc_state *context)
3085+
{
3086+
int plane_count;
3087+
int i;
3088+
3089+
plane_count = 0;
3090+
for (i = 0; i < dc->res_pool->pipe_count; i++) {
3091+
if (context->res_ctx.pipe_ctx[i].plane_state)
3092+
plane_count++;
3093+
}
3094+
3095+
/*
3096+
* Zstate is allowed in following scenarios:
3097+
* 1. Single eDP with PSR enabled
3098+
* 2. 0 planes (No memory requests)
3099+
* 3. Single eDP without PSR but > 5ms stutter period
3100+
*/
3101+
if (plane_count == 0)
3102+
return DCN_ZSTATE_SUPPORT_ALLOW;
3103+
else if (context->stream_count == 1 && context->streams[0]->signal == SIGNAL_TYPE_EDP) {
3104+
struct dc_link *link = context->streams[0]->sink->link;
3105+
3106+
if ((link->link_index == 0 && link->psr_settings.psr_feature_enabled)
3107+
|| context->bw_ctx.dml.vba.StutterPeriod > 5000.0)
3108+
return DCN_ZSTATE_SUPPORT_ALLOW;
3109+
else
3110+
return DCN_ZSTATE_SUPPORT_DISALLOW;
3111+
} else
3112+
return DCN_ZSTATE_SUPPORT_DISALLOW;
3113+
}
3114+
30843115
void dcn20_calculate_dlg_params(
30853116
struct dc *dc, struct dc_state *context,
30863117
display_e2e_pipe_params_st *pipes,
30873118
int pipe_cnt,
30883119
int vlevel)
30893120
{
30903121
int i, pipe_idx;
3091-
int plane_count;
30923122

30933123
/* Writeback MCIF_WB arbitration parameters */
30943124
dc->res_pool->funcs->set_mcif_arb_params(dc, context, pipes, pipe_cnt);
@@ -3104,17 +3134,7 @@ void dcn20_calculate_dlg_params(
31043134
!= dm_dram_clock_change_unsupported;
31053135
context->bw_ctx.bw.dcn.clk.dppclk_khz = 0;
31063136

3107-
context->bw_ctx.bw.dcn.clk.z9_support = (context->bw_ctx.dml.vba.StutterPeriod > 5000.0) ?
3108-
DCN_Z9_SUPPORT_ALLOW : DCN_Z9_SUPPORT_DISALLOW;
3109-
3110-
plane_count = 0;
3111-
for (i = 0; i < dc->res_pool->pipe_count; i++) {
3112-
if (context->res_ctx.pipe_ctx[i].plane_state)
3113-
plane_count++;
3114-
}
3115-
3116-
if (plane_count == 0)
3117-
context->bw_ctx.bw.dcn.clk.z9_support = DCN_Z9_SUPPORT_ALLOW;
3137+
context->bw_ctx.bw.dcn.clk.zstate_support = decide_zstate_support(dc, context);
31183138

31193139
context->bw_ctx.bw.dcn.clk.dtbclk_en = is_dtbclk_required(dc, context);
31203140

0 commit comments

Comments
 (0)