alistair23-linux/drivers/gpu/drm/i915
Imre Deak 564ed191f5 drm/i915: gmch: fix stuck primary plane due to memory self-refresh mode
Blanking/unblanking the console in a loop on an Asus T100 sometimes
leaves the console blank. After some digging I found that applying

commit 61bc95c1fb
Author: Egbert Eich <eich@suse.com>
Date:   Mon Mar 4 09:24:38 2013 -0500

    DRM/i915: On G45 enable cursor plane briefly after enabling the display plane.

fixed VLV too.

In my case the problem seemed to happen already during the previous crtc
disabling and went away if I disabled self-refresh mode before disabling
the primary plane.

The root cause for this is that updates from the shadow to live plane
control register are blocked at vblank time if the memory self-refresh
mode (aka max-fifo mode on VLV) is active at that moment. The controller
checks at frame start time if the CPU is in C0 and the self-refresh mode
enable bit is set and if so activates self-reresh mode, otherwise
deactivates it. So to make sure that the plane truly gets disabled before
pipe-off we have to:

1. disable memory self-refresh mode
2. disable plane
3. wait for vblank
4. disable pipe
5. wait for pipe-off

v2:
- add explanation for the root cause from HW team (Cesar Mancini et al)
- remove note about the CPU C7S state, in my latest tests disabling it
  alone didn't make a difference
- add vblank between disabling plane and pipe (Ville)
- apply the same workaround for all gmch platforms (Ville)

Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: Vijay Purushothaman <vijay.a.purushothaman@intel.com>
Reviewed-by: Deepak S<deepak.s@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2014-07-07 11:34:57 +02:00
..
dvo.h
dvo_ch7xxx.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_ch7017.c
dvo_ivch.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_ns2501.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_sil164.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_tfp410.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
i915_cmd_parser.c drm/i915: Add some L3 registers to the parser whitelist 2014-06-18 00:48:35 +02:00
i915_debugfs.c Linux 3.16-rc4 2014-07-07 10:17:56 +02:00
i915_dma.c Linux 3.16-rc4 2014-07-07 10:17:56 +02:00
i915_drv.c drm/i915: flush delayed_resume_work when suspending 2014-07-01 17:32:26 +03:00
i915_drv.h drm/i915: gmch: factor out intel_set_memory_cxsr 2014-07-07 11:33:36 +02:00
i915_gem.c drm/i915: Track frontbuffer invalidation/flushing 2014-06-19 18:14:47 +02:00
i915_gem_context.c Linux 3.16-rc4 2014-07-07 10:17:56 +02:00
i915_gem_debug.c drm/i915: prefer struct drm_i915_private to drm_i915_private_t 2014-03-31 15:34:21 +02:00
i915_gem_dmabuf.c drm/i915: Introduce mapping of user pages into video memory (userptr) ioctl 2014-05-16 19:31:29 +02:00
i915_gem_evict.c drm/i915: Prevent negative relocation deltas from wrapping 2014-05-27 11:18:40 +03:00
i915_gem_execbuffer.c drm/i915: Track frontbuffer invalidation/flushing 2014-06-19 18:14:47 +02:00
i915_gem_gtt.c Linux 3.16-rc4 2014-07-07 10:17:56 +02:00
i915_gem_gtt.h drm/i915: Added write-enable pte bit supportt 2014-06-17 09:21:47 +02:00
i915_gem_render_state.c drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
i915_gem_stolen.c drm/i915: Try harder to get FBC 2014-07-03 11:27:57 +03:00
i915_gem_tiling.c drm/i915: prefer struct drm_i915_private to drm_i915_private_t 2014-03-31 15:34:21 +02:00
i915_gem_userptr.c drm/i915: Introduce mapping of user pages into video memory (userptr) ioctl 2014-05-16 19:31:29 +02:00
i915_gpu_error.c drm/i95: Initialize active ring->pid to -1 2014-06-11 11:06:43 +03:00
i915_ioc32.c drm: Remove DRM_ARRAY_SIZE() for ARRAY_SIZE() 2014-06-10 09:36:17 +10:00
i915_irq.c Linux 3.16-rc4 2014-07-07 10:17:56 +02:00
i915_params.c drm/i915: Replaced Blitter ring based flips with MMIO flips 2014-06-17 16:16:20 +02:00
i915_reg.h drm/i915: Give names to the CCK_DISPLAY_CLOCK_CONTROL bits 2014-07-07 11:15:25 +02:00
i915_suspend.c drm/i915: disable GT power saving early during system suspend 2014-05-22 21:53:27 +02:00
i915_sysfs.c drm/i915: s/i915_hw_context/intel_context 2014-05-22 23:41:17 +02:00
i915_trace.h drm/i915: s/intel_ring_buffer/intel_engine_cs 2014-05-22 23:01:05 +02:00
i915_trace_points.c
i915_ums.c
intel_acpi.c
intel_bios.c drm/i915: default to having backlight if VBT not available 2014-06-23 16:08:20 +03:00
intel_bios.h drm/i915: Detect if MIPI panel based on VBT and initialize only if present 2014-06-05 08:52:33 +02:00
intel_crt.c drm: convert crtc and connection_mutex to ww_mutex (v5) 2014-06-05 09:54:33 +10:00
intel_ddi.c drm/i915: update BDW DDI buffer translations 2014-06-16 19:57:05 +02:00
intel_display.c drm/i915: gmch: fix stuck primary plane due to memory self-refresh mode 2014-07-07 11:34:57 +02:00
intel_dp.c drm/i915: Drop schedule_back from psr_exit 2014-06-19 09:59:19 +02:00
intel_drv.h drm/i915: Move VLV cmnlane workaround to intel_power_domains_init_hw() 2014-07-07 11:29:51 +02:00
intel_dsi.c drm/i915: Fix memory leak in intel_dsi_init() error path 2014-06-13 22:08:15 +02:00
intel_dsi.h drm/i915: Add support for Generic MIPI panel driver 2014-06-05 08:52:32 +02:00
intel_dsi_cmd.c drm/i915: Send DPI command explicitely in LP mode 2014-04-09 21:54:30 +02:00
intel_dsi_cmd.h drm/i915: Send DPI command explicitely in LP mode 2014-04-09 21:54:30 +02:00
intel_dsi_panel_vbt.c drm/i915: Fix checkpatch errors 2014-06-11 16:57:33 +02:00
intel_dsi_pll.c
intel_dvo.c drm/i915: Don't get hw state from DVO chip unless DVO is enabled 2014-06-13 15:17:37 +02:00
intel_fbdev.c drm/i915: replace ALIGN(PAGE_SIZE) by PAGE_ALIGN 2014-07-02 13:31:32 +03:00
intel_hdmi.c drm/i915/chv: Force clock buffer enables 2014-06-11 16:57:30 +02:00
intel_i2c.c drm/i915: Kill duplicated cdclk readout code from i2c 2014-07-07 11:27:52 +02:00
intel_lvds.c drm/i915: replace drm_get_connector_name() with direct name field use 2014-06-04 13:14:37 +10:00
intel_modes.c
intel_opregion.c drm: convert crtc and connection_mutex to ww_mutex (v5) 2014-06-05 09:54:33 +10:00
intel_overlay.c drm/i915: Track frontbuffer invalidation/flushing 2014-06-19 18:14:47 +02:00
intel_panel.c drm/i915: set backlight duty cycle after backlight enable for gen4 2014-06-11 11:06:43 +03:00
intel_pm.c drm/i915: gmch: set SR WMs to valid values before enabling them 2014-07-07 11:33:47 +02:00
intel_renderstate.h drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
intel_renderstate_gen6.c drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
intel_renderstate_gen7.c drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
intel_renderstate_gen8.c drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
intel_ringbuffer.c drivers/i915: Fix unnoticed failure of init_ring_common() 2014-06-19 20:59:52 +02:00
intel_ringbuffer.h drm/i915: Reorder semaphore deadlock check 2014-06-11 11:06:43 +03:00
intel_sdvo.c drm/i915: Avoid div-by-zero when pixel_multiplier is zero 2014-06-11 11:06:43 +03:00
intel_sdvo_regs.h
intel_sideband.c drm/i915: vlv/chv: fix DSI sideband register accessing 2014-05-19 17:50:14 +02:00
intel_sprite.c Linux 3.16-rc4 2014-07-07 10:17:56 +02:00
intel_tv.c drm: convert crtc and connection_mutex to ww_mutex (v5) 2014-06-05 09:54:33 +10:00
intel_uncore.c Merge branch 'topic/soix' into drm-intel-next-queued 2014-06-18 11:44:05 +02:00
Kconfig drm/i915: Introduce mapping of user pages into video memory (userptr) ioctl 2014-05-16 19:31:29 +02:00
Makefile drm/i915: Add support for Generic MIPI panel driver 2014-06-05 08:52:32 +02:00