]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/display: Dump also display parameters
authorJouni Högander <jouni.hogander@intel.com>
Tue, 24 Oct 2023 12:40:48 +0000 (15:40 +0300)
committerJouni Högander <jouni.hogander@intel.com>
Thu, 26 Oct 2023 09:13:27 +0000 (12:13 +0300)
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: Jouni Högander <jouni.hogander@intel.com>
Acked-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231024124109.384973-3-jouni.hogander@intel.com
drivers/gpu/drm/i915/display/intel_display_params.c
drivers/gpu/drm/i915/display/intel_display_params.h
drivers/gpu/drm/i915/i915_debugfs.c
drivers/gpu/drm/i915/i915_gpu_error.c
drivers/gpu/drm/i915/i915_gpu_error.h

index 91953ae2714478dcf4867f1ca9d45d053794d850..11ee73a98b5b0ea1b54d2b1deb1d0ad4f15ceaa7 100644 (file)
@@ -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);
index 9f4f45d410a367de03c7e071d02a5b9ed1c0b244..eac66042da4dce9ab4d7e8b8c3dcb704e752093c 100644 (file)
@@ -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);
 
index e9b79c2c37d847568cb7f9136792f64867e839b3..af0077f6a6d0e0dcc789194a171bf0754568643b 100644 (file)
@@ -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;
index f4ebcfb702899159be4281a9a23947e0444e0ebf..53fff687b00ed3510a5f905a076ce989238264e2 100644 (file)
@@ -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));
index 9f5971f5e980145d940bb5c59701471071d393cd..4ce227f7e1e125290b9ef22a0943c034b4ef565a 100644 (file)
@@ -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;