[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