From: Eric Bernstein <eric.bernst...@amd.com>

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.bernst...@amd.com>
Reviewed-by: Tony Cheng <tony.ch...@amd.com>
Acked-by: Harry Wentland <harry.wentl...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 8 ++++----
 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;
-- 
2.14.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to