[PATCH 21/26] drm/xe/eudebug/ptl: Add support for extra attention register
Mika Kuoppala
mika.kuoppala at linux.intel.com
Mon Dec 9 13:33:12 UTC 2024
From: Dominik Grzegorzek <dominik.grzegorzek at intel.com>
xe3 can set bits within an additional attention bit register EU_ATT1.
Recalculate bitmask and make sure we read all required data.
Signed-off-by: Dominik Grzegorzek <dominik.grzegorzek at intel.com>
Signed-off-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>
---
drivers/gpu/drm/xe/xe_eudebug.c | 4 ++--
drivers/gpu/drm/xe/xe_gt_debug.c | 8 ++++----
drivers/gpu/drm/xe/xe_gt_debug.h | 8 ++++++--
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_eudebug.c b/drivers/gpu/drm/xe/xe_eudebug.c
index f44cc0f8290e..c259e5804386 100644
--- a/drivers/gpu/drm/xe/xe_eudebug.c
+++ b/drivers/gpu/drm/xe/xe_eudebug.c
@@ -1858,7 +1858,7 @@ static int check_attn_mcr(struct xe_gt *gt, void *data,
struct xe_eudebug *d = iter->debugger;
unsigned int row;
- for (row = 0; row < TD_EU_ATTENTION_MAX_ROWS; row++) {
+ for (row = 0; row < xe_gt_debug_eu_att_rows(gt); row++) {
u32 val, cur = 0;
if (iter->i >= iter->size)
@@ -1891,7 +1891,7 @@ static int clear_attn_mcr(struct xe_gt *gt, void *data,
struct xe_eudebug *d = iter->debugger;
unsigned int row;
- for (row = 0; row < TD_EU_ATTENTION_MAX_ROWS; row++) {
+ for (row = 0; row < xe_gt_debug_eu_att_rows(gt); row++) {
u32 val;
if (iter->i >= iter->size)
diff --git a/drivers/gpu/drm/xe/xe_gt_debug.c b/drivers/gpu/drm/xe/xe_gt_debug.c
index f35b9df5e41b..49f24db9da9c 100644
--- a/drivers/gpu/drm/xe/xe_gt_debug.c
+++ b/drivers/gpu/drm/xe/xe_gt_debug.c
@@ -74,9 +74,9 @@ int xe_gt_eu_attention_bitmap_size(struct xe_gt *gt)
bitmap_or(dss_mask, gt->fuse_topo.c_dss_mask,
gt->fuse_topo.g_dss_mask, XE_MAX_DSS_FUSE_BITS);
- return bitmap_weight(dss_mask, XE_MAX_DSS_FUSE_BITS) *
- TD_EU_ATTENTION_MAX_ROWS * MAX_THREADS *
- MAX_EUS_PER_ROW / 8;
+ return bitmap_weight(dss_mask, XE_MAX_DSS_FUSE_BITS) *
+ xe_gt_debug_eu_att_rows(gt) * MAX_THREADS *
+ MAX_EUS_PER_ROW / 8;
}
struct attn_read_iter {
@@ -92,7 +92,7 @@ static int read_eu_attentions_mcr(struct xe_gt *gt, void *data,
struct attn_read_iter * const iter = data;
unsigned int row;
- for (row = 0; row < TD_EU_ATTENTION_MAX_ROWS; row++) {
+ for (row = 0; row < xe_gt_debug_eu_att_rows(gt); row++) {
u32 val;
if (iter->i >= iter->size)
diff --git a/drivers/gpu/drm/xe/xe_gt_debug.h b/drivers/gpu/drm/xe/xe_gt_debug.h
index 342082699ff6..1edb667154f1 100644
--- a/drivers/gpu/drm/xe/xe_gt_debug.h
+++ b/drivers/gpu/drm/xe/xe_gt_debug.h
@@ -6,12 +6,16 @@
#ifndef __XE_GT_DEBUG_
#define __XE_GT_DEBUG_
-#define TD_EU_ATTENTION_MAX_ROWS 2u
-
+#include "xe_device_types.h"
#include "xe_gt_types.h"
#define XE_GT_ATTENTION_TIMEOUT_MS 100
+static inline unsigned int xe_gt_debug_eu_att_rows(struct xe_gt *gt)
+{
+ return (GRAPHICS_VERx100(gt_to_xe(gt)) >= 3000) ? 4u : 2u;
+}
+
int xe_gt_eu_threads_needing_attention(struct xe_gt *gt);
int xe_gt_foreach_dss_group_instance(struct xe_gt *gt,
int (*fn)(struct xe_gt *gt,
--
2.43.0
More information about the Intel-xe
mailing list