• Mario Kleiner's avatar
    drm/amd/display: Compensate for pre-DCE12 BTR-VRR hw limitations. (v3) · 09aef2c4
    Mario Kleiner authored
    Pre-DCE12 needs special treatment for BTR / low framerate
    compensation for more stable behaviour:
    
    According to comments in the code and some testing on DCE-8
    and DCE-11, DCE-11 and earlier only apply VTOTAL_MIN/MAX
    programming with a lag of one frame, so the special BTR hw
    programming for intermediate fixed duration frames must be
    done inside the current frame at flip submission in atomic
    commit tail, ie. one vblank earlier, and the fixed refresh
    intermediate frame mode must be also terminated one vblank
    earlier on pre-DCE12 display engines.
    
    To achieve proper termination on < DCE-12 shift the point
    when the switch-back from fixed vblank duration to variable
    vblank duration happens from the start of VBLANK (vblank irq,
    as done on DCE-12+) to back-porch or end of VBLANK (handled
    by vupdate irq handler). We must leave the switch-back code
    inside VBLANK irq for DCE12+, as before.
    
    Doing this, we get much better behaviour of BTR for up-sweeps,
    ie. going from short to long frame durations (~high to low fps)
    and for constant framerate flips, as tested on DCE-8 and
    DCE-11. Behaviour is still not quite as good as on DCN-1
    though.
    
    On down-sweeps, going from long to short frame durations
    (low fps to high fps) < DCE-12 is a little bit improved,
    although by far not as much as for up-sweeps and constant
    fps.
    
    v2: Fix some wrong locking, as pointed out by Nicholas.
    v3: Simplify if-condition in vupdate-irq - nit by Nicholas.
    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>
    09aef2c4
amdgpu_dm.c 192 KB