> -----Original Message----- > From: Intel-gfx <intel-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Jouni > Högander > Sent: Monday, August 28, 2023 2:01 PM > To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx > Subject: [PATCH] drm/i915/psr: Add psr sink error status into sink > status debugfs > > Normally PSR errors detected by the panel are triggering HPD interrupt and > seen as error in dmesg. Some panels are not triggering the interrupt even it is > requested and they are detecting error. Due to this it would be good to have > possibility to check panel detected errors. Add PSR error status into PSR sink > status debugfs interface. > > Signed-off-by: Jouni Högander <jouni.hogander@xxxxxxxxx> LGTM. Reviewed-by: Animesh Manna <animesh.manna@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_psr.c | 34 +++++++++++++++++------- > 1 file changed, 25 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c > b/drivers/gpu/drm/i915/display/intel_psr.c > index 72887c29fb51..a008918b4d71 100644 > --- a/drivers/gpu/drm/i915/display/intel_psr.c > +++ b/drivers/gpu/drm/i915/display/intel_psr.c > @@ -23,6 +23,7 @@ > > #include <drm/drm_atomic_helper.h> > #include <drm/drm_damage_helper.h> > +#include <drm/drm_debugfs.h> > > #include "i915_drv.h" > #include "i915_reg.h" > @@ -3153,7 +3154,7 @@ static int i915_psr_sink_status_show(struct seq_file > *m, void *data) > }; > const char *str; > int ret; > - u8 val; > + u8 status, error_status; > > if (!CAN_PSR(intel_dp)) { > seq_puts(m, "PSR Unsupported\n"); > @@ -3163,19 +3164,34 @@ static int i915_psr_sink_status_show(struct > seq_file *m, void *data) > if (connector->base.status != connector_status_connected) > return -ENODEV; > > - ret = drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_STATUS, &val); > - if (ret != 1) > - return ret < 0 ? ret : -EIO; > + ret = psr_get_status_and_error_status(intel_dp, &status, > &error_status); > + if (ret) > + return ret; > > - val &= DP_PSR_SINK_STATE_MASK; > - if (val < ARRAY_SIZE(sink_status)) > - str = sink_status[val]; > + status &= DP_PSR_SINK_STATE_MASK; > + if (status < ARRAY_SIZE(sink_status)) > + str = sink_status[status]; > else > str = "unknown"; > > - seq_printf(m, "Sink PSR status: 0x%x [%s]\n", val, str); > + seq_printf(m, "Sink PSR status: 0x%x [%s]\n", status, str); > > - return 0; > + seq_printf(m, "Sink PSR error status: 0x%x", error_status); > + > + if (error_status & (DP_PSR_RFB_STORAGE_ERROR | > + DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR | > + DP_PSR_LINK_CRC_ERROR)) > + seq_puts(m, ":\n"); > + else > + seq_puts(m, "\n"); > + if (error_status & DP_PSR_RFB_STORAGE_ERROR) > + seq_puts(m, "\tPSR RFB storage error\n"); > + if (error_status & DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR) > + seq_puts(m, "\tPSR VSC SDP uncorrectable error\n"); > + if (error_status & DP_PSR_LINK_CRC_ERROR) > + seq_puts(m, "\tPSR Link CRC error\n"); > + > + return ret; > } > DEFINE_SHOW_ATTRIBUTE(i915_psr_sink_status); > > -- > 2.34.1