For me this patch makes sense and swith to fbcon is faster, so: Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> with this -collector is "empty"... at least until next -testing update. On Mon, Oct 7, 2013 at 5:15 PM, Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> wrote: > From: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > > A simple modeset, where we only wish to switch over to a new framebuffer > such as the transition from fbcon to X, takes around 30-60ms. This is > due to three factors: > > 1. We need to make sure the fb->obj is in the display domain, which > incurs a cache flush to ensure no dirt is left on the scanout. > > 2. We need to flush any pending rendering before performing the mmio > so that the frame is complete before it is shown. > > 3. We currently wait for the vblank after the mmio to be sure that the > old fb is no longer being shown before releasing it. > > (1) can only be eliminated by userspace preparing the fb->obj in advance > to already be in the display domain. This can be done through use of the > create2 ioctl, or by reusing an existing fb->obj. > > However, (2) and (3) are already solved by the existing page flip > mechanism, and it is surprisingly trivial to wire them up for use in the > set-base fast path. Though it can be argued that this represents a > subtle ABI break in that the set_config ioctl now returns before the old > framebuffer is unpinned. The danger is that userspace will start to > modify it before it is no longer being shown, however we should be able > to prevent that through proper domain tracking. > > By combining all of the above, we can achieve an instaneous set_config: > > [ 6.601] (II) intel(0): switch to mode 2560x1440@60.0 on pipe 0 using DP2, position (0, 0), rotation normal > [ 6.601] (II) intel(0): Setting screen physical size to 677 x 381 > > v2 (by Vivi): page_flip_flag was added to intel_crtc_page_flip > in a previous commit. using 0. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_display.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index b9cede7..bc47f1e 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -9569,10 +9569,13 @@ static int intel_crtc_set_config(struct drm_mode_set *set) > ret = intel_set_mode(set->crtc, set->mode, > set->x, set->y, set->fb); > } else if (config->fb_changed) { > - intel_crtc_wait_for_pending_flips(set->crtc); > - > - ret = intel_pipe_set_base(set->crtc, > - set->x, set->y, set->fb); > + if (to_intel_framebuffer(set->fb)->obj->ring == NULL || > + save_set.x != set->x || save_set.y != set->y || > + intel_crtc_page_flip(set->crtc, set->fb, NULL, 0)) { > + intel_crtc_wait_for_pending_flips(set->crtc); > + ret = intel_pipe_set_base(set->crtc, > + set->x, set->y, set->fb); > + } > } > > if (ret) { > -- > 1.8.1.4 > -- Rodrigo Vivi Blog: http://blog.vivi.eng.br _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx