]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: highlight reserved PAT entries in dump output
authorXin Wang <x.wang@intel.com>
Thu, 30 Oct 2025 22:17:34 +0000 (22:17 +0000)
committerMatt Roper <matthew.d.roper@intel.com>
Fri, 31 Oct 2025 15:46:55 +0000 (08:46 -0700)
Enhance the PAT table dump by marking reserved entries with an
asterisk (*) for improved readability and debugging.

V2:
  Added a note in the "PAT table" header explaining the meaning of
the asterisk(*) to improve clarity for readers. (Matt Roper)

V3:
  Introduced a valid field in struct xe_pat_table_entry to
explicitly track whether an entry is valid or reserved, avoiding
reliance on coh_mode == 0. (Matt Roper)

Signed-off-by: Xin Wang <x.wang@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patch.msgid.link/20251030221734.1058350-1-x.wang@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
drivers/gpu/drm/xe/xe_pat.c
drivers/gpu/drm/xe/xe_pat.h

index 7649b554942aa5241cd366404785b91235062fda..68171cceea18ef81848f2471cced4657d0a780cb 100644 (file)
@@ -115,7 +115,8 @@ static const struct xe_pat_table_entry xelpg_pat_table[] = {
                        REG_FIELD_PREP(XE2_L4_POLICY, l4_policy) | \
                        REG_FIELD_PREP(XE2_COH_MODE, __coh_mode), \
                .coh_mode = (BUILD_BUG_ON_ZERO(__coh_mode && comp_en) || __coh_mode) ? \
-                       XE_COH_AT_LEAST_1WAY : XE_COH_NONE \
+                       XE_COH_AT_LEAST_1WAY : XE_COH_NONE, \
+               .valid = 1 \
        }
 
 static const struct xe_pat_table_entry xe2_pat_table[] = {
@@ -368,7 +369,7 @@ static int xe2_dump(struct xe_gt *gt, struct drm_printer *p)
        if (!fw_ref)
                return -ETIMEDOUT;
 
-       drm_printf(p, "PAT table:\n");
+       drm_printf(p, "PAT table: (* = reserved entry)\n");
 
        for (i = 0; i < xe->pat.n_entries; i++) {
                if (xe_gt_is_media_type(gt))
@@ -376,14 +377,14 @@ static int xe2_dump(struct xe_gt *gt, struct drm_printer *p)
                else
                        pat = xe_gt_mcr_unicast_read_any(gt, XE_REG_MCR(_PAT_INDEX(i)));
 
-               drm_printf(p, "PAT[%2d] = [ %u, %u, %u, %u, %u, %u ]  (%#8x)\n", i,
+               drm_printf(p, "PAT[%2d] = [ %u, %u, %u, %u, %u, %u ]  (%#8x)%s\n", i,
                           !!(pat & XE2_NO_PROMOTE),
                           !!(pat & XE2_COMP_EN),
                           REG_FIELD_GET(XE2_L3_CLOS, pat),
                           REG_FIELD_GET(XE2_L3_POLICY, pat),
                           REG_FIELD_GET(XE2_L4_POLICY, pat),
                           REG_FIELD_GET(XE2_COH_MODE, pat),
-                          pat);
+                          pat, xe->pat.table[i].valid ? "" : " *");
        }
 
        /*
@@ -426,18 +427,18 @@ static int xe3p_xpc_dump(struct xe_gt *gt, struct drm_printer *p)
        if (!fw_ref)
                return -ETIMEDOUT;
 
-       drm_printf(p, "PAT table:\n");
+       drm_printf(p, "PAT table: (* = reserved entry)\n");
 
        for (i = 0; i < xe->pat.n_entries; i++) {
                pat = xe_gt_mcr_unicast_read_any(gt, XE_REG_MCR(_PAT_INDEX(i)));
 
-               drm_printf(p, "PAT[%2d] = [ %u, %u, %u, %u, %u ]  (%#8x)\n", i,
+               drm_printf(p, "PAT[%2d] = [ %u, %u, %u, %u, %u ]  (%#8x)%s\n", i,
                           !!(pat & XE2_NO_PROMOTE),
                           REG_FIELD_GET(XE2_L3_CLOS, pat),
                           REG_FIELD_GET(XE2_L3_POLICY, pat),
                           REG_FIELD_GET(XE2_L4_POLICY, pat),
                           REG_FIELD_GET(XE2_COH_MODE, pat),
-                          pat);
+                          pat, xe->pat.table[i].valid ? "" : " *");
        }
 
        /*
index 268c9a899f56fc98364250b77f7286961a416c1e..05dae03a5f545e6254ebaf3ccf906006563dff05 100644 (file)
@@ -29,6 +29,11 @@ struct xe_pat_table_entry {
 #define XE_COH_NONE          1
 #define XE_COH_AT_LEAST_1WAY 2
        u16 coh_mode;
+
+       /**
+        * @valid: Set to 1 if the entry is valid, 0 if it's reserved.
+        */
+       u16 valid;
 };
 
 /**