• David Francis's avatar
    drm/amd/display: If one stream full updates, full update all planes · c238bfe0
    David Francis authored
    [Why]
    On some compositors, with two monitors attached, VT terminal
    switch can cause a graphical issue by the following means:
    
    There are two streams, one for each monitor. Each stream has one
    plane
    
    current state:
    	M1:S1->P1
    	M2:S2->P2
    
    The user calls for a terminal switch and a commit is made to
    change both planes to linear swizzle mode. In atomic check,
    a new dc_state is constructed with new planes on each stream
    
    new state:
    	M1:S1->P3
    	M2:S2->P4
    
    In commit tail, each stream is committed, one at a time. The first
    stream (S1) updates properly, triggerring a full update and replacing
    the state
    
    current state:
    	M1:S1->P3
    	M2:S2->P4
    
    The update for S2 comes in, but dc detects that there is no difference
    between the stream and plane in the new and current states, and so
    triggers a fast update. The fast update does not program swizzle,
    so the second monitor is corrupted
    
    [How]
    Add a flag to dc_plane_state that forces full updates
    
    When a stream undergoes a full update, set this flag on all changed
    planes, then clear it on the current stream
    
    Subsequent streams will get full updates as a result
    Signed-off-by: default avatarDavid Francis <David.Francis@amd.com>
    Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    Reviewed-by: default avatarRoman Li <Roman.Li@amd.com>
    Acked-by: Bhawanpreet Lakha <Bhawanpreet Lakha@amd.com>
    Acked-by: default avatarNicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    c238bfe0
dc.h 20.4 KB