• Nicholas Kazlauskas's avatar
    drm/amdgpu: Correct get_crtc_scanoutpos behavior when vpos >= vtotal · 520f08df
    Nicholas Kazlauskas authored
    When variable refresh rate is active the hardware counter can return
    a position >= vtotal. This results in a vpos being returned from
    amdgpu_display_get_crtc_scanoutpos that's a positive value. The
    positive value indicates to the caller that the display is
    currently in scanout when the display is actually still in vblank.
    
    This is because the vfront porch duration is unknown with variable
    refresh active and will end when either a page flip occurs or the
    timeout specified by the driver/display is reached.
    
    The behavior of the amdgpu_display_get_crtc_scanoutpos remains the
    same when the position is below vtotal. When the position is above
    vtotal the function will return a value that is effectively -vbl_end,
    the size of the vback porch.
    
    The only caller affected by this change is the DRM helper for
    calculating vblank timestamps. This change corrects behavior for
    calculating the page flip timestamp from being the previous timestamp
    to the calculation to the next timestamp when position >= vtotal.
    Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    520f08df
amdgpu_display.c 26.8 KB