diff options
author | Eric Bernstein <eric.bernstein@amd.com> | 2017-11-16 14:29:10 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-12-14 10:52:25 -0500 |
commit | 49fac0b46a689519c13efafba9e754525d420136 (patch) | |
tree | 7546519f42dcf920614d6c12ab7338869b5e5885 | |
parent | c1fba8204b909d195f9dc4a638921260ac792124 (diff) | |
download | lwn-49fac0b46a689519c13efafba9e754525d420136.tar.gz lwn-49fac0b46a689519c13efafba9e754525d420136.zip |
drm/amd/display: MPC updates
Fix update_mpcc logic to only call assert_mpcc_idle_before_connect
if mpcc is not already being used (and required removal).
Update set_out_rate_control to include optional flow control parameter.
In init_mpcc_from_hw check for case where bot_sel is same as mpcc_id.
Signed-off-by: Eric Bernstein <eric.bernstein@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c | 5 |
2 files changed, 8 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c index 3abd6d92aae0..14d1cffa84d9 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c @@ -1923,10 +1923,10 @@ static void update_mpcc(struct dc *dc, struct pipe_ctx *pipe_ctx) /* remove MPCC if being used */ if (new_mpcc != NULL) mpc->funcs->remove_mpcc(mpc, mpc_tree_params, new_mpcc); - - if (dc->debug.sanity_checks) - mpc->funcs->assert_mpcc_idle_before_connect( - dc->res_pool->mpc, mpcc_id); + else + if (dc->debug.sanity_checks) + mpc->funcs->assert_mpcc_idle_before_connect( + dc->res_pool->mpc, mpcc_id); /* Call MPC to insert new plane */ new_mpcc = mpc->funcs->insert_plane(dc->res_pool->mpc, diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c index a13d25d1c568..d6606180b50a 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c @@ -300,11 +300,11 @@ void mpc1_remove_mpcc( if (temp_mpcc && temp_mpcc->mpcc_bot == mpcc_to_remove) { found = true; + temp_mpcc->mpcc_bot = mpcc_to_remove->mpcc_bot; if (mpcc_to_remove->mpcc_bot) { /* remove MPCC in middle of list */ REG_SET(MPCC_BOT_SEL[temp_mpcc->mpcc_id], 0, MPCC_BOT_SEL, mpcc_to_remove->mpcc_bot->mpcc_id); - temp_mpcc->mpcc_bot = mpcc_to_remove->mpcc_bot; } else { /* remove MPCC from bottom of list */ REG_SET(MPCC_BOT_SEL[temp_mpcc->mpcc_id], 0, @@ -374,6 +374,9 @@ void mpc1_init_mpcc_list_from_hw( REG_GET(MPCC_TOP_SEL[mpcc_id], MPCC_TOP_SEL, &top_sel); REG_GET(MPCC_BOT_SEL[mpcc_id], MPCC_BOT_SEL, &bot_sel); + if (bot_sel == mpcc_id) + bot_sel = 0xf; + if ((opp_id == tree->opp_id) && (top_sel != 0xf)) { mpcc = mpc1_get_mpcc(mpc, mpcc_id); mpcc->dpp_id = top_sel; |