#define XELP_PAT_WC REG_FIELD_PREP(XELP_MEM_TYPE_MASK, 1)
#define XELP_PAT_UC REG_FIELD_PREP(XELP_MEM_TYPE_MASK, 0)
+#define PAT_LABEL_LEN 20
+
static const char *XELP_MEM_TYPE_STR_MAP[] = { "UC", "WC", "WT", "WB" };
+static void xe_pat_index_label(char *label, size_t len, int index)
+{
+ snprintf(label, len, "PAT[%2d] ", index);
+}
+
+static void xelp_pat_entry_dump(struct drm_printer *p, int index, u32 pat)
+{
+ u8 mem_type = REG_FIELD_GET(XELP_MEM_TYPE_MASK, pat);
+
+ drm_printf(p, "PAT[%2d] = %s (%#8x)\n", index,
+ XELP_MEM_TYPE_STR_MAP[mem_type], pat);
+}
+
+static void xehpc_pat_entry_dump(struct drm_printer *p, int index, u32 pat)
+{
+ drm_printf(p, "PAT[%2d] = [ %u, %u ] (%#8x)\n", index,
+ REG_FIELD_GET(XELP_MEM_TYPE_MASK, pat),
+ REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
+}
+
+static void xelpg_pat_entry_dump(struct drm_printer *p, int index, u32 pat)
+{
+ drm_printf(p, "PAT[%2d] = [ %u, %u ] (%#8x)\n", index,
+ REG_FIELD_GET(XELPG_L4_POLICY_MASK, pat),
+ REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
+}
+
struct xe_pat_ops {
void (*program_graphics)(struct xe_gt *gt, const struct xe_pat_table_entry table[],
int n_entries);
for (i = 0; i < xe->pat.n_entries; i++) {
u32 pat = xe_mmio_read32(>->mmio, XE_REG(_PAT_INDEX(i)));
- u8 mem_type = REG_FIELD_GET(XELP_MEM_TYPE_MASK, pat);
- drm_printf(p, "PAT[%2d] = %s (%#8x)\n", i,
- XELP_MEM_TYPE_STR_MAP[mem_type], pat);
+ xelp_pat_entry_dump(p, i, pat);
}
return 0;
for (i = 0; i < xe->pat.n_entries; i++) {
u32 pat = xe_gt_mcr_unicast_read_any(gt, XE_REG_MCR(_PAT_INDEX(i)));
- u8 mem_type;
- mem_type = REG_FIELD_GET(XELP_MEM_TYPE_MASK, pat);
-
- drm_printf(p, "PAT[%2d] = %s (%#8x)\n", i,
- XELP_MEM_TYPE_STR_MAP[mem_type], pat);
+ xelp_pat_entry_dump(p, i, pat);
}
return 0;
for (i = 0; i < xe->pat.n_entries; i++) {
u32 pat = xe_gt_mcr_unicast_read_any(gt, XE_REG_MCR(_PAT_INDEX(i)));
- drm_printf(p, "PAT[%2d] = [ %u, %u ] (%#8x)\n", i,
- REG_FIELD_GET(XELP_MEM_TYPE_MASK, pat),
- REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
+ xehpc_pat_entry_dump(p, i, pat);
}
return 0;
else
pat = xe_gt_mcr_unicast_read_any(gt, XE_REG_MCR(_PAT_INDEX(i)));
- drm_printf(p, "PAT[%2d] = [ %u, %u ] (%#8x)\n", i,
- REG_FIELD_GET(XELPG_L4_POLICY_MASK, pat),
- REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
+ xelpg_pat_entry_dump(p, i, pat);
}
return 0;
.dump = xelpg_dump,
};
+static void xe2_pat_entry_dump(struct drm_printer *p, const char *label, u32 pat, bool rsvd)
+{
+ drm_printf(p, "%s= [ %u, %u, %u, %u, %u, %u ] (%#8x)%s\n", label,
+ !!(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, rsvd ? " *" : "");
+}
+
+static void xe3p_xpc_pat_entry_dump(struct drm_printer *p, const char *label, u32 pat, bool rsvd)
+{
+ drm_printf(p, "%s= [ %u, %u, %u, %u, %u ] (%#8x)%s\n", label,
+ !!(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, rsvd ? " *" : "");
+}
+
static int xe2_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
u32 pat;
int i;
+ char label[PAT_LABEL_LEN];
CLASS(xe_force_wake, fw_ref)(gt_to_fw(gt), XE_FW_GT);
if (!fw_ref.domains)
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)%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, xe->pat.table[i].valid ? "" : " *");
+ xe_pat_index_label(label, sizeof(label), i);
+ xe2_pat_entry_dump(p, label, pat, !xe->pat.table[i].valid);
}
/*
pat = xe_gt_mcr_unicast_read_any(gt, XE_REG_MCR(_PAT_PTA));
drm_printf(p, "Page Table Access:\n");
- drm_printf(p, "PTA_MODE= [ %u, %u, %u, %u, %u, %u ] (%#8x)\n",
- !!(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);
+ xe2_pat_entry_dump(p, "PTA_MODE", pat, false);
return 0;
}
struct xe_device *xe = gt_to_xe(gt);
u32 pat;
int i;
+ char label[PAT_LABEL_LEN];
CLASS(xe_force_wake, fw_ref)(gt_to_fw(gt), XE_FW_GT);
if (!fw_ref.domains)
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)%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, xe->pat.table[i].valid ? "" : " *");
+ xe_pat_index_label(label, sizeof(label), i);
+ xe3p_xpc_pat_entry_dump(p, label, pat, !xe->pat.table[i].valid);
}
/*
pat = xe_gt_mcr_unicast_read_any(gt, XE_REG_MCR(_PAT_PTA));
drm_printf(p, "Page Table Access:\n");
- drm_printf(p, "PTA_MODE= [ %u, %u, %u, %u, %u ] (%#8x)\n",
- !!(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);
+ xe3p_xpc_pat_entry_dump(p, "PTA_MODE", pat, false);
return 0;
}