Commit 5efde05f authored by Jani Nikula's avatar Jani Nikula
Browse files

drm/i915/dmc: abstract GPU error state dump



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: default avatarJani 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
parent bc58192a
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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;
+3 −0
Original line number Diff line number Diff line
@@ -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);

+1 −9
Original line number Diff line number Diff line
@@ -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));
+6 −0
Original line number Diff line number Diff line
@@ -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)
{