Message ID | 20210219191623.163775-1-jose.souza@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915/display: Read planes watermarks during initial state readout | expand |
On Fri, Feb 19, 2021 at 11:16:23AM -0800, José Roberto de Souza wrote: > Without this readout all plane watermarks will be kept at zero in the > initial state readount causing two problems. > > All active planes will always have their watermarks programmed > again, even if what firmware programmed matches with the sanitized > state during driver takeover. > > State mismatch errors in disabled planes as watermarks will erroneous > match with the calculated state if firmware left watermark registers > with non-zero values. > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > --- > drivers/gpu/drm/i915/display/intel_display.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index d0da88751c72..14fba4411be7 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -13620,6 +13620,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev) > drm_calc_timestamping_constants(&slave->base, > &slave_crtc_state->hw.adjusted_mode); > } > + > + skl_pipe_wm_get_hw_state(crtc, &crtc_state->wm.skl.optimal); Strange. skl_wm_get_hw_state() should be doing this already. > } > } > > -- > 2.30.1
On Fri, 2021-02-19 at 21:46 +0200, Ville Syrjälä wrote: > On Fri, Feb 19, 2021 at 11:16:23AM -0800, José Roberto de Souza wrote: > > Without this readout all plane watermarks will be kept at zero in the > > initial state readount causing two problems. > > > > All active planes will always have their watermarks programmed > > again, even if what firmware programmed matches with the sanitized > > state during driver takeover. > > > > State mismatch errors in disabled planes as watermarks will erroneous > > match with the calculated state if firmware left watermark registers > > with non-zero values. > > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > > --- > > drivers/gpu/drm/i915/display/intel_display.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > index d0da88751c72..14fba4411be7 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > @@ -13620,6 +13620,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev) > > drm_calc_timestamping_constants(&slave->base, > > &slave_crtc_state->hw.adjusted_mode); > > } > > + > > + skl_pipe_wm_get_hw_state(crtc, &crtc_state->wm.skl.optimal); > > Strange. skl_wm_get_hw_state() should be doing this already. It is only doing some ddb readouts noting related to plane watermarks, maybe call skl_pipe_wm_get_hw_state() from there would be better? > > > } > > } > > > > > > > > > > -- > > 2.30.1 >
On Fri, Feb 19, 2021 at 08:16:25PM +0000, Souza, Jose wrote: > On Fri, 2021-02-19 at 21:46 +0200, Ville Syrjälä wrote: > > On Fri, Feb 19, 2021 at 11:16:23AM -0800, José Roberto de Souza wrote: > > > Without this readout all plane watermarks will be kept at zero in the > > > initial state readount causing two problems. > > > > > > All active planes will always have their watermarks programmed > > > again, even if what firmware programmed matches with the sanitized > > > state during driver takeover. > > > > > > State mismatch errors in disabled planes as watermarks will erroneous > > > match with the calculated state if firmware left watermark registers > > > with non-zero values. > > > > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > > > --- > > > drivers/gpu/drm/i915/display/intel_display.c | 2 ++ > > > 1 file changed, 2 insertions(+) > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > > index d0da88751c72..14fba4411be7 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > @@ -13620,6 +13620,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev) > > > drm_calc_timestamping_constants(&slave->base, > > > &slave_crtc_state->hw.adjusted_mode); > > > } > > > + > > > + skl_pipe_wm_get_hw_state(crtc, &crtc_state->wm.skl.optimal); > > > > Strange. skl_wm_get_hw_state() should be doing this already. > > It is only doing some ddb readouts noting related to plane watermarks, maybe call skl_pipe_wm_get_hw_state() from there would be better? The call is definitely there in my copy of the code: skl_wm_get_hw_state(struct drm_i915_private *dev_priv) { struct intel_dbuf_state *dbuf_state = to_intel_dbuf_state(dev_priv->dbuf.obj.state); struct intel_crtc *crtc; for_each_intel_crtc(&dev_priv->drm, crtc) { struct intel_crtc_state *crtc_state = to_intel_crtc_state(crtc->base.state); enum pipe pipe = crtc->pipe; enum plane_id plane_id; skl_pipe_wm_get_hw_state(crtc, &crtc_state->wm.skl.optimal); ...
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index d0da88751c72..14fba4411be7 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -13620,6 +13620,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev) drm_calc_timestamping_constants(&slave->base, &slave_crtc_state->hw.adjusted_mode); } + + skl_pipe_wm_get_hw_state(crtc, &crtc_state->wm.skl.optimal); } }
Without this readout all plane watermarks will be kept at zero in the initial state readount causing two problems. All active planes will always have their watermarks programmed again, even if what firmware programmed matches with the sanitized state during driver takeover. State mismatch errors in disabled planes as watermarks will erroneous match with the calculated state if firmware left watermark registers with non-zero values. Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: José Roberto de Souza <jose.souza@intel.com> --- drivers/gpu/drm/i915/display/intel_display.c | 2 ++ 1 file changed, 2 insertions(+)