drm/i915/dmc: abstract GPU error state dump
authorJani Nikula <jani.nikula@intel.com>
Wed, 30 Mar 2022 11:34:15 +0000 (14:34 +0300)
committerJani Nikula <jani.nikula@intel.com>
Fri, 1 Apr 2022 07:06:22 +0000 (10:06 +0300)
Only intel_dmc.c should be accessing dmc details directly.

Need to add an i915_error_printf() stub for
CONFIG_DRM_I915_CAPTURE_ERROR=n.

v2: Add the stub (kernel test robot <lkp@intel.com>)

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> # v1
Link: https://patchwork.freedesktop.org/patch/msgid/20220330113417.220964-1-jani.nikula@intel.com
drivers/gpu/drm/i915/display/intel_dmc.c
drivers/gpu/drm/i915/display/intel_dmc.h
drivers/gpu/drm/i915/i915_gpu_error.c
drivers/gpu/drm/i915/i915_gpu_error.h

index 5de13f978e5707981c99736c8c1379a43b8de940..f0eb3de8de60bb8506e0192466a59cbd88c72ea2 100644 (file)
@@ -811,6 +811,21 @@ void intel_dmc_ucode_fini(struct drm_i915_private *dev_priv)
                kfree(dev_priv->dmc.dmc_info[id].payload);
 }
 
+void intel_dmc_print_error_state(struct drm_i915_error_state_buf *m,
+                                struct drm_i915_private *i915)
+{
+       struct intel_dmc *dmc = &i915->dmc;
+
+       if (!HAS_DMC(i915))
+               return;
+
+       i915_error_printf(m, "DMC loaded: %s\n",
+                         str_yes_no(intel_dmc_has_payload(i915)));
+       i915_error_printf(m, "DMC fw version: %d.%d\n",
+                         DMC_VERSION_MAJOR(dmc->version),
+                         DMC_VERSION_MINOR(dmc->version));
+}
+
 static int intel_dmc_debugfs_status_show(struct seq_file *m, void *unused)
 {
        struct drm_i915_private *i915 = m->private;
index b9f6080577000768dc03bfeae5d1381a89fb8de5..dd8880d2cbede5bfca168a65049e32620f783980 100644 (file)
@@ -10,6 +10,7 @@
 #include "intel_wakeref.h"
 #include <linux/workqueue.h>
 
+struct drm_i915_error_state_buf;
 struct drm_i915_private;
 
 #define DMC_VERSION(major, minor)      ((major) << 16 | (minor))
@@ -55,6 +56,8 @@ void intel_dmc_ucode_suspend(struct drm_i915_private *i915);
 void intel_dmc_ucode_resume(struct drm_i915_private *i915);
 bool intel_dmc_has_payload(struct drm_i915_private *i915);
 void intel_dmc_debugfs_register(struct drm_i915_private *i915);
+void intel_dmc_print_error_state(struct drm_i915_error_state_buf *m,
+                                struct drm_i915_private *i915);
 
 void assert_dmc_loaded(struct drm_i915_private *i915);
 
index 04289cc22741e5d05928c9f35632007d0423d6b4..d0e7ee7b07df437df565c92df04971a9170c0b9a 100644 (file)
@@ -826,15 +826,7 @@ static void __err_print_to_sgl(struct drm_i915_error_state_buf *m,
 
        err_printf(m, "IOMMU enabled?: %d\n", error->iommu);
 
-       if (HAS_DMC(m->i915)) {
-               struct intel_dmc *dmc = &m->i915->dmc;
-
-               err_printf(m, "DMC loaded: %s\n",
-                          str_yes_no(intel_dmc_has_payload(m->i915) != 0));
-               err_printf(m, "DMC fw version: %d.%d\n",
-                          DMC_VERSION_MAJOR(dmc->version),
-                          DMC_VERSION_MINOR(dmc->version));
-       }
+       intel_dmc_print_error_state(m, m->i915);
 
        err_printf(m, "RPM wakelock: %s\n", str_yes_no(error->wakelock));
        err_printf(m, "PM suspended: %s\n", str_yes_no(error->suspended));
index 903d838e2e63e136849fa2fa7149e9c879c369fa..88ce3a08f555fead14596fb992d9b8cc0d9cdba1 100644 (file)
@@ -281,6 +281,12 @@ void i915_disable_error_state(struct drm_i915_private *i915, int err);
 
 #else
 
+__printf(2, 3)
+static inline void
+i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...)
+{
+}
+
 static inline void
 i915_capture_error_state(struct intel_gt *gt, intel_engine_mask_t engine_mask)
 {