• Paulo Zanoni's avatar
    drm/i915: add TRANSCODER_EDP · a5c961d1
    Paulo Zanoni authored
    Before Haswell we used to have the CPU pipes and the PCH transcoders.
    We had the same amount of pipes and transcoders, and there was a 1:1
    mapping between them. After Haswell what we used to call CPU pipe was
    split into CPU pipe and CPU transcoder. So now we have 3 CPU pipes (A,
    B and C), 4 CPU transcoders (A, B, C and EDP) and 1 PCH transcoder
    (only used for VGA).
    
    For all the outputs except for EDP we have an 1:1 mapping on the CPU
    pipes and CPU transcoders, so if you're using CPU pipe A you have to
    use CPU transcoder A. When have an eDP output you have to use
    transcoder EDP and you can attach this CPU transcoder to any of the 3
    CPU pipes. When using VGA you need to select a pair of matching CPU
    pipes/transcoders (A/A, B/B, C/C) and you also need to enable/use the
    PCH transcoder.
    
    For now we're just creating the cpu_transcoder definitions and setting
    cpu_transcoder to TRANSCODER_EDP on DDI eDP code, but none of the
    registers was ported to use transcoder instead of pipe. The goal is to
    keep the code backwards-compatible since on all cases except when
    using eDP we must have pipe == cpu_transcoder.
    
    V2: Comment the haswell_crtc_off chunk, suggested by Damien Lespiau
    and Daniel Vetter.
    
    We currently need the haswell_crtc_off chunk because TRANSCODER_EDP
    can be used by any CRTC, so when you stop using it you have to stop
    saying you're using it, otherwise you may have at some point 2 CRTCs
    claiming they're using TRANSCODER_EDP (a disabled CRTC and an enabled
    one), then the HW state readout code will get completely confused.
    
    In other words:
    
    Imagine the following case:
      xrandr --output eDP1 --auto --crtc 0
      xrandr --output eDP1 --off
      xrandr --output eDP1 --auto --crtc 2
    
    After the last command you could get a "pipe A assertion failure
    (expected off, current on)" because CRTC 0 still claims it's using
    TRANSCODER_EDP, so the HW state readout function will read it
    (through PIPECONF) and expect it to be off, when it's actually on
    because it's being used by CRTC 2.
    
    So when we make "intel_crtc->cpu_transcoder = intel_crtc->pipe" we
    make sure we're pointing to our own original CRTC which is certainly
    not used by any other CRTC.
    Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Reviewed-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    a5c961d1
i915_reg.h 165 KB