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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----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





[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux