• Ville Syrjälä's avatar
    drm/i915: Force DPLL calculation for TC ports after readout · eddb4afc
    Ville Syrjälä authored
    We always allocate two DPLLs (TC and TBT) for TC ports. This
    is because we can't know ahead of time wherher we need to put
    the PHY into DP-Alt or TBT mode.
    
    However during readout we can obviously only read out the state
    of the DPLL that the port is actually using. Thus the state after
    readout will not have both DPLLs populated.
    
    We run into problems if during readout the TC port is in DP-Alt
    mode, but we then perform a modeset on the port without going
    through the full .compute_config() machinery, and during said
    modeset the port cannot be switched back into DP-Alt mode and
    we need to take the TBT fallback path. Such a modeset can
    happen eg. due to cdclk reprogramming.
    
    This wasn't a problem earlier because we did all the DPLL
    calculations much later in the modeset. So even if flagged
    a modeset very late we'd still have gone through the DPLL
    calculations. But now all the DPLL calculations happen much
    earlier and so we need to deal with it, or else we'll attempt
    a modeset without a DPLL.
    
    To guarantee that we always have both DPLLs fully cal/ulated
    for TC ports force a full modeset computation during the
    initial commit.
    
    v2: Avoid bitwise operation on bool (Jani)
        Call the return variable 'fastset' to convey its meaning
    Reported-by: default avatarLee Shawn C <shawn.c.lee@intel.com>
    Fixes: b000abd3 ("drm/i915: Do .crtc_compute_clock() earlier")
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220922191236.4194-1-ville.syrjala@linux.intel.comReviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
    eddb4afc
intel_ddi.c 135 KB