Merge drm/drm-next into drm-intel-gt-next
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / gt / intel_gt_pm_debugfs.c
index 108b9e76c32e874924bc1d6b32ff21dce484eff7..10f680dbd7b62b426e96f03829566ae44973161e 100644 (file)
@@ -655,6 +655,44 @@ static bool rps_eval(void *data)
 
 DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(rps_boost);
 
+static int perf_limit_reasons_get(void *data, u64 *val)
+{
+       struct intel_gt *gt = data;
+       intel_wakeref_t wakeref;
+
+       with_intel_runtime_pm(gt->uncore->rpm, wakeref)
+               *val = intel_uncore_read(gt->uncore, intel_gt_perf_limit_reasons_reg(gt));
+
+       return 0;
+}
+
+static int perf_limit_reasons_clear(void *data, u64 val)
+{
+       struct intel_gt *gt = data;
+       intel_wakeref_t wakeref;
+
+       /*
+        * Clear the upper 16 "log" bits, the lower 16 "status" bits are
+        * read-only. The upper 16 "log" bits are identical to the lower 16
+        * "status" bits except that the "log" bits remain set until cleared.
+        */
+       with_intel_runtime_pm(gt->uncore->rpm, wakeref)
+               intel_uncore_rmw(gt->uncore, intel_gt_perf_limit_reasons_reg(gt),
+                                GT0_PERF_LIMIT_REASONS_LOG_MASK, 0);
+
+       return 0;
+}
+
+static bool perf_limit_reasons_eval(void *data)
+{
+       struct intel_gt *gt = data;
+
+       return i915_mmio_reg_valid(intel_gt_perf_limit_reasons_reg(gt));
+}
+
+DEFINE_SIMPLE_ATTRIBUTE(perf_limit_reasons_fops, perf_limit_reasons_get,
+                       perf_limit_reasons_clear, "%llu\n");
+
 void intel_gt_pm_debugfs_register(struct intel_gt *gt, struct dentry *root)
 {
        static const struct intel_gt_debugfs_file files[] = {
@@ -664,6 +702,7 @@ void intel_gt_pm_debugfs_register(struct intel_gt *gt, struct dentry *root)
                { "forcewake_user", &forcewake_user_fops, NULL},
                { "llc", &llc_fops, llc_eval },
                { "rps_boost", &rps_boost_fops, rps_eval },
+               { "perf_limit_reasons", &perf_limit_reasons_fops, perf_limit_reasons_eval },
        };
 
        intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt);