]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/xe/xelp: Add Wa_18022495364
authorTvrtko Ursulin <tvrtko.ursulin@igalia.com>
Fri, 11 Jul 2025 16:01:53 +0000 (17:01 +0100)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 25 Jul 2025 15:43:03 +0000 (08:43 -0700)
Add Wa_18022495364 as a context workaround batch buffer workaround.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20250711160153.49833-9-tvrtko.ursulin@igalia.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/regs/xe_engine_regs.h
drivers/gpu/drm/xe/xe_lrc.c
drivers/gpu/drm/xe/xe_wa_oob.rules

index 7ade41e2b7b3b4438a1955eb73e7d929d6bec24c..f4c3e1187a00a04d8833b99a84af119ed8f2f2f6 100644 (file)
 #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)
 
index 110731a1e5476cd3a9012b8376a7a3158c199851..540f044bf4255b4d404b0bb8cbed751ae97f7a97 100644 (file)
@@ -1056,6 +1056,26 @@ static ssize_t setup_timestamp_wa(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
        return cmd - batch;
 }
 
+static ssize_t setup_invalidate_state_cache_wa(struct xe_lrc *lrc,
+                                              struct xe_hw_engine *hwe,
+                                              u32 *batch, size_t max_len)
+{
+       u32 *cmd = batch;
+
+       if (!XE_WA(lrc->gt, 18022495364) ||
+           hwe->class != XE_ENGINE_CLASS_RENDER)
+               return 0;
+
+       if (xe_gt_WARN_ON(lrc->gt, max_len < 3))
+               return -ENOSPC;
+
+       *cmd++ = MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(1);
+       *cmd++ = CS_DEBUG_MODE1(0).addr;
+       *cmd++ = _MASKED_BIT_ENABLE(INSTRUCTION_STATE_CACHE_INVALIDATE);
+
+       return cmd - batch;
+}
+
 struct bo_setup {
        ssize_t (*setup)(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
                         u32 *batch, size_t max_size);
@@ -1132,6 +1152,7 @@ static int setup_wa_bb(struct xe_lrc *lrc, struct xe_hw_engine *hwe)
 {
        static const struct bo_setup funcs[] = {
                { .setup = setup_timestamp_wa },
+               { .setup = setup_invalidate_state_cache_wa },
                { .setup = setup_utilization_wa },
        };
        struct bo_setup_state state = {
index e7425694420806e47bb8996dbdfc11d96384249f..8d0aabab6777304625cf84b253627f91e258ad9f 100644 (file)
@@ -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)