• Mario Kleiner's avatar
    drm/amd/display: Rework vrr flip throttling for late vblank irq. · fdd1fe57
    Mario Kleiner authored
    For throttling to work correctly, we always need a baseline vblank
    count last_flip_vblank that increments at start of front-porch.
    
    This is the case for drm_crtc_vblank_count() in non-VRR mode, where
    the vblank irq fires at start of front-porch and triggers DRM core
    vblank handling, but it is no longer the case in VRR mode, where
    core vblank handling is done later, after end of front-porch.
    
    Therefore drm_crtc_vblank_count() is no longer useful for this.
    We also can't use drm_crtc_accurate_vblank_count(), as that would
    screw up vblank timestamps in VRR mode when called in front-porch.
    
    To solve this, use the cooked hardware vblank counter returned by
    amdgpu_get_vblank_counter_kms() instead, as that one is cooked to
    always increment at start of front-porch, independent of when
    vblank related irq's fire.
    
    This patch allows vblank irq handling to happen anywhere within
    vblank of even after it, without a negative impact on flip
    throttling, so followup patches can shift the vblank core
    handling trigger point wherever they need it.
    Signed-off-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
    Reviewed-by: default avatarNicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    fdd1fe57
amdgpu_mode.h 16.8 KB