From: Dominik Grzegorzek <dominik.grzegorzek@xxxxxxxxx> 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@xxxxxxxxx> Signed-off-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> --- 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