• Daniel Vetter's avatar
    drm/i915: clear up the fdi/dp set_m_n confusion · 6cf86a5e
    Daniel Vetter authored
    There's a rather decent confusion going on around transcoder m_n
    values. So let's clarify:
    - All dp encoders need this, either on the pch transcoder if it's a
      pch port, or on the cpu transcoder/pipe if it's a cpu port.
    - fdi links need to have the right m_n values for the fdi link set in
      the cpu transcoder.
    
    To handle the pch vs transcoder stuff a bit better, extract transcoder
    set_m_n helpers. To make them simpler, set intel_crtc->cpu_transcoder
    als in ironlake_crtc_mode_set, so that gen5+ (where the cpu m_n
    registers are all at the same offset) can use it.
    
    Haswell modeset is decently confused about dp vs. edp vs. fdi. dp vs.
    edp works exactly the same as dp (since there's no pch dp any more),
    so use that as a check. And only set up the fdi m_n values if we
    really have a pch encoder present (which means we have a VGA encoder).
    
    On ilk+ we've called ironlake_set_m_n both for cpu_edp and for pch
    encoders. Now that dp_set_m_n handles all dp links (thanks to the
    pch encoder check), we can ditch the cpu_edp stuff from the
    fdi_set_m_n function.
    
    Since the dp_m_n values are not readily available, we need to
    carefully coax the edp values out of the encoder. Hence we can't (yet)
    kill this superflous complexity.
    
    v2: Rebase on top of the ivb fdi B/C check patch - we need to properly
    clear intel_crtc->fdi_lane, otherwise those checks will misfire.
    
    v3: Rebased on top of a s/IS_HASWELL/HAS_DDI/ patch from Paulo Zanoni.
    
    v4: Drop the addition of has_dp_encoder, it's in the wrong patch (Jesse).
    Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    6cf86a5e
intel_dp.c 83.4 KB