drm/xe: Add command MI_LOAD_REGISTER_MEM
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Mon, 18 Dec 2023 16:53:35 +0000 (17:53 +0100)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 21 Dec 2023 21:31:29 +0000 (16:31 -0500)
We will need this shortly during context state preparation.

Cc: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20231214185955.1791-2-michal.wajdeczko@intel.com
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
drivers/gpu/drm/xe/instructions/xe_mi_commands.h
drivers/gpu/drm/xe/xe_lrc.c

index 1cfa96167fde317eb0a94b613af0512a2b6c1590..c74ceb550dce7f08f3f0fd9f0c475ef4bae2c2f7 100644 (file)
@@ -56,6 +56,9 @@
 #define   MI_FLUSH_IMM_QW              REG_FIELD_PREP(MI_FLUSH_DW_LEN_DW, 5 - 2)
 #define   MI_FLUSH_DW_USE_GTT          REG_BIT(2)
 
+#define MI_LOAD_REGISTER_MEM           (__MI_INSTR(0x29) | XE_INSTR_NUM_DW(4))
+#define   MI_LRM_USE_GGTT              REG_BIT(22)
+
 #define MI_BATCH_BUFFER_START          __MI_INSTR(0x31)
 
 #endif
index b7fa3831b68451cb74ae557ca3e7a66d5d4fa6fd..44586e612eaf5d4ae99faddac4d906e62c2a0619 100644 (file)
@@ -964,6 +964,20 @@ static int dump_mi_command(struct drm_printer *p,
                        drm_printf(p, " - %#6x = %#010x\n", dw[i], dw[i + 1]);
                return numdw;
 
+       case MI_LOAD_REGISTER_MEM & MI_OPCODE:
+               drm_printf(p, "[%#010x] MI_LOAD_REGISTER_MEM: %s%s\n",
+                          inst_header,
+                          dw[0] & MI_LRI_LRM_CS_MMIO ? "CS_MMIO " : "",
+                          dw[0] & MI_LRM_USE_GGTT ? "USE_GGTT " : "");
+               if (numdw == 4)
+                       drm_printf(p, " - %#6x = %#010llx\n",
+                                  dw[1], ((u64)(dw[3]) << 32 | (u64)(dw[2])));
+               else
+                       drm_printf(p, " - %*ph (%s)\n",
+                                  (int)sizeof(u32) * (numdw - 1), dw + 1,
+                                  numdw < 4 ? "truncated" : "malformed");
+               return numdw;
+
        case MI_FORCE_WAKEUP:
                drm_printf(p, "[%#010x] MI_FORCE_WAKEUP\n", inst_header);
                return numdw;