]> git.dujemihanovic.xyz Git - linux.git/commitdiff
drm/amd/display: Make unbounded req update separate from dlg/ttu
authorAlvin Lee <alvin.lee2@amd.com>
Fri, 5 May 2023 15:06:26 +0000 (11:06 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 13:39:49 +0000 (09:39 -0400)
[Description]
- Updates to unbounded requesting should not be conditional
  on updates to dlg / ttu, as this could prevent unbounded
  requesting from being updated if dlg / ttu does not change

Reviewed-by: Jun Lei <jun.lei@amd.com>
Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alvin Lee <alvin.lee2@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
drivers/gpu/drm/amd/display/dc/inc/core_types.h

index b3e187b1347d873fffc4935c08fb32ba000401cd..e74c3ce561ab65c1c17806d465fe68a8e843b3f2 100644 (file)
@@ -1361,6 +1361,7 @@ static void dcn20_detect_pipe_changes(struct pipe_ctx *old_pipe, struct pipe_ctx
                new_pipe->update_flags.bits.dppclk = 1;
                new_pipe->update_flags.bits.hubp_interdependent = 1;
                new_pipe->update_flags.bits.hubp_rq_dlg_ttu = 1;
+               new_pipe->update_flags.bits.unbounded_req = 1;
                new_pipe->update_flags.bits.gamut_remap = 1;
                new_pipe->update_flags.bits.scaler = 1;
                new_pipe->update_flags.bits.viewport = 1;
@@ -1504,6 +1505,9 @@ static void dcn20_detect_pipe_changes(struct pipe_ctx *old_pipe, struct pipe_ctx
                                memcmp(&old_pipe->rq_regs, &new_pipe->rq_regs, sizeof(old_pipe->rq_regs)))
                        new_pipe->update_flags.bits.hubp_rq_dlg_ttu = 1;
        }
+
+       if (old_pipe->unbounded_req != new_pipe->unbounded_req)
+               new_pipe->update_flags.bits.unbounded_req = 1;
 }
 
 static void dcn20_update_dchubp_dpp(
@@ -1537,10 +1541,11 @@ static void dcn20_update_dchubp_dpp(
                        &pipe_ctx->ttu_regs,
                        &pipe_ctx->rq_regs,
                        &pipe_ctx->pipe_dlg_param);
-
-               if (hubp->funcs->set_unbounded_requesting)
-                       hubp->funcs->set_unbounded_requesting(hubp, pipe_ctx->unbounded_req);
        }
+
+       if (pipe_ctx->update_flags.bits.unbounded_req && hubp->funcs->set_unbounded_requesting)
+               hubp->funcs->set_unbounded_requesting(hubp, pipe_ctx->unbounded_req);
+
        if (pipe_ctx->update_flags.bits.hubp_interdependent)
                hubp->funcs->hubp_setup_interdependent(
                        hubp,
index b4c1cc6dc857f82354007988064f8daf4a93bb2e..d8dd143cf6ea801c0613056e348e28e7d0f35fbe 100644 (file)
@@ -374,6 +374,7 @@ union pipe_update_flags {
                uint32_t viewport : 1;
                uint32_t plane_changed : 1;
                uint32_t det_size : 1;
+               uint32_t unbounded_req : 1;
        } bits;
        uint32_t raw;
 };