Commit 9bcb144c authored by Ben Widawsky's avatar Ben Widawsky Committed by Daniel Vetter

drm/i915: Support 64b execbuf

Previously, our code only had a 32b offset value for where the
batchbuffer starts. With full PPGTT, and 64b canonical GPU address
space, that is an insufficient value. The code to expand is pretty
straight forward, and only one platform needs to do anything with the
extra bits.
Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarRafael Barbalho <rafael.barbalho@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 192d47a6
...@@ -1049,7 +1049,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, ...@@ -1049,7 +1049,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
struct i915_hw_context *ctx; struct i915_hw_context *ctx;
struct i915_address_space *vm; struct i915_address_space *vm;
const u32 ctx_id = i915_execbuffer2_get_context_id(*args); const u32 ctx_id = i915_execbuffer2_get_context_id(*args);
u32 exec_start = args->batch_start_offset, exec_len; u64 exec_start = args->batch_start_offset, exec_len;
u32 mask, flags; u32 mask, flags;
int ret, mode, i; int ret, mode, i;
bool need_relocs; bool need_relocs;
......
...@@ -1210,7 +1210,7 @@ gen8_ring_put_irq(struct intel_ring_buffer *ring) ...@@ -1210,7 +1210,7 @@ gen8_ring_put_irq(struct intel_ring_buffer *ring)
static int static int
i965_dispatch_execbuffer(struct intel_ring_buffer *ring, i965_dispatch_execbuffer(struct intel_ring_buffer *ring,
u32 offset, u32 length, u64 offset, u32 length,
unsigned flags) unsigned flags)
{ {
int ret; int ret;
...@@ -1233,7 +1233,7 @@ i965_dispatch_execbuffer(struct intel_ring_buffer *ring, ...@@ -1233,7 +1233,7 @@ i965_dispatch_execbuffer(struct intel_ring_buffer *ring,
#define I830_BATCH_LIMIT (256*1024) #define I830_BATCH_LIMIT (256*1024)
static int static int
i830_dispatch_execbuffer(struct intel_ring_buffer *ring, i830_dispatch_execbuffer(struct intel_ring_buffer *ring,
u32 offset, u32 len, u64 offset, u32 len,
unsigned flags) unsigned flags)
{ {
int ret; int ret;
...@@ -1284,7 +1284,7 @@ i830_dispatch_execbuffer(struct intel_ring_buffer *ring, ...@@ -1284,7 +1284,7 @@ i830_dispatch_execbuffer(struct intel_ring_buffer *ring,
static int static int
i915_dispatch_execbuffer(struct intel_ring_buffer *ring, i915_dispatch_execbuffer(struct intel_ring_buffer *ring,
u32 offset, u32 len, u64 offset, u32 len,
unsigned flags) unsigned flags)
{ {
int ret; int ret;
...@@ -1797,7 +1797,7 @@ static int gen6_bsd_ring_flush(struct intel_ring_buffer *ring, ...@@ -1797,7 +1797,7 @@ static int gen6_bsd_ring_flush(struct intel_ring_buffer *ring,
static int static int
gen8_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, gen8_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
u32 offset, u32 len, u64 offset, u32 len,
unsigned flags) unsigned flags)
{ {
struct drm_i915_private *dev_priv = ring->dev->dev_private; struct drm_i915_private *dev_priv = ring->dev->dev_private;
...@@ -1811,8 +1811,8 @@ gen8_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, ...@@ -1811,8 +1811,8 @@ gen8_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
/* FIXME(BDW): Address space and security selectors. */ /* FIXME(BDW): Address space and security selectors. */
intel_ring_emit(ring, MI_BATCH_BUFFER_START_GEN8 | (ppgtt<<8)); intel_ring_emit(ring, MI_BATCH_BUFFER_START_GEN8 | (ppgtt<<8));
intel_ring_emit(ring, offset); intel_ring_emit(ring, lower_32_bits(offset));
intel_ring_emit(ring, 0); intel_ring_emit(ring, upper_32_bits(offset));
intel_ring_emit(ring, MI_NOOP); intel_ring_emit(ring, MI_NOOP);
intel_ring_advance(ring); intel_ring_advance(ring);
...@@ -1821,7 +1821,7 @@ gen8_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, ...@@ -1821,7 +1821,7 @@ gen8_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
static int static int
hsw_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, hsw_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
u32 offset, u32 len, u64 offset, u32 len,
unsigned flags) unsigned flags)
{ {
int ret; int ret;
...@@ -1842,7 +1842,7 @@ hsw_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, ...@@ -1842,7 +1842,7 @@ hsw_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
static int static int
gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
u32 offset, u32 len, u64 offset, u32 len,
unsigned flags) unsigned flags)
{ {
int ret; int ret;
......
...@@ -112,7 +112,7 @@ struct intel_ring_buffer { ...@@ -112,7 +112,7 @@ struct intel_ring_buffer {
void (*set_seqno)(struct intel_ring_buffer *ring, void (*set_seqno)(struct intel_ring_buffer *ring,
u32 seqno); u32 seqno);
int (*dispatch_execbuffer)(struct intel_ring_buffer *ring, int (*dispatch_execbuffer)(struct intel_ring_buffer *ring,
u32 offset, u32 length, u64 offset, u32 length,
unsigned flags); unsigned flags);
#define I915_DISPATCH_SECURE 0x1 #define I915_DISPATCH_SECURE 0x1
#define I915_DISPATCH_PINNED 0x2 #define I915_DISPATCH_PINNED 0x2
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment