summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@fedoraproject.org>2015-01-29 16:03:39 -0500
committerJosh Boyer <jwboyer@fedoraproject.org>2015-01-29 16:03:39 -0500
commit8821eb382431a47d224051f0fa50ae9bccffa96d (patch)
tree48aa9d7d5bd481f499bfbf7bbfe1dc0857f768aa
parent1040b10023a96fb329078f89e3a17fcf4a1c0201 (diff)
downloadkernel-8821eb382431a47d224051f0fa50ae9bccffa96d.tar.gz
kernel-8821eb382431a47d224051f0fa50ae9bccffa96d.tar.xz
kernel-8821eb382431a47d224051f0fa50ae9bccffa96d.zip
Backport patch from Rob Clark to toggle i915 state machine checks
- Disable i915 state checks
-rw-r--r--drm-i915-Disable-verbose-state-checks.patch31
-rw-r--r--drm-i915-Don-t-WARN-in-edp_panel_vdd_off.patch29
-rw-r--r--drm-i915-hush-check-crtc-state.patch31
-rw-r--r--drm-i915-tame-the-chattermouth-v2.patch544
-rw-r--r--kernel.spec14
5 files changed, 584 insertions, 65 deletions
diff --git a/drm-i915-Disable-verbose-state-checks.patch b/drm-i915-Disable-verbose-state-checks.patch
new file mode 100644
index 00000000..08e98887
--- /dev/null
+++ b/drm-i915-Disable-verbose-state-checks.patch
@@ -0,0 +1,31 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Thu, 29 Jan 2015 14:03:17 -0500
+Subject: [PATCH] drm/i915: Disable verbose state checks
+
+For stable releases, we disable the verbose state checks in the i915 driver.
+They are mostly for development purposes and they fill the retrace server
+to the point of uselessness. We leave these enabled in rawhide kernels,
+where they are both more likely to get attention from upstream and more
+likely to be fixable.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ drivers/gpu/drm/i915/i915_params.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
+index db07153b693f..c049fe3fbdff 100644
+--- a/drivers/gpu/drm/i915/i915_params.c
++++ b/drivers/gpu/drm/i915/i915_params.c
+@@ -51,7 +51,7 @@ struct i915_params i915 __read_mostly = {
+ .disable_vtd_wa = 0,
+ .use_mmio_flip = 0,
+ .mmio_debug = 0,
+- .verbose_state_checks = 1,
++ .verbose_state_checks = 0,
+ };
+
+ module_param_named(modeset, i915.modeset, int, 0400);
+--
+2.1.0
+
diff --git a/drm-i915-Don-t-WARN-in-edp_panel_vdd_off.patch b/drm-i915-Don-t-WARN-in-edp_panel_vdd_off.patch
deleted file mode 100644
index 12c9ce27..00000000
--- a/drm-i915-Don-t-WARN-in-edp_panel_vdd_off.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From: Josh Boyer <jwboyer@fedoraproject.org>
-Date: Fri, 14 Nov 2014 09:17:39 -0500
-Subject: [PATCH] drm/i915: Don't WARN in edp_panel_vdd_off
-
-After talking with ajax, this isn't really worth splashing a backtrace
-about. The handling here is reworked in 3.18, but the fixes are a bit
-larger than we want to backport. Just shut it up for now.
-
-Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
----
- drivers/gpu/drm/i915/intel_dp.c | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
-index 1b7375efc670..a6fb06cc6cf0 100644
---- a/drivers/gpu/drm/i915/intel_dp.c
-+++ b/drivers/gpu/drm/i915/intel_dp.c
-@@ -1303,8 +1303,6 @@ static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
- if (!is_edp(intel_dp))
- return;
-
-- WARN(!intel_dp->want_panel_vdd, "eDP VDD not forced on");
--
- intel_dp->want_panel_vdd = false;
-
- if (sync)
---
-2.1.0
-
diff --git a/drm-i915-hush-check-crtc-state.patch b/drm-i915-hush-check-crtc-state.patch
deleted file mode 100644
index a2a10e19..00000000
--- a/drm-i915-hush-check-crtc-state.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From: Adam Jackson <ajax@redhat.com>
-Date: Wed, 13 Nov 2013 10:17:24 -0500
-Subject: [PATCH] drm/i915: hush check crtc state
-
-This is _by far_ the most common backtrace for i915 on retrace.fp.o, and
-it's mostly useless noise. There's not enough context when it's generated
-to know if something actually went wrong. Downgrade the message to
-KMS debugging so we can still get it if we want it.
-
-Bugzilla: 1027037 1028785
-Upstream-status: http://lists.freedesktop.org/archives/intel-gfx/2013-November/035948.html
----
- drivers/gpu/drm/i915/intel_display.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index 8663c21093d1..361373cde02c 100644
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -10658,7 +10658,7 @@ check_crtc_state(struct drm_device *dev)
-
- if (active &&
- !intel_pipe_config_compare(dev, &crtc->config, &pipe_config)) {
-- WARN(1, "pipe state doesn't match!\n");
-+ DRM_DEBUG_KMS("pipe state doesn't match!\n");
- intel_dump_pipe_config(crtc, &pipe_config,
- "[hw state]");
- intel_dump_pipe_config(crtc, &crtc->config,
---
-2.1.0
-
diff --git a/drm-i915-tame-the-chattermouth-v2.patch b/drm-i915-tame-the-chattermouth-v2.patch
new file mode 100644
index 00000000..18a1b1b2
--- /dev/null
+++ b/drm-i915-tame-the-chattermouth-v2.patch
@@ -0,0 +1,544 @@
+From: Rob Clark <robdclark@gmail.com>
+Date: Mon, 15 Dec 2014 13:56:32 -0500
+Subject: [PATCH] drm/i915: tame the chattermouth (v2)
+
+Many distro's have mechanism in place to collect and automatically file
+bugs for failed WARN()s. And since i915 has a lot of hw state sanity
+checks which result in WARN(), it generates quite a lot of noise which
+is somewhat disconcerting to the end user.
+
+Separate out the internal hw-is-in-the-state-I-expected checks into
+I915_STATE_WARN()s and allow configuration via i915.verbose_checks module
+param about whether this will generate a full blown stacktrace or just
+DRM_ERROR(). The new moduleparam defaults to true, so by default there
+is no change in behavior. And even when disabled, you will still get
+an error message logged.
+
+v2: paint the macro names blue, clarify that the default behavior
+ remains the same as before
+
+Signed-off-by: Rob Clark <robdclark@gmail.com>
+Acked-by: Jani Nikula <jani.nikula@intel.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Backported-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ drivers/gpu/drm/i915/i915_drv.h | 30 ++++++++
+ drivers/gpu/drm/i915/i915_params.c | 5 ++
+ drivers/gpu/drm/i915/intel_display.c | 132 +++++++++++++++++------------------
+ drivers/gpu/drm/i915/intel_dp.c | 2 +-
+ 4 files changed, 102 insertions(+), 67 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
+index 346aee828dc3..8ac3d534434e 100644
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -57,6 +57,35 @@
+ #define DRIVER_DESC "Intel Graphics"
+ #define DRIVER_DATE "20140905"
+
++/* Use I915_STATE_WARN(x) and I915_STATE_WARN_ON() (rather than WARN() and
++ * WARN_ON()) for hw state sanity checks to check for unexpected conditions
++ * which may not necessarily be a user visible problem. This will either
++ * WARN() or DRM_ERROR() depending on the verbose_checks moduleparam, to
++ * enable distros and users to tailor their preferred amount of i915 abrt
++ * spam.
++ */
++#define I915_STATE_WARN(condition, format...) ({ \
++ int __ret_warn_on = !!(condition); \
++ if (unlikely(__ret_warn_on)) { \
++ if (i915.verbose_state_checks) \
++ __WARN_printf(format); \
++ else \
++ DRM_ERROR(format); \
++ } \
++ unlikely(__ret_warn_on); \
++})
++
++#define I915_STATE_WARN_ON(condition) ({ \
++ int __ret_warn_on = !!(condition); \
++ if (unlikely(__ret_warn_on)) { \
++ if (i915.verbose_state_checks) \
++ __WARN_printf("WARN_ON(" #condition ")\n"); \
++ else \
++ DRM_ERROR("WARN_ON(" #condition ")\n"); \
++ } \
++ unlikely(__ret_warn_on); \
++})
++
+ enum pipe {
+ INVALID_PIPE = -1,
+ PIPE_A = 0,
+@@ -2222,6 +2251,7 @@ struct i915_params {
+ bool disable_vtd_wa;
+ int use_mmio_flip;
+ bool mmio_debug;
++ bool verbose_state_checks;
+ };
+ extern struct i915_params i915 __read_mostly;
+
+diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
+index c91cb2033cc5..db07153b693f 100644
+--- a/drivers/gpu/drm/i915/i915_params.c
++++ b/drivers/gpu/drm/i915/i915_params.c
+@@ -51,6 +51,7 @@ struct i915_params i915 __read_mostly = {
+ .disable_vtd_wa = 0,
+ .use_mmio_flip = 0,
+ .mmio_debug = 0,
++ .verbose_state_checks = 1,
+ };
+
+ module_param_named(modeset, i915.modeset, int, 0400);
+@@ -173,3 +174,7 @@ module_param_named(mmio_debug, i915.mmio_debug, bool, 0600);
+ MODULE_PARM_DESC(mmio_debug,
+ "Enable the MMIO debug code (default: false). 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.");
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index cadc3bcf1de2..752dbe7ff017 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -1060,7 +1060,7 @@ void assert_pll(struct drm_i915_private *dev_priv,
+ reg = DPLL(pipe);
+ val = I915_READ(reg);
+ cur_state = !!(val & DPLL_VCO_ENABLE);
+- WARN(cur_state != state,
++ I915_STATE_WARN(cur_state != state,
+ "PLL state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
+ }
+@@ -1076,7 +1076,7 @@ static void assert_dsi_pll(struct drm_i915_private *dev_priv, bool state)
+ mutex_unlock(&dev_priv->dpio_lock);
+
+ cur_state = val & DSI_PLL_VCO_EN;
+- WARN(cur_state != state,
++ I915_STATE_WARN(cur_state != state,
+ "DSI PLL state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
+ }
+@@ -1107,7 +1107,7 @@ void assert_shared_dpll(struct drm_i915_private *dev_priv,
+ return;
+
+ cur_state = pll->get_hw_state(dev_priv, pll, &hw_state);
+- WARN(cur_state != state,
++ I915_STATE_WARN(cur_state != state,
+ "%s assertion failure (expected %s, current %s)\n",
+ pll->name, state_string(state), state_string(cur_state));
+ }
+@@ -1131,7 +1131,7 @@ static void assert_fdi_tx(struct drm_i915_private *dev_priv,
+ val = I915_READ(reg);
+ cur_state = !!(val & FDI_TX_ENABLE);
+ }
+- WARN(cur_state != state,
++ I915_STATE_WARN(cur_state != state,
+ "FDI TX state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
+ }
+@@ -1148,7 +1148,7 @@ static void assert_fdi_rx(struct drm_i915_private *dev_priv,
+ reg = FDI_RX_CTL(pipe);
+ val = I915_READ(reg);
+ cur_state = !!(val & FDI_RX_ENABLE);
+- WARN(cur_state != state,
++ I915_STATE_WARN(cur_state != state,
+ "FDI RX state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
+ }
+@@ -1171,7 +1171,7 @@ static void assert_fdi_tx_pll_enabled(struct drm_i915_private *dev_priv,
+
+ reg = FDI_TX_CTL(pipe);
+ val = I915_READ(reg);
+- WARN(!(val & FDI_TX_PLL_ENABLE), "FDI TX PLL assertion failure, should be active but is disabled\n");
++ I915_STATE_WARN(!(val & FDI_TX_PLL_ENABLE), "FDI TX PLL assertion failure, should be active but is disabled\n");
+ }
+
+ void assert_fdi_rx_pll(struct drm_i915_private *dev_priv,
+@@ -1184,7 +1184,7 @@ void assert_fdi_rx_pll(struct drm_i915_private *dev_priv,
+ reg = FDI_RX_CTL(pipe);
+ val = I915_READ(reg);
+ cur_state = !!(val & FDI_RX_PLL_ENABLE);
+- WARN(cur_state != state,
++ I915_STATE_WARN(cur_state != state,
+ "FDI RX PLL assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
+ }
+@@ -1226,7 +1226,7 @@ static void assert_panel_unlocked(struct drm_i915_private *dev_priv,
+ ((val & PANEL_UNLOCK_MASK) == PANEL_UNLOCK_REGS))
+ locked = false;
+
+- WARN(panel_pipe == pipe && locked,
++ I915_STATE_WARN(panel_pipe == pipe && locked,
+ "panel assertion failure, pipe %c regs locked\n",
+ pipe_name(pipe));
+ }
+@@ -1242,7 +1242,7 @@ static void assert_cursor(struct drm_i915_private *dev_priv,
+ else
+ cur_state = I915_READ(CURCNTR(pipe)) & CURSOR_MODE;
+
+- WARN(cur_state != state,
++ I915_STATE_WARN(cur_state != state,
+ "cursor on pipe %c assertion failure (expected %s, current %s)\n",
+ pipe_name(pipe), state_string(state), state_string(cur_state));
+ }
+@@ -1272,7 +1272,7 @@ void assert_pipe(struct drm_i915_private *dev_priv,
+ cur_state = !!(val & PIPECONF_ENABLE);
+ }
+
+- WARN(cur_state != state,
++ I915_STATE_WARN(cur_state != state,
+ "pipe %c assertion failure (expected %s, current %s)\n",
+ pipe_name(pipe), state_string(state), state_string(cur_state));
+ }
+@@ -1287,7 +1287,7 @@ static void assert_plane(struct drm_i915_private *dev_priv,
+ reg = DSPCNTR(plane);
+ val = I915_READ(reg);
+ cur_state = !!(val & DISPLAY_PLANE_ENABLE);
+- WARN(cur_state != state,
++ I915_STATE_WARN(cur_state != state,
+ "plane %c assertion failure (expected %s, current %s)\n",
+ plane_name(plane), state_string(state), state_string(cur_state));
+ }
+@@ -1307,7 +1307,7 @@ static void assert_planes_disabled(struct drm_i915_private *dev_priv,
+ if (INTEL_INFO(dev)->gen >= 4) {
+ reg = DSPCNTR(pipe);
+ val = I915_READ(reg);
+- WARN(val & DISPLAY_PLANE_ENABLE,
++ I915_STATE_WARN(val & DISPLAY_PLANE_ENABLE,
+ "plane %c assertion failure, should be disabled but not\n",
+ plane_name(pipe));
+ return;
+@@ -1319,7 +1319,7 @@ static void assert_planes_disabled(struct drm_i915_private *dev_priv,
+ val = I915_READ(reg);
+ cur_pipe = (val & DISPPLANE_SEL_PIPE_MASK) >>
+ DISPPLANE_SEL_PIPE_SHIFT;
+- WARN((val & DISPLAY_PLANE_ENABLE) && pipe == cur_pipe,
++ I915_STATE_WARN((val & DISPLAY_PLANE_ENABLE) && pipe == cur_pipe,
+ "plane %c assertion failure, should be off on pipe %c but is still active\n",
+ plane_name(i), pipe_name(pipe));
+ }
+@@ -1336,20 +1336,20 @@ static void assert_sprites_disabled(struct drm_i915_private *dev_priv,
+ for_each_sprite(pipe, sprite) {
+ reg = SPCNTR(pipe, sprite);
+ val = I915_READ(reg);
+- WARN(val & SP_ENABLE,
++ I915_STATE_WARN(val & SP_ENABLE,
+ "sprite %c assertion failure, should be off on pipe %c but is still active\n",
+ sprite_name(pipe, sprite), pipe_name(pipe));
+ }
+ } else if (INTEL_INFO(dev)->gen >= 7) {
+ reg = SPRCTL(pipe);
+ val = I915_READ(reg);
+- WARN(val & SPRITE_ENABLE,
++ I915_STATE_WARN(val & SPRITE_ENABLE,
+ "sprite %c assertion failure, should be off on pipe %c but is still active\n",
+ plane_name(pipe), pipe_name(pipe));
+ } else if (INTEL_INFO(dev)->gen >= 5) {
+ reg = DVSCNTR(pipe);
+ val = I915_READ(reg);
+- WARN(val & DVS_ENABLE,
++ I915_STATE_WARN(val & DVS_ENABLE,
+ "sprite %c assertion failure, should be off on pipe %c but is still active\n",
+ plane_name(pipe), pipe_name(pipe));
+ }
+@@ -1357,7 +1357,7 @@ static void assert_sprites_disabled(struct drm_i915_private *dev_priv,
+
+ static void assert_vblank_disabled(struct drm_crtc *crtc)
+ {
+- if (WARN_ON(drm_crtc_vblank_get(crtc) == 0))
++ if (I915_STATE_WARN_ON(drm_crtc_vblank_get(crtc) == 0))
+ drm_crtc_vblank_put(crtc);
+ }
+
+@@ -1366,12 +1366,12 @@ static void ibx_assert_pch_refclk_enabled(struct drm_i915_private *dev_priv)
+ u32 val;
+ bool enabled;
+
+- WARN_ON(!(HAS_PCH_IBX(dev_priv->dev) || HAS_PCH_CPT(dev_priv->dev)));
++ I915_STATE_WARN_ON(!(HAS_PCH_IBX(dev_priv->dev) || HAS_PCH_CPT(dev_priv->dev)));
+
+ val = I915_READ(PCH_DREF_CONTROL);
+ enabled = !!(val & (DREF_SSC_SOURCE_MASK | DREF_NONSPREAD_SOURCE_MASK |
+ DREF_SUPERSPREAD_SOURCE_MASK));
+- WARN(!enabled, "PCH refclk assertion failure, should be active but is disabled\n");
++ I915_STATE_WARN(!enabled, "PCH refclk assertion failure, should be active but is disabled\n");
+ }
+
+ static void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
+@@ -1384,7 +1384,7 @@ static void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
+ reg = PCH_TRANSCONF(pipe);
+ val = I915_READ(reg);
+ enabled = !!(val & TRANS_ENABLE);
+- WARN(enabled,
++ I915_STATE_WARN(enabled,
+ "transcoder assertion failed, should be off on pipe %c but is still active\n",
+ pipe_name(pipe));
+ }
+@@ -1464,11 +1464,11 @@ static void assert_pch_dp_disabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe, int reg, u32 port_sel)
+ {
+ u32 val = I915_READ(reg);
+- WARN(dp_pipe_enabled(dev_priv, pipe, port_sel, val),
++ I915_STATE_WARN(dp_pipe_enabled(dev_priv, pipe, port_sel, val),
+ "PCH DP (0x%08x) enabled on transcoder %c, should be disabled\n",
+ reg, pipe_name(pipe));
+
+- WARN(HAS_PCH_IBX(dev_priv->dev) && (val & DP_PORT_EN) == 0
++ I915_STATE_WARN(HAS_PCH_IBX(dev_priv->dev) && (val & DP_PORT_EN) == 0
+ && (val & DP_PIPEB_SELECT),
+ "IBX PCH dp port still using transcoder B\n");
+ }
+@@ -1477,11 +1477,11 @@ static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe, int reg)
+ {
+ u32 val = I915_READ(reg);
+- WARN(hdmi_pipe_enabled(dev_priv, pipe, val),
++ I915_STATE_WARN(hdmi_pipe_enabled(dev_priv, pipe, val),
+ "PCH HDMI (0x%08x) enabled on transcoder %c, should be disabled\n",
+ reg, pipe_name(pipe));
+
+- WARN(HAS_PCH_IBX(dev_priv->dev) && (val & SDVO_ENABLE) == 0
++ I915_STATE_WARN(HAS_PCH_IBX(dev_priv->dev) && (val & SDVO_ENABLE) == 0
+ && (val & SDVO_PIPE_B_SELECT),
+ "IBX PCH hdmi port still using transcoder B\n");
+ }
+@@ -1498,13 +1498,13 @@ static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv,
+
+ reg = PCH_ADPA;
+ val = I915_READ(reg);
+- WARN(adpa_pipe_enabled(dev_priv, pipe, val),
++ I915_STATE_WARN(adpa_pipe_enabled(dev_priv, pipe, val),
+ "PCH VGA enabled on transcoder %c, should be disabled\n",
+ pipe_name(pipe));
+
+ reg = PCH_LVDS;
+ val = I915_READ(reg);
+- WARN(lvds_pipe_enabled(dev_priv, pipe, val),
++ I915_STATE_WARN(lvds_pipe_enabled(dev_priv, pipe, val),
+ "PCH LVDS enabled on transcoder %c, should be disabled\n",
+ pipe_name(pipe));
+
+@@ -5152,25 +5152,25 @@ static void intel_connector_check_state(struct intel_connector *connector)
+ if (connector->mst_port)
+ return;
+
+- WARN(connector->base.dpms == DRM_MODE_DPMS_OFF,
++ I915_STATE_WARN(connector->base.dpms == DRM_MODE_DPMS_OFF,
+ "wrong connector dpms state\n");
+- WARN(connector->base.encoder != &encoder->base,
++ I915_STATE_WARN(connector->base.encoder != &encoder->base,
+ "active connector not linked to encoder\n");
+
+ if (encoder) {
+- WARN(!encoder->connectors_active,
++ I915_STATE_WARN(!encoder->connectors_active,
+ "encoder->connectors_active not set\n");
+
+ encoder_enabled = encoder->get_hw_state(encoder, &pipe);
+- WARN(!encoder_enabled, "encoder not enabled\n");
+- if (WARN_ON(!encoder->base.crtc))
++ I915_STATE_WARN(!encoder_enabled, "encoder not enabled\n");
++ if (I915_STATE_WARN_ON(!encoder->base.crtc))
+ return;
+
+ crtc = encoder->base.crtc;
+
+- WARN(!crtc->enabled, "crtc not enabled\n");
+- WARN(!to_intel_crtc(crtc)->active, "crtc not active\n");
+- WARN(pipe != to_intel_crtc(crtc)->pipe,
++ I915_STATE_WARN(!crtc->enabled, "crtc not enabled\n");
++ I915_STATE_WARN(!to_intel_crtc(crtc)->active, "crtc not active\n");
++ I915_STATE_WARN(pipe != to_intel_crtc(crtc)->pipe,
+ "encoder active on the wrong pipe\n");
+ }
+ }
+@@ -7523,24 +7523,24 @@ static void assert_can_disable_lcpll(struct drm_i915_private *dev_priv)
+ struct intel_crtc *crtc;
+
+ for_each_intel_crtc(dev, crtc)
+- WARN(crtc->active, "CRTC for pipe %c enabled\n",
++ I915_STATE_WARN(crtc->active, "CRTC for pipe %c enabled\n",
+ pipe_name(crtc->pipe));
+
+- WARN(I915_READ(HSW_PWR_WELL_DRIVER), "Power well on\n");
+- WARN(I915_READ(SPLL_CTL) & SPLL_PLL_ENABLE, "SPLL enabled\n");
+- WARN(I915_READ(WRPLL_CTL1) & WRPLL_PLL_ENABLE, "WRPLL1 enabled\n");
+- WARN(I915_READ(WRPLL_CTL2) & WRPLL_PLL_ENABLE, "WRPLL2 enabled\n");
+- WARN(I915_READ(PCH_PP_STATUS) & PP_ON, "Panel power on\n");
+- WARN(I915_READ(BLC_PWM_CPU_CTL2) & BLM_PWM_ENABLE,
++ I915_STATE_WARN(I915_READ(HSW_PWR_WELL_DRIVER), "Power well on\n");
++ I915_STATE_WARN(I915_READ(SPLL_CTL) & SPLL_PLL_ENABLE, "SPLL enabled\n");
++ I915_STATE_WARN(I915_READ(WRPLL_CTL1) & WRPLL_PLL_ENABLE, "WRPLL1 enabled\n");
++ I915_STATE_WARN(I915_READ(WRPLL_CTL2) & WRPLL_PLL_ENABLE, "WRPLL2 enabled\n");
++ I915_STATE_WARN(I915_READ(PCH_PP_STATUS) & PP_ON, "Panel power on\n");
++ I915_STATE_WARN(I915_READ(BLC_PWM_CPU_CTL2) & BLM_PWM_ENABLE,
+ "CPU PWM1 enabled\n");
+ if (IS_HASWELL(dev))
+- WARN(I915_READ(HSW_BLC_PWM2_CTL) & BLM_PWM_ENABLE,
++ I915_STATE_WARN(I915_READ(HSW_BLC_PWM2_CTL) & BLM_PWM_ENABLE,
+ "CPU PWM2 enabled\n");
+- WARN(I915_READ(BLC_PWM_PCH_CTL1) & BLM_PCH_PWM_ENABLE,
++ I915_STATE_WARN(I915_READ(BLC_PWM_PCH_CTL1) & BLM_PCH_PWM_ENABLE,
+ "PCH PWM1 enabled\n");
+- WARN(I915_READ(UTIL_PIN_CTL) & UTIL_PIN_ENABLE,
++ I915_STATE_WARN(I915_READ(UTIL_PIN_CTL) & UTIL_PIN_ENABLE,
+ "Utility pin enabled\n");
+- WARN(I915_READ(PCH_GTC_CTL) & PCH_GTC_ENABLE, "PCH GTC enabled\n");
++ I915_STATE_WARN(I915_READ(PCH_GTC_CTL) & PCH_GTC_ENABLE, "PCH GTC enabled\n");
+
+ /*
+ * In theory we can still leave IRQs enabled, as long as only the HPD
+@@ -7548,7 +7548,7 @@ static void assert_can_disable_lcpll(struct drm_i915_private *dev_priv)
+ * gen-specific and since we only disable LCPLL after we fully disable
+ * the interrupts, the check below should be enough.
+ */
+- WARN(intel_irqs_enabled(dev_priv), "IRQs enabled\n");
++ I915_STATE_WARN(intel_irqs_enabled(dev_priv), "IRQs enabled\n");
+ }
+
+ static uint32_t hsw_read_dcomp(struct drm_i915_private *dev_priv)
+@@ -10838,7 +10838,7 @@ check_connector_state(struct drm_device *dev)
+ * ->get_hw_state callbacks. */
+ intel_connector_check_state(connector);
+
+- WARN(&connector->new_encoder->base != connector->base.encoder,
++ I915_STATE_WARN(&connector->new_encoder->base != connector->base.encoder,
+ "connector's staged encoder doesn't match current encoder\n");
+ }
+ }
+@@ -10858,9 +10858,9 @@ check_encoder_state(struct drm_device *dev)
+ encoder->base.base.id,
+ encoder->base.name);
+
+- WARN(&encoder->new_crtc->base != encoder->base.crtc,
++ I915_STATE_WARN(&encoder->new_crtc->base != encoder->base.crtc,
+ "encoder's stage crtc doesn't match current crtc\n");
+- WARN(encoder->connectors_active && !encoder->base.crtc,
++ I915_STATE_WARN(encoder->connectors_active && !encoder->base.crtc,
+ "encoder's active_connectors set, but no crtc\n");
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+@@ -10879,19 +10879,19 @@ check_encoder_state(struct drm_device *dev)
+ if (!enabled && encoder->base.encoder_type == DRM_MODE_ENCODER_DPMST)
+ continue;
+
+- WARN(!!encoder->base.crtc != enabled,
++ I915_STATE_WARN(!!encoder->base.crtc != enabled,
+ "encoder's enabled state mismatch "
+ "(expected %i, found %i)\n",
+ !!encoder->base.crtc, enabled);
+- WARN(active && !encoder->base.crtc,
++ I915_STATE_WARN(active && !encoder->base.crtc,
+ "active encoder with no crtc\n");
+
+- WARN(encoder->connectors_active != active,
++ I915_STATE_WARN(encoder->connectors_active != active,
+ "encoder's computed active state doesn't match tracked active state "
+ "(expected %i, found %i)\n", active, encoder->connectors_active);
+
+ active = encoder->get_hw_state(encoder, &pipe);
+- WARN(active != encoder->connectors_active,
++ I915_STATE_WARN(active != encoder->connectors_active,
+ "encoder's hw state doesn't match sw tracking "
+ "(expected %i, found %i)\n",
+ encoder->connectors_active, active);
+@@ -10900,7 +10900,7 @@ check_encoder_state(struct drm_device *dev)
+ continue;
+
+ tracked_pipe = to_intel_crtc(encoder->base.crtc)->pipe;
+- WARN(active && pipe != tracked_pipe,
++ I915_STATE_WARN(active && pipe != tracked_pipe,
+ "active encoder's pipe doesn't match"
+ "(expected %i, found %i)\n",
+ tracked_pipe, pipe);
+@@ -10925,7 +10925,7 @@ check_crtc_state(struct drm_device *dev)
+ DRM_DEBUG_KMS("[CRTC:%d]\n",
+ crtc->base.base.id);
+
+- WARN(crtc->active && !crtc->base.enabled,
++ I915_STATE_WARN(crtc->active && !crtc->base.enabled,
+ "active crtc, but not enabled in sw tracking\n");
+
+ for_each_intel_encoder(dev, encoder) {
+@@ -10936,10 +10936,10 @@ check_crtc_state(struct drm_device *dev)
+ active = true;
+ }
+
+- WARN(active != crtc->active,
++ I915_STATE_WARN(active != crtc->active,
+ "crtc's computed active state doesn't match tracked active state "
+ "(expected %i, found %i)\n", active, crtc->active);
+- WARN(enabled != crtc->base.enabled,
++ I915_STATE_WARN(enabled != crtc->base.enabled,
+ "crtc's computed enabled state doesn't match tracked enabled state "
+ "(expected %i, found %i)\n", enabled, crtc->base.enabled);
+
+@@ -10959,13 +10959,13 @@ check_crtc_state(struct drm_device *dev)
+ encoder->get_config(encoder, &pipe_config);
+ }
+
+- WARN(crtc->active != active,
++ I915_STATE_WARN(crtc->active != active,
+ "crtc active state doesn't match with hw state "
+ "(expected %i, found %i)\n", crtc->active, active);
+
+ if (active &&
+ !intel_pipe_config_compare(dev, &crtc->config, &pipe_config)) {
+- WARN(1, "pipe state doesn't match!\n");
++ I915_STATE_WARN(1, "pipe state doesn't match!\n");
+ intel_dump_pipe_config(crtc, &pipe_config,
+ "[hw state]");
+ intel_dump_pipe_config(crtc, &crtc->config,
+@@ -10993,14 +10993,14 @@ check_shared_dpll_state(struct drm_device *dev)
+
+ active = pll->get_hw_state(dev_priv, pll, &dpll_hw_state);
+
+- WARN(pll->active > pll->refcount,
++ I915_STATE_WARN(pll->active > pll->refcount,
+ "more active pll users than references: %i vs %i\n",
+ pll->active, pll->refcount);
+- WARN(pll->active && !pll->on,
++ I915_STATE_WARN(pll->active && !pll->on,
+ "pll in active use but not on in sw tracking\n");
+- WARN(pll->on && !pll->active,
++ I915_STATE_WARN(pll->on && !pll->active,
+ "pll in on but not on in use in sw tracking\n");
+- WARN(pll->on != active,
++ I915_STATE_WARN(pll->on != active,
+ "pll on state mismatch (expected %i, found %i)\n",
+ pll->on, active);
+
+@@ -11010,14 +11010,14 @@ check_shared_dpll_state(struct drm_device *dev)
+ if (crtc->active && intel_crtc_to_shared_dpll(crtc) == pll)
+ active_crtcs++;
+ }
+- WARN(pll->active != active_crtcs,
++ I915_STATE_WARN(pll->active != active_crtcs,
+ "pll active crtcs mismatch (expected %i, found %i)\n",
+ pll->active, active_crtcs);
+- WARN(pll->refcount != enabled_crtcs,
++ I915_STATE_WARN(pll->refcount != enabled_crtcs,
+ "pll enabled crtcs mismatch (expected %i, found %i)\n",
+ pll->refcount, enabled_crtcs);
+
+- WARN(pll->on && memcmp(&pll->hw_state, &dpll_hw_state,
++ I915_STATE_WARN(pll->on && memcmp(&pll->hw_state, &dpll_hw_state,
+ sizeof(dpll_hw_state)),
+ "pll hw state mismatch\n");
+ }
+diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
+index 4bcd91757321..4b5d6c5ee544 100644
+--- a/drivers/gpu/drm/i915/intel_dp.c
++++ b/drivers/gpu/drm/i915/intel_dp.c
+@@ -1501,7 +1501,7 @@ static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
+ if (!is_edp(intel_dp))
+ return;
+
+- WARN(!intel_dp->want_panel_vdd, "eDP VDD not forced on");
++ I915_STATE_WARN(!intel_dp->want_panel_vdd, "eDP VDD not forced on");
+
+ intel_dp->want_panel_vdd = false;
+
+--
+2.1.0
+
diff --git a/kernel.spec b/kernel.spec
index 5ad4a857..1375dbd6 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -42,7 +42,7 @@ Summary: The Linux kernel
# For non-released -rc kernels, this will be appended after the rcX and
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
#
-%global baserelease 200
+%global baserelease 201
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -553,8 +553,8 @@ Patch1019: Add-sysrq-option-to-disable-secure-boot-mode.patch
# nouveau + drm fixes
# intel drm is all merged upstream
-Patch1826: drm-i915-hush-check-crtc-state.patch
-Patch1827: drm-i915-Don-t-WARN-in-edp_panel_vdd_off.patch
+Patch1826: drm-i915-tame-the-chattermouth-v2.patch
+Patch1827: drm-i915-Disable-verbose-state-checks.patch
# Quiet boot fixes
@@ -1321,8 +1321,8 @@ ApplyPatch Add-sysrq-option-to-disable-secure-boot-mode.patch
# Nouveau DRM
# Intel DRM
-ApplyPatch drm-i915-hush-check-crtc-state.patch
-ApplyPatch drm-i915-Don-t-WARN-in-edp_panel_vdd_off.patch
+ApplyPatch drm-i915-tame-the-chattermouth-v2.patch
+ApplyPatch drm-i915-Disable-verbose-state-checks.patch
# Radeon DRM
@@ -2254,6 +2254,10 @@ fi
# ||----w |
# || ||
%changelog
+* Thu Jan 29 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Backport patch from Rob Clark to toggle i915 state machine checks
+- Disable i915 state checks
+
* Tue Jan 27 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 3.18.4-200
- Linux v3.18.4