• Ville Syrjälä's avatar
    drm/i915: Implement transcoder LRR for TGL+ · 16a93594
    Ville Syrjälä authored
    Implement low refresh rate (LRR) where we change the vblank
    length by hand as requested, but otherwise keep the timing
    generator running in non-VRR mode (ie. fixed refresh rate).
    
    The panel itself must support VRR for this to work, and
    only TGL+ has the double buffred TRANS_VTOTAL.VTOTAL that
    we need to make the switch properly. The double buffer
    latching happens at the start of transcoders undelayed
    vblank. The other thing that we change is
    TRANS_VBLANK.VBLANK_END but the hardware entirely ignores
    that in DP mode. But I decided to keep writing it anyway
    just to avoid more special cases in readout/state check.
    
    v2: Document that TRANS_VBLANK.VBLANK_END is ignored by
        the hardware
    v3: Reconcile with VRR fastset
        Adjust update_lrr flag behaviour
        Make sure timings stay within VRR range
    v4: Fix up update_m_n vs. update_lrr rebase fail (Manasi)
        Drop DOUBLE_BUFFER_VACTIVE define as it's not needed (Manasi)
    
    TODO: Hook LRR into the automatic DRRS downclocking stuff?
    
    Cc: Manasi Navare <navaremanasi@chromium.org>
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230915103800.14218-1-ville.syrjala@linux.intel.comReviewed-by: default avatarManasi Navare <navaremanasi@chromium.org>
    16a93594
intel_vrr.c 8.98 KB