Message ID | 1425294168-27423-1-git-send-email-arun.siluvery@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 02/03/2015 11:02, Arun Siluvery wrote: Please ignore this one. I used message id of cover letter instead of v1 of this patch. Latest patches are sent in reply to their initial revisions. regards Arun > From: Namrta <namrta.salonie@intel.com> > > This can be used to enable WA BB infrastructure for features like > RC6, SSEU and in between context save/restore etc. > > The patch which would need WA BB will have to declare the wa_bb obj > utilizing the function here. Update the WA BB with required commands > and update the address of the WA BB at appropriate place. > > v2: Move function to the right place to keeps diffs clearer in the > patch that uses this function (Michel) > > Change-Id: I9cc49ae7426560215e7b6a6d10ba411caeb9321b > Signed-off-by: Namrta <namrta.salonie@intel.com> > Signed-off-by: Arun Siluvery <arun.siluvery@linux.intel.com> > Reviewed-by: Michel Thierry <michel.thierry@intel.com> > --- > drivers/gpu/drm/i915/intel_lrc.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c > index 9c851d8..ea37a56 100644 > --- a/drivers/gpu/drm/i915/intel_lrc.c > +++ b/drivers/gpu/drm/i915/intel_lrc.c > @@ -1107,6 +1107,38 @@ static int intel_logical_ring_workarounds_emit(struct intel_engine_cs *ring, > return 0; > } > > +static struct intel_ringbuffer * > +create_wa_bb(struct intel_engine_cs *ring, uint32_t bb_size) > +{ > + struct drm_device *dev = ring->dev; > + struct intel_ringbuffer *ringbuf; > + int ret; > + > + ringbuf = kzalloc(sizeof(*ringbuf), GFP_KERNEL); > + if (!ringbuf) > + return NULL; > + > + ringbuf->ring = ring; > + > + ringbuf->size = roundup(bb_size, PAGE_SIZE); > + ringbuf->effective_size = ringbuf->size; > + ringbuf->head = 0; > + ringbuf->tail = 0; > + ringbuf->space = ringbuf->size; > + ringbuf->last_retired_head = -1; > + > + ret = intel_alloc_ringbuffer_obj(dev, ringbuf); > + if (ret) { > + DRM_DEBUG_DRIVER( > + "Failed to allocate ringbuf obj for wa_bb%s: %d\n", > + ring->name, ret); > + kfree(ringbuf); > + return NULL; > + } > + > + return ringbuf; > +} > + > static int gen8_init_common_ring(struct intel_engine_cs *ring) > { > struct drm_device *dev = ring->dev; >
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index 9c851d8..ea37a56 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c @@ -1107,6 +1107,38 @@ static int intel_logical_ring_workarounds_emit(struct intel_engine_cs *ring, return 0; } +static struct intel_ringbuffer * +create_wa_bb(struct intel_engine_cs *ring, uint32_t bb_size) +{ + struct drm_device *dev = ring->dev; + struct intel_ringbuffer *ringbuf; + int ret; + + ringbuf = kzalloc(sizeof(*ringbuf), GFP_KERNEL); + if (!ringbuf) + return NULL; + + ringbuf->ring = ring; + + ringbuf->size = roundup(bb_size, PAGE_SIZE); + ringbuf->effective_size = ringbuf->size; + ringbuf->head = 0; + ringbuf->tail = 0; + ringbuf->space = ringbuf->size; + ringbuf->last_retired_head = -1; + + ret = intel_alloc_ringbuffer_obj(dev, ringbuf); + if (ret) { + DRM_DEBUG_DRIVER( + "Failed to allocate ringbuf obj for wa_bb%s: %d\n", + ring->name, ret); + kfree(ringbuf); + return NULL; + } + + return ringbuf; +} + static int gen8_init_common_ring(struct intel_engine_cs *ring) { struct drm_device *dev = ring->dev;