linux/drivers/gpu/drm/i915
Daniel Vetter 3b7a89fce3 drm/i915: fix OOPS in lid_notify
This goes back to

commit c1c7af6089
Author: Jesse Barnes <jbarnes@virtuousgeek.org>
Date:   Thu Sep 10 15:28:03 2009 -0700

    drm/i915: force mode set at lid open time

It was used to fix an issue on a i915GM based Thinkpad X41, which
somehow clobbered the modeset state at lid close time. Since then
massive amounts of things changed: Tons of fixes to the modeset
sequence, OpRegion support, better integration with the acpi code.
Especially OpRegion /should/ allow us to control the display hw
cooperatively with the firmware, without the firmware clobbering the
hw state behind our backs.

So it's dubious whether we still need this.

The second issue is that it's unclear who's responsibility it actually
is to restore the mode - Chris Wilson suggests to just emit a hotplug
event and let userspace figure things out.

The real reason I've stumbled over this is that the new modeset code
breaks drm_helper_resume_force_mode - it OOPSes derefing a NULL vfunc
pointer. The reason this wasn't caught in testing earlier is that in

commit c9354c85c1
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Mon Nov 2 09:29:55 2009 -0800

    i915: fix intel graphics suspend breakage due to resume/lid event
    confusion

logic was added to _not_ restore the modeset state after a resume. And
since most machines are configured to auto-suspend on lid-close, this
neatly papered over the issue.

Summarizing, this shouldn't be required on any platform supporting
OpRegion. And none of the really old machines I have here seem to
require it either. Hence I'm inclined to just rip it out.

But in case that there are really firmwares out there that clobber the
hw state, replace it with a call to intel_modset_check_state. This
will ensure that we catch any issues as soon as they happen.

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2012-09-18 00:59:37 +02:00
..
Makefile drm/i915: Support for ns2501-DVO 2012-07-25 18:23:48 +02:00
dvo.h drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ch7xxx.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ch7017.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ivch.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ns2501.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_sil164.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_tfp410.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
i915_debugfs.c drm/i915: Convert remaining debugfs iterators over rings to for_each_ring() 2012-09-03 10:09:29 +02:00
i915_dma.c i915: use alloc_ordered_workqueue() instead of explicit UNBOUND w/ max_active = 1 2012-08-24 01:13:53 +02:00
i915_drv.c Merge the modeset-rework, basic conversion into drm-intel-next 2012-09-06 22:52:43 +02:00
i915_drv.h Merge the modeset-rework, basic conversion into drm-intel-next 2012-09-06 22:52:43 +02:00
i915_gem.c Merge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-09-03 12:05:01 +10:00
i915_gem_context.c drm/i915: Only pwrite through the GTT if there is space in the aperture 2012-08-24 02:03:33 +02:00
i915_gem_debug.c drm/i915: stop using dev->agp->base 2012-06-12 22:18:06 +02:00
i915_gem_dmabuf.c drm/i915: Track unbound pages 2012-08-21 14:34:11 +02:00
i915_gem_evict.c drm/i915: Only pwrite through the GTT if there is space in the aperture 2012-08-24 02:03:33 +02:00
i915_gem_execbuffer.c drm/i915: Avoid unbinding due to an interrupted pin_and_fence during execbuffer 2012-08-24 21:02:51 +02:00
i915_gem_gtt.c Merge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-09-03 12:05:01 +10:00
i915_gem_stolen.c drm/i915: Split the stolen handling for GEM out of i915_dma.c 2012-05-03 11:18:11 +02:00
i915_gem_tiling.c drm/i915: Only the zap the VMA after updating the tiling parameters 2012-05-03 11:18:07 +02:00
i915_ioc32.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
i915_irq.c drm/ips: move drps/ips/ilk related variables into dev_priv->ips 2012-09-03 10:09:27 +02:00
i915_reg.h Merge the modeset-rework, basic conversion into drm-intel-next 2012-09-06 22:52:43 +02:00
i915_suspend.c Linux 3.5-rc7 2012-07-20 00:53:28 -04:00
i915_sysfs.c drm/i915: Enable some sysfs stuff without CONFIG_PM 2012-09-05 23:26:29 +02:00
i915_trace.h drm/i915: add a tracepoint for gpu frequency changes 2012-09-03 10:09:27 +02:00
i915_trace_points.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
intel_acpi.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
intel_bios.c drm/i915/bios: cleanup return type of intel_parse_bios() 2012-06-27 10:17:51 +01:00
intel_bios.h drm/i915/bios: cleanup return type of intel_parse_bios() 2012-06-27 10:17:51 +01:00
intel_crt.c Merge the modeset-rework, basic conversion into drm-intel-next 2012-09-06 22:52:43 +02:00
intel_ddi.c drm/i915/hdmi: implement get_hw_state 2012-09-06 07:58:22 +02:00
intel_display.c drm/i915: correctly update crtc->x/y in set_base 2012-09-18 00:52:43 +02:00
intel_dp.c Merge the modeset-rework, basic conversion into drm-intel-next 2012-09-06 22:52:43 +02:00
intel_drv.h Merge the modeset-rework, basic conversion into drm-intel-next 2012-09-06 22:52:43 +02:00
intel_dvo.c drm/i915: improve modeset state checking after dpms calls 2012-09-06 08:21:31 +02:00
intel_fb.c drm/i915: Zero initialize mode_cmd 2012-07-05 13:27:58 +02:00
intel_hdmi.c Merge the modeset-rework, basic conversion into drm-intel-next 2012-09-06 22:52:43 +02:00
intel_i2c.c drm/i915: ensure i2c adapter is all set before adding it 2012-08-13 19:04:24 +02:00
intel_lvds.c drm/i915: fix OOPS in lid_notify 2012-09-18 00:59:37 +02:00
intel_modes.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into drm-next 2012-08-27 16:22:20 +10:00
intel_opregion.c drm/i915: [sparse] __iomem fixes for opregion 2012-05-03 11:18:00 +02:00
intel_overlay.c drm/i915: Only pwrite through the GTT if there is space in the aperture 2012-08-24 02:03:33 +02:00
intel_panel.c drm/i915: Fix blank panel at reopening lid 2012-08-11 21:15:16 +02:00
intel_pm.c drm/i915: Never read FORCEWAKE 2012-09-03 10:28:32 +02:00
intel_ringbuffer.c drm/i915: add workarounds to gen7_render_ring_flush 2012-09-03 10:09:26 +02:00
intel_ringbuffer.h drm/i915: Lazily apply the SNB+ seqno w/a 2012-08-10 11:11:32 +02:00
intel_sdvo.c Merge the modeset-rework, basic conversion into drm-intel-next 2012-09-06 22:52:43 +02:00
intel_sdvo_regs.h drm/i915: properly handle interlaced bit for sdvo dtd conversion 2012-05-24 17:53:52 +02:00
intel_sprite.c drm/i915: mask tiled bit when updating ILK sprites 2012-07-20 12:21:40 +02:00
intel_tv.c drm/i915: s/intel_encoder_disable/intel_encoder_noop 2012-09-06 08:21:27 +02:00