From: Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
To: intel-xe@lists.freedesktop.org
Cc: himal.prasad.ghimiray@intel.com,
Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
Subject: [PATCH 6/6] drm/xe: capture L3 node status registers in devcoredump
Date: Thu, 13 Aug 2026 19:00:37 +0530 [thread overview]
Message-ID: <20260813133037.2912699-7-naresh.kumar.g@intel.com> (raw)
In-Reply-To: <20260813133037.2912699-1-naresh.kumar.g@intel.com>
Add L3_NODE_IDLE and L3STAT_LBCF_GFX register definitions and include
them in the devcoredump snapshot as a node status section.
Extend the register descriptor to mark MCR registers so the snapshot
code can read them through xe_gt_mcr_unicast_read_any(), then print and
free the captured node status registers alongside the existing dump
sections.
Signed-off-by: Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
---
drivers/gpu/drm/xe/regs/xe_gt_regs.h | 3 ++
drivers/gpu/drm/xe/xe_devcoredump.c | 37 ++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_devcoredump_types.h | 2 ++
3 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index 8c55d766a5a6..fdd081791961 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -430,6 +430,9 @@
#define L3_ESC_MASK REG_BIT(0)
#define L3_ESC(value) REG_FIELD_PREP(L3_ESC_MASK, value)
+#define L3_NODE_IDLE XE_REG(0xb0b0)
+#define L3STAT_LBCF_GFX XE_REG(0xb128)
+
#define XEHP_L3NODEARBCFG XE_REG_MCR(0xb0b4)
#define XEHP_LNESPARE REG_BIT(19)
diff --git a/drivers/gpu/drm/xe/xe_devcoredump.c b/drivers/gpu/drm/xe/xe_devcoredump.c
index 6cc4e3969417..ab8cd7d58964 100644
--- a/drivers/gpu/drm/xe/xe_devcoredump.c
+++ b/drivers/gpu/drm/xe/xe_devcoredump.c
@@ -28,6 +28,7 @@
#include "xe_mmio.h"
#include "regs/xe_gt_regs.h"
#include "regs/xe_guc_regs.h"
+#include "xe_gt_mcr.h"
/**
* DOC: Xe device coredump
@@ -83,6 +84,8 @@ struct xe_reg_desc {
struct xe_reg reg;
/** @name: Name of the register */
const char *name;
+ /** @mcr: mcr type registers */
+ bool mcr;
};
static const struct xe_reg_desc xe_gt_guc_reg_list[] = {
@@ -133,6 +136,11 @@ static const struct xe_reg_desc xe3p_gam_pf_reglist[] = {
{ PAGE_FLTRPTQ_TAIL_GAMCTRL, "PAGE_FLTRPTQ_TAIL_GAMCTRL"},
};
+static const struct xe_reg_desc xe3p_l3_node_reglist[] = {
+ { L3_NODE_IDLE, "L3_NODE_IDLE", .mcr = true },
+ { L3STAT_LBCF_GFX, "L3STAT_LBCF_GFX", .mcr = true },
+};
+
/**
* struct xe_reg_desc_list - Struct for register descriptor list
*
@@ -156,7 +164,12 @@ xe_capture_reg_desc_list(struct xe_gt *gt,
for (i = 0; i < count; i++) {
dst[i].reg = src[i].reg;
- dst[i].value = xe_mmio_read32(>->mmio, src[i].reg);
+ if (src[i].mcr)
+ dst[i].value = xe_gt_mcr_unicast_read_any(gt,
+ XE_REG_MCR
+ (src[i].reg.addr));
+ else
+ dst[i].value = xe_mmio_read32(>->mmio, src[i].reg);
dst[i].name = src[i].name;
}
}
@@ -266,6 +279,19 @@ static struct xe_dbg_reg_snapshot *xe_gam_pf_report_capture(struct xe_gt *gt)
return xe_dbg_reg_snapshot_capture(gt, ®_list);
}
+static struct xe_dbg_reg_snapshot *xe_node_status_capture(struct xe_gt *gt)
+{
+ struct xe_reg_desc_list reg_list;
+
+ if (!xe_dbg_reg_snapshot_is_supported(gt_to_xe(gt)))
+ return NULL;
+
+ reg_list.regs = xe3p_l3_node_reglist;
+ reg_list.num_regs = ARRAY_SIZE(xe3p_l3_node_reglist);
+
+ return xe_dbg_reg_snapshot_capture(gt, ®_list);
+}
+
static struct xe_device *coredump_to_xe(const struct xe_devcoredump *coredump)
{
return container_of(coredump, struct xe_device, devcoredump);
@@ -329,6 +355,9 @@ static ssize_t __xe_devcoredump_read(char *buffer, ssize_t count,
drm_printf(&p, "\n**** GAM PF Report ****\n");
xe_dbg_reg_snapshot_print(&p, ss->gam_pf_report);
+ drm_printf(&p, "\n**** Node Status ****\n");
+ xe_dbg_reg_snapshot_print(&p, ss->ns);
+
drm_puts(&p, "\n**** Contexts ****\n");
xe_guc_exec_queue_snapshot_print(ss->ge, &p);
@@ -378,6 +407,9 @@ static void xe_devcoredump_snapshot_free(struct xe_devcoredump_snapshot *ss)
xe_dbg_reg_snapshot_free(ss->gam_pf_report);
ss->gam_pf_report = NULL;
+ xe_dbg_reg_snapshot_free(ss->ns);
+ ss->ns = NULL;
+
xe_guc_exec_queue_snapshot_free(ss->ge);
ss->ge = NULL;
@@ -582,6 +614,9 @@ static void devcoredump_snapshot(struct xe_devcoredump *coredump,
ss->guc.log = xe_guc_log_snapshot_capture(&guc->log, true);
ss->guc.ct = xe_guc_ct_snapshot_capture(&guc->ct);
ss->gam_pf_report = xe_gam_pf_report_capture(q->gt);
+
+ ss->ns = xe_node_status_capture(q->gt);
+
ss->ge = xe_guc_exec_queue_snapshot_capture(q);
if (job)
ss->job = xe_sched_job_snapshot_capture(job);
diff --git a/drivers/gpu/drm/xe/xe_devcoredump_types.h b/drivers/gpu/drm/xe/xe_devcoredump_types.h
index 893eadd68a3d..e6554aa02429 100644
--- a/drivers/gpu/drm/xe/xe_devcoredump_types.h
+++ b/drivers/gpu/drm/xe/xe_devcoredump_types.h
@@ -88,6 +88,8 @@ struct xe_devcoredump_snapshot {
/** @gam_pf_report: GAM PF report snapshot */
struct xe_dbg_reg_snapshot *gam_pf_report;
+ /** @ns: Node status snapshot */
+ struct xe_dbg_reg_snapshot *ns;
/** @ge: GuC Submission Engine snapshot */
struct xe_guc_submit_exec_queue_snapshot *ge;
--
2.43.0
next prev parent reply other threads:[~2026-08-13 13:31 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-13 13:30 [PATCH 0/6] drm/xe: Capture additional HW register state in devcoredump Nareshkumar Gollakoti
2026-08-13 13:30 ` [PATCH 1/6] drm/xe/devcoredump: Capture GT fuse registers " Nareshkumar Gollakoti
2026-08-13 13:52 ` sashiko-bot
2026-08-13 13:30 ` [PATCH 2/6] drm/xe/devcoredump: Add GuC register snapshot to devcoredump Nareshkumar Gollakoti
2026-08-13 14:04 ` sashiko-bot
2026-08-13 13:30 ` [PATCH 3/6] drm/xe/guc: Print register addresses in capture snapshot output Nareshkumar Gollakoti
2026-08-13 14:11 ` sashiko-bot
2026-08-13 13:30 ` [PATCH 4/6] drm/xe: dump GAM page fault report registers in devcoredump Nareshkumar Gollakoti
2026-08-13 13:30 ` [PATCH 5/6] drm/xe/guc: add TDL gfx registers to capture list Nareshkumar Gollakoti
2026-08-13 14:25 ` sashiko-bot
2026-08-13 13:30 ` Nareshkumar Gollakoti [this message]
2026-08-13 14:37 ` [PATCH 6/6] drm/xe: capture L3 node status registers in devcoredump sashiko-bot
2026-08-13 13:39 ` ✓ CI.KUnit: success for drm/xe: Capture additional HW register state " Patchwork
2026-08-13 14:27 ` ✓ Xe.CI.BAT: " Patchwork
2026-08-13 15:58 ` ✗ Xe.CI.FULL: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260813133037.2912699-7-naresh.kumar.g@intel.com \
--to=naresh.kumar.g@intel.com \
--cc=himal.prasad.ghimiray@intel.com \
--cc=intel-xe@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.