• Daniel Vetter's avatar
    drm/i915: read out the modeset hw state at load and resume time · 24929352
    Daniel Vetter authored
    ... instead of resetting a few things and hoping that this will work
    out.
    
    To properly disable the output pipelines at the initial modeset after
    resume or boot up we need to have an accurate picture of which outputs
    are enabled and connected to which crtcs. Otherwise we risk disabling
    things at the wrong time, which can lead to hangs (or at least royally
    confused panels), both requiring a walk to the reset button to fix.
    
    Hence read out the hw state with the freshly introduce get_hw_state
    functions and then sanitize it afterwards.
    
    For a full modeset readout (which would allow us to avoid the initial
    modeset at boot up) a few things are still missing:
    - Reading out the mode from the pipe, especially the dotclock
      computation is quite some fun.
    - Reading out the parameters for the stolen memory framebuffer and
      wrapping it up.
    - Reading out the pch pll connections - luckily the disable code
      simply bails out if the crtc doesn't have a pch pll attached (even
      for configurations that would need one).
    
    This patch here turned up tons of smelly stuff around resume: We
    restore tons of register in seemingly random way (well, not quite, but
    we're not too careful either), which leaves the hw in a rather
    ill-defined state: E.g. the port registers are sometimes
    unconditionally restore (lvds, crt), leaving us with an active
    encoder/connector but no active pipe connected to it. Luckily the hw
    state sanitizer detects this madness and fixes things up a bit.
    
    v2: When checking whether an encoder with active connectors has a crtc
    wire up to it, check for both the crtc _and_ it's active state.
    
    v3:
    - Extract intel_sanitize_encoder.
    - Manually disable active encoders without an active pipe.
    
    v4: Correclty fix up the pipe<->plane mapping on machines where we
    switch pipes/planes. Noticed by Chris Wilson, who also provided the
    fixup.
    
    v5: Spelling fix in a comment, noticed by Paulo Zanoni
    Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    Signed-Off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    24929352
i915_drv.c 34.6 KB