[Intel-xe] [RFC 1/2] drm/xe: Add debugfs to dump all known workarounds
Matt Roper
matthew.d.roper at intel.com
Mon Apr 17 21:16:21 UTC 2023
On Wed, Apr 12, 2023 at 01:20:53AM -0700, Lucas De Marchi wrote:
> Dump the names of all known workarounds known by the driver (regardless
> of the platform being executed). This helps to validate workarounds
> missing implementation. Later this can be extended to mark the
> workarounds that are active under this platform.
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
> ---
> drivers/gpu/drm/xe/xe_debugfs.c | 12 ++++++++++++
> drivers/gpu/drm/xe/xe_wa.c | 24 ++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_wa.h | 4 ++++
> 3 files changed, 40 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 a7d681b7538d..100315c03014 100644
> --- a/drivers/gpu/drm/xe/xe_wa.c
> +++ b/drivers/gpu/drm/xe/xe_wa.c
> @@ -656,3 +656,27 @@ void xe_wa_process_lrc(struct xe_hw_engine *hwe)
> {
> xe_rtp_process(lrc_was, &hwe->reg_lrc, hwe->gt, hwe);
> }
> +
> +/**
> + * xe_wa_dump - dump all workarounds known by the driver
> + * @xe: xe device
> + * @p: DRM printer
> + */
> +void xe_wa_dump(struct xe_device *xe, struct drm_printer *p)
> +{
> + const struct xe_rtp_entry *entry;
> +
> + drm_printf(p, "Workarounds\n");
> +
> + drm_printf(p, "\tGT\n");
> + for (entry = gt_was; entry && entry->name; entry++)
> + drm_printf(p, "\t\t%s\n", entry->name);
> +
> + drm_printf(p, "\tEngine\n");
> + for (entry = engine_was; entry && entry->name; entry++)
> + drm_printf(p, "\t\t%s\n", entry->name);
> +
> + drm_printf(p, "\tLRC\n");
> + for (entry = lrc_was; entry && entry->name; entry++)
> + drm_printf(p, "\t\t%s\n", entry->name);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_wa.h b/drivers/gpu/drm/xe/xe_wa.h
> index cd2307d58795..97d104b7e566 100644
> --- a/drivers/gpu/drm/xe/xe_wa.h
> +++ b/drivers/gpu/drm/xe/xe_wa.h
> @@ -6,6 +6,8 @@
> #ifndef _XE_WA_
> #define _XE_WA_
>
> +struct drm_printer;
> +struct xe_device;
> struct xe_gt;
> struct xe_hw_engine;
>
> @@ -13,6 +15,8 @@ void xe_wa_process_gt(struct xe_gt *gt);
> void xe_wa_process_engine(struct xe_hw_engine *hwe);
> void xe_wa_process_lrc(struct xe_hw_engine *hwe);
>
> +void xe_wa_dump(struct xe_device *xe, struct drm_printer *p);
> +
> void xe_reg_whitelist_process_engine(struct xe_hw_engine *hwe);
>
> #endif
> --
> 2.39.0
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-xe
mailing list