On Wed, May 31, 2017 at 05:42:36PM +0200, Maarten Lankhorst wrote: > On some systems there can be a race condition in which no crtc state is > added to the first atomic commit. This results in all crtc's having a > null DDB allocation, causing a FIFO underrun on any update until the > first modeset. > > Changes since v1: > - Do not take the connection_mutex, this is already done below. > > Reported-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > Inspired-by: Mahesh Kumar <mahesh1.kumar@xxxxxxxxx> > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > Fixes: 98d39494d375 ("drm/i915/gen9: Compute DDB allocation at atomic > check time (v4)") > Cc: <stable@xxxxxxxxxxxxxxx> # v4.8+ > Cc: Mahesh Kumar <mahesh1.kumar@xxxxxxxxx> > Cc: Matt Roper <matthew.d.roper@xxxxxxxxx> Reviewed-by: Matt Roper <matthew.d.roper@xxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_pm.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c > index 936eef1634c7..fce4bc5ccc99 100644 > --- a/drivers/gpu/drm/i915/intel_pm.c > +++ b/drivers/gpu/drm/i915/intel_pm.c > @@ -4819,11 +4819,19 @@ skl_compute_wm(struct drm_atomic_state *state) > struct drm_crtc_state *cstate; > struct intel_atomic_state *intel_state = to_intel_atomic_state(state); > struct skl_wm_values *results = &intel_state->wm_results; > + struct drm_device *dev = state->dev; > struct skl_pipe_wm *pipe_wm; > bool changed = false; > int ret, i; > > /* > + * When we distrust bios wm we always need to recompute to set the > + * expected DDB allocations for each CRTC. > + */ > + if (to_i915(dev)->wm.distrust_bios_wm) > + changed = true; > + > + /* > * If this transaction isn't actually touching any CRTC's, don't > * bother with watermark calculation. Note that if we pass this > * test, we're guaranteed to hold at least one CRTC state mutex, > @@ -4833,6 +4841,7 @@ skl_compute_wm(struct drm_atomic_state *state) > */ > for_each_new_crtc_in_state(state, crtc, cstate, i) > changed = true; > + > if (!changed) > return 0; > > -- > 2.11.0 > -- Matt Roper Graphics Software Engineer IoTG Platform Enabling & Development Intel Corporation (916) 356-2795