[v2] drm/i915: Do not mark as sink as not reliable to PSR runtime errors
diff mbox series

Message ID 1575525170-20284-1-git-send-email-gaurav.k.singh@intel.com
State New
Headers show
Series
  • [v2] drm/i915: Do not mark as sink as not reliable to PSR runtime errors
Related show

Commit Message

Gaurav K Singh Dec. 5, 2019, 5:52 a.m. UTC
In case of CRC mismatch, panel generates IRQ_HD and
PSR2 gets disabled by i915 driver. Due to this, PSR2 will
only be enabled back only if system is rebooted or cold boot.
So, in cases of suspend resume stress test and S0ix stress test,
when we encounter this CRC issue on a particular iteration,
once PSR2 is disabled,it remains disabled throughout all the
cycling iterations until the system is rebooted.

Keeping this in mind, many times users do not reboot their system and
they just keep lid off/on or suspend/resume. In these scenarios
in case of CRC issue, panel will become non-PSR2 which will eventually
drain out battery.

In order to fix this behavior, did not set the "sink_not_reliable" flag
to be true, so that intel_psr_compute_config() can pass in case of a
normal modeset which will lead to enabling PSR2 again in next iteration
of suspend/resume or S0ix cycle(without reboot).

Tested this patch and works fine on Gen9 Intel chromebook, PSR2 was
enabled back in next iteration, no other sideeffects observed.

v2:
* Change the commit header indicating fix for
PSR runtime erros(Jose, Souza)
* Allow sink_not_reliable to be set for other errors
except CRC error (Jose, Souza)

Signed-off-by: Gaurav K Singh <gaurav.k.singh@intel.com>
---
 drivers/gpu/drm/i915/display/intel_psr.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Patch
diff mbox series

diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 16e9ff47d519..1037b716c1c0 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1484,7 +1484,9 @@  void intel_psr_short_pulse(struct intel_dp *intel_dp)
 
 	if (status == DP_PSR_SINK_INTERNAL_ERROR || (error_status & errors)) {
 		intel_psr_disable_locked(intel_dp);
-		psr->sink_not_reliable = true;
+		if ((error_status & DP_PSR_RFB_STORAGE_ERROR) ||
+			(error_status & DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR))
+			psr->sink_not_reliable = true;
 	}
 
 	if (status == DP_PSR_SINK_INTERNAL_ERROR && !error_status)