diff mbox series

drm/i915/psr: Force manual PSR exit in older gens

Message ID 20190617195154.30292-1-jose.souza@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915/psr: Force manual PSR exit in older gens | expand

Commit Message

Souza, Jose June 17, 2019, 7:51 p.m. UTC
To do frontbuffer tracking we are depending on Display WA #0884 to
exit PSR when there is a frontbuffer modification but according to
user reports a write to CURSURFLIVE do not cause PSR to exit in older
gens so lets force a PSR exit.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110799
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
 drivers/gpu/drm/i915/display/intel_psr.c | 36 +++++++++++++++++-------
 1 file changed, 26 insertions(+), 10 deletions(-)

Comments

Rodrigo Vivi June 17, 2019, 8:14 p.m. UTC | #1
On Mon, Jun 17, 2019 at 12:51:54PM -0700, José Roberto de Souza wrote:
> To do frontbuffer tracking we are depending on Display WA #0884 to
> exit PSR when there is a frontbuffer modification but according to
> user reports a write to CURSURFLIVE do not cause PSR to exit in older
> gens so lets force a PSR exit.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110799

:(

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

and if bugs persist or this brings back older bugs it is time
to consider removing psr support at all for gen < 9  :-/

> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_psr.c | 36 +++++++++++++++++-------
>  1 file changed, 26 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 69709df4a648..69d908e6a050 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -863,16 +863,23 @@ void intel_psr_disable(struct intel_dp *intel_dp,
>  
>  static void psr_force_hw_tracking_exit(struct drm_i915_private *dev_priv)
>  {
> -	/*
> -	 * Display WA #0884: all
> -	 * This documented WA for bxt can be safely applied
> -	 * broadly so we can force HW tracking to exit PSR
> -	 * instead of disabling and re-enabling.
> -	 * Workaround tells us to write 0 to CUR_SURFLIVE_A,
> -	 * but it makes more sense write to the current active
> -	 * pipe.
> -	 */
> -	I915_WRITE(CURSURFLIVE(dev_priv->psr.pipe), 0);
> +	if (INTEL_GEN(dev_priv) >= 9)
> +		/*
> +		 * Display WA #0884: skl+
> +		 * This documented WA for bxt can be safely applied
> +		 * broadly so we can force HW tracking to exit PSR
> +		 * instead of disabling and re-enabling.
> +		 * Workaround tells us to write 0 to CUR_SURFLIVE_A,
> +		 * but it makes more sense write to the current active
> +		 * pipe.
> +		 */
> +		I915_WRITE(CURSURFLIVE(dev_priv->psr.pipe), 0);
> +	else
> +		/*
> +		 * A write to CURSURFLIVE do not cause HW tracking to exit PSR
> +		 * on older gens so doing the manual exit instead.
> +		 */
> +		intel_psr_exit(dev_priv);
>  }
>  
>  /**
> @@ -903,6 +910,15 @@ void intel_psr_update(struct intel_dp *intel_dp,
>  		/* Force a PSR exit when enabling CRC to avoid CRC timeouts */
>  		if (crtc_state->crc_enabled && psr->enabled)
>  			psr_force_hw_tracking_exit(dev_priv);
> +		else if (INTEL_GEN(dev_priv) < 9 && psr->enabled) {
> +			/*
> +			 * Activate PSR again after a force exit when enabling
> +			 * CRC in older gens
> +			 */
> +			if (!dev_priv->psr.active &&
> +			    !dev_priv->psr.busy_frontbuffer_bits)
> +				schedule_work(&dev_priv->psr.work);
> +		}
>  
>  		goto unlock;
>  	}
> -- 
> 2.22.0
>
Souza, Jose June 18, 2019, 7:36 p.m. UTC | #2
On Tue, 2019-06-18 at 12:00 +0000, Patchwork wrote:
> == Series Details ==
> 
> Series: drm/i915/psr: Force manual PSR exit in older gens
> URL   : https://patchwork.freedesktop.org/series/62249/
> State : failure
> 
> == Summary ==
> 
> CI Bug Log - changes from CI_DRM_6287_full -> Patchwork_13316_full
> ====================================================
> 
> Summary
> -------
> 
>   **FAILURE**
> 
>   Serious unknown changes coming with Patchwork_13316_full absolutely
> need to be
>   verified manually.
>   
>   If you think the reported changes have nothing to do with the
> changes
>   introduced in Patchwork_13316_full, please notify your bug team to
> allow them
>   to document this new failure mode, which will reduce false
> positives in CI.
> 
>   
> 
> Possible new issues
> -------------------
> 
>   Here are the unknown changes that may have been introduced in
> Patchwork_13316_full:
> 
> ### IGT changes ###
> 
> #### Possible regressions ####
> 
>   * igt@gem_eio@hibernate:
>     - shard-snb:          [PASS][1] -> [DMESG-WARN][2]
>    [1]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-snb4/igt@gem_eio@hibernate.html
>    [2]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-snb6/igt@gem_eio@hibernate.html
> 

Not related so pushed to dinq, thanks for the review Rodrigo.

>   
> Known issues
> ------------
> 
>   Here are the changes found in Patchwork_13316_full that come from
> known issues:
> 
> ### IGT changes ###
> 
> #### Issues hit ####
> 
>   * igt@gem_eio@throttle:
>     - shard-kbl:          [PASS][3] -> [DMESG-WARN][4] ([fdo#110913
> ]) +2 similar issues
>    [3]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-kbl7/igt@gem_eio@throttle.html
>    [4]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-kbl4/igt@gem_eio@throttle.html
> 
>   * igt@gem_userptr_blits@sync-unmap-cycles:
>     - shard-apl:          [PASS][5] -> [DMESG-WARN][6] ([fdo#110913
> ])
>    [5]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-apl8/igt@gem_userptr_blits@sync-unmap-cycles.html
>    [6]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-apl4/igt@gem_userptr_blits@sync-unmap-cycles.html
> 
>   * igt@i915_pm_rpm@i2c:
>     - shard-hsw:          [PASS][7] -> [FAIL][8] ([fdo#104097])
>    [7]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-hsw4/igt@i915_pm_rpm@i2c.html
>    [8]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-hsw1/igt@i915_pm_rpm@i2c.html
> 
>   * igt@i915_selftest@live_evict:
>     - shard-kbl:          [PASS][9] -> [INCOMPLETE][10] ([fdo#103665]
> / [fdo#110938])
>    [9]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-kbl2/igt@i915_selftest@live_evict.html
>    [10]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-kbl4/igt@i915_selftest@live_evict.html
> 
>   * igt@i915_suspend@sysfs-reader:
>     - shard-apl:          [PASS][11] -> [DMESG-WARN][12]
> ([fdo#108566]) +2 similar issues
>    [11]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-apl6/igt@i915_suspend@sysfs-reader.html
>    [12]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-apl3/igt@i915_suspend@sysfs-reader.html
> 
>   * igt@kms_cursor_crc@pipe-c-cursor-suspend:
>     - shard-kbl:          [PASS][13] -> [DMESG-WARN][14]
> ([fdo#108566]) +2 similar issues
>    [13]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-kbl2/igt@kms_cursor_crc@pipe-c-cursor-suspend.html
>    [14]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-kbl2/igt@kms_cursor_crc@pipe-c-cursor-suspend.html
> 
>   * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
>     - shard-glk:          [PASS][15] -> [FAIL][16] ([fdo#105363])
>    [15]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-glk9/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
>    [16]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-glk5/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
> 
>   * igt@kms_flip@flip-vs-suspend-interruptible:
>     - shard-skl:          [PASS][17] -> [INCOMPLETE][18]
> ([fdo#109507])
>    [17]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-skl3/igt@kms_flip@flip-vs-suspend-interruptible.html
>    [18]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-skl8/igt@kms_flip@flip-vs-suspend-interruptible.html
> 
>   * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt:
>     - shard-iclb:         [PASS][19] -> [FAIL][20] ([fdo#103167]) +4
> similar issues
>    [19]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-iclb4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt.html
>    [20]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-iclb2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt.html
> 
>   * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-move:
>     - shard-hsw:          [PASS][21] -> [SKIP][22] ([fdo#109271]) +18
> similar issues
>    [21]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-hsw5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-move.html
>    [22]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-hsw1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-move.html
> 
>   * igt@kms_plane_lowres@pipe-a-tiling-x:
>     - shard-iclb:         [PASS][23] -> [FAIL][24] ([fdo#103166])
>    [23]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-iclb7/igt@kms_plane_lowres@pipe-a-tiling-x.html
>    [24]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-iclb2/igt@kms_plane_lowres@pipe-a-tiling-x.html
> 
>   * igt@kms_psr@psr2_cursor_render:
>     - shard-iclb:         [PASS][25] -> [SKIP][26] ([fdo#109441]) +1
> similar issue
>    [25]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-iclb2/igt@kms_psr@psr2_cursor_render.html
>    [26]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-iclb5/igt@kms_psr@psr2_cursor_render.html
> 
>   
> #### Possible fixes ####
> 
>   * igt@gem_exec_balancer@smoke:
>     - shard-iclb:         [SKIP][27] ([fdo#110854]) -> [PASS][28]
>    [27]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-iclb3/igt@gem_exec_balancer@smoke.html
>    [28]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-iclb4/igt@gem_exec_balancer@smoke.html
> 
>   * igt@gem_exec_blt@normal-min:
>     - shard-apl:          [INCOMPLETE][29] ([fdo#103927]) ->
> [PASS][30]
>    [29]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-apl2/igt@gem_exec_blt@normal-min.html
>    [30]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-apl1/igt@gem_exec_blt@normal-min.html
> 
>   * igt@gem_mmap_gtt@hang:
>     - shard-apl:          [DMESG-WARN][31] ([fdo#110913 ]) ->
> [PASS][32]
>    [31]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-apl4/igt@gem_mmap_gtt@hang.html
>    [32]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-apl5/igt@gem_mmap_gtt@hang.html
>     - shard-snb:          [INCOMPLETE][33] ([fdo#105411]) ->
> [PASS][34]
>    [33]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-snb6/igt@gem_mmap_gtt@hang.html
>    [34]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-snb6/igt@gem_mmap_gtt@hang.html
> 
>   * igt@gem_persistent_relocs@forked-faulting-reloc-thrashing:
>     - shard-snb:          [DMESG-WARN][35] ([fdo#110789] /
> [fdo#110913 ]) -> [PASS][36]
>    [35]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-snb7/igt@gem_persistent_relocs@forked-faulting-reloc-thrashing.html
>    [36]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-snb1/igt@gem_persistent_relocs@forked-faulting-reloc-thrashing.html
> 
>   * igt@gem_userptr_blits@sync-unmap-cycles:
>     - shard-kbl:          [DMESG-WARN][37] ([fdo#110913 ]) ->
> [PASS][38] +1 similar issue
>    [37]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-kbl3/igt@gem_userptr_blits@sync-unmap-cycles.html
>    [38]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-kbl3/igt@gem_userptr_blits@sync-unmap-cycles.html
> 
>   * igt@i915_suspend@fence-restore-tiled2untiled:
>     - shard-apl:          [DMESG-WARN][39] ([fdo#108566]) ->
> [PASS][40] +3 similar issues
>    [39]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-apl8/igt@i915_suspend@fence-restore-tiled2untiled.html
>    [40]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-apl8/igt@i915_suspend@fence-restore-tiled2untiled.html
> 
>   * igt@kms_cursor_crc@pipe-a-cursor-256x256-sliding:
>     - shard-skl:          [FAIL][41] ([fdo#103232]) -> [PASS][42]
>    [41]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-skl3/igt@kms_cursor_crc@pipe-a-cursor-256x256-sliding.html
>    [42]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-skl9/igt@kms_cursor_crc@pipe-a-cursor-256x256-sliding.html
> 
>   * igt@kms_draw_crc@draw-method-xrgb2101010-mmap-gtt-ytiled:
>     - shard-skl:          [FAIL][43] ([fdo#103184] / [fdo#103232]) ->
> [PASS][44]
>    [43]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-skl3/igt@kms_draw_crc@draw-method-xrgb2101010-mmap-gtt-ytiled.html
>    [44]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-skl9/igt@kms_draw_crc@draw-method-xrgb2101010-mmap-gtt-ytiled.html
> 
>   * igt@kms_flip@flip-vs-suspend:
>     - shard-kbl:          [DMESG-WARN][45] ([fdo#108566]) ->
> [PASS][46] +1 similar issue
>    [45]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-kbl4/igt@kms_flip@flip-vs-suspend.html
>    [46]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-kbl7/igt@kms_flip@flip-vs-suspend.html
> 
>   * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt:
>     - shard-iclb:         [FAIL][47] ([fdo#103167]) -> [PASS][48] +8
> similar issues
>    [47]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-iclb4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt.html
>    [48]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-iclb3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt.html
> 
>   * igt@kms
> _frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-pwrite:
>     - shard-hsw:          [SKIP][49] ([fdo#109271]) -> [PASS][50] +20
> similar issues
>    [49]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-hsw1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-pwrite.html
>    [50]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-hsw6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-pwrite.html
> 
>   * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
>     - shard-skl:          [INCOMPLETE][51] ([fdo#104108]) ->
> [PASS][52]
>    [51]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-skl9/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html
>    [52]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-skl1/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html
> 
>   * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min:
>     - shard-skl:          [FAIL][53] ([fdo#108145]) -> [PASS][54] +1
> similar issue
>    [53]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-skl3/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html
>    [54]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-skl9/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html
> 
>   * igt@kms_psr@psr2_sprite_plane_move:
>     - shard-iclb:         [SKIP][55] ([fdo#109441]) -> [PASS][56] +2
> similar issues
>    [55]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-iclb7/igt@kms_psr@psr2_sprite_plane_move.html
>    [56]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html
> 
>   * igt@kms_setmode@basic:
>     - shard-kbl:          [FAIL][57] ([fdo#99912]) -> [PASS][58]
>    [57]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-kbl4/igt@kms_setmode@basic.html
>    [58]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-kbl7/igt@kms_setmode@basic.html
> 
>   * igt@kms_sysfs_edid_timing:
>     - shard-iclb:         [FAIL][59] ([fdo#100047]) -> [PASS][60]
>    [59]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-iclb3/igt@kms_sysfs_edid_timing.html
>    [60]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-iclb4/igt@kms_sysfs_edid_timing.html
> 
>   
> #### Warnings ####
> 
>   * igt@kms
> _frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt:
>     - shard-skl:          [FAIL][61] ([fdo#108040]) -> [FAIL][62]
> ([fdo#103167])
>    [61]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6287/shard-skl4/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt.html
>    [62]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/shard-skl9/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt.html
> 
>   
>   [fdo#100047]: https://bugs.freedesktop.org/show_bug.cgi?id=100047
>   [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
>   [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
>   [fdo#103184]: https://bugs.freedesktop.org/show_bug.cgi?id=103184
>   [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
>   [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
>   [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
>   [fdo#104097]: https://bugs.freedesktop.org/show_bug.cgi?id=104097
>   [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
>   [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
>   [fdo#105411]: https://bugs.freedesktop.org/show_bug.cgi?id=105411
>   [fdo#108040]: https://bugs.freedesktop.org/show_bug.cgi?id=108040
>   [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
>   [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
>   [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
>   [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
>   [fdo#109507]: https://bugs.freedesktop.org/show_bug.cgi?id=109507
>   [fdo#110789]: https://bugs.freedesktop.org/show_bug.cgi?id=110789
>   [fdo#110854]: https://bugs.freedesktop.org/show_bug.cgi?id=110854
>   [fdo#110913 ]: https://bugs.freedesktop.org/show_bug.cgi?id=110913 
>   [fdo#110938]: https://bugs.freedesktop.org/show_bug.cgi?id=110938
>   [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912
> 
> 
> Participating hosts (10 -> 10)
> ------------------------------
> 
>   No changes in participating hosts
> 
> 
> Build changes
> -------------
> 
>   * Linux: CI_DRM_6287 -> Patchwork_13316
> 
>   CI_DRM_6287: 3765c2bb2bf60f35709fba4c23070e2b74e14247 @
> git://anongit.freedesktop.org/gfx-ci/linux
>   IGT_5059: 1f67ee0d09d6513f487f2be74aae9700e755258a @
> git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
>   Patchwork_13316: 9c14588342ae49686a5bb8948f47554068004a68 @
> git://anongit.freedesktop.org/gfx-ci/linux
>   piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @
> git://anongit.freedesktop.org/piglit
> 
> == Logs ==
> 
> For more details see: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13316/
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 69709df4a648..69d908e6a050 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -863,16 +863,23 @@  void intel_psr_disable(struct intel_dp *intel_dp,
 
 static void psr_force_hw_tracking_exit(struct drm_i915_private *dev_priv)
 {
-	/*
-	 * Display WA #0884: all
-	 * This documented WA for bxt can be safely applied
-	 * broadly so we can force HW tracking to exit PSR
-	 * instead of disabling and re-enabling.
-	 * Workaround tells us to write 0 to CUR_SURFLIVE_A,
-	 * but it makes more sense write to the current active
-	 * pipe.
-	 */
-	I915_WRITE(CURSURFLIVE(dev_priv->psr.pipe), 0);
+	if (INTEL_GEN(dev_priv) >= 9)
+		/*
+		 * Display WA #0884: skl+
+		 * This documented WA for bxt can be safely applied
+		 * broadly so we can force HW tracking to exit PSR
+		 * instead of disabling and re-enabling.
+		 * Workaround tells us to write 0 to CUR_SURFLIVE_A,
+		 * but it makes more sense write to the current active
+		 * pipe.
+		 */
+		I915_WRITE(CURSURFLIVE(dev_priv->psr.pipe), 0);
+	else
+		/*
+		 * A write to CURSURFLIVE do not cause HW tracking to exit PSR
+		 * on older gens so doing the manual exit instead.
+		 */
+		intel_psr_exit(dev_priv);
 }
 
 /**
@@ -903,6 +910,15 @@  void intel_psr_update(struct intel_dp *intel_dp,
 		/* Force a PSR exit when enabling CRC to avoid CRC timeouts */
 		if (crtc_state->crc_enabled && psr->enabled)
 			psr_force_hw_tracking_exit(dev_priv);
+		else if (INTEL_GEN(dev_priv) < 9 && psr->enabled) {
+			/*
+			 * Activate PSR again after a force exit when enabling
+			 * CRC in older gens
+			 */
+			if (!dev_priv->psr.active &&
+			    !dev_priv->psr.busy_frontbuffer_bits)
+				schedule_work(&dev_priv->psr.work);
+		}
 
 		goto unlock;
 	}