On 28/04/2023 02:28, Abhinav Kumar wrote:
On sc7280 where eDP is the primary display, PSR is causing
IGT breakage even for basic test cases like kms_atomic and
kms_atomic_transition. Most often the issue starts with below
stack so providing that as reference

Call trace:
  dpu_encoder_assign_crtc+0x64/0x6c
  dpu_crtc_enable+0x188/0x204
  drm_atomic_helper_commit_modeset_enables+0xc0/0x274
  msm_atomic_commit_tail+0x1a8/0x68c
  commit_tail+0xb0/0x160
  drm_atomic_helper_commit+0x11c/0x124
  drm_atomic_commit+0xb0/0xdc
  drm_atomic_connector_commit_dpms+0xf4/0x110
  drm_mode_obj_set_property_ioctl+0x16c/0x3b0
  drm_connector_property_set_ioctl+0x4c/0x74
  drm_ioctl_kernel+0xec/0x15c
  drm_ioctl+0x264/0x408
  __arm64_sys_ioctl+0x9c/0xd4
  invoke_syscall+0x4c/0x110
  el0_svc_common+0x94/0xfc
  do_el0_svc+0x3c/0xb0
  el0_svc+0x2c/0x7c
  el0t_64_sync_handler+0x48/0x114
  el0t_64_sync+0x190/0x194
---[ end trace 0000000000000000 ]---
[drm-dp] dp_ctrl_push_idle: PUSH_IDLE pattern timedout

Other basic use-cases still seem to work fine hence add a
a module parameter to allow toggling psr enable/disable till
PSR related issues are hashed out with IGT.

For the reference: Bjorn reported that he has issues with VT on a PSR-enabled laptops. This patch fixes the issue for him

Reviewed-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>


Signed-off-by: Abhinav Kumar <quic_abhin...@quicinc.com>
---
  drivers/gpu/drm/msm/dp/dp_display.c | 6 +++++-
  1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/msm/dp/dp_display.c 
b/drivers/gpu/drm/msm/dp/dp_display.c
index 628b0e248db6..dba43167de66 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -28,6 +28,10 @@
  #include "dp_audio.h"
  #include "dp_debug.h"
+static bool psr_enabled = false;
+module_param(psr_enabled, bool, 0);
+MODULE_PARM_DESC(psr_enabled, "enable PSR for eDP and DP displays");
+
  #define HPD_STRING_SIZE 30
enum {
@@ -407,7 +411,7 @@ static int dp_display_process_hpd_high(struct 
dp_display_private *dp)
edid = dp->panel->edid; - dp->dp_display.psr_supported = dp->panel->psr_cap.version;
+       dp->dp_display.psr_supported = dp->panel->psr_cap.version && 
psr_enabled;
dp->audio_supported = drm_detect_monitor_audio(edid);
        dp_panel_handle_sink_request(dp->panel);

--
With best wishes
Dmitry

Reply via email to