• Nicholas Kazlauskas's avatar
    drm/amd/display: Fix negative cursor pos programming · 0921c41e
    Nicholas Kazlauskas authored
    [Why]
    If the cursor pos passed from DM is less than the plane_state->dst_rect
    top left corner then the unsigned cursor pos wraps around to a large
    positive number since cursor pos is a u32.
    
    There was an attempt to guard against this in hubp1_cursor_set_position
    by checking the src_x_offset and src_y_offset and offseting the
    cursor hotspot within hubp1_cursor_set_position.
    
    However, the cursor position itself is still being programmed
    incorrectly as a large value.
    
    This manifests itself visually as the cursor disappearing or containing
    strange artifacts near the middle of the screen on raven.
    
    [How]
    Don't subtract the destination rect top left corner from the pos but
    add it to the hotspot instead. This happens before the pos gets
    passed into hubp1_cursor_set_position.
    
    This achieves the same result but avoids the subtraction wrap around.
    With this fix the original cursor programming logic can be used again.
    Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    Reviewed-by: default avatarCharlene Liu <Charlene.Liu@amd.com>
    Acked-by: default avatarLeo Li <sunpeng.li@amd.com>
    Acked-by: default avatarMurton Liu <Murton.Liu@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    0921c41e
dcn10_hw_sequencer.c 82.9 KB