[PATCH v2 6/6] drm/xe/xelp: Add Wa_18022495364
Tvrtko Ursulin
tvrtko.ursulin at igalia.com
Mon Jun 2 11:19:56 UTC 2025
Add Wa_18022495364 as a context workaround batch buffer workaround.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
Cc: Lucas De Marchi <lucas.demarchi at intel.com>
Cc: Matt Roper <matthew.d.roper at intel.com>
---
drivers/gpu/drm/xe/regs/xe_engine_regs.h | 3 +++
drivers/gpu/drm/xe/xe_lrc.c | 24 ++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_wa_oob.rules | 1 +
3 files changed, 28 insertions(+)
diff --git a/drivers/gpu/drm/xe/regs/xe_engine_regs.h b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
index 7ade41e2b7b3..f4c3e1187a00 100644
--- a/drivers/gpu/drm/xe/regs/xe_engine_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
@@ -111,6 +111,9 @@
#define PPHWSP_CSB_AND_TIMESTAMP_REPORT_DIS REG_BIT(14)
#define CS_PRIORITY_MEM_READ REG_BIT(7)
+#define CS_DEBUG_MODE2(base) XE_REG((base) + 0xd8, XE_REG_OPTION_MASKED)
+#define INSTRUCTION_STATE_CACHE_INVALIDATE REG_BIT(6)
+
#define FF_SLICE_CS_CHICKEN1(base) XE_REG((base) + 0xe0, XE_REG_OPTION_MASKED)
#define FFSC_PERCTX_PREEMPT_CTRL REG_BIT(14)
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index d24d6a7fc5df..1003779fba53 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -1024,6 +1024,26 @@ xelp_emit_timestamp_wa(struct xe_lrc *lrc,
return offset + num_dw;
}
+static unsigned int
+xelp_invalidate_state_cache(struct xe_lrc *lrc,
+ struct iosys_map *map,
+ unsigned int offset)
+{
+ unsigned int num_dw;
+ u32 batch[3];
+ u32 *cmd = batch;
+
+ *cmd++ = MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(1);
+ *cmd++ = CS_DEBUG_MODE1(0).addr;
+ *cmd++ = _MASKED_BIT_ENABLE(INSTRUCTION_STATE_CACHE_INVALIDATE);
+
+ num_dw = cmd - batch;
+ xe_map_memcpy_to(lrc_to_xe(lrc), map, 0, batch, num_dw * sizeof(u32));
+ iosys_map_incr(map, num_dw * sizeof(u32));
+
+ return offset + num_dw;
+}
+
static void xe_lrc_setup_wa_bb(struct xe_lrc *lrc, struct xe_hw_engine *hwe)
{
struct iosys_map map = lrc->bb_per_ctx_bo->vmap;
@@ -1035,6 +1055,10 @@ static void xe_lrc_setup_wa_bb(struct xe_lrc *lrc, struct xe_hw_engine *hwe)
hwe->class == XE_ENGINE_CLASS_VIDEO_ENHANCE))
offset = xelp_emit_timestamp_wa(lrc, &map, offset);
+ if (XE_WA(lrc->gt, 18022495364) &&
+ hwe->class == XE_ENGINE_CLASS_RENDER)
+ offset = xelp_invalidate_state_cache(lrc, &map, offset);
+
offset = xe_lrc_setup_utilization(lrc, &map, offset);
xe_map_write32(lrc_to_xe(lrc), &map, MI_BATCH_BUFFER_END);
diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
index 9abc4b09ac38..c526f5226267 100644
--- a/drivers/gpu/drm/xe/xe_wa_oob.rules
+++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
@@ -1,5 +1,6 @@
1607983814 GRAPHICS_VERSION_RANGE(1200, 1210)
16010904313 GRAPHICS_VERSION_RANGE(1200, 1210)
+18022495364 GRAPHICS_VERSION_RANGE(1200, 1210)
22012773006 GRAPHICS_VERSION_RANGE(1200, 1250)
14014475959 GRAPHICS_VERSION_RANGE(1270, 1271), GRAPHICS_STEP(A0, B0)
PLATFORM(DG2)
--
2.48.0
More information about the Intel-xe
mailing list