• Nicholas Kazlauskas's avatar
    drm/amd/display: Copy GSL groups when committing a new context · 21ffcc94
    Nicholas Kazlauskas authored
    [Why]
    DC configures the GSL group for the pipe when pipe_split is enabled
    and we're switching flip types (buffered <-> immediate flip) on DCN2.
    
    In order to record what GSL group the pipe is using DC stores it in
    the pipe's stream_res. DM is not aware of this internal grouping, nor
    is DC resource.
    
    So when DM creates a dc_state context and passes it to DC the current
    GSL group is lost - DM never knew about it in the first place.
    
    After 3 immediate flips we run out of GSL groups and we're no longer
    able to correctly perform *any* flip for multi-pipe scenarios.
    
    [How]
    The gsl_group needs to be copied to the new context.
    
    DM has no insight into GSL grouping and could even potentially create
    a brand new context without referencing current hardware state. So this
    makes the most sense to have happen in DC.
    
    There are two places where DC can apply a new context:
    - dc_commit_state
    - dc_commit_updates_for_stream
    
    But what's shared between both of these is apply_ctx_for_surface.
    
    This logic only matters for DCN2, so it can be placed in
    dcn20_apply_ctx_for_surface. Before doing any locking (where the GSL
    group is setup) we can copy over the GSL groups before committing the
    new context.
    Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    Reviewed-by: default avatarHersen Wu <hersen.wu@amd.com>
    Acked-by: default avatarLeo Li <sunpeng.li@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    21ffcc94
dcn20_hwseq.c 63.1 KB