• Ville Syrjälä's avatar
    drm/i915: Skip load detect when intel_crtc->new_enable==true · a459249c
    Ville Syrjälä authored
    During suspend we turn off the crtcs, but leave the staged config in
    place so that we can restore the display(s) to their previous state on
    resume.
    
    During resume when we attempt to apply the force pipe A quirk we use the
    load detect mechanism. That doesn't check whether there was an already
    staged configuration for the crtc since that's not even possible during
    normal runtime load detection. But during resume it is possible, and if
    we just blindly go and overwrite the staged crtc configuration for the
    load detection we can no longer restore the display to the correct
    state.
    
    Even worse, we don't even clear all the staged connector->encoder->crtc
    links so we may end up using a cloned setup for the load detection, and
    after we're done we just clear the links related to the VGA output
    leaving the links for the other outputs in place. This will eventually
    result in calling intel_set_mode() with mode==NULL but with valid
    connector->encoder->crtc links which will result in dereferencing the
    NULL mode since the code thinks it will have to a modeset.
    
    To avoid these problems don't use any crtc with new_enabled==true for
    load detection.
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Cc: stable@vger.kernel.org (for 3.16)
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    a459249c
intel_display.c 368 KB