Re: [Intel-gfx] [PATCH] drm/i915/psr: Add psr sink error status into sink status debugfs

2023-09-06 Thread Hogander, Jouni
On Tue, 2023-09-05 at 08:52 +, Manna, Animesh wrote:
> 
> 
> > -Original Message-
> > From: Intel-gfx  On Behalf
> > Of Jouni
> > Högander
> > Sent: Monday, August 28, 2023 2:01 PM
> > To: intel-gfx@lists.freedesktop.org
> > Subject: [Intel-gfx] [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 
> 
> LGTM.
> Reviewed-by: Animesh Manna 

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 
> >  #include 
> > +#include 
> > 
> >  #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(_dp->aux, DP_PSR_STATUS,
> > );
> > -   if (ret != 1)
> > -   return ret < 0 ? ret : -EIO;
> > +   ret = psr_get_status_and_error_status(intel_dp, ,
> > _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
> 



Re: [Intel-gfx] [PATCH] drm/i915/psr: Add psr sink error status into sink status debugfs

2023-09-05 Thread Manna, Animesh


> -Original Message-
> From: Intel-gfx  On Behalf Of Jouni
> Högander
> Sent: Monday, August 28, 2023 2:01 PM
> To: intel-gfx@lists.freedesktop.org
> Subject: [Intel-gfx] [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 

LGTM.
Reviewed-by: Animesh Manna 

> ---
>  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 
>  #include 
> +#include 
> 
>  #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(_dp->aux, DP_PSR_STATUS, );
> - if (ret != 1)
> - return ret < 0 ? ret : -EIO;
> + ret = psr_get_status_and_error_status(intel_dp, ,
> _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



[Intel-gfx] [PATCH] drm/i915/psr: Add psr sink error status into sink status debugfs

2023-08-28 Thread Jouni Högander
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 
---
 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 
 #include 
+#include 
 
 #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(_dp->aux, DP_PSR_STATUS, );
-   if (ret != 1)
-   return ret < 0 ? ret : -EIO;
+   ret = psr_get_status_and_error_status(intel_dp, , _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