lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 219/314] drm/amd/display: Revalidate bandwidth before commiting DC updates
    Date
    From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>

    [ Upstream commit a24eaa5c51255b344d5a321f1eeb3205f2775498 ]

    [Why]
    Whenever we switch between tiled formats without also switching pixel
    formats or doing anything else that recreates the DC plane state we
    can run into underflow or hangs since we're not updating the
    DML parameters before committing to the hardware.

    [How]
    If the update type is FULL then call validate_bandwidth again to update
    the DML parmeters before committing the state.

    This is basically just a workaround and protective measure against
    update types being added DC where we could run into this issue in
    the future.

    We can only fully validate the state in advance before applying it to
    the hardware if we recreate all the plane and stream states since
    we can't modify what's currently in use.

    The next step is to update DM to ensure that we're creating the plane
    and stream states for whatever could potentially be a full update in
    DC to pre-emptively recreate the state for DC global validation.

    The workaround can stay until this has been fixed in DM.

    Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    Reviewed-by: Hersen Wu <hersenxs.wu@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/amd/display/dc/core/dc.c | 6 ++++++
    1 file changed, 6 insertions(+)

    diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
    index 2028dc017f7a0..b95a58aa82d91 100644
    --- a/drivers/gpu/drm/amd/display/dc/core/dc.c
    +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
    @@ -2230,6 +2230,12 @@ void dc_commit_updates_for_stream(struct dc *dc,

    copy_stream_update_to_stream(dc, context, stream, stream_update);

    + if (!dc->res_pool->funcs->validate_bandwidth(dc, context, false)) {
    + DC_ERROR("Mode validation failed for stream update!\n");
    + dc_release_state(context);
    + return;
    + }
    +
    commit_planes_for_stream(
    dc,
    srf_updates,
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 23:14    [W:4.110 / U:0.296 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site