All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/4] drm/i915: Misc improvements around module params
@ 2017-06-14 18:15 Michal Wajdeczko
  2017-06-14 18:15 ` [PATCH v3 1/4] drm/i915: Rename lvds_use_ssc modparam to panel_use_ssc Michal Wajdeczko
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Michal Wajdeczko @ 2017-06-14 18:15 UTC (permalink / raw)
  To: intel-gfx

Earlier RFC proposed to extend param macros with default values.
This series goes step further.

v2: rename modparam instead of i915_params field
v3: refactor master macro and debugfs/error printers

Michal Wajdeczko (4):
  drm/i915: Rename lvds_use_ssc modparam to panel_use_ssc
  drm/i915: Extend PARAMS_FOR_EACH macro with more data
  drm/i915: Highlight modified i915 params in gpu error state
  drm/i915/debugfs: Highlight modified i915 params

 drivers/gpu/drm/i915/i915_debugfs.c   |  38 +++---
 drivers/gpu/drm/i915/i915_drv.h       |  20 +++
 drivers/gpu/drm/i915/i915_gpu_error.c |  34 +++--
 drivers/gpu/drm/i915/i915_params.c    | 234 ++--------------------------------
 drivers/gpu/drm/i915/i915_params.h    | 182 +++++++++++++++++++-------
 5 files changed, 207 insertions(+), 301 deletions(-)

-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v3 1/4] drm/i915: Rename lvds_use_ssc modparam to panel_use_ssc
  2017-06-14 18:15 [PATCH v3 0/4] drm/i915: Misc improvements around module params Michal Wajdeczko
@ 2017-06-14 18:15 ` Michal Wajdeczko
  2017-06-14 18:15 ` [PATCH v3 2/4] drm/i915: Extend PARAMS_FOR_EACH macro with more data Michal Wajdeczko
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Michal Wajdeczko @ 2017-06-14 18:15 UTC (permalink / raw)
  To: intel-gfx; +Cc: Ville Syrjala

This modparam affects not only LVDS but also eDP panels. Additionally
with this rename we will keep modparam and i915_params field name in sync.
Finally this patch will unblock us with further improvements around params defs.

Suggested-by: Ville Syrjala <ville.syrjala@intel.com>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Ville Syrjala <ville.syrjala@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_params.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index b6a7e36..6c27d33 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -105,8 +105,8 @@ MODULE_PARM_DESC(lvds_channel_mode,
 	 "Specify LVDS channel mode "
 	 "(0=probe BIOS [default], 1=single-channel, 2=dual-channel)");
 
-module_param_named_unsafe(lvds_use_ssc, i915.panel_use_ssc, int, 0600);
-MODULE_PARM_DESC(lvds_use_ssc,
+module_param_named_unsafe(panel_use_ssc, i915.panel_use_ssc, int, 0600);
+MODULE_PARM_DESC(panel_use_ssc,
 	"Use Spread Spectrum Clock with panels [LVDS/eDP] "
 	"(default: auto from VBT)");
 
-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 2/4] drm/i915: Extend PARAMS_FOR_EACH macro with more data
  2017-06-14 18:15 [PATCH v3 0/4] drm/i915: Misc improvements around module params Michal Wajdeczko
  2017-06-14 18:15 ` [PATCH v3 1/4] drm/i915: Rename lvds_use_ssc modparam to panel_use_ssc Michal Wajdeczko
@ 2017-06-14 18:15 ` Michal Wajdeczko
  2017-06-15 19:24   ` Jani Nikula
  2017-06-14 18:15 ` [PATCH v3 3/4] drm/i915: Highlight modified i915 params in gpu error state Michal Wajdeczko
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 7+ messages in thread
From: Michal Wajdeczko @ 2017-06-14 18:15 UTC (permalink / raw)
  To: intel-gfx

Currently our PARAMS_FOR_EACH macro contains only param type and name.
We use this macro to define struct members, but later on we initialize
this struct using handcrafted code, which leads in some cases to use
mismatched value vs. type. Let's extend our root macro with param
default value to keep them in sync. Also drop ; from the macro to allow
more flexible usages.

v2: Add unsafe tag (Chris)
    Add all other data to allow complete automation (Michal)

As we now have all data in the param macro, we can automatically
add 'default' info to the description and avoid any mismatches.

v3: Fix printing default value in the description (Michal)
v4: s/func/param and reorder items (Chris)

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_debugfs.c   |   6 +-
 drivers/gpu/drm/i915/i915_gpu_error.c |  10 +-
 drivers/gpu/drm/i915/i915_params.c    | 234 ++--------------------------------
 drivers/gpu/drm/i915/i915_params.h    | 182 +++++++++++++++++++-------
 4 files changed, 157 insertions(+), 275 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index a6ba210..9fbba1e 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -44,9 +44,9 @@ static __always_inline void seq_print_param(struct seq_file *m,
 		seq_printf(m, "i915.%s=%s\n", name, yesno(*(const bool *)x));
 	else if (!__builtin_strcmp(type, "int"))
 		seq_printf(m, "i915.%s=%d\n", name, *(const int *)x);
-	else if (!__builtin_strcmp(type, "unsigned int"))
+	else if (!__builtin_strcmp(type, "uint"))
 		seq_printf(m, "i915.%s=%u\n", name, *(const unsigned int *)x);
-	else if (!__builtin_strcmp(type, "char *"))
+	else if (!__builtin_strcmp(type, "charp"))
 		seq_printf(m, "i915.%s=%s\n", name, *(const char **)x);
 	else
 		BUILD_BUG();
@@ -66,7 +66,7 @@ static int i915_capabilities(struct seq_file *m, void *data)
 #undef PRINT_FLAG
 
 	kernel_param_lock(THIS_MODULE);
-#define PRINT_PARAM(T, x) seq_print_param(m, #x, #T, &i915.x);
+#define PRINT_PARAM(X, T, V, U, M, B, D) seq_print_param(m, #X, #T, &i915.X);
 	I915_PARAMS_FOR_EACH(PRINT_PARAM);
 #undef PRINT_PARAM
 	kernel_param_unlock(THIS_MODULE);
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index e18f350..000f733 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -555,9 +555,9 @@ static __always_inline void err_print_param(struct drm_i915_error_state_buf *m,
 		err_printf(m, "i915.%s=%s\n", name, yesno(*(const bool *)x));
 	else if (!__builtin_strcmp(type, "int"))
 		err_printf(m, "i915.%s=%d\n", name, *(const int *)x);
-	else if (!__builtin_strcmp(type, "unsigned int"))
+	else if (!__builtin_strcmp(type, "uint"))
 		err_printf(m, "i915.%s=%u\n", name, *(const unsigned int *)x);
-	else if (!__builtin_strcmp(type, "char *"))
+	else if (!__builtin_strcmp(type, "charp"))
 		err_printf(m, "i915.%s=%s\n", name, *(const char **)x);
 	else
 		BUILD_BUG();
@@ -566,7 +566,7 @@ static __always_inline void err_print_param(struct drm_i915_error_state_buf *m,
 static void err_print_params(struct drm_i915_error_state_buf *m,
 			     const struct i915_params *p)
 {
-#define PRINT(T, x) err_print_param(m, #x, #T, &p->x);
+#define PRINT(X, T, V, U, M, B, D) err_print_param(m, #X, #T, &p->X);
 	I915_PARAMS_FOR_EACH(PRINT);
 #undef PRINT
 }
@@ -860,7 +860,7 @@ void __i915_gpu_state_free(struct kref *error_ref)
 	kfree(error->overlay);
 	kfree(error->display);
 
-#define FREE(T, x) free_param(#T, &error->params.x);
+#define FREE(X, T, V, U, M, B, D) free_param(#T, &error->params.X);
 	I915_PARAMS_FOR_EACH(FREE);
 #undef FREE
 
@@ -1694,7 +1694,7 @@ static int capture(void *data)
 					   error->i915->gt.last_init_time));
 
 	error->params = i915;
-#define DUP(T, x) dup_param(#T, &error->params.x);
+#define DUP(X, T, V, U, M, B, D) dup_param(#T, &error->params.X);
 	I915_PARAMS_FOR_EACH(DUP);
 #undef DUP
 
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 6c27d33..547e517 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -26,230 +26,16 @@
 #include "i915_drv.h"
 
 struct i915_params i915 __read_mostly = {
-	.modeset = -1,
-	.panel_ignore_lid = 1,
-	.semaphores = -1,
-	.lvds_channel_mode = 0,
-	.panel_use_ssc = -1,
-	.vbt_sdvo_panel_type = -1,
-	.enable_rc6 = -1,
-	.enable_dc = -1,
-	.enable_fbc = -1,
-	.enable_execlists = -1,
-	.enable_hangcheck = true,
-	.enable_ppgtt = -1,
-	.enable_psr = -1,
-	.alpha_support = IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT),
-	.disable_power_well = -1,
-	.enable_ips = 1,
-	.fastboot = 0,
-	.prefault_disable = 0,
-	.load_detect_test = 0,
-	.force_reset_modeset_test = 0,
-	.reset = true,
-	.error_capture = true,
-	.invert_brightness = 0,
-	.disable_display = 0,
-	.enable_cmd_parser = true,
-	.use_mmio_flip = 0,
-	.mmio_debug = 0,
-	.verbose_state_checks = 1,
-	.nuclear_pageflip = 0,
-	.edp_vswing = 0,
-	.enable_guc_loading = 0,
-	.enable_guc_submission = 0,
-	.guc_log_level = -1,
-	.guc_firmware_path = NULL,
-	.huc_firmware_path = NULL,
-	.enable_dp_mst = true,
-	.inject_load_failure = 0,
-	.enable_dpcd_backlight = false,
-	.enable_gvt = false,
+#define MEMBER(Name, Type, Value, Unsafe, Mode, Brief, Detailed) .Name = Value,
+	I915_PARAMS_FOR_EACH(MEMBER)
+#undef MEMBER
 };
 
-module_param_named(modeset, i915.modeset, int, 0400);
-MODULE_PARM_DESC(modeset,
-	"Use kernel modesetting [KMS] (0=disable, "
-	"1=on, -1=force vga console preference [default])");
+#undef NULL /* we don't want to see (void*)0 in the description */
+#define NULL ""
+#define PARAM(Name, Type, Value, Unsafe, Mode, Brief, Detailed) \
+	module_param_named##Unsafe(Name, i915.Name, Type, Mode); \
+	MODULE_PARM_DESC(Name, Brief " " Detailed "[default: " __stringify(Value) "]");
+I915_PARAMS_FOR_EACH(PARAM)
+#undef PARAM
 
-module_param_named_unsafe(panel_ignore_lid, i915.panel_ignore_lid, int, 0600);
-MODULE_PARM_DESC(panel_ignore_lid,
-	"Override lid status (0=autodetect, 1=autodetect disabled [default], "
-	"-1=force lid closed, -2=force lid open)");
-
-module_param_named_unsafe(semaphores, i915.semaphores, int, 0400);
-MODULE_PARM_DESC(semaphores,
-	"Use semaphores for inter-ring sync "
-	"(default: -1 (use per-chip defaults))");
-
-module_param_named_unsafe(enable_rc6, i915.enable_rc6, int, 0400);
-MODULE_PARM_DESC(enable_rc6,
-	"Enable power-saving render C-state 6. "
-	"Different stages can be selected via bitmask values "
-	"(0 = disable; 1 = enable rc6; 2 = enable deep rc6; 4 = enable deepest rc6). "
-	"For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. "
-	"default: -1 (use per-chip default)");
-
-module_param_named_unsafe(enable_dc, i915.enable_dc, int, 0400);
-MODULE_PARM_DESC(enable_dc,
-	"Enable power-saving display C-states. "
-	"(-1=auto [default]; 0=disable; 1=up to DC5; 2=up to DC6)");
-
-module_param_named_unsafe(enable_fbc, i915.enable_fbc, int, 0600);
-MODULE_PARM_DESC(enable_fbc,
-	"Enable frame buffer compression for power savings "
-	"(default: -1 (use per-chip default))");
-
-module_param_named_unsafe(lvds_channel_mode, i915.lvds_channel_mode, int, 0400);
-MODULE_PARM_DESC(lvds_channel_mode,
-	 "Specify LVDS channel mode "
-	 "(0=probe BIOS [default], 1=single-channel, 2=dual-channel)");
-
-module_param_named_unsafe(panel_use_ssc, i915.panel_use_ssc, int, 0600);
-MODULE_PARM_DESC(panel_use_ssc,
-	"Use Spread Spectrum Clock with panels [LVDS/eDP] "
-	"(default: auto from VBT)");
-
-module_param_named_unsafe(vbt_sdvo_panel_type, i915.vbt_sdvo_panel_type, int, 0400);
-MODULE_PARM_DESC(vbt_sdvo_panel_type,
-	"Override/Ignore selection of SDVO panel mode in the VBT "
-	"(-2=ignore, -1=auto [default], index in VBT BIOS table)");
-
-module_param_named_unsafe(reset, i915.reset, bool, 0600);
-MODULE_PARM_DESC(reset, "Attempt GPU resets (default: true)");
-
-#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
-module_param_named(error_capture, i915.error_capture, bool, 0600);
-MODULE_PARM_DESC(error_capture,
-	"Record the GPU state following a hang. "
-	"This information in /sys/class/drm/card<N>/error is vital for "
-	"triaging and debugging hangs.");
-#endif
-
-module_param_named_unsafe(enable_hangcheck, i915.enable_hangcheck, bool, 0644);
-MODULE_PARM_DESC(enable_hangcheck,
-	"Periodically check GPU activity for detecting hangs. "
-	"WARNING: Disabling this can cause system wide hangs. "
-	"(default: true)");
-
-module_param_named_unsafe(enable_ppgtt, i915.enable_ppgtt, int, 0400);
-MODULE_PARM_DESC(enable_ppgtt,
-	"Override PPGTT usage. "
-	"(-1=auto [default], 0=disabled, 1=aliasing, 2=full, 3=full with extended address space)");
-
-module_param_named_unsafe(enable_execlists, i915.enable_execlists, int, 0400);
-MODULE_PARM_DESC(enable_execlists,
-	"Override execlists usage. "
-	"(-1=auto [default], 0=disabled, 1=enabled)");
-
-module_param_named_unsafe(enable_psr, i915.enable_psr, int, 0600);
-MODULE_PARM_DESC(enable_psr, "Enable PSR "
-		 "(0=disabled, 1=enabled - link mode chosen per-platform, 2=force link-standby mode, 3=force link-off mode) "
-		 "Default: -1 (use per-chip default)");
-
-module_param_named_unsafe(alpha_support, i915.alpha_support, bool, 0400);
-MODULE_PARM_DESC(alpha_support,
-	"Enable alpha quality driver support for latest hardware. "
-	"See also CONFIG_DRM_I915_ALPHA_SUPPORT.");
-
-module_param_named_unsafe(disable_power_well, i915.disable_power_well, int, 0400);
-MODULE_PARM_DESC(disable_power_well,
-	"Disable display power wells when possible "
-	"(-1=auto [default], 0=power wells always on, 1=power wells disabled when possible)");
-
-module_param_named_unsafe(enable_ips, i915.enable_ips, int, 0600);
-MODULE_PARM_DESC(enable_ips, "Enable IPS (default: true)");
-
-module_param_named(fastboot, i915.fastboot, bool, 0600);
-MODULE_PARM_DESC(fastboot,
-	"Try to skip unnecessary mode sets at boot time (default: false)");
-
-module_param_named_unsafe(prefault_disable, i915.prefault_disable, bool, 0600);
-MODULE_PARM_DESC(prefault_disable,
-	"Disable page prefaulting for pread/pwrite/reloc (default:false). "
-	"For developers only.");
-
-module_param_named_unsafe(load_detect_test, i915.load_detect_test, bool, 0600);
-MODULE_PARM_DESC(load_detect_test,
-	"Force-enable the VGA load detect code for testing (default:false). "
-	"For developers only.");
-
-module_param_named_unsafe(force_reset_modeset_test, i915.force_reset_modeset_test, bool, 0600);
-MODULE_PARM_DESC(force_reset_modeset_test,
-	"Force a modeset during gpu reset for testing (default:false). "
-	"For developers only.");
-
-module_param_named_unsafe(invert_brightness, i915.invert_brightness, int, 0600);
-MODULE_PARM_DESC(invert_brightness,
-	"Invert backlight brightness "
-	"(-1 force normal, 0 machine defaults, 1 force inversion), please "
-	"report PCI device ID, subsystem vendor and subsystem device ID "
-	"to dri-devel@lists.freedesktop.org, if your machine needs it. "
-	"It will then be included in an upcoming module version.");
-
-module_param_named(disable_display, i915.disable_display, bool, 0400);
-MODULE_PARM_DESC(disable_display, "Disable display (default: false)");
-
-module_param_named_unsafe(enable_cmd_parser, i915.enable_cmd_parser, bool, 0400);
-MODULE_PARM_DESC(enable_cmd_parser,
-		 "Enable command parsing (true=enabled [default], false=disabled)");
-
-module_param_named_unsafe(use_mmio_flip, i915.use_mmio_flip, int, 0600);
-MODULE_PARM_DESC(use_mmio_flip,
-		 "use MMIO flips (-1=never, 0=driver discretion [default], 1=always)");
-
-module_param_named(mmio_debug, i915.mmio_debug, int, 0600);
-MODULE_PARM_DESC(mmio_debug,
-	"Enable the MMIO debug code for the first N failures (default: off). "
-	"This may negatively affect performance.");
-
-module_param_named(verbose_state_checks, i915.verbose_state_checks, bool, 0600);
-MODULE_PARM_DESC(verbose_state_checks,
-	"Enable verbose logs (ie. WARN_ON()) in case of unexpected hw state conditions.");
-
-module_param_named_unsafe(nuclear_pageflip, i915.nuclear_pageflip, bool, 0400);
-MODULE_PARM_DESC(nuclear_pageflip,
-		 "Force enable atomic functionality on platforms that don't have full support yet.");
-
-/* WA to get away with the default setting in VBT for early platforms.Will be removed */
-module_param_named_unsafe(edp_vswing, i915.edp_vswing, int, 0400);
-MODULE_PARM_DESC(edp_vswing,
-		 "Ignore/Override vswing pre-emph table selection from VBT "
-		 "(0=use value from vbt [default], 1=low power swing(200mV),"
-		 "2=default swing(400mV))");
-
-module_param_named_unsafe(enable_guc_loading, i915.enable_guc_loading, int, 0400);
-MODULE_PARM_DESC(enable_guc_loading,
-		"Enable GuC firmware loading "
-		"(-1=auto, 0=never [default], 1=if available, 2=required)");
-
-module_param_named_unsafe(enable_guc_submission, i915.enable_guc_submission, int, 0400);
-MODULE_PARM_DESC(enable_guc_submission,
-		"Enable GuC submission "
-		"(-1=auto, 0=never [default], 1=if available, 2=required)");
-
-module_param_named(guc_log_level, i915.guc_log_level, int, 0400);
-MODULE_PARM_DESC(guc_log_level,
-	"GuC firmware logging level (-1:disabled (default), 0-3:enabled)");
-
-module_param_named_unsafe(guc_firmware_path, i915.guc_firmware_path, charp, 0400);
-MODULE_PARM_DESC(guc_firmware_path,
-	"GuC firmware path to use instead of the default one");
-
-module_param_named_unsafe(huc_firmware_path, i915.huc_firmware_path, charp, 0400);
-MODULE_PARM_DESC(huc_firmware_path,
-	"HuC firmware path to use instead of the default one");
-
-module_param_named_unsafe(enable_dp_mst, i915.enable_dp_mst, bool, 0600);
-MODULE_PARM_DESC(enable_dp_mst,
-	"Enable multi-stream transport (MST) for new DisplayPort sinks. (default: true)");
-module_param_named_unsafe(inject_load_failure, i915.inject_load_failure, uint, 0400);
-MODULE_PARM_DESC(inject_load_failure,
-	"Force an error after a number of failure check points (0:disabled (default), N:force failure at the Nth failure check point)");
-module_param_named(enable_dpcd_backlight, i915.enable_dpcd_backlight, bool, 0600);
-MODULE_PARM_DESC(enable_dpcd_backlight,
-	"Enable support for DPCD backlight control (default:false)");
-
-module_param_named(enable_gvt, i915.enable_gvt, bool, 0400);
-MODULE_PARM_DESC(enable_gvt,
-	"Enable support for Intel GVT-g graphics virtualization host support(default:false)");
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index 34148cc..88bf648 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -27,55 +27,151 @@
 
 #include <linux/cache.h> /* for __read_mostly */
 
-#define I915_PARAMS_FOR_EACH(func) \
-	func(int, modeset); \
-	func(int, panel_ignore_lid); \
-	func(int, semaphores); \
-	func(int, lvds_channel_mode); \
-	func(int, panel_use_ssc); \
-	func(int, vbt_sdvo_panel_type); \
-	func(int, enable_rc6); \
-	func(int, enable_dc); \
-	func(int, enable_fbc); \
-	func(int, enable_ppgtt); \
-	func(int, enable_execlists); \
-	func(int, enable_psr); \
-	func(int, disable_power_well); \
-	func(int, enable_ips); \
-	func(int, invert_brightness); \
-	func(int, enable_guc_loading); \
-	func(int, enable_guc_submission); \
-	func(int, guc_log_level); \
-	func(char *, guc_firmware_path); \
-	func(char *, huc_firmware_path); \
-	func(int, use_mmio_flip); \
-	func(int, mmio_debug); \
-	func(int, edp_vswing); \
-	func(unsigned int, inject_load_failure); \
+/*
+ * Each i915 module param is defined as single 'param' entry:
+ *	param(Name, Type, Value, Unsafe, Mode, Brief, Detailed)
+ * where:
+ *	@Name: the name of param
+ *	@Type: int|uint|bool|charp
+ *	@Value: the default value of the param
+ *	@Unsafe: must be either empty or _unsafe
+ *	@Mode: the access mode (usually 0600|0400)
+ *	@Brief: short description text of the param
+ *	@Detailed: more detailed description of the param (may be empty)
+ */
+#define _I915_PARAMS_FOR_EACH_BASE(param) \
+	param(modeset, int, -1, /*safe*/, 0400, \
+	      "Use kernel modesetting (KMS).", \
+	      "(0=disable, 1=on, -1=force vga console preference)") \
+	param(panel_ignore_lid, int, 1, _unsafe, 0600, \
+	      "Override lid status.", \
+	      "(0=autodetect, 1=autodetect disabled, -1=force lid closed, -2=force lid open)") \
+	param(semaphores, int, -1, _unsafe, 0400, \
+	      "Use semaphores for inter-ring sync.", \
+	      "(-1=use per-chip defaults)") \
+	param(lvds_channel_mode, int, 0, _unsafe, 0400, \
+	      "Specify LVDS channel mode.", \
+	      "(0=probe BIOS, 1=single-channel, 2=dual-channel)") \
+	param(panel_use_ssc, int, -1, _unsafe, 0600, \
+	      "Use Spread Spectrum Clock with panels [LVDS/eDP].", \
+	      "(-1=auto from VBT)") \
+	param(vbt_sdvo_panel_type, int, -1, _unsafe, 0400, \
+	      "Override/Ignore selection of SDVO panel mode in the VBT.", \
+	      "(-2=ignore, -1=auto, 0..n=index in VBT BIOS table)") \
+	param(enable_rc6, int, -1, _unsafe, 0400, \
+	      "Enable power-saving render C-state 6.", \
+	      "(-1=use per-chip default, 0=disable, 1=enable rc6, 2=enable deep rc6, 4=enable deepest rc6)" \
+	      "Different stages can be selected via bitmask values. " \
+	      "For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. ") \
+	param(enable_dc, int, -1, _unsafe, 0400, \
+	      "Enable power-saving display C-states.", \
+	      "(-1=auto, 0=disable, 1=up to DC5, 2=up to DC6)") \
+	param(enable_fbc, int, -1, _unsafe, 0600, \
+	      "Enable frame buffer compression for power savings.", \
+	      "(-1=use per-chip default)") \
+	param(enable_ppgtt, int, -1, _unsafe, 0400, \
+	      "Override PPGTT usage.", \
+	      "(-1=auto, 0=disabled, 1=aliasing, 2=full, 3=full with extended address space)") \
+	param(enable_execlists, int, -1, _unsafe, 0400, \
+	      "Override execlists usage.", \
+	      "(-1=auto, 0=disabled, 1=enabled)") \
+	param(enable_psr, int, -1, _unsafe, 0600, \
+	      "Enable PSR.", \
+	      "(-1=use per-chip default, " \
+	      "0=disabled, 1=link mode chosen per-platform, " \
+	      "2=force link-standby mode, 3=force link-off mode)") \
+	param(disable_power_well, int, -1, _unsafe, 0400, \
+	      "Disable display power wells when possible.", \
+	      "(-1=auto, 0=power wells always on, 1=power wells disabled when possible)") \
+	param(enable_ips, int, 1, _unsafe, 0600, \
+	      "Enable IPS.", ) \
+	param(invert_brightness, int, 0, _unsafe, 0600, \
+	      "Invert backlight brightness.", \
+	      "Please report PCI device ID, subsystem vendor and subsystem " \
+	      "device ID to dri-devel@lists.freedesktop.org, if your machine " \
+	      "needs it. It will then be included in an upcoming module version. " \
+	      "(-1=force normal, 0=machine defaults, 1=force inversion)") \
+	param(enable_guc_loading, int, 0, _unsafe, 0400, \
+	      "Enable GuC firmware loading.", \
+	      "(-1=auto, 0=never, 1=if available, 2=required)") \
+	param(enable_guc_submission, int, 0, _unsafe, 0400, \
+	      "Enable GuC submission.", \
+	      "(-1=auto, 0=never, 1=if available, 2=required)") \
+	param(guc_log_level, int, -1, _unsafe, 0400, \
+	      "GuC firmware logging level.", \
+	      "(-1:disabled, 0-3:enabled)") \
+	param(guc_firmware_path, charp, NULL, _unsafe, 0400, \
+	      "GuC firmware path to use instead of the default one.", ) \
+	param(huc_firmware_path, charp, NULL, _unsafe, 0400, \
+	      "HuC firmware path to use instead of the default one.", ) \
+	param(use_mmio_flip, int, 0, _unsafe, 0600, \
+	      "Use MMIO flips.", \
+	      "(-1=never, 0=driver discretion, 1=always)") \
+	param(mmio_debug, int, 0, /*safe*/, 0600, \
+	      "Enable the MMIO debug code for the first N failures.", \
+	      "This may negatively affect performance. ") \
+	param(edp_vswing, int, 0, _unsafe, 0400, \
+	      "Ignore/Override vswing pre-emph table selection from VBT.", \
+	      "(0=use value from VBT, 1=low power swing(200mV), 2=default swing(400mV))") \
+	param(inject_load_failure, uint, 0, _unsafe, 0400, \
+	      "For developers only: Force an error after a number of failure check points.", \
+	      "(0:disabled, N:force failure at the Nth failure check point)") \
 	/* leave bools at the end to not create holes */ \
-	func(bool, alpha_support); \
-	func(bool, enable_cmd_parser); \
-	func(bool, enable_hangcheck); \
-	func(bool, fastboot); \
-	func(bool, prefault_disable); \
-	func(bool, load_detect_test); \
-	func(bool, force_reset_modeset_test); \
-	func(bool, reset); \
-	func(bool, error_capture); \
-	func(bool, disable_display); \
-	func(bool, verbose_state_checks); \
-	func(bool, nuclear_pageflip); \
-	func(bool, enable_dp_mst); \
-	func(bool, enable_dpcd_backlight); \
-	func(bool, enable_gvt)
+	param(alpha_support, bool, IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT), _unsafe, 0400, \
+	      "Enable alpha quality driver support for latest hardware.", \
+	      "See also CONFIG_DRM_I915_ALPHA_SUPPORT. " ) \
+	param(enable_cmd_parser, bool, true, _unsafe, 0400, \
+	      "Enable command parsing.", \
+	     "(true=enabled, false=disabled)") \
+	param(enable_hangcheck, bool, true, _unsafe, 0644, \
+	     "Periodically check GPU activity for detecting hangs.", \
+	     "WARNING: Disabling this can cause system wide hangs! ") \
+	param(fastboot, bool, false, /*safe*/, 0600, \
+	     "Try to skip unnecessary mode sets at boot time.", ) \
+	param(prefault_disable, bool, false, _unsafe, 0600, \
+	     "For developers only: Disable page prefaulting for pread/pwrite/reloc.", ) \
+	param(load_detect_test, bool, false, _unsafe, 0600, \
+	     "For developers only: Force-enable the VGA load detect code for testing.", ) \
+	param(force_reset_modeset_test, bool, false, _unsafe, 0600, \
+	     "For developers only: Force a modeset during gpu reset for testing.", ) \
+	param(reset, bool, true, _unsafe, 0600, \
+	     "Attempt GPU resets.", ) \
+	param(disable_display, bool, false, /*safe*/, 0400, \
+	     "Disable display.", ) \
+	param(verbose_state_checks, bool, true, /*safe*/, 0600, \
+	     "Enable verbose logs (ie. WARN_ON()) in case of unexpected HW state conditions.", ) \
+	param(nuclear_pageflip, bool, false, _unsafe, 0400, \
+	     "Force enable atomic functionality on platforms that don't have full support yet.", ) \
+	param(enable_dp_mst, bool, true, _unsafe, 0600, \
+	     "Enable multi-stream transport (MST) for new DisplayPort sinks.", ) \
+	param(enable_dpcd_backlight, bool, false, /*safe*/, 0600, \
+	     "Enable support for DPCD backlight control.", ) \
+	param(enable_gvt, bool, false, /*safe*/, 0400, \
+	     "Enable support for Intel GVT-g graphics virtualization host support.", ) \
+	/* consume \ */
+
+#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
+#define _I915_PARAMS_FOR_EACH_CONFIG_ERROR(param) \
+	param(error_capture, bool, true, /*safe*/, 0600, \
+	      "Record the GPU state following a hang.", \
+	      "This information in /sys/class/drm/card<N>/error is vital for triaging and debugging hangs. ")
+#else
+#define _I915_PARAMS_FOR_EACH_CONFIG_ERROR(param)
+#endif
+
+#define I915_PARAMS_FOR_EACH(param) \
+	_I915_PARAMS_FOR_EACH_BASE(param) \
+	_I915_PARAMS_FOR_EACH_CONFIG_ERROR(param) \
+	/* consume \ */
 
-#define MEMBER(T, member) T member
+#define charp char*
+#define MEMBER(Name, Type, Value, Unsafe, Mode, Brief, Detailed) Type Name;
 struct i915_params {
-	I915_PARAMS_FOR_EACH(MEMBER);
+	I915_PARAMS_FOR_EACH(MEMBER)
 };
 #undef MEMBER
+#undef charp
 
 extern struct i915_params i915 __read_mostly;
 
 #endif
-
-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 3/4] drm/i915: Highlight modified i915 params in gpu error state
  2017-06-14 18:15 [PATCH v3 0/4] drm/i915: Misc improvements around module params Michal Wajdeczko
  2017-06-14 18:15 ` [PATCH v3 1/4] drm/i915: Rename lvds_use_ssc modparam to panel_use_ssc Michal Wajdeczko
  2017-06-14 18:15 ` [PATCH v3 2/4] drm/i915: Extend PARAMS_FOR_EACH macro with more data Michal Wajdeczko
@ 2017-06-14 18:15 ` Michal Wajdeczko
  2017-06-14 18:15 ` [PATCH v3 4/4] drm/i915/debugfs: Highlight modified i915 params Michal Wajdeczko
  2017-06-14 18:33 ` ✓ Fi.CI.BAT: success for drm/i915: Misc improvements around module params (rev3) Patchwork
  4 siblings, 0 replies; 7+ messages in thread
From: Michal Wajdeczko @ 2017-06-14 18:15 UTC (permalink / raw)
  To: intel-gfx

We now know types and default values for all params.
Use dedicated err_print macros to dump them in gpu error state
and flag any that was modified.

Suggested-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_drv.h       | 20 ++++++++++++++++++++
 drivers/gpu/drm/i915/i915_gpu_error.c | 30 ++++++++++++++----------------
 2 files changed, 34 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 38ef734..8bd6234 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -252,6 +252,26 @@ static inline const char *enableddisabled(bool v)
 	return v ? "enabled" : "disabled";
 }
 
+static inline bool is_equal_int(int a, int b)
+{
+	return a == b;
+}
+
+static inline bool is_equal_uint(unsigned int a, unsigned int b)
+{
+	return a == b;
+}
+
+static inline bool is_equal_bool(bool a, bool b)
+{
+	return a == b;
+}
+
+static inline bool is_equal_charp(const char *a, const char *b)
+{
+	return a && b ? !strcmp(a, b) : a == b;
+}
+
 enum pipe {
 	INVALID_PIPE = -1,
 	PIPE_A = 0,
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index 000f733..3e388b3 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -546,27 +546,25 @@ static void err_print_capabilities(struct drm_i915_error_state_buf *m,
 #undef PRINT_FLAG
 }
 
-static __always_inline void err_print_param(struct drm_i915_error_state_buf *m,
-					    const char *name,
-					    const char *type,
-					    const void *x)
-{
-	if (!__builtin_strcmp(type, "bool"))
-		err_printf(m, "i915.%s=%s\n", name, yesno(*(const bool *)x));
-	else if (!__builtin_strcmp(type, "int"))
-		err_printf(m, "i915.%s=%d\n", name, *(const int *)x);
-	else if (!__builtin_strcmp(type, "uint"))
-		err_printf(m, "i915.%s=%u\n", name, *(const unsigned int *)x);
-	else if (!__builtin_strcmp(type, "charp"))
-		err_printf(m, "i915.%s=%s\n", name, *(const char **)x);
-	else
-		BUILD_BUG();
+#define err_print_param_int(m, name, x, flag) \
+	err_printf(m, "i915.%s=%d%s\n", name, x, flag);
+#define err_print_param_uint(m, name, x, flag) \
+	err_printf(m, "i915.%s=%u%s\n", name, x, flag);
+#define err_print_param_bool(m, name, x, flag) \
+	err_printf(m, "i915.%s=%s%s\n", name, yesno(x), flag);
+#define err_print_param_charp(m, name, x, flag) \
+	err_printf(m, "i915.%s=%s%s\n", name, x, flag);
+
+static inline const char *param_flag(bool modified)
+{
+	return modified ? " [modified]" : "";
 }
 
 static void err_print_params(struct drm_i915_error_state_buf *m,
 			     const struct i915_params *p)
 {
-#define PRINT(X, T, V, U, M, B, D) err_print_param(m, #X, #T, &p->X);
+#define PRINT(X, T, V, U, M, B, D) \
+	err_print_param_##T(m, #X, p->X, param_flag(!is_equal_##T(V, p->X)));
 	I915_PARAMS_FOR_EACH(PRINT);
 #undef PRINT
 }
-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 4/4] drm/i915/debugfs: Highlight modified i915 params
  2017-06-14 18:15 [PATCH v3 0/4] drm/i915: Misc improvements around module params Michal Wajdeczko
                   ` (2 preceding siblings ...)
  2017-06-14 18:15 ` [PATCH v3 3/4] drm/i915: Highlight modified i915 params in gpu error state Michal Wajdeczko
@ 2017-06-14 18:15 ` Michal Wajdeczko
  2017-06-14 18:33 ` ✓ Fi.CI.BAT: success for drm/i915: Misc improvements around module params (rev3) Patchwork
  4 siblings, 0 replies; 7+ messages in thread
From: Michal Wajdeczko @ 2017-06-14 18:15 UTC (permalink / raw)
  To: intel-gfx

We know default values for all params and we know which params are safe
to change. Mark params that were changed when dumping them in debugfs.

v2: simplify is_default calculation for strings (Chris)
v3: rebased and switched into custom seq_print macros (Michal)

Suggested-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Lukasz Fiedorowicz <lukasz.fiedorowicz@intel.com> #2
---
 drivers/gpu/drm/i915/i915_debugfs.c | 38 +++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 9fbba1e..bb71ff4 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -35,21 +35,21 @@ static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
 	return to_i915(node->minor->dev);
 }
 
-static __always_inline void seq_print_param(struct seq_file *m,
-					    const char *name,
-					    const char *type,
-					    const void *x)
-{
-	if (!__builtin_strcmp(type, "bool"))
-		seq_printf(m, "i915.%s=%s\n", name, yesno(*(const bool *)x));
-	else if (!__builtin_strcmp(type, "int"))
-		seq_printf(m, "i915.%s=%d\n", name, *(const int *)x);
-	else if (!__builtin_strcmp(type, "uint"))
-		seq_printf(m, "i915.%s=%u\n", name, *(const unsigned int *)x);
-	else if (!__builtin_strcmp(type, "charp"))
-		seq_printf(m, "i915.%s=%s\n", name, *(const char **)x);
-	else
-		BUILD_BUG();
+#define seq_print_param_bool(m, name, x, tags) \
+	seq_printf(m, "i915.%s=%s%s\n", name, yesno(x), tags)
+#define seq_print_param_int(m, name, x, tags) \
+	seq_printf(m, "i915.%s=%d%s\n", name, x, tags)
+#define seq_print_param_uint(m, name, x, tags) \
+	seq_printf(m, "i915.%s=%u%s\n", name, x, tags)
+#define seq_print_param_charp(m, name, x, tags) \
+	seq_printf(m, "i915.%s=%s%s\n", name, x, tags)
+
+static inline const char *param_tags(bool is_default, bool is_unsafe)
+{
+	if (is_default)
+		return "";
+
+	return is_unsafe ? " [modified *unsafe*]": " [modified]";
 }
 
 static int i915_capabilities(struct seq_file *m, void *data)
@@ -66,9 +66,15 @@ static int i915_capabilities(struct seq_file *m, void *data)
 #undef PRINT_FLAG
 
 	kernel_param_lock(THIS_MODULE);
-#define PRINT_PARAM(X, T, V, U, M, B, D) seq_print_param(m, #X, #T, &i915.X);
+#define FLAG false
+#define FLAG_unsafe true
+#define PRINT_PARAM(X, T, V, U, M, B, D) \
+	seq_print_param_##T(m, #X, i915.X, \
+			    param_tags(is_equal_##T(i915.X, V), FLAG##U));
 	I915_PARAMS_FOR_EACH(PRINT_PARAM);
 #undef PRINT_PARAM
+#undef FLAG
+#undef FLAG_unsafe
 	kernel_param_unlock(THIS_MODULE);
 
 	return 0;
-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* ✓ Fi.CI.BAT: success for drm/i915: Misc improvements around module params (rev3)
  2017-06-14 18:15 [PATCH v3 0/4] drm/i915: Misc improvements around module params Michal Wajdeczko
                   ` (3 preceding siblings ...)
  2017-06-14 18:15 ` [PATCH v3 4/4] drm/i915/debugfs: Highlight modified i915 params Michal Wajdeczko
@ 2017-06-14 18:33 ` Patchwork
  4 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2017-06-14 18:33 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Misc improvements around module params (rev3)
URL   : https://patchwork.freedesktop.org/series/25482/
State : success

== Summary ==

Series 25482v3 drm/i915: Misc improvements around module params
https://patchwork.freedesktop.org/api/1.0/series/25482/revisions/3/mbox/

Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-b:
                pass       -> DMESG-WARN (fi-skl-6700hq) fdo#100461

fdo#100461 https://bugs.freedesktop.org/show_bug.cgi?id=100461

fi-bdw-5557u     total:278  pass:267  dwarn:0   dfail:0   fail:0   skip:11  time:443s
fi-bdw-gvtdvm    total:278  pass:256  dwarn:8   dfail:0   fail:0   skip:14  time:430s
fi-bsw-n3050     total:278  pass:242  dwarn:0   dfail:0   fail:0   skip:36  time:583s
fi-bxt-j4205     total:278  pass:259  dwarn:0   dfail:0   fail:0   skip:19  time:507s
fi-byt-j1900     total:278  pass:254  dwarn:0   dfail:0   fail:0   skip:24  time:491s
fi-byt-n2820     total:278  pass:250  dwarn:0   dfail:0   fail:0   skip:28  time:480s
fi-glk-2a        total:278  pass:259  dwarn:0   dfail:0   fail:0   skip:19  time:590s
fi-hsw-4770      total:278  pass:262  dwarn:0   dfail:0   fail:0   skip:16  time:435s
fi-hsw-4770r     total:278  pass:262  dwarn:0   dfail:0   fail:0   skip:16  time:414s
fi-ilk-650       total:278  pass:228  dwarn:0   dfail:0   fail:0   skip:50  time:419s
fi-ivb-3520m     total:278  pass:260  dwarn:0   dfail:0   fail:0   skip:18  time:495s
fi-ivb-3770      total:278  pass:260  dwarn:0   dfail:0   fail:0   skip:18  time:465s
fi-kbl-7500u     total:278  pass:260  dwarn:0   dfail:0   fail:0   skip:18  time:478s
fi-kbl-7560u     total:278  pass:268  dwarn:0   dfail:0   fail:0   skip:10  time:575s
fi-kbl-r         total:278  pass:259  dwarn:1   dfail:0   fail:0   skip:18  time:576s
fi-skl-6260u     total:278  pass:268  dwarn:0   dfail:0   fail:0   skip:10  time:463s
fi-skl-6700hq    total:278  pass:227  dwarn:2   dfail:0   fail:27  skip:22  time:401s
fi-skl-6700k     total:278  pass:256  dwarn:4   dfail:0   fail:0   skip:18  time:467s
fi-skl-6770hq    total:278  pass:268  dwarn:0   dfail:0   fail:0   skip:10  time:480s
fi-skl-gvtdvm    total:278  pass:265  dwarn:0   dfail:0   fail:0   skip:13  time:435s
fi-snb-2520m     total:278  pass:250  dwarn:0   dfail:0   fail:0   skip:28  time:529s
fi-snb-2600      total:278  pass:249  dwarn:0   dfail:0   fail:0   skip:29  time:400s

66555696fc0f33fc19eca5068783b95ecc8a91d5 drm-tip: 2017y-06m-14d-09h-56m-45s UTC integration manifest
a3d6b09 drm/i915/debugfs: Highlight modified i915 params
8f57486 drm/i915: Highlight modified i915 params in gpu error state
4eafbce drm/i915: Extend PARAMS_FOR_EACH macro with more data
377978d drm/i915: Rename lvds_use_ssc modparam to panel_use_ssc

== Logs ==

For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_4953/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 2/4] drm/i915: Extend PARAMS_FOR_EACH macro with more data
  2017-06-14 18:15 ` [PATCH v3 2/4] drm/i915: Extend PARAMS_FOR_EACH macro with more data Michal Wajdeczko
@ 2017-06-15 19:24   ` Jani Nikula
  0 siblings, 0 replies; 7+ messages in thread
From: Jani Nikula @ 2017-06-15 19:24 UTC (permalink / raw)
  To: Michal Wajdeczko, intel-gfx

On Wed, 14 Jun 2017, Michal Wajdeczko <michal.wajdeczko@intel.com> wrote:
> Currently our PARAMS_FOR_EACH macro contains only param type and name.
> We use this macro to define struct members, but later on we initialize
> this struct using handcrafted code, which leads in some cases to use
> mismatched value vs. type. Let's extend our root macro with param
> default value to keep them in sync. Also drop ; from the macro to allow
> more flexible usages.
>
> v2: Add unsafe tag (Chris)
>     Add all other data to allow complete automation (Michal)
>
> As we now have all data in the param macro, we can automatically
> add 'default' info to the description and avoid any mismatches.
>
> v3: Fix printing default value in the description (Michal)
> v4: s/func/param and reorder items (Chris)
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c   |   6 +-
>  drivers/gpu/drm/i915/i915_gpu_error.c |  10 +-
>  drivers/gpu/drm/i915/i915_params.c    | 234 ++--------------------------------
>  drivers/gpu/drm/i915/i915_params.h    | 182 +++++++++++++++++++-------
>  4 files changed, 157 insertions(+), 275 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index a6ba210..9fbba1e 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -44,9 +44,9 @@ static __always_inline void seq_print_param(struct seq_file *m,
>  		seq_printf(m, "i915.%s=%s\n", name, yesno(*(const bool *)x));
>  	else if (!__builtin_strcmp(type, "int"))
>  		seq_printf(m, "i915.%s=%d\n", name, *(const int *)x);
> -	else if (!__builtin_strcmp(type, "unsigned int"))
> +	else if (!__builtin_strcmp(type, "uint"))
>  		seq_printf(m, "i915.%s=%u\n", name, *(const unsigned int *)x);
> -	else if (!__builtin_strcmp(type, "char *"))
> +	else if (!__builtin_strcmp(type, "charp"))
>  		seq_printf(m, "i915.%s=%s\n", name, *(const char **)x);
>  	else
>  		BUILD_BUG();
> @@ -66,7 +66,7 @@ static int i915_capabilities(struct seq_file *m, void *data)
>  #undef PRINT_FLAG
>  
>  	kernel_param_lock(THIS_MODULE);
> -#define PRINT_PARAM(T, x) seq_print_param(m, #x, #T, &i915.x);
> +#define PRINT_PARAM(X, T, V, U, M, B, D) seq_print_param(m, #X, #T, &i915.X);
>  	I915_PARAMS_FOR_EACH(PRINT_PARAM);
>  #undef PRINT_PARAM
>  	kernel_param_unlock(THIS_MODULE);
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
> index e18f350..000f733 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -555,9 +555,9 @@ static __always_inline void err_print_param(struct drm_i915_error_state_buf *m,
>  		err_printf(m, "i915.%s=%s\n", name, yesno(*(const bool *)x));
>  	else if (!__builtin_strcmp(type, "int"))
>  		err_printf(m, "i915.%s=%d\n", name, *(const int *)x);
> -	else if (!__builtin_strcmp(type, "unsigned int"))
> +	else if (!__builtin_strcmp(type, "uint"))
>  		err_printf(m, "i915.%s=%u\n", name, *(const unsigned int *)x);
> -	else if (!__builtin_strcmp(type, "char *"))
> +	else if (!__builtin_strcmp(type, "charp"))
>  		err_printf(m, "i915.%s=%s\n", name, *(const char **)x);
>  	else
>  		BUILD_BUG();
> @@ -566,7 +566,7 @@ static __always_inline void err_print_param(struct drm_i915_error_state_buf *m,
>  static void err_print_params(struct drm_i915_error_state_buf *m,
>  			     const struct i915_params *p)
>  {
> -#define PRINT(T, x) err_print_param(m, #x, #T, &p->x);
> +#define PRINT(X, T, V, U, M, B, D) err_print_param(m, #X, #T, &p->X);
>  	I915_PARAMS_FOR_EACH(PRINT);
>  #undef PRINT
>  }
> @@ -860,7 +860,7 @@ void __i915_gpu_state_free(struct kref *error_ref)
>  	kfree(error->overlay);
>  	kfree(error->display);
>  
> -#define FREE(T, x) free_param(#T, &error->params.x);
> +#define FREE(X, T, V, U, M, B, D) free_param(#T, &error->params.X);
>  	I915_PARAMS_FOR_EACH(FREE);
>  #undef FREE
>  
> @@ -1694,7 +1694,7 @@ static int capture(void *data)
>  					   error->i915->gt.last_init_time));
>  
>  	error->params = i915;
> -#define DUP(T, x) dup_param(#T, &error->params.x);
> +#define DUP(X, T, V, U, M, B, D) dup_param(#T, &error->params.X);
>  	I915_PARAMS_FOR_EACH(DUP);
>  #undef DUP
>  
> diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
> index 6c27d33..547e517 100644
> --- a/drivers/gpu/drm/i915/i915_params.c
> +++ b/drivers/gpu/drm/i915/i915_params.c
> @@ -26,230 +26,16 @@
>  #include "i915_drv.h"
>  
>  struct i915_params i915 __read_mostly = {
> -	.modeset = -1,
> -	.panel_ignore_lid = 1,
> -	.semaphores = -1,
> -	.lvds_channel_mode = 0,
> -	.panel_use_ssc = -1,
> -	.vbt_sdvo_panel_type = -1,
> -	.enable_rc6 = -1,
> -	.enable_dc = -1,
> -	.enable_fbc = -1,
> -	.enable_execlists = -1,
> -	.enable_hangcheck = true,
> -	.enable_ppgtt = -1,
> -	.enable_psr = -1,
> -	.alpha_support = IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT),
> -	.disable_power_well = -1,
> -	.enable_ips = 1,
> -	.fastboot = 0,
> -	.prefault_disable = 0,
> -	.load_detect_test = 0,
> -	.force_reset_modeset_test = 0,
> -	.reset = true,
> -	.error_capture = true,
> -	.invert_brightness = 0,
> -	.disable_display = 0,
> -	.enable_cmd_parser = true,
> -	.use_mmio_flip = 0,
> -	.mmio_debug = 0,
> -	.verbose_state_checks = 1,
> -	.nuclear_pageflip = 0,
> -	.edp_vswing = 0,
> -	.enable_guc_loading = 0,
> -	.enable_guc_submission = 0,
> -	.guc_log_level = -1,
> -	.guc_firmware_path = NULL,
> -	.huc_firmware_path = NULL,
> -	.enable_dp_mst = true,
> -	.inject_load_failure = 0,
> -	.enable_dpcd_backlight = false,
> -	.enable_gvt = false,
> +#define MEMBER(Name, Type, Value, Unsafe, Mode, Brief, Detailed) .Name = Value,
> +	I915_PARAMS_FOR_EACH(MEMBER)
> +#undef MEMBER
>  };
>  
> -module_param_named(modeset, i915.modeset, int, 0400);
> -MODULE_PARM_DESC(modeset,
> -	"Use kernel modesetting [KMS] (0=disable, "
> -	"1=on, -1=force vga console preference [default])");
> +#undef NULL /* we don't want to see (void*)0 in the description */
> +#define NULL ""

Yuck.

I'm not one to shy away from macro trickery, but I'm really starting to
wonder about the maintainability of the complexity of all this vs. the
duplication of the current one. How about waiting for Daniel to tip the
scales one way or the other?

If nothing else, this patch underlines the real maintainability burden
that comes with the sheer number of module parameters we have.

Nitpick, the capitalized param names aren't ideal.


BR,
Jani.


> +#define PARAM(Name, Type, Value, Unsafe, Mode, Brief, Detailed) \
> +	module_param_named##Unsafe(Name, i915.Name, Type, Mode); \
> +	MODULE_PARM_DESC(Name, Brief " " Detailed "[default: " __stringify(Value) "]");
> +I915_PARAMS_FOR_EACH(PARAM)
> +#undef PARAM
>  
> -module_param_named_unsafe(panel_ignore_lid, i915.panel_ignore_lid, int, 0600);
> -MODULE_PARM_DESC(panel_ignore_lid,
> -	"Override lid status (0=autodetect, 1=autodetect disabled [default], "
> -	"-1=force lid closed, -2=force lid open)");
> -
> -module_param_named_unsafe(semaphores, i915.semaphores, int, 0400);
> -MODULE_PARM_DESC(semaphores,
> -	"Use semaphores for inter-ring sync "
> -	"(default: -1 (use per-chip defaults))");
> -
> -module_param_named_unsafe(enable_rc6, i915.enable_rc6, int, 0400);
> -MODULE_PARM_DESC(enable_rc6,
> -	"Enable power-saving render C-state 6. "
> -	"Different stages can be selected via bitmask values "
> -	"(0 = disable; 1 = enable rc6; 2 = enable deep rc6; 4 = enable deepest rc6). "
> -	"For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. "
> -	"default: -1 (use per-chip default)");
> -
> -module_param_named_unsafe(enable_dc, i915.enable_dc, int, 0400);
> -MODULE_PARM_DESC(enable_dc,
> -	"Enable power-saving display C-states. "
> -	"(-1=auto [default]; 0=disable; 1=up to DC5; 2=up to DC6)");
> -
> -module_param_named_unsafe(enable_fbc, i915.enable_fbc, int, 0600);
> -MODULE_PARM_DESC(enable_fbc,
> -	"Enable frame buffer compression for power savings "
> -	"(default: -1 (use per-chip default))");
> -
> -module_param_named_unsafe(lvds_channel_mode, i915.lvds_channel_mode, int, 0400);
> -MODULE_PARM_DESC(lvds_channel_mode,
> -	 "Specify LVDS channel mode "
> -	 "(0=probe BIOS [default], 1=single-channel, 2=dual-channel)");
> -
> -module_param_named_unsafe(panel_use_ssc, i915.panel_use_ssc, int, 0600);
> -MODULE_PARM_DESC(panel_use_ssc,
> -	"Use Spread Spectrum Clock with panels [LVDS/eDP] "
> -	"(default: auto from VBT)");
> -
> -module_param_named_unsafe(vbt_sdvo_panel_type, i915.vbt_sdvo_panel_type, int, 0400);
> -MODULE_PARM_DESC(vbt_sdvo_panel_type,
> -	"Override/Ignore selection of SDVO panel mode in the VBT "
> -	"(-2=ignore, -1=auto [default], index in VBT BIOS table)");
> -
> -module_param_named_unsafe(reset, i915.reset, bool, 0600);
> -MODULE_PARM_DESC(reset, "Attempt GPU resets (default: true)");
> -
> -#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
> -module_param_named(error_capture, i915.error_capture, bool, 0600);
> -MODULE_PARM_DESC(error_capture,
> -	"Record the GPU state following a hang. "
> -	"This information in /sys/class/drm/card<N>/error is vital for "
> -	"triaging and debugging hangs.");
> -#endif
> -
> -module_param_named_unsafe(enable_hangcheck, i915.enable_hangcheck, bool, 0644);
> -MODULE_PARM_DESC(enable_hangcheck,
> -	"Periodically check GPU activity for detecting hangs. "
> -	"WARNING: Disabling this can cause system wide hangs. "
> -	"(default: true)");
> -
> -module_param_named_unsafe(enable_ppgtt, i915.enable_ppgtt, int, 0400);
> -MODULE_PARM_DESC(enable_ppgtt,
> -	"Override PPGTT usage. "
> -	"(-1=auto [default], 0=disabled, 1=aliasing, 2=full, 3=full with extended address space)");
> -
> -module_param_named_unsafe(enable_execlists, i915.enable_execlists, int, 0400);
> -MODULE_PARM_DESC(enable_execlists,
> -	"Override execlists usage. "
> -	"(-1=auto [default], 0=disabled, 1=enabled)");
> -
> -module_param_named_unsafe(enable_psr, i915.enable_psr, int, 0600);
> -MODULE_PARM_DESC(enable_psr, "Enable PSR "
> -		 "(0=disabled, 1=enabled - link mode chosen per-platform, 2=force link-standby mode, 3=force link-off mode) "
> -		 "Default: -1 (use per-chip default)");
> -
> -module_param_named_unsafe(alpha_support, i915.alpha_support, bool, 0400);
> -MODULE_PARM_DESC(alpha_support,
> -	"Enable alpha quality driver support for latest hardware. "
> -	"See also CONFIG_DRM_I915_ALPHA_SUPPORT.");
> -
> -module_param_named_unsafe(disable_power_well, i915.disable_power_well, int, 0400);
> -MODULE_PARM_DESC(disable_power_well,
> -	"Disable display power wells when possible "
> -	"(-1=auto [default], 0=power wells always on, 1=power wells disabled when possible)");
> -
> -module_param_named_unsafe(enable_ips, i915.enable_ips, int, 0600);
> -MODULE_PARM_DESC(enable_ips, "Enable IPS (default: true)");
> -
> -module_param_named(fastboot, i915.fastboot, bool, 0600);
> -MODULE_PARM_DESC(fastboot,
> -	"Try to skip unnecessary mode sets at boot time (default: false)");
> -
> -module_param_named_unsafe(prefault_disable, i915.prefault_disable, bool, 0600);
> -MODULE_PARM_DESC(prefault_disable,
> -	"Disable page prefaulting for pread/pwrite/reloc (default:false). "
> -	"For developers only.");
> -
> -module_param_named_unsafe(load_detect_test, i915.load_detect_test, bool, 0600);
> -MODULE_PARM_DESC(load_detect_test,
> -	"Force-enable the VGA load detect code for testing (default:false). "
> -	"For developers only.");
> -
> -module_param_named_unsafe(force_reset_modeset_test, i915.force_reset_modeset_test, bool, 0600);
> -MODULE_PARM_DESC(force_reset_modeset_test,
> -	"Force a modeset during gpu reset for testing (default:false). "
> -	"For developers only.");
> -
> -module_param_named_unsafe(invert_brightness, i915.invert_brightness, int, 0600);
> -MODULE_PARM_DESC(invert_brightness,
> -	"Invert backlight brightness "
> -	"(-1 force normal, 0 machine defaults, 1 force inversion), please "
> -	"report PCI device ID, subsystem vendor and subsystem device ID "
> -	"to dri-devel@lists.freedesktop.org, if your machine needs it. "
> -	"It will then be included in an upcoming module version.");
> -
> -module_param_named(disable_display, i915.disable_display, bool, 0400);
> -MODULE_PARM_DESC(disable_display, "Disable display (default: false)");
> -
> -module_param_named_unsafe(enable_cmd_parser, i915.enable_cmd_parser, bool, 0400);
> -MODULE_PARM_DESC(enable_cmd_parser,
> -		 "Enable command parsing (true=enabled [default], false=disabled)");
> -
> -module_param_named_unsafe(use_mmio_flip, i915.use_mmio_flip, int, 0600);
> -MODULE_PARM_DESC(use_mmio_flip,
> -		 "use MMIO flips (-1=never, 0=driver discretion [default], 1=always)");
> -
> -module_param_named(mmio_debug, i915.mmio_debug, int, 0600);
> -MODULE_PARM_DESC(mmio_debug,
> -	"Enable the MMIO debug code for the first N failures (default: off). "
> -	"This may negatively affect performance.");
> -
> -module_param_named(verbose_state_checks, i915.verbose_state_checks, bool, 0600);
> -MODULE_PARM_DESC(verbose_state_checks,
> -	"Enable verbose logs (ie. WARN_ON()) in case of unexpected hw state conditions.");
> -
> -module_param_named_unsafe(nuclear_pageflip, i915.nuclear_pageflip, bool, 0400);
> -MODULE_PARM_DESC(nuclear_pageflip,
> -		 "Force enable atomic functionality on platforms that don't have full support yet.");
> -
> -/* WA to get away with the default setting in VBT for early platforms.Will be removed */
> -module_param_named_unsafe(edp_vswing, i915.edp_vswing, int, 0400);
> -MODULE_PARM_DESC(edp_vswing,
> -		 "Ignore/Override vswing pre-emph table selection from VBT "
> -		 "(0=use value from vbt [default], 1=low power swing(200mV),"
> -		 "2=default swing(400mV))");
> -
> -module_param_named_unsafe(enable_guc_loading, i915.enable_guc_loading, int, 0400);
> -MODULE_PARM_DESC(enable_guc_loading,
> -		"Enable GuC firmware loading "
> -		"(-1=auto, 0=never [default], 1=if available, 2=required)");
> -
> -module_param_named_unsafe(enable_guc_submission, i915.enable_guc_submission, int, 0400);
> -MODULE_PARM_DESC(enable_guc_submission,
> -		"Enable GuC submission "
> -		"(-1=auto, 0=never [default], 1=if available, 2=required)");
> -
> -module_param_named(guc_log_level, i915.guc_log_level, int, 0400);
> -MODULE_PARM_DESC(guc_log_level,
> -	"GuC firmware logging level (-1:disabled (default), 0-3:enabled)");
> -
> -module_param_named_unsafe(guc_firmware_path, i915.guc_firmware_path, charp, 0400);
> -MODULE_PARM_DESC(guc_firmware_path,
> -	"GuC firmware path to use instead of the default one");
> -
> -module_param_named_unsafe(huc_firmware_path, i915.huc_firmware_path, charp, 0400);
> -MODULE_PARM_DESC(huc_firmware_path,
> -	"HuC firmware path to use instead of the default one");
> -
> -module_param_named_unsafe(enable_dp_mst, i915.enable_dp_mst, bool, 0600);
> -MODULE_PARM_DESC(enable_dp_mst,
> -	"Enable multi-stream transport (MST) for new DisplayPort sinks. (default: true)");
> -module_param_named_unsafe(inject_load_failure, i915.inject_load_failure, uint, 0400);
> -MODULE_PARM_DESC(inject_load_failure,
> -	"Force an error after a number of failure check points (0:disabled (default), N:force failure at the Nth failure check point)");
> -module_param_named(enable_dpcd_backlight, i915.enable_dpcd_backlight, bool, 0600);
> -MODULE_PARM_DESC(enable_dpcd_backlight,
> -	"Enable support for DPCD backlight control (default:false)");
> -
> -module_param_named(enable_gvt, i915.enable_gvt, bool, 0400);
> -MODULE_PARM_DESC(enable_gvt,
> -	"Enable support for Intel GVT-g graphics virtualization host support(default:false)");
> diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
> index 34148cc..88bf648 100644
> --- a/drivers/gpu/drm/i915/i915_params.h
> +++ b/drivers/gpu/drm/i915/i915_params.h
> @@ -27,55 +27,151 @@
>  
>  #include <linux/cache.h> /* for __read_mostly */
>  
> -#define I915_PARAMS_FOR_EACH(func) \
> -	func(int, modeset); \
> -	func(int, panel_ignore_lid); \
> -	func(int, semaphores); \
> -	func(int, lvds_channel_mode); \
> -	func(int, panel_use_ssc); \
> -	func(int, vbt_sdvo_panel_type); \
> -	func(int, enable_rc6); \
> -	func(int, enable_dc); \
> -	func(int, enable_fbc); \
> -	func(int, enable_ppgtt); \
> -	func(int, enable_execlists); \
> -	func(int, enable_psr); \
> -	func(int, disable_power_well); \
> -	func(int, enable_ips); \
> -	func(int, invert_brightness); \
> -	func(int, enable_guc_loading); \
> -	func(int, enable_guc_submission); \
> -	func(int, guc_log_level); \
> -	func(char *, guc_firmware_path); \
> -	func(char *, huc_firmware_path); \
> -	func(int, use_mmio_flip); \
> -	func(int, mmio_debug); \
> -	func(int, edp_vswing); \
> -	func(unsigned int, inject_load_failure); \
> +/*
> + * Each i915 module param is defined as single 'param' entry:
> + *	param(Name, Type, Value, Unsafe, Mode, Brief, Detailed)
> + * where:
> + *	@Name: the name of param
> + *	@Type: int|uint|bool|charp
> + *	@Value: the default value of the param
> + *	@Unsafe: must be either empty or _unsafe
> + *	@Mode: the access mode (usually 0600|0400)
> + *	@Brief: short description text of the param
> + *	@Detailed: more detailed description of the param (may be empty)
> + */
> +#define _I915_PARAMS_FOR_EACH_BASE(param) \
> +	param(modeset, int, -1, /*safe*/, 0400, \
> +	      "Use kernel modesetting (KMS).", \
> +	      "(0=disable, 1=on, -1=force vga console preference)") \
> +	param(panel_ignore_lid, int, 1, _unsafe, 0600, \
> +	      "Override lid status.", \
> +	      "(0=autodetect, 1=autodetect disabled, -1=force lid closed, -2=force lid open)") \
> +	param(semaphores, int, -1, _unsafe, 0400, \
> +	      "Use semaphores for inter-ring sync.", \
> +	      "(-1=use per-chip defaults)") \
> +	param(lvds_channel_mode, int, 0, _unsafe, 0400, \
> +	      "Specify LVDS channel mode.", \
> +	      "(0=probe BIOS, 1=single-channel, 2=dual-channel)") \
> +	param(panel_use_ssc, int, -1, _unsafe, 0600, \
> +	      "Use Spread Spectrum Clock with panels [LVDS/eDP].", \
> +	      "(-1=auto from VBT)") \
> +	param(vbt_sdvo_panel_type, int, -1, _unsafe, 0400, \
> +	      "Override/Ignore selection of SDVO panel mode in the VBT.", \
> +	      "(-2=ignore, -1=auto, 0..n=index in VBT BIOS table)") \
> +	param(enable_rc6, int, -1, _unsafe, 0400, \
> +	      "Enable power-saving render C-state 6.", \
> +	      "(-1=use per-chip default, 0=disable, 1=enable rc6, 2=enable deep rc6, 4=enable deepest rc6)" \
> +	      "Different stages can be selected via bitmask values. " \
> +	      "For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. ") \
> +	param(enable_dc, int, -1, _unsafe, 0400, \
> +	      "Enable power-saving display C-states.", \
> +	      "(-1=auto, 0=disable, 1=up to DC5, 2=up to DC6)") \
> +	param(enable_fbc, int, -1, _unsafe, 0600, \
> +	      "Enable frame buffer compression for power savings.", \
> +	      "(-1=use per-chip default)") \
> +	param(enable_ppgtt, int, -1, _unsafe, 0400, \
> +	      "Override PPGTT usage.", \
> +	      "(-1=auto, 0=disabled, 1=aliasing, 2=full, 3=full with extended address space)") \
> +	param(enable_execlists, int, -1, _unsafe, 0400, \
> +	      "Override execlists usage.", \
> +	      "(-1=auto, 0=disabled, 1=enabled)") \
> +	param(enable_psr, int, -1, _unsafe, 0600, \
> +	      "Enable PSR.", \
> +	      "(-1=use per-chip default, " \
> +	      "0=disabled, 1=link mode chosen per-platform, " \
> +	      "2=force link-standby mode, 3=force link-off mode)") \
> +	param(disable_power_well, int, -1, _unsafe, 0400, \
> +	      "Disable display power wells when possible.", \
> +	      "(-1=auto, 0=power wells always on, 1=power wells disabled when possible)") \
> +	param(enable_ips, int, 1, _unsafe, 0600, \
> +	      "Enable IPS.", ) \
> +	param(invert_brightness, int, 0, _unsafe, 0600, \
> +	      "Invert backlight brightness.", \
> +	      "Please report PCI device ID, subsystem vendor and subsystem " \
> +	      "device ID to dri-devel@lists.freedesktop.org, if your machine " \
> +	      "needs it. It will then be included in an upcoming module version. " \
> +	      "(-1=force normal, 0=machine defaults, 1=force inversion)") \
> +	param(enable_guc_loading, int, 0, _unsafe, 0400, \
> +	      "Enable GuC firmware loading.", \
> +	      "(-1=auto, 0=never, 1=if available, 2=required)") \
> +	param(enable_guc_submission, int, 0, _unsafe, 0400, \
> +	      "Enable GuC submission.", \
> +	      "(-1=auto, 0=never, 1=if available, 2=required)") \
> +	param(guc_log_level, int, -1, _unsafe, 0400, \
> +	      "GuC firmware logging level.", \
> +	      "(-1:disabled, 0-3:enabled)") \
> +	param(guc_firmware_path, charp, NULL, _unsafe, 0400, \
> +	      "GuC firmware path to use instead of the default one.", ) \
> +	param(huc_firmware_path, charp, NULL, _unsafe, 0400, \
> +	      "HuC firmware path to use instead of the default one.", ) \
> +	param(use_mmio_flip, int, 0, _unsafe, 0600, \
> +	      "Use MMIO flips.", \
> +	      "(-1=never, 0=driver discretion, 1=always)") \
> +	param(mmio_debug, int, 0, /*safe*/, 0600, \
> +	      "Enable the MMIO debug code for the first N failures.", \
> +	      "This may negatively affect performance. ") \
> +	param(edp_vswing, int, 0, _unsafe, 0400, \
> +	      "Ignore/Override vswing pre-emph table selection from VBT.", \
> +	      "(0=use value from VBT, 1=low power swing(200mV), 2=default swing(400mV))") \
> +	param(inject_load_failure, uint, 0, _unsafe, 0400, \
> +	      "For developers only: Force an error after a number of failure check points.", \
> +	      "(0:disabled, N:force failure at the Nth failure check point)") \
>  	/* leave bools at the end to not create holes */ \
> -	func(bool, alpha_support); \
> -	func(bool, enable_cmd_parser); \
> -	func(bool, enable_hangcheck); \
> -	func(bool, fastboot); \
> -	func(bool, prefault_disable); \
> -	func(bool, load_detect_test); \
> -	func(bool, force_reset_modeset_test); \
> -	func(bool, reset); \
> -	func(bool, error_capture); \
> -	func(bool, disable_display); \
> -	func(bool, verbose_state_checks); \
> -	func(bool, nuclear_pageflip); \
> -	func(bool, enable_dp_mst); \
> -	func(bool, enable_dpcd_backlight); \
> -	func(bool, enable_gvt)
> +	param(alpha_support, bool, IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT), _unsafe, 0400, \
> +	      "Enable alpha quality driver support for latest hardware.", \
> +	      "See also CONFIG_DRM_I915_ALPHA_SUPPORT. " ) \
> +	param(enable_cmd_parser, bool, true, _unsafe, 0400, \
> +	      "Enable command parsing.", \
> +	     "(true=enabled, false=disabled)") \
> +	param(enable_hangcheck, bool, true, _unsafe, 0644, \
> +	     "Periodically check GPU activity for detecting hangs.", \
> +	     "WARNING: Disabling this can cause system wide hangs! ") \
> +	param(fastboot, bool, false, /*safe*/, 0600, \
> +	     "Try to skip unnecessary mode sets at boot time.", ) \
> +	param(prefault_disable, bool, false, _unsafe, 0600, \
> +	     "For developers only: Disable page prefaulting for pread/pwrite/reloc.", ) \
> +	param(load_detect_test, bool, false, _unsafe, 0600, \
> +	     "For developers only: Force-enable the VGA load detect code for testing.", ) \
> +	param(force_reset_modeset_test, bool, false, _unsafe, 0600, \
> +	     "For developers only: Force a modeset during gpu reset for testing.", ) \
> +	param(reset, bool, true, _unsafe, 0600, \
> +	     "Attempt GPU resets.", ) \
> +	param(disable_display, bool, false, /*safe*/, 0400, \
> +	     "Disable display.", ) \
> +	param(verbose_state_checks, bool, true, /*safe*/, 0600, \
> +	     "Enable verbose logs (ie. WARN_ON()) in case of unexpected HW state conditions.", ) \
> +	param(nuclear_pageflip, bool, false, _unsafe, 0400, \
> +	     "Force enable atomic functionality on platforms that don't have full support yet.", ) \
> +	param(enable_dp_mst, bool, true, _unsafe, 0600, \
> +	     "Enable multi-stream transport (MST) for new DisplayPort sinks.", ) \
> +	param(enable_dpcd_backlight, bool, false, /*safe*/, 0600, \
> +	     "Enable support for DPCD backlight control.", ) \
> +	param(enable_gvt, bool, false, /*safe*/, 0400, \
> +	     "Enable support for Intel GVT-g graphics virtualization host support.", ) \
> +	/* consume \ */
> +
> +#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
> +#define _I915_PARAMS_FOR_EACH_CONFIG_ERROR(param) \
> +	param(error_capture, bool, true, /*safe*/, 0600, \
> +	      "Record the GPU state following a hang.", \
> +	      "This information in /sys/class/drm/card<N>/error is vital for triaging and debugging hangs. ")
> +#else
> +#define _I915_PARAMS_FOR_EACH_CONFIG_ERROR(param)
> +#endif
> +
> +#define I915_PARAMS_FOR_EACH(param) \
> +	_I915_PARAMS_FOR_EACH_BASE(param) \
> +	_I915_PARAMS_FOR_EACH_CONFIG_ERROR(param) \
> +	/* consume \ */
>  
> -#define MEMBER(T, member) T member
> +#define charp char*
> +#define MEMBER(Name, Type, Value, Unsafe, Mode, Brief, Detailed) Type Name;
>  struct i915_params {
> -	I915_PARAMS_FOR_EACH(MEMBER);
> +	I915_PARAMS_FOR_EACH(MEMBER)
>  };
>  #undef MEMBER
> +#undef charp
>  
>  extern struct i915_params i915 __read_mostly;
>  
>  #endif
> -

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-06-15 19:24 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-14 18:15 [PATCH v3 0/4] drm/i915: Misc improvements around module params Michal Wajdeczko
2017-06-14 18:15 ` [PATCH v3 1/4] drm/i915: Rename lvds_use_ssc modparam to panel_use_ssc Michal Wajdeczko
2017-06-14 18:15 ` [PATCH v3 2/4] drm/i915: Extend PARAMS_FOR_EACH macro with more data Michal Wajdeczko
2017-06-15 19:24   ` Jani Nikula
2017-06-14 18:15 ` [PATCH v3 3/4] drm/i915: Highlight modified i915 params in gpu error state Michal Wajdeczko
2017-06-14 18:15 ` [PATCH v3 4/4] drm/i915/debugfs: Highlight modified i915 params Michal Wajdeczko
2017-06-14 18:33 ` ✓ Fi.CI.BAT: success for drm/i915: Misc improvements around module params (rev3) Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.