[Intel-gfx] [PATCH] drm/i915: Disable pipe CRC before disabling the pipe.

2018-03-06 Thread Maarten Lankhorst
[   74.730271] WARNING: CPU: 4 PID: 0 at drivers/gpu/drm/drm_vblank.c:614 
drm_calc_vbltimestamp_from_scanoutpos+0x13e/0x2f0
[   74.730311] Modules linked in: vgem snd_hda_codec_hdmi snd_hda_codec_realtek 
snd_hda_codec_generic i915 x86_pkg_temp_thermal intel_powerclamp coretemp 
snd_hda_intel crct10dif_pclmul snd_hda_codec crc32_pclmul snd_hwdep broadcom 
ghash_clmulni_intel snd_hda_core bcm_phy_lib snd_pcm tg3 lpc_ich mei_me mei 
prime_numbers
[   74.730353] CPU: 4 PID: 0 Comm: swapper/4 Tainted: G U   
4.16.0-rc2-CI-CI_DRM_3822+ #1
[   74.730355] Hardware name: Dell Inc. XPS 8300  /0Y2MRG, BIOS A06 10/17/2011
[   74.730359] RIP: 0010:drm_calc_vbltimestamp_from_scanoutpos+0x13e/0x2f0
[   74.730361] RSP: 0018:88022fb03d10 EFLAGS: 00010086
[   74.730365] RAX: a0291d20 RBX: 88021a18 RCX: 0001
[   74.730367] RDX: 820e7db8 RSI: 0001 RDI: 82068cea
[   74.730369] RBP: 88022fb03d70 R08:  R09: 815d26d0
[   74.730371] R10:  R11: a0161ca0 R12: 0001
[   74.730373] R13: 880212448008 R14: 880212448330 R15: 
[   74.730376] FS:  () GS:88022fb0() 
knlGS:
[   74.730378] CS:  0010 DS:  ES:  CR0: 80050033
[   74.730380] CR2: 55edcbec9000 CR3: 02210001 CR4: 000606e0
[   74.730382] Call Trace:
[   74.730385]  
[   74.730397]  drm_get_last_vbltimestamp+0x36/0x50
[   74.730401]  drm_update_vblank_count+0x64/0x240
[   74.730409]  drm_crtc_accurate_vblank_count+0x41/0x90
[   74.730453]  display_pipe_crc_irq_handler+0x176/0x220 [i915]
[   74.730497]  i9xx_pipe_crc_irq_handler+0xfe/0x150 [i915]
[   74.730537]  ironlake_irq_handler+0x618/0xa30 [i915]
[   74.730548]  __handle_irq_event_percpu+0x3c/0x340
[   74.730556]  handle_irq_event_percpu+0x1b/0x50
[   74.730561]  handle_irq_event+0x2f/0x50
[   74.730566]  handle_edge_irq+0xe4/0x1b0
[   74.730572]  handle_irq+0x11/0x20
[   74.730576]  do_IRQ+0x5e/0x120
[   74.730584]  common_interrupt+0x84/0x84
[   74.730586]  
[   74.730591] RIP: 0010:cpuidle_enter_state+0xaa/0x350
[   74.730593] RSP: 0018:c908beb8 EFLAGS: 0212 ORIG_RAX: 
ffde
[   74.730597] RAX: 880226b80040 RBX: 0031fc3e RCX: 0001
[   74.730599] RDX:  RSI: 8210fb59 RDI: 820c02e7
[   74.730601] RBP: 0004 R08: 40af R09: 0018
[   74.730603] R10:  R11:  R12: 0004
[   74.730606] R13: e8d00430 R14: 001166120bf4 R15: 82294460
[   74.730621]  ? cpuidle_enter_state+0xa6/0x350
[   74.730629]  do_idle+0x188/0x1d0
[   74.730636]  cpu_startup_entry+0x14/0x20
[   74.730641]  start_secondary+0x129/0x160
[   74.730646]  secondary_startup_64+0xa5/0xb0
[   74.730660] Code: e1 48 c7 c2 b8 7d 0e 82 be 01 00 00 00 48 c7 c7 ea 8c 06 
82 e8 64 ec ff ff 48 8b 83 c8 07 00 00 48 83 78 28 00 0f 84 e2 fe ff ff <0f> 0b 
45 31 ed e9 db fe ff ff 41 b8 d3 4d 62 10 89 c8 6a 03 41
[   74.730754] ---[ end trace 14b1345705b68565 ]---

Cc: Marta Löfstedt 
Reported-by: Marta Löfstedt 
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105185
Signed-off-by: Maarten Lankhorst 
---
Fixed to apply.

 drivers/gpu/drm/i915/intel_display.c  |  1 +
 drivers/gpu/drm/i915/intel_drv.h  |  2 ++
 drivers/gpu/drm/i915/intel_pipe_crc.c | 11 ++-
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 331084082545..83baa7190c29 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -12327,6 +12327,7 @@ static void intel_atomic_commit_tail(struct 
drm_atomic_state *state)
 
if (old_crtc_state->active) {
intel_crtc_disable_planes(crtc, 
old_crtc_state->plane_mask);
+   intel_crtc_disable_pipe_crc(crtc);

dev_priv->display.crtc_disable(to_intel_crtc_state(old_crtc_state), state);
intel_crtc->active = false;
intel_fbc_disable(intel_crtc);
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 1a7c5addcec3..d0f8416f15b0 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -2134,8 +2134,10 @@ int intel_pipe_crc_create(struct drm_minor *minor);
 #ifdef CONFIG_DEBUG_FS
 int intel_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_name,
  size_t *values_cnt);
+void intel_crtc_disable_pipe_crc(struct drm_crtc *crtc);
 #else
 #define intel_crtc_set_crc_source NULL
+#define intel_crtc_disable_pipe_crc(crtc) do {} while (0)
 #endif
 extern const struct file_operations i915_display_crc_ctl_fops;
 #endif /* __INTEL_DRV_H__ */
diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c 
b/drivers/gpu/drm/i915/i

[Intel-gfx] [PATCH] drm/i915: Disable pipe CRC before disabling the pipe.

2018-03-06 Thread Maarten Lankhorst
[   74.730271] WARNING: CPU: 4 PID: 0 at drivers/gpu/drm/drm_vblank.c:614 
drm_calc_vbltimestamp_from_scanoutpos+0x13e/0x2f0
[   74.730311] Modules linked in: vgem snd_hda_codec_hdmi snd_hda_codec_realtek 
snd_hda_codec_generic i915 x86_pkg_temp_thermal intel_powerclamp coretemp 
snd_hda_intel crct10dif_pclmul snd_hda_codec crc32_pclmul snd_hwdep broadcom 
ghash_clmulni_intel snd_hda_core bcm_phy_lib snd_pcm tg3 lpc_ich mei_me mei 
prime_numbers
[   74.730353] CPU: 4 PID: 0 Comm: swapper/4 Tainted: G U   
4.16.0-rc2-CI-CI_DRM_3822+ #1
[   74.730355] Hardware name: Dell Inc. XPS 8300  /0Y2MRG, BIOS A06 10/17/2011
[   74.730359] RIP: 0010:drm_calc_vbltimestamp_from_scanoutpos+0x13e/0x2f0
[   74.730361] RSP: 0018:88022fb03d10 EFLAGS: 00010086
[   74.730365] RAX: a0291d20 RBX: 88021a18 RCX: 0001
[   74.730367] RDX: 820e7db8 RSI: 0001 RDI: 82068cea
[   74.730369] RBP: 88022fb03d70 R08:  R09: 815d26d0
[   74.730371] R10:  R11: a0161ca0 R12: 0001
[   74.730373] R13: 880212448008 R14: 880212448330 R15: 
[   74.730376] FS:  () GS:88022fb0() 
knlGS:
[   74.730378] CS:  0010 DS:  ES:  CR0: 80050033
[   74.730380] CR2: 55edcbec9000 CR3: 02210001 CR4: 000606e0
[   74.730382] Call Trace:
[   74.730385]  
[   74.730397]  drm_get_last_vbltimestamp+0x36/0x50
[   74.730401]  drm_update_vblank_count+0x64/0x240
[   74.730409]  drm_crtc_accurate_vblank_count+0x41/0x90
[   74.730453]  display_pipe_crc_irq_handler+0x176/0x220 [i915]
[   74.730497]  i9xx_pipe_crc_irq_handler+0xfe/0x150 [i915]
[   74.730537]  ironlake_irq_handler+0x618/0xa30 [i915]
[   74.730548]  __handle_irq_event_percpu+0x3c/0x340
[   74.730556]  handle_irq_event_percpu+0x1b/0x50
[   74.730561]  handle_irq_event+0x2f/0x50
[   74.730566]  handle_edge_irq+0xe4/0x1b0
[   74.730572]  handle_irq+0x11/0x20
[   74.730576]  do_IRQ+0x5e/0x120
[   74.730584]  common_interrupt+0x84/0x84
[   74.730586]  
[   74.730591] RIP: 0010:cpuidle_enter_state+0xaa/0x350
[   74.730593] RSP: 0018:c908beb8 EFLAGS: 0212 ORIG_RAX: 
ffde
[   74.730597] RAX: 880226b80040 RBX: 0031fc3e RCX: 0001
[   74.730599] RDX:  RSI: 8210fb59 RDI: 820c02e7
[   74.730601] RBP: 0004 R08: 40af R09: 0018
[   74.730603] R10:  R11:  R12: 0004
[   74.730606] R13: e8d00430 R14: 001166120bf4 R15: 82294460
[   74.730621]  ? cpuidle_enter_state+0xa6/0x350
[   74.730629]  do_idle+0x188/0x1d0
[   74.730636]  cpu_startup_entry+0x14/0x20
[   74.730641]  start_secondary+0x129/0x160
[   74.730646]  secondary_startup_64+0xa5/0xb0
[   74.730660] Code: e1 48 c7 c2 b8 7d 0e 82 be 01 00 00 00 48 c7 c7 ea 8c 06 
82 e8 64 ec ff ff 48 8b 83 c8 07 00 00 48 83 78 28 00 0f 84 e2 fe ff ff <0f> 0b 
45 31 ed e9 db fe ff ff 41 b8 d3 4d 62 10 89 c8 6a 03 41
[   74.730754] ---[ end trace 14b1345705b68565 ]---

Cc: Marta Löfstedt 
Reported-by: Marta Löfstedt 
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105185
Signed-off-by: Maarten Lankhorst 
---
 drivers/gpu/drm/i915/intel_display.c  |  1 +
 drivers/gpu/drm/i915/intel_drv.h  |  2 ++
 drivers/gpu/drm/i915/intel_pipe_crc.c | 11 ++-
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 90988e66d87f..9d83444a6dcb 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1,6 +1,7 @@ static void intel_atomic_commit_tail(struct 
drm_atomic_state *state)
 
if (old_crtc_state->active) {
intel_crtc_disable_planes(crtc, 
old_crtc_state->plane_mask);
+   intel_crtc_disable_pipe_crc(crtc);

dev_priv->display.crtc_disable(to_intel_crtc_state(old_crtc_state), state);
intel_crtc->active = false;
intel_fbc_disable(intel_crtc);
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index d008137d7ffe..682414c85a2e 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -2126,7 +2126,9 @@ void lspcon_wait_pcon_mode(struct intel_lspcon *lspcon);
 #ifdef CONFIG_DEBUG_FS
 int intel_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_name,
  size_t *values_cnt);
+void intel_crtc_disable_pipe_crc(struct drm_crtc *crtc);
 #else
 #define intel_crtc_set_crc_source NULL
+#define intel_crtc_disable_pipe_crc(crtc) do {} while (0)
 #endif
 #endif /* __INTEL_DRV_H__ */
diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c 
b/drivers/gpu/drm/i915/intel_pipe_crc.c
index 11fd174e1b3c..8b8b292b1d0b 100644
--- a/drivers/gpu/drm