{ "default_lrc_vcs", .show = xe_gt_debugfs_show_with_rpm, .data = vcs_default_lrc },
{ "default_lrc_vecs", .show = xe_gt_debugfs_show_with_rpm, .data = vecs_default_lrc },
{ "hwconfig", .show = xe_gt_debugfs_show_with_rpm, .data = hwconfig },
+ { "pat_sw_config", .show = xe_gt_debugfs_simple_show, .data = xe_pat_dump_sw_config },
};
/* everything else should be added here */
return xe->pat.ops->dump(gt, p);
}
+
+/**
+ * xe_pat_dump_sw_config() - Dump the software-configured GT PAT table into a drm printer.
+ * @gt: the &xe_gt
+ * @p: the &drm_printer
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
+int xe_pat_dump_sw_config(struct xe_gt *gt, struct drm_printer *p)
+{
+ struct xe_device *xe = gt_to_xe(gt);
+ char label[PAT_LABEL_LEN];
+
+ if (!xe->pat.table || !xe->pat.n_entries)
+ return -EOPNOTSUPP;
+
+ drm_printf(p, "PAT table:%s\n", GRAPHICS_VER(xe) >= 20 ? " (* = reserved entry)" : "");
+ for (u32 i = 0; i < xe->pat.n_entries; i++) {
+ u32 pat = xe->pat.table[i].value;
+
+ if (GRAPHICS_VERx100(xe) == 3511) {
+ xe_pat_index_label(label, sizeof(label), i);
+ xe3p_xpc_pat_entry_dump(p, label, pat, !xe->pat.table[i].valid);
+ } else if (GRAPHICS_VER(xe) == 30 || GRAPHICS_VER(xe) == 20) {
+ xe_pat_index_label(label, sizeof(label), i);
+ xe2_pat_entry_dump(p, label, pat, !xe->pat.table[i].valid);
+ } else if (xe->info.platform == XE_METEORLAKE) {
+ xelpg_pat_entry_dump(p, i, pat);
+ } else if (xe->info.platform == XE_PVC) {
+ xehpc_pat_entry_dump(p, i, pat);
+ } else if (xe->info.platform == XE_DG2 || GRAPHICS_VERx100(xe) <= 1210) {
+ xelp_pat_entry_dump(p, i, pat);
+ } else {
+ return -EOPNOTSUPP;
+ }
+ }
+
+ if (xe->pat.pat_pta) {
+ u32 pat = xe->pat.pat_pta->value;
+
+ drm_printf(p, "Page Table Access:\n");
+ xe2_pat_entry_dump(p, "PTA_MODE", pat, false);
+ }
+
+ if (xe->pat.pat_ats) {
+ u32 pat = xe->pat.pat_ats->value;
+
+ drm_printf(p, "PCIe ATS/PASID:\n");
+ xe2_pat_entry_dump(p, "PAT_ATS ", pat, false);
+ }
+
+ drm_printf(p, "Cache Level:\n");
+ drm_printf(p, "IDX[XE_CACHE_NONE] = %d\n", xe->pat.idx[XE_CACHE_NONE]);
+ drm_printf(p, "IDX[XE_CACHE_WT] = %d\n", xe->pat.idx[XE_CACHE_WT]);
+ drm_printf(p, "IDX[XE_CACHE_WB] = %d\n", xe->pat.idx[XE_CACHE_WB]);
+ if (GRAPHICS_VER(xe) >= 20) {
+ drm_printf(p, "IDX[XE_CACHE_NONE_COMPRESSION] = %d\n",
+ xe->pat.idx[XE_CACHE_NONE_COMPRESSION]);
+ }
+
+ return 0;
+}