From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 24/43] drm/i915/bdw: GEN-specific logical ring emit batchbuffer start Date: Mon, 11 Aug 2014 23:09:39 +0200 Message-ID: <20140811210939.GC10500@phenom.ffwll.local> References: <1406217891-8912-1-git-send-email-thomas.daniel@intel.com> <1406217891-8912-25-git-send-email-thomas.daniel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail-wi0-f179.google.com (mail-wi0-f179.google.com [209.85.212.179]) by gabe.freedesktop.org (Postfix) with ESMTP id D9CDE6E45C for ; Mon, 11 Aug 2014 14:09:27 -0700 (PDT) Received: by mail-wi0-f179.google.com with SMTP id f8so4857081wiw.6 for ; Mon, 11 Aug 2014 14:09:27 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1406217891-8912-25-git-send-email-thomas.daniel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Thomas Daniel Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org On Thu, Jul 24, 2014 at 05:04:32PM +0100, Thomas Daniel wrote: > From: Oscar Mateo > > Dispatch_execbuffer's evil twin. > > Signed-off-by: Oscar Mateo > --- > drivers/gpu/drm/i915/intel_lrc.c | 28 ++++++++++++++++++++++++++++ > drivers/gpu/drm/i915/intel_ringbuffer.h | 2 ++ > 2 files changed, 30 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c > index a6dcb3a..55ee8dd 100644 > --- a/drivers/gpu/drm/i915/intel_lrc.c > +++ b/drivers/gpu/drm/i915/intel_lrc.c > @@ -384,6 +384,29 @@ static int gen8_init_render_ring(struct intel_engine_cs *ring) > return ret; > } > > +static int gen8_emit_bb_start(struct intel_ringbuffer *ringbuf, > + u64 offset, unsigned flags) > +{ > + struct intel_engine_cs *ring = ringbuf->ring; > + struct drm_i915_private *dev_priv = ring->dev->dev_private; > + bool ppgtt = dev_priv->mm.aliasing_ppgtt != NULL && The aliasing ppgtt check here is fairly decent bullocks, especially since full ppgtt is a requirement for execlists. I've ditched it since a series from myself will otherwise break this patch. -Daniel > + !(flags & I915_DISPATCH_SECURE); > + int ret; > + > + ret = intel_logical_ring_begin(ringbuf, 4); > + if (ret) > + return ret; > + > + /* FIXME(BDW): Address space and security selectors. */ > + intel_logical_ring_emit(ringbuf, MI_BATCH_BUFFER_START_GEN8 | (ppgtt<<8)); > + intel_logical_ring_emit(ringbuf, lower_32_bits(offset)); > + intel_logical_ring_emit(ringbuf, upper_32_bits(offset)); > + intel_logical_ring_emit(ringbuf, MI_NOOP); > + intel_logical_ring_advance(ringbuf); > + > + return 0; > +} > + > static bool gen8_logical_ring_get_irq(struct intel_engine_cs *ring) > { > struct drm_device *dev = ring->dev; > @@ -615,6 +638,7 @@ static int logical_render_ring_init(struct drm_device *dev) > ring->emit_flush = gen8_emit_flush_render; > ring->irq_get = gen8_logical_ring_get_irq; > ring->irq_put = gen8_logical_ring_put_irq; > + ring->emit_bb_start = gen8_emit_bb_start; > > return logical_ring_init(dev, ring); > } > @@ -639,6 +663,7 @@ static int logical_bsd_ring_init(struct drm_device *dev) > ring->emit_flush = gen8_emit_flush; > ring->irq_get = gen8_logical_ring_get_irq; > ring->irq_put = gen8_logical_ring_put_irq; > + ring->emit_bb_start = gen8_emit_bb_start; > > return logical_ring_init(dev, ring); > } > @@ -663,6 +688,7 @@ static int logical_bsd2_ring_init(struct drm_device *dev) > ring->emit_flush = gen8_emit_flush; > ring->irq_get = gen8_logical_ring_get_irq; > ring->irq_put = gen8_logical_ring_put_irq; > + ring->emit_bb_start = gen8_emit_bb_start; > > return logical_ring_init(dev, ring); > } > @@ -687,6 +713,7 @@ static int logical_blt_ring_init(struct drm_device *dev) > ring->emit_flush = gen8_emit_flush; > ring->irq_get = gen8_logical_ring_get_irq; > ring->irq_put = gen8_logical_ring_put_irq; > + ring->emit_bb_start = gen8_emit_bb_start; > > return logical_ring_init(dev, ring); > } > @@ -711,6 +738,7 @@ static int logical_vebox_ring_init(struct drm_device *dev) > ring->emit_flush = gen8_emit_flush; > ring->irq_get = gen8_logical_ring_get_irq; > ring->irq_put = gen8_logical_ring_put_irq; > + ring->emit_bb_start = gen8_emit_bb_start; > > return logical_ring_init(dev, ring); > } > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h > index 09102b2..c885d5c 100644 > --- a/drivers/gpu/drm/i915/intel_ringbuffer.h > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h > @@ -228,6 +228,8 @@ struct intel_engine_cs { > int (*emit_flush)(struct intel_ringbuffer *ringbuf, > u32 invalidate_domains, > u32 flush_domains); > + int (*emit_bb_start)(struct intel_ringbuffer *ringbuf, > + u64 offset, unsigned flags); > > /** > * List of objects currently involved in rendering from the > -- > 1.7.9.5 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch