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.salo...@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.salo...@intel.com>
Signed-off-by: Arun Siluvery <arun.siluv...@linux.intel.com>
Reviewed-by: Michel Thierry <michel.thie...@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;


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to