From: Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
To: intel-xe@lists.freedesktop.org
Cc: tejas.upadhyay@intel.com,
Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
Subject: [PATCH v6 2/7] drm/xe/devcoredump: Add GuC register snapshot to devcoredump
Date: Tue, 27 Oct 2026 10:40:19 +0530 [thread overview]
Message-ID: <20261027051024.465587-3-naresh.kumar.g@intel.com> (raw)
In-Reply-To: <20261027051024.465587-1-naresh.kumar.g@intel.com>
Add support for capturing GuC register state as part of the xe
devcoredump snapshot.
Define a dedicated GuC register snapshot structure, record selected
GT and media GuC status/error registers during devcoredump capture,
and free the snapshot during teardown.
Keeping these register values in the devcoredump helps with
post-mortem analysis of GuC-related failures.
v2:(Sashiko)
- Reuse the generic target GT snapshot helper for GuC register capture
- Capture primary and media GuC registers using correct GT MMIO context
- Avoid reading the same on SR-IOV VF
- skip reading media GT GuC registers when media is not present
- drop hardcoded media register address macros
v5:
- Rebase as per patch1 changes
v6:(Tejas)
- Refactor register name as per spec
Signed-off-by: Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/regs/xe_guc_regs.h | 5 ++++
drivers/gpu/drm/xe/xe_devcoredump.c | 35 +++++++++++++++++++++++
drivers/gpu/drm/xe/xe_devcoredump_types.h | 5 ++++
3 files changed, 45 insertions(+)
diff --git a/drivers/gpu/drm/xe/regs/xe_guc_regs.h b/drivers/gpu/drm/xe/regs/xe_guc_regs.h
index 5faac8316b66c..5a8a67eb37eea 100644
--- a/drivers/gpu/drm/xe/regs/xe_guc_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_guc_regs.h
@@ -150,6 +150,11 @@
#define GUC_INTR_SW_INT_1 REG_BIT(1)
#define GUC_INTR_SW_INT_0 REG_BIT(0)
+#define GUC_DEVICEID XE_REG(0xc008)
+#define SHIM_ERR_TRAP XE_REG(0xc070)
+#define GUC_HW_FATAL_ERR XE_REG(0xc598)
+#define GUC_HW_NOTIFY_ERR XE_REG(0xc59c)
+
#define GUC_NUM_DOORBELLS 256
/* format of the HW-monitored doorbell cacheline */
diff --git a/drivers/gpu/drm/xe/xe_devcoredump.c b/drivers/gpu/drm/xe/xe_devcoredump.c
index b3fb8a521c9ba..cd2c641111d68 100644
--- a/drivers/gpu/drm/xe/xe_devcoredump.c
+++ b/drivers/gpu/drm/xe/xe_devcoredump.c
@@ -27,6 +27,7 @@
#include "xe_vm.h"
#include "xe_mmio.h"
#include "regs/xe_gt_regs.h"
+#include "regs/xe_guc_regs.h"
/**
* DOC: Xe device coredump
@@ -73,6 +74,16 @@
#define XE_REG_DESC(_reg, _name) { .reg = (_reg), .name = (_name) }
+static const struct xe_reg_desc xe_dbg_gt_guc_reglist[] = {
+ XE_REG_DESC(GUC_STATUS, "GUC_STATUS"),
+ XE_REG_DESC(GUC_WOPCM_SIZE, "GUC_WOPCM_SIZE"),
+ XE_REG_DESC(GUC_DEVICEID, "GUC_DEVICEID"),
+ XE_REG_DESC(DMA_CTRL, "DMA_CTRL"),
+ XE_REG_DESC(GUC_HW_FATAL_ERR, "GUC_HW_FATAL_ERR"),
+ XE_REG_DESC(GUC_HW_NOTIFY_ERR, "GUC_HW_NOTIFY_ERR"),
+ XE_REG_DESC(SHIM_ERR_TRAP, "SHIM_ERR_TRAP"),
+};
+
static const struct xe_reg_desc xe_dbg_gt_fuse_reglist[] = {
XE_REG_DESC(XELP_GT_GEOMETRY_DSS_ENABLE, "GT_GEOMETRY_DSS_ENABLE"),
XE_REG_DESC(XEHP_GT_COMPUTE_DSS_ENABLE, "GT_COMPUTE_DSS_ENABLE"),
@@ -121,11 +132,13 @@ struct xe_gt_regset {
* enum xe_dbg_regset_type - debug register set types
* @XE_DBG_REGSET_FUSE: Fuse register set
* @XE_DBG_REGSET_RPM: RPM register set
+ * @XE_DBG_REGSET_GUC: GUC register set
* @XE_DBG_REGSET_MAX: Number of debug register set types
*/
enum xe_dbg_regset_type {
XE_DBG_REGSET_FUSE,
XE_DBG_REGSET_RPM,
+ XE_DBG_REGSET_GUC,
XE_DBG_REGSET_MAX,
};
@@ -142,6 +155,12 @@ static const struct xe_gt_regset xe_dbg_regsets[XE_DBG_REGSET_MAX] = {
.gt[XE_GT_TYPE_MEDIA] = { xe_dbg_media_gt_rpm_reglist,
ARRAY_SIZE(xe_dbg_media_gt_rpm_reglist) },
},
+ [XE_DBG_REGSET_GUC] = {
+ .gt[XE_GT_TYPE_MAIN] = { xe_dbg_gt_guc_reglist,
+ ARRAY_SIZE(xe_dbg_gt_guc_reglist) },
+ .gt[XE_GT_TYPE_MEDIA] = { xe_dbg_gt_guc_reglist,
+ ARRAY_SIZE(xe_dbg_gt_guc_reglist) },
+ },
};
static void xe_dbg_reg_snapshot_print(struct drm_printer *p,
@@ -288,6 +307,8 @@ static ssize_t __xe_devcoredump_read(char *buffer, ssize_t count,
xe_dbg_reg_snapshot_print(&p, "Media GT Fuse Register Dump", ss->media_fuse);
xe_gt_rpm_snapshot_print(&p, "GT RPM Register Dump", ss->gt_rpm);
xe_dbg_reg_snapshot_print(&p, "Media GT RPM Register Dump", ss->media_gt_rpm);
+ xe_dbg_reg_snapshot_print(&p, "GT GuC Register Dump", ss->gt_guc_reg);
+ xe_dbg_reg_snapshot_print(&p, "Media GT GuC Register Dump", ss->media_gt_guc_reg);
drm_puts(&p, "\n**** GuC Log ****\n");
xe_guc_log_snapshot_print(ss->guc.log, &p, ss->gt);
@@ -338,6 +359,12 @@ static void xe_devcoredump_snapshot_free(struct xe_devcoredump_snapshot *ss)
xe_dbg_reg_snapshot_free(ss->media_gt_rpm);
ss->media_gt_rpm = NULL;
+ xe_dbg_reg_snapshot_free(ss->gt_guc_reg);
+ ss->gt_guc_reg = NULL;
+
+ xe_dbg_reg_snapshot_free(ss->media_gt_guc_reg);
+ ss->media_gt_guc_reg = NULL;
+
if (!IS_ERR_OR_NULL(ss->gt))
xe_guc_capture_put_matched_nodes(&ss->gt->uc.guc);
ss->matched_node = NULL;
@@ -530,6 +557,14 @@ static void xe_devcoredump_capture_gt_regs(struct xe_devcoredump_snapshot *ss,
other_gt,
XE_DBG_REGSET_RPM,
XE_GT_TYPE_MEDIA);
+ ss->gt_guc_reg = xe_dbg_gt_snapshot_capture(gt,
+ other_gt,
+ XE_DBG_REGSET_GUC,
+ XE_GT_TYPE_MAIN);
+ ss->media_gt_guc_reg = xe_dbg_gt_snapshot_capture(gt,
+ other_gt,
+ XE_DBG_REGSET_GUC,
+ XE_GT_TYPE_MEDIA);
}
static void devcoredump_snapshot(struct xe_devcoredump *coredump,
diff --git a/drivers/gpu/drm/xe/xe_devcoredump_types.h b/drivers/gpu/drm/xe/xe_devcoredump_types.h
index e2fac33dce091..52db64640f89e 100644
--- a/drivers/gpu/drm/xe/xe_devcoredump_types.h
+++ b/drivers/gpu/drm/xe/xe_devcoredump_types.h
@@ -87,6 +87,11 @@ struct xe_devcoredump_snapshot {
/** @media_gt_rpm: Media GT RPM snapshot */
struct xe_dbg_reg_snapshot *media_gt_rpm;
+ /** @gt_guc_reg: gt guc reg snapshot */
+ struct xe_dbg_reg_snapshot *gt_guc_reg;
+ /** @media_gt_guc_reg: media gt guc reg snapshot */
+ struct xe_dbg_reg_snapshot *media_gt_guc_reg;
+
/** @work: Workqueue for deferred capture outside of signaling context */
struct work_struct work;
--
2.43.0
next prev parent reply other threads:[~2026-10-27 5:13 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-27 5:10 [PATCH v6 0/7] drm/xe: Capture additional HW register state in devcoredump Nareshkumar Gollakoti
2026-10-27 5:10 ` [PATCH v6 1/7] drm/xe/devcoredump: Capture GT fuse registers " Nareshkumar Gollakoti
2026-10-28 13:30 ` Upadhyay, Tejas
2026-10-27 5:10 ` Nareshkumar Gollakoti [this message]
2026-10-27 5:10 ` [PATCH v6 3/7] drm/xe/guc: Print register addresses in capture snapshot output Nareshkumar Gollakoti
2026-10-27 5:10 ` [PATCH v6 4/7] drm/xe: dump GAM page fault report registers in devcoredump Nareshkumar Gollakoti
2026-10-27 5:21 ` sashiko-bot
2026-10-28 13:36 ` Upadhyay, Tejas
2026-10-27 5:10 ` [PATCH v6 5/7] drm/xe/guc: add TDL, SLICE gfx registers to capture list Nareshkumar Gollakoti
2026-10-27 5:10 ` [PATCH v6 6/7] drm/xe: capture L3 node status registers in devcoredump Nareshkumar Gollakoti
2026-10-27 5:19 ` sashiko-bot
2026-10-27 5:10 ` [PATCH v6 7/7] drm/xe/guc: capture additional engine state registers Nareshkumar Gollakoti
2026-10-27 5:21 ` sashiko-bot
2026-10-28 13:46 ` Upadhyay, Tejas
2026-10-27 6:02 ` ✗ CI.checkpatch: warning for drm/xe: Capture additional HW register state in devcoredump (rev7) Patchwork
2026-10-27 6:04 ` ✓ CI.KUnit: success " Patchwork
2026-10-27 6:44 ` ✓ Xe.CI.BAT: " Patchwork
2026-10-27 11:24 ` ✗ 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=20261027051024.465587-3-naresh.kumar.g@intel.com \
--to=naresh.kumar.g@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=tejas.upadhyay@intel.com \
/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.