On Tue, 2023-09-05 at 08:52 +0000, Manna, Animesh wrote: > > > > -----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> Thank you Animesh for the review. This is now merged. BR, Jouni Högander > > > --- > > 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 >