[Intel-gfx] [PATCH 02/25] drm/i915/display: Dump also display parameters into GPU error dump
Hogander, Jouni
jouni.hogander at intel.com
Thu Oct 12 07:38:25 UTC 2023
On Tue, 2023-10-10 at 14:40 +0300, Jouni Högander wrote:
> 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.
Vinod pointed out that currently patches are not dumping out moved
parameters when reading i915_capabilities debugfs interface. I will
wait for more comments for a while and then send a new version with
this addressed.
BR,
Jouni Högander
>
> Signed-off-by: Jouni Högander <jouni.hogander at intel.com>
> ---
> .../drm/i915/display/intel_display_params.c | 57
> +++++++++++++++++++
> .../drm/i915/display/intel_display_params.h | 3 +
> drivers/gpu/drm/i915/i915_gpu_error.c | 3 +
> drivers/gpu/drm/i915/i915_gpu_error.h | 2 +
> 4 files changed, 65 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_params.c
> b/drivers/gpu/drm/i915/display/intel_display_params.c
> index 91953ae27144..11ee73a98b5b 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_params.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_params.c
> @@ -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);
> diff --git a/drivers/gpu/drm/i915/display/intel_display_params.h
> b/drivers/gpu/drm/i915/display/intel_display_params.h
> index 1b347365988c..a0fb3e1aa2f5 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_params.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_params.h
> @@ -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);
>
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c
> b/drivers/gpu/drm/i915/i915_gpu_error.c
> index b4e31e59c799..8275f9b6a47d 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -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)
> @@ -1988,6 +1990,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));
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h
> b/drivers/gpu/drm/i915/i915_gpu_error.h
> index 9f5971f5e980..4ce227f7e1e1 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.h
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.h
> @@ -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;
>
More information about the Intel-gfx
mailing list