diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-11-05 17:25:08 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-11-11 17:51:47 -0500 |
commit | 0e8b3d3ea7c8f6e65c2c7220d64cbeb78023eff4 (patch) | |
tree | 57a391d158893b50881aea4e6be63f58d370c63f | |
parent | 0fed39bd1d85bfd0d454cb7ba2aedab2f15141d5 (diff) |
drm/i915: Update load-detect failure paths for modeset-rework
After the rework, intel_set_mode() became a little better behaved in
restoring the current mode if we failed to apply the requested modeline.
However, the failure path for load-detect would clobber the existing
state, leading to an oops during BIOS takeover on older machines.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 029e008979b6..6d8a5edb1fa7 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -6600,24 +6600,19 @@ bool intel_get_load_detect_pipe(struct drm_connector *connector, | |||
6600 | DRM_DEBUG_KMS("reusing fbdev for load-detection framebuffer\n"); | 6600 | DRM_DEBUG_KMS("reusing fbdev for load-detection framebuffer\n"); |
6601 | if (IS_ERR(fb)) { | 6601 | if (IS_ERR(fb)) { |
6602 | DRM_DEBUG_KMS("failed to allocate framebuffer for load-detection\n"); | 6602 | DRM_DEBUG_KMS("failed to allocate framebuffer for load-detection\n"); |
6603 | goto fail; | 6603 | return false; |
6604 | } | 6604 | } |
6605 | 6605 | ||
6606 | if (!intel_set_mode(crtc, mode, 0, 0, fb)) { | 6606 | if (!intel_set_mode(crtc, mode, 0, 0, fb)) { |
6607 | DRM_DEBUG_KMS("failed to set mode on load-detect pipe\n"); | 6607 | DRM_DEBUG_KMS("failed to set mode on load-detect pipe\n"); |
6608 | if (old->release_fb) | 6608 | if (old->release_fb) |
6609 | old->release_fb->funcs->destroy(old->release_fb); | 6609 | old->release_fb->funcs->destroy(old->release_fb); |
6610 | goto fail; | 6610 | return false; |
6611 | } | 6611 | } |
6612 | 6612 | ||
6613 | /* let the connector get through one full cycle before testing */ | 6613 | /* let the connector get through one full cycle before testing */ |
6614 | intel_wait_for_vblank(dev, intel_crtc->pipe); | 6614 | intel_wait_for_vblank(dev, intel_crtc->pipe); |
6615 | |||
6616 | return true; | 6615 | return true; |
6617 | fail: | ||
6618 | connector->encoder = NULL; | ||
6619 | encoder->crtc = NULL; | ||
6620 | return false; | ||
6621 | } | 6616 | } |
6622 | 6617 | ||
6623 | void intel_release_load_detect_pipe(struct drm_connector *connector, | 6618 | void intel_release_load_detect_pipe(struct drm_connector *connector, |