Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 522a63de authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Ville Syrjälä
Browse files

drm/i915: Add a way to test the modeset done during gpu reset, v3.



Add force_reset_modeset_test as a parameter to force the modeset path during gpu reset.
This allows a IGT test to set the knob and trigger a hang to force the gpu reset,
even on platforms that wouldn't otherwise require it.

Changes since v1:
- Split out fix to separate commit.
Changes since v2:
- This commit is purely about force_reset_modeset_test now.

Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Testcase: drv_hangman.reset-with-forced-modeset
Tested-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1470428910-12125-3-git-send-email-ville.syrjala@linux.intel.com


Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
parent 73974893
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ struct i915_params i915 __read_mostly = {
	.fastboot = 0,
	.prefault_disable = 0,
	.load_detect_test = 0,
	.force_reset_modeset_test = 0,
	.reset = true,
	.invert_brightness = 0,
	.disable_display = 0,
@@ -161,6 +162,11 @@ 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 −0
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ struct i915_params {
	bool fastboot;
	bool prefault_disable;
	bool load_detect_test;
	bool force_reset_modeset_test;
	bool reset;
	bool disable_display;
	bool verbose_state_checks;
+18 −11
Original line number Diff line number Diff line
@@ -3161,7 +3161,8 @@ void intel_prepare_reset(struct drm_i915_private *dev_priv)
	}

	/* reset doesn't touch the display, but flips might get nuked anyway, */
	if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv))
	if (!i915.force_reset_modeset_test &&
	    (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv)))
		return;

	/*
@@ -3212,6 +3213,7 @@ void intel_finish_reset(struct drm_i915_private *dev_priv)

	/* reset doesn't touch the display */
	if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv)) {
		if (!state) {
			/*
			 * Flips in the rings have been nuked by the reset,
			 * so update the base address of all primary
@@ -3222,6 +3224,11 @@ void intel_finish_reset(struct drm_i915_private *dev_priv)
			 * CS-based flips (which might get lost in gpu resets) any more.
			 */
			intel_update_primary_planes(dev);
		} else {
			ret = __intel_display_resume(dev, state);
			if (ret)
				DRM_ERROR("Restoring old state failed with %i\n", ret);
		}
	} else {
		/*
		 * The display has been reset as well,