aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-11-05 17:25:08 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-11-11 17:51:47 -0500
commit0e8b3d3ea7c8f6e65c2c7220d64cbeb78023eff4 (patch)
tree57a391d158893b50881aea4e6be63f58d370c63f
parent0fed39bd1d85bfd0d454cb7ba2aedab2f15141d5 (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.c9
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;
6617fail:
6618 connector->encoder = NULL;
6619 encoder->crtc = NULL;
6620 return false;
6621} 6616}
6622 6617
6623void intel_release_load_detect_pipe(struct drm_connector *connector, 6618void intel_release_load_detect_pipe(struct drm_connector *connector,