[PATCH i-g-t] lib/xe_spin: Fix MI_STORE_REGISTER_MEM instruction usage

Matt Roper matthew.d.roper at intel.com
Thu Mar 14 00:58:52 UTC 2024


The MI_STORE_REGISTER_MEM macro in IGT's instruction header is the "old"
version of this define, intended for use on pre-gen8 platforms since it
bakes in the fixed 3-dword instruction length in the instruction header.
For gen8 and beyond (i.e., every platform the Xe driver supports), the
MI_STORE_REGISTER_MEM_GEN8 macro should be used instead, which properly
bakes in the 4-dword instruction length.  Since the xe_spin library was
using the old macro, but then manually |'ing in a "2" at the end of the
expression, it was effectively winding up with a field value of 3 (which
would represent a 5-dword instruction).

Switch xe_spin to using the "GEN8" macro and drop the redundant "| 2"
which is already handled by the macro itself.

Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
---
 lib/xe/xe_spin.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/xe/xe_spin.c b/lib/xe/xe_spin.c
index 2c531e85e..1ca54ea19 100644
--- a/lib/xe/xe_spin.c
+++ b/lib/xe/xe_spin.c
@@ -114,7 +114,7 @@ void xe_spin_init(struct xe_spin *spin, struct xe_spin_opts *opts)
 		spin->batch[b++] = MI_MATH_STOREINV(MI_MATH_REG(NOW_TS), MI_MATH_REG_ACCU);
 
 		/* Save delta for reading by COND_BBE */
-		spin->batch[b++] = MI_STORE_REGISTER_MEM | MI_SRM_CS_MMIO | 2;
+		spin->batch[b++] = MI_STORE_REGISTER_MEM_GEN8 | MI_SRM_CS_MMIO;
 		spin->batch[b++] = CS_GPR(NOW_TS);
 		spin->batch[b++] = ticks_delta_addr;
 		spin->batch[b++] = ticks_delta_addr >> 32;
-- 
2.43.0



More information about the igt-dev mailing list