[Intel-xe] [PATCH v3 6/9] drm/xe/debugfs: Dump active workarounds

Matt Roper matthew.d.roper at intel.com
Wed May 17 17:55:05 UTC 2023


On Tue, May 16, 2023 at 03:19:47PM -0700, Lucas De Marchi wrote:
> Add a "workarounds" node in debugfs that can dump all the active
> workarounds using the information recorded by rtp infra when those
> workarounds were processed.

As noted on the previous patch, I think it would be better to have this
in a per-GT debugfs so that we can catch cases where we implemented the
workaround properly for the graphics GT but forgot we needed to
implement it for the media GT too, or vice versa.


Matt

> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_debugfs.c | 12 ++++++++++++
>  drivers/gpu/drm/xe/xe_wa.c      | 18 ++++++++++++++++++
>  drivers/gpu/drm/xe/xe_wa.h      |  2 ++
>  3 files changed, 32 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
> index 7827a785b020..ad1b1ab49e1d 100644
> --- a/drivers/gpu/drm/xe/xe_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_debugfs.c
> @@ -13,6 +13,7 @@
>  #include "xe_device.h"
>  #include "xe_gt_debugfs.h"
>  #include "xe_step.h"
> +#include "xe_wa.h"
>  
>  #ifdef CONFIG_DRM_XE_DEBUG
>  #include "xe_bo_evict.h"
> @@ -60,8 +61,19 @@ static int info(struct seq_file *m, void *data)
>  	return 0;
>  }
>  
> +static int workarounds(struct seq_file *m, void *data)
> +{
> +	struct xe_device *xe = node_to_xe(m->private);
> +	struct drm_printer p = drm_seq_file_printer(m);
> +
> +	xe_wa_dump(xe, &p);
> +
> +	return 0;
> +}
> +
>  static const struct drm_info_list debugfs_list[] = {
>  	{"info", info, 0},
> +	{"workarounds", workarounds, 0},
>  };
>  
>  static int forcewake_open(struct inode *inode, struct file *file)
> diff --git a/drivers/gpu/drm/xe/xe_wa.c b/drivers/gpu/drm/xe/xe_wa.c
> index fa37b1c0425a..bc2665737836 100644
> --- a/drivers/gpu/drm/xe/xe_wa.c
> +++ b/drivers/gpu/drm/xe/xe_wa.c
> @@ -650,3 +650,21 @@ int xe_wa_init(struct xe_device *xe)
>  
>  	return 0;
>  }
> +
> +void xe_wa_dump(struct xe_device *xe, struct drm_printer *p)
> +{
> +	size_t idx;
> +
> +	drm_printf(p, "GT Workarounds\n");
> +	for_each_set_bit(idx, xe->wa_active.gt, ARRAY_SIZE(gt_was))
> +		drm_printf_indent(p, 1, "%s\n", gt_was[idx].name);
> +
> +	drm_printf(p, "\nEngine Workarounds\n");
> +	for_each_set_bit(idx, xe->wa_active.engine, ARRAY_SIZE(engine_was))
> +		drm_printf_indent(p, 1, "%s\n", engine_was[idx].name);
> +
> +	drm_printf(p, "\nLRC Workarounds\n");
> +	for_each_set_bit(idx, xe->wa_active.lrc, ARRAY_SIZE(lrc_was))
> +		drm_printf_indent(p, 1, "%s\n", lrc_was[idx].name);
> +}
> +
> diff --git a/drivers/gpu/drm/xe/xe_wa.h b/drivers/gpu/drm/xe/xe_wa.h
> index 8edad4f92800..32ab34d9237f 100644
> --- a/drivers/gpu/drm/xe/xe_wa.h
> +++ b/drivers/gpu/drm/xe/xe_wa.h
> @@ -6,6 +6,7 @@
>  #ifndef _XE_WA_
>  #define _XE_WA_
>  
> +struct drm_printer;
>  struct xe_device;
>  struct xe_gt;
>  struct xe_hw_engine;
> @@ -16,5 +17,6 @@ void xe_wa_process_engine(struct xe_hw_engine *hwe);
>  void xe_wa_process_lrc(struct xe_hw_engine *hwe);
>  
>  void xe_reg_whitelist_process_engine(struct xe_hw_engine *hwe);
> +void xe_wa_dump(struct xe_device *xe, struct drm_printer *p);
>  
>  #endif
> -- 
> 2.40.1
> 

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation


More information about the Intel-xe mailing list