[Intel-xe] [PATCH 10/19] drm/xe/debugfs: Dump register save-restore tables

Lucas De Marchi lucas.demarchi at intel.com
Wed Mar 8 22:41:45 UTC 2023


On Wed, Mar 08, 2023 at 02:33:50PM -0800, Matt Roper wrote:
>On Tue, Mar 07, 2023 at 01:24:37AM -0800, Lucas De Marchi wrote:
>> Add debugfs entry to dump the final tables with register save-restore
>> information. This has a format a little bit different than when the
>> values are applied because we don't want to read the values from the HW
>> when dumping via debugfs.
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>> ---
>>  drivers/gpu/drm/xe/xe_gt_debugfs.c | 24 ++++++++++++++++++++++++
>>  drivers/gpu/drm/xe/xe_reg_sr.c     | 17 +++++++++++++++++
>>  drivers/gpu/drm/xe/xe_reg_sr.h     |  2 ++
>>  3 files changed, 43 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> index 78942e12e76c..2db4863ba57e 100644
>> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> @@ -16,6 +16,7 @@
>>  #include "xe_gt_topology.h"
>>  #include "xe_hw_engine.h"
>>  #include "xe_macros.h"
>> +#include "xe_reg_sr.h"
>>  #include "xe_uc_debugfs.h"
>>
>>  static struct xe_gt *node_to_gt(struct drm_info_node *node)
>> @@ -98,6 +99,28 @@ static int ggtt(struct seq_file *m, void *data)
>>  	return xe_ggtt_dump(gt->mem.ggtt, &p);
>>  }
>>
>> +static int register_save_restore(struct seq_file *m, void *data)
>> +{
>> +	struct xe_gt *gt = node_to_gt(m->private);
>> +	struct drm_printer p = drm_seq_file_printer(m);
>> +	struct xe_hw_engine *hwe;
>> +	enum xe_hw_engine_id id;
>> +
>> +	xe_reg_sr_dump(&gt->reg_sr, &p);
>> +	drm_printf(&p, "\n");
>> +
>> +	drm_printf(&p, "Engine\n");
>> +	for_each_hw_engine(hwe, gt, id)
>> +		xe_reg_sr_dump(&hwe->reg_sr, &p);
>> +	drm_printf(&p, "\n");
>> +
>> +	drm_printf(&p, "LRC\n");
>> +	for_each_hw_engine(hwe, gt, id)
>> +		xe_reg_sr_dump(&hwe->reg_lrc, &p);
>
>Should we include the whitelist here too?  It's not technically a
>"save/restore," but it uses the same xe_reg_sr framework and is equally
>useful to dump from a debug point of view.  We'd need a slightly
>different dump output for that one though.

yeah... that dump can probably be added in xe_reg_whitelist where
is the knowledge of how the whitelist if formated. Then here we just
call that specific function instead of the more generic
xe_reg_sr_dump().

Lucas De Marchi

>
>
>Matt
>
>> +
>> +	return 0;
>> +}
>> +
>>  static const struct drm_info_list debugfs_list[] = {
>>  	{"hw_engines", hw_engines, 0},
>>  	{"force_reset", force_reset, 0},
>> @@ -105,6 +128,7 @@ static const struct drm_info_list debugfs_list[] = {
>>  	{"topology", topology, 0},
>>  	{"steering", steering, 0},
>>  	{"ggtt", ggtt, 0},
>> +	{"register-save-restore", register_save_restore, 0},
>>  };
>>
>>  void xe_gt_debugfs_register(struct xe_gt *gt)
>> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
>> index 194a5060f1b3..855d86a6c43a 100644
>> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
>> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
>> @@ -8,6 +8,7 @@
>>  #include <linux/align.h>
>>  #include <linux/string_helpers.h>
>>  #include <linux/xarray.h>
>> +#include <linux/string_helpers.h>
>>
>>  #include <drm/drm_managed.h>
>>  #include <drm/drm_print.h>
>> @@ -220,3 +221,19 @@ void xe_reg_sr_apply_whitelist(struct xe_reg_sr *sr, u32 mmio_base,
>>  err_force_wake:
>>  	drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
>>  }
>> +
>> +void xe_reg_sr_dump(struct xe_reg_sr *sr, struct drm_printer *p)
>> +{
>> +	struct xe_reg_sr_entry *entry;
>> +	unsigned long reg;
>> +
>> +	if (!sr->name || xa_empty(&sr->xa))
>> +		return;
>> +
>> +	drm_printf(p, "%s\n", sr->name);
>> +	xa_for_each(&sr->xa, reg, entry)
>> +		drm_printf(p, "\tREG[0x%lx] clr=0x%08x set=0x%08x masked=%s mcr=%s\n",
>> +			   reg, entry->clr_bits, entry->set_bits,
>> +			   str_yes_no(entry->masked_reg),
>> +			   str_yes_no(entry->reg_type == XE_RTP_REG_MCR));
>> +}
>> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.h b/drivers/gpu/drm/xe/xe_reg_sr.h
>> index 9f47230c8ddc..3af369089faa 100644
>> --- a/drivers/gpu/drm/xe/xe_reg_sr.h
>> +++ b/drivers/gpu/drm/xe/xe_reg_sr.h
>> @@ -14,8 +14,10 @@
>>
>>  struct xe_device;
>>  struct xe_gt;
>> +struct drm_printer;
>>
>>  int xe_reg_sr_init(struct xe_reg_sr *sr, const char *name, struct xe_device *xe);
>> +void xe_reg_sr_dump(struct xe_reg_sr *sr, struct drm_printer *p);
>>
>>  int xe_reg_sr_add(struct xe_reg_sr *sr, u32 reg,
>>  		  const struct xe_reg_sr_entry *e);
>> --
>> 2.39.0
>>
>
>-- 
>Matt Roper
>Graphics Software Engineer
>Linux GPU Platform Enablement
>Intel Corporation


More information about the Intel-xe mailing list