Message ID | 20200717211345.26851-2-ville.syrjala@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Finish (de)gamma readout | expand |
> -----Original Message----- > From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville > Syrjala > Sent: Saturday, July 18, 2020 2:43 AM > To: intel-gfx@lists.freedesktop.org > Subject: [Intel-gfx] [PATCH 01/20] drm/i915: Fix state checker > hw.active/hw.enable readout > > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Previously intel_dump_pipe_config() used to dump the full crtc state whether or > not the crtc was logically enabled or not. As that meant occasionally dumping > confusing stale garbage I changed it to check whether the crtc is logically enabled > or not. However I did not realize that the state checker readout code does not > populate crtc_state.hw.{active,enabled}. Hence the state checker dump would > only give us a full dump of the sw state but not the hw state. Fix that by > populating those bits of the hw state as well. Looks good. Reviewed-by: Uma Shankar <uma.shankar@intel.com> > Fixes: 10d75f5428fd ("drm/i915: Fix plane state dumps") > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/display/intel_display.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > b/drivers/gpu/drm/i915/display/intel_display.c > index 729ec6e0d43a..ae0af452d776 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -14244,7 +14244,6 @@ verify_crtc_state(struct intel_crtc *crtc, > struct intel_encoder *encoder; > struct intel_crtc_state *pipe_config = old_crtc_state; > struct drm_atomic_state *state = old_crtc_state->uapi.state; > - bool active; > > __drm_atomic_helper_crtc_destroy_state(&old_crtc_state->uapi); > intel_crtc_free_hw_state(old_crtc_state); > @@ -14254,16 +14253,19 @@ verify_crtc_state(struct intel_crtc *crtc, > drm_dbg_kms(&dev_priv->drm, "[CRTC:%d:%s]\n", crtc->base.base.id, > crtc->base.name); > > - active = dev_priv->display.get_pipe_config(crtc, pipe_config); > + pipe_config->hw.enable = new_crtc_state->hw.enable; > + > + pipe_config->hw.active = > + dev_priv->display.get_pipe_config(crtc, pipe_config); > > /* we keep both pipes enabled on 830 */ > - if (IS_I830(dev_priv)) > - active = new_crtc_state->hw.active; > + if (IS_I830(dev_priv) && pipe_config->hw.active) > + pipe_config->hw.active = new_crtc_state->hw.active; > > - I915_STATE_WARN(new_crtc_state->hw.active != active, > + I915_STATE_WARN(new_crtc_state->hw.active != pipe_config->hw.active, > "crtc active state doesn't match with hw state " > "(expected %i, found %i)\n", > - new_crtc_state->hw.active, active); > + new_crtc_state->hw.active, pipe_config->hw.active); > > I915_STATE_WARN(crtc->active != new_crtc_state->hw.active, > "transitional active state does not match atomic hw state > " > @@ -14272,6 +14274,7 @@ verify_crtc_state(struct intel_crtc *crtc, > > for_each_encoder_on_crtc(dev, &crtc->base, encoder) { > enum pipe pipe; > + bool active; > > active = encoder->get_hw_state(encoder, &pipe); > I915_STATE_WARN(active != new_crtc_state->hw.active, > -- > 2.26.2 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 729ec6e0d43a..ae0af452d776 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -14244,7 +14244,6 @@ verify_crtc_state(struct intel_crtc *crtc, struct intel_encoder *encoder; struct intel_crtc_state *pipe_config = old_crtc_state; struct drm_atomic_state *state = old_crtc_state->uapi.state; - bool active; __drm_atomic_helper_crtc_destroy_state(&old_crtc_state->uapi); intel_crtc_free_hw_state(old_crtc_state); @@ -14254,16 +14253,19 @@ verify_crtc_state(struct intel_crtc *crtc, drm_dbg_kms(&dev_priv->drm, "[CRTC:%d:%s]\n", crtc->base.base.id, crtc->base.name); - active = dev_priv->display.get_pipe_config(crtc, pipe_config); + pipe_config->hw.enable = new_crtc_state->hw.enable; + + pipe_config->hw.active = + dev_priv->display.get_pipe_config(crtc, pipe_config); /* we keep both pipes enabled on 830 */ - if (IS_I830(dev_priv)) - active = new_crtc_state->hw.active; + if (IS_I830(dev_priv) && pipe_config->hw.active) + pipe_config->hw.active = new_crtc_state->hw.active; - I915_STATE_WARN(new_crtc_state->hw.active != active, + I915_STATE_WARN(new_crtc_state->hw.active != pipe_config->hw.active, "crtc active state doesn't match with hw state " "(expected %i, found %i)\n", - new_crtc_state->hw.active, active); + new_crtc_state->hw.active, pipe_config->hw.active); I915_STATE_WARN(crtc->active != new_crtc_state->hw.active, "transitional active state does not match atomic hw state " @@ -14272,6 +14274,7 @@ verify_crtc_state(struct intel_crtc *crtc, for_each_encoder_on_crtc(dev, &crtc->base, encoder) { enum pipe pipe; + bool active; active = encoder->get_hw_state(encoder, &pipe); I915_STATE_WARN(active != new_crtc_state->hw.active,