From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Damien Lespiau <damien.lespiau@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v4] drm/i915/skl: Implement the skl version of MMIO flips
Date: Thu, 20 Nov 2014 16:45:52 +0200 [thread overview]
Message-ID: <20141120144552.GX10649@intel.com> (raw)
In-Reply-To: <1416491315-4031-1-git-send-email-damien.lespiau@intel.com>
On Thu, Nov 20, 2014 at 01:48:35PM +0000, Damien Lespiau wrote:
> Because the plane registers are different in Skylake we need to adapt
> the MMIO code as well.
>
> v2: Don't introduce yet another vfunc when the direction is do
> consolidate the plane updates to use the same code path (Daniel)
>
> v3:
> - Use enum pipe instead of int (Ville)
> - Also update PLANE_STRIDE when the tiling has changed (Ville)
> - Put intel_mark_page_flip_active() in the shared code (Damien)
>
> v4:
> - Remove unused variable
>
> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Looks OK. I'm not super happy about looking at plane->fb here, but the
code already did that. And it should work as long as we don't allow
queuing multiple flips and the plane->fb gets update after the pending
flip wait. But as the comment now says this is a temporary solution and
should hopefully get sorted out in the end.
The patch seems whitespace damaged though (lots of spaces where tabs
should be). With that fixed:
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_display.c | 64 ++++++++++++++++++++++++++++++++----
> 1 file changed, 57 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index c0af4c6..9a52d7e 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -9436,22 +9436,50 @@ static bool use_mmio_flip(struct intel_engine_cs *ring,
> return ring != obj->ring;
> }
>
> -static void intel_do_mmio_flip(struct intel_crtc *intel_crtc)
> +static void skl_do_mmio_flip(struct intel_crtc *intel_crtc)
> +{
> + struct drm_device *dev = intel_crtc->base.dev;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> + struct drm_framebuffer *fb = intel_crtc->base.primary->fb;
> + struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
> + struct drm_i915_gem_object *obj = intel_fb->obj;
> + const enum pipe pipe = intel_crtc->pipe;
> + u32 ctl, stride;
> +
> + ctl = I915_READ(PLANE_CTL(pipe, 0));
> + ctl &= ~PLANE_CTL_TILED_MASK;
> + if (obj->tiling_mode == I915_TILING_X)
> + ctl |= PLANE_CTL_TILED_X;
> +
> + /*
> + * The stride is either expressed as a multiple of 64 bytes chunks for
> + * linear buffers or in number of tiles for tiled buffers.
> + */
> + stride = fb->pitches[0] >> 6;
> + if (obj->tiling_mode == I915_TILING_X)
> + stride = fb->pitches[0] >> 9; /* X tiles are 512 bytes wide */
> +
> + /*
> + * Both PLANE_CTL and PLANE_STRIDE are not updated on vblank but on
> + * PLANE_SURF updates, the update is then guaranteed to be atomic.
> + */
> + I915_WRITE(PLANE_CTL(pipe, 0), ctl);
> + I915_WRITE(PLANE_STRIDE(pipe, 0), stride);
> +
> + I915_WRITE(PLANE_SURF(pipe, 0), intel_crtc->unpin_work->gtt_offset);
> + POSTING_READ(PLANE_SURF(pipe, 0));
> +}
> +
> +static void ilk_do_mmio_flip(struct intel_crtc *intel_crtc)
> {
> struct drm_device *dev = intel_crtc->base.dev;
> struct drm_i915_private *dev_priv = dev->dev_private;
> struct intel_framebuffer *intel_fb =
> to_intel_framebuffer(intel_crtc->base.primary->fb);
> struct drm_i915_gem_object *obj = intel_fb->obj;
> - bool atomic_update;
> - u32 start_vbl_count;
> u32 dspcntr;
> u32 reg;
>
> - intel_mark_page_flip_active(intel_crtc);
> -
> - atomic_update = intel_pipe_update_start(intel_crtc, &start_vbl_count);
> -
> reg = DSPCNTR(intel_crtc->plane);
> dspcntr = I915_READ(reg);
>
> @@ -9466,6 +9494,28 @@ static void intel_do_mmio_flip(struct intel_crtc *intel_crtc)
> intel_crtc->unpin_work->gtt_offset);
> POSTING_READ(DSPSURF(intel_crtc->plane));
>
> +}
> +
> +/*
> + * XXX: This is the temporary way to update the plane registers until we get
> + * around to using the usual plane update functions for MMIO flips
> + */
> +static void intel_do_mmio_flip(struct intel_crtc *intel_crtc)
> +{
> + struct drm_device *dev = intel_crtc->base.dev;
> + bool atomic_update;
> + u32 start_vbl_count;
> +
> + intel_mark_page_flip_active(intel_crtc);
> +
> + atomic_update = intel_pipe_update_start(intel_crtc, &start_vbl_count);
> +
> + if (INTEL_INFO(dev)->gen >= 9)
> + skl_do_mmio_flip(intel_crtc);
> + else
> + /* use_mmio_flip() retricts MMIO flips to ilk+ */
> + ilk_do_mmio_flip(intel_crtc);
> +
> if (atomic_update)
> intel_pipe_update_end(intel_crtc, start_vbl_count);
> }
> --
> 1.8.3.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2014-11-20 14:45 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-20 13:48 [PATCH v4] drm/i915/skl: Implement the skl version of MMIO flips Damien Lespiau
2014-11-20 14:45 ` Ville Syrjälä [this message]
2014-11-20 14:54 ` Damien Lespiau
2014-11-20 14:58 ` [PATCH v5] " Damien Lespiau
2014-11-21 17:52 ` Daniel Vetter
2014-11-22 11:06 ` [PATCH v5] drm/i915/skl: Implement the skl version of shuang.he
2014-11-22 8:43 ` [PATCH v4] " shuang.he
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141120144552.GX10649@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=damien.lespiau@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.