[Intel-xe] [PATCH 10/19] drm/xe/debugfs: Dump register save-restore tables
Lucas De Marchi
lucas.demarchi at intel.com
Tue Mar 7 09:24:37 UTC 2023
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(>->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);
+
+ 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
More information about the Intel-xe
mailing list