From: Namrta <namrta.salonie@xxxxxxxxx> 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. Change-Id: I9cc49ae7426560215e7b6a6d10ba411caeb9321b Signed-off-by: Namrta <namrta.salonie@xxxxxxxxx> Signed-off-by: Arun Siluvery <arun.siluvery@xxxxxxxxxxxxxxx> --- 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..47473e5 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c @@ -1337,6 +1337,38 @@ static int gen8_emit_request(struct intel_ringbuffer *ringbuf, 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 intel_lr_context_render_state_init(struct intel_engine_cs *ring, struct intel_context *ctx) { -- 2.3.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx