On Fri, 07 Nov 2014 11:41:48 +0200 Ander Conselvan de Oliveira <conselvan2@xxxxxxxxx> wrote: > On 11/06/2014 12:26 AM, Jesse Barnes wrote: > > This will allow us to consult more info before deciding whether to flip > > or do a full mode set. > > > > v2: > > - don't use uninitialized or incorrect pipe masks in set_config > > failure path (Ander) > > v3: > > - fixup for pipe_config changes in compute_config (Jesse) > > > > Signed-off-by: Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> > > --- > > drivers/gpu/drm/i915/intel_display.c | 36 +++++++++++++++++++++++++++++++++--- > > 1 file changed, 33 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > > index a3ebab8..cb96f11 100644 > > --- a/drivers/gpu/drm/i915/intel_display.c > > +++ b/drivers/gpu/drm/i915/intel_display.c > > @@ -11178,6 +11178,8 @@ static int intel_crtc_set_config(struct drm_mode_set *set) > > struct drm_device *dev; > > struct drm_mode_set save_set; > > struct intel_set_config *config; > > + struct intel_crtc_config *pipe_config; > > + unsigned modeset_pipes, prepare_pipes, disable_pipes; > > int ret; > > > > BUG_ON(!set); > > @@ -11223,9 +11225,23 @@ static int intel_crtc_set_config(struct drm_mode_set *set) > > if (ret) > > goto fail; > > > > + pipe_config = intel_modeset_compute_config(set->crtc, set->mode, > > + set->fb, > > + &modeset_pipes, > > + &prepare_pipes, > > + &disable_pipes); > > + if (IS_ERR(pipe_config)) > > + goto fail; > > + > > + /* set_mode will free it in the mode_changed case */ > > + if (!config->mode_changed) > > + kfree(pipe_config); > > + > > if (config->mode_changed) { > > - ret = intel_set_mode(set->crtc, set->mode, > > - set->x, set->y, set->fb); > > + ret = intel_set_mode_pipes(set->crtc, set->mode, > > + set->x, set->y, set->fb, pipe_config, > > + modeset_pipes, prepare_pipes, > > + disable_pipes); > > } else if (config->fb_changed) { > > struct intel_crtc *intel_crtc = to_intel_crtc(set->crtc); > > > > @@ -13198,6 +13214,20 @@ void intel_modeset_setup_hw_state(struct drm_device *dev, > > for_each_pipe(dev_priv, pipe) { > > struct drm_crtc *crtc = > > dev_priv->pipe_to_crtc_mapping[pipe]; > > + struct intel_crtc_config *pipe_config; > > + unsigned modeset_pipes, prepare_pipes, disable_pipes; > > + > > + pipe_config = intel_modeset_compute_config(crtc, > > + &crtc->mode, > > + crtc->primary->fb, > > + &modeset_pipes, > > + &prepare_pipes, > > + &disable_pipes); > > + if (IS_ERR(pipe_config)) { > > + DRM_DEBUG_KMS("prepare failed\n"); > > + kfree(pipe_config); > > + goto out; > > + } > > > > intel_set_mode(crtc, &crtc->mode, crtc->x, crtc->y, > > crtc->primary->fb); > > Did you mean to convert this to intel_set_mode_pipes()? Since you > changed intel_set_mode() to do exactly the same thing as above, the > whole hunk seems unnecessary unless you really care about logging that > it was the prepare step that failed. Ah yeah forgot to drop the above bits. I think it's easier to just call set_mode here rather than duplicating more compute_config bits. I'll do that. Thanks, -- Jesse Barnes, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx