Commit 7a61a6aa authored by Jouni Högander's avatar Jouni Högander
Browse files

drm/i915/display: Dump also display parameters



GPU error dump contained all module parameters. If we are moving
display parameters to intel_display_params.[ch] they are not dumped
into GPU error dump. This patch is adding moved display parameters
back to GPU error dump. Display parameters are also included in
i915_capabilities

v2: Add parameters to i915_capabilities as well

Signed-off-by: default avatarJouni Högander <jouni.hogander@intel.com>
Acked-by: default avatarJani Nikula <jani.nikula@intel.com>
Reviewed-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231024124109.384973-3-jouni.hogander@intel.com
parent 8015bee0
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
@@ -27,6 +27,63 @@ static struct intel_display_params intel_display_modparams __read_mostly = {
 * debugfs mode to 0.
 */

__maybe_unused
static void _param_print_bool(struct drm_printer *p, const char *driver_name,
			      const char *name, bool val)
{
	drm_printf(p, "%s.%s=%s\n", driver_name, name, str_yes_no(val));
}

__maybe_unused
static void _param_print_int(struct drm_printer *p, const char *driver_name,
			     const char *name, int val)
{
	drm_printf(p, "%s.%s=%d\n", driver_name, name, val);
}

__maybe_unused
static void _param_print_uint(struct drm_printer *p, const char *driver_name,
			      const char *name, unsigned int val)
{
	drm_printf(p, "%s.%s=%u\n", driver_name, name, val);
}

__maybe_unused
static void _param_print_ulong(struct drm_printer *p, const char *driver_name,
			       const char *name, unsigned long val)
{
	drm_printf(p, "%s.%s=%lu\n", driver_name, name, val);
}

__maybe_unused
static void _param_print_charp(struct drm_printer *p, const char *driver_name,
			       const char *name, const char *val)
{
	drm_printf(p, "%s.%s=%s\n", driver_name, name, val);
}

#define _param_print(p, driver_name, name, val)			\
	_Generic(val,						\
		 bool : _param_print_bool,			\
		 int : _param_print_int,			\
		 unsigned int : _param_print_uint,		\
		 unsigned long : _param_print_ulong,		\
		 char * : _param_print_charp)(p, driver_name, name, val)

/**
 * intel_display_params_dump - dump intel display modparams
 * @i915: i915 device
 * @p: the &drm_printer
 *
 * Pretty printer for i915 modparams.
 */
void intel_display_params_dump(struct drm_i915_private *i915, struct drm_printer *p)
{
#define PRINT(T, x, ...) _param_print(p, i915->drm.driver->name, #x, i915->display.params.x);
	INTEL_DISPLAY_PARAMS_FOR_EACH(PRINT);
#undef PRINT
}

__maybe_unused static void _param_dup_charp(char **valp)
{
	*valp = kstrdup(*valp ? *valp : "", GFP_ATOMIC);
+3 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
#define _INTEL_DISPLAY_PARAMS_H_

struct drm_printer;
struct drm_i915_private;

/*
 * Invoke param, a function-like macro, for each intel display param, with
@@ -28,6 +29,8 @@ struct intel_display_params {
};
#undef MEMBER

void intel_display_params_dump(struct drm_i915_private *i915,
			       struct drm_printer *p);
void intel_display_params_copy(struct intel_display_params *dest);
void intel_display_params_free(struct intel_display_params *params);

+3 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@

#include <drm/drm_debugfs.h>

#include "display/intel_display_params.h"

#include "gem/i915_gem_context.h"
#include "gt/intel_gt.h"
#include "gt/intel_gt_buffer_pool.h"
@@ -74,6 +76,7 @@ static int i915_capabilities(struct seq_file *m, void *data)

	kernel_param_lock(THIS_MODULE);
	i915_params_dump(&i915->params, &p);
	intel_display_params_dump(i915, &p);
	kernel_param_unlock(THIS_MODULE);

	return 0;
+3 −0
Original line number Diff line number Diff line
@@ -660,6 +660,7 @@ static void err_print_params(struct drm_i915_error_state_buf *m,
	struct drm_printer p = i915_error_printer(m);

	i915_params_dump(params, &p);
	intel_display_params_dump(m->i915, &p);
}

static void err_print_pciid(struct drm_i915_error_state_buf *m,
@@ -1027,6 +1028,7 @@ static void i915_vma_coredump_free(struct i915_vma_coredump *vma)
static void cleanup_params(struct i915_gpu_coredump *error)
{
	i915_params_free(&error->params);
	intel_display_params_free(&error->display_params);
}

static void cleanup_uc(struct intel_uc_coredump *uc)
@@ -1979,6 +1981,7 @@ static void capture_gen(struct i915_gpu_coredump *error)
	error->suspend_count = i915->suspend_count;

	i915_params_copy(&error->params, &i915->params);
	intel_display_params_copy(&error->display_params);
	memcpy(&error->device_info,
	       INTEL_INFO(i915),
	       sizeof(error->device_info));
+2 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include <drm/drm_mm.h>

#include "display/intel_display_device.h"
#include "display/intel_display_params.h"
#include "gt/intel_engine.h"
#include "gt/intel_gt_types.h"
#include "gt/uc/intel_uc_fw.h"
@@ -214,6 +215,7 @@ struct i915_gpu_coredump {
	struct intel_display_runtime_info display_runtime_info;
	struct intel_driver_caps driver_caps;
	struct i915_params params;
	struct intel_display_params display_params;

	struct intel_overlay_error_state *overlay;