diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.h | 11 |
3 files changed, 14 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 80ed75117b6d..8f63cd5de4b4 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
@@ -141,7 +141,7 @@ void i915_kernel_lost_context(struct drm_device * dev) | |||
141 | 141 | ||
142 | ring->head = I915_READ_HEAD(ring) & HEAD_ADDR; | 142 | ring->head = I915_READ_HEAD(ring) & HEAD_ADDR; |
143 | ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR; | 143 | ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR; |
144 | ring->space = ring->head - (ring->tail + 8); | 144 | ring->space = ring->head - (ring->tail + I915_RING_FREE_SPACE); |
145 | if (ring->space < 0) | 145 | if (ring->space < 0) |
146 | ring->space += ring->size; | 146 | ring->space += ring->size; |
147 | 147 | ||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index bc7cf7c63108..2346b920bd86 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
@@ -45,7 +45,7 @@ struct pipe_control { | |||
45 | 45 | ||
46 | static inline int ring_space(struct intel_ring_buffer *ring) | 46 | static inline int ring_space(struct intel_ring_buffer *ring) |
47 | { | 47 | { |
48 | int space = (ring->head & HEAD_ADDR) - (ring->tail + 8); | 48 | int space = (ring->head & HEAD_ADDR) - (ring->tail + I915_RING_FREE_SPACE); |
49 | if (space < 0) | 49 | if (space < 0) |
50 | space += ring->size; | 50 | space += ring->size; |
51 | return space; | 51 | return space; |
@@ -1227,7 +1227,7 @@ static int intel_ring_wait_request(struct intel_ring_buffer *ring, int n) | |||
1227 | if (request->tail == -1) | 1227 | if (request->tail == -1) |
1228 | continue; | 1228 | continue; |
1229 | 1229 | ||
1230 | space = request->tail - (ring->tail + 8); | 1230 | space = request->tail - (ring->tail + I915_RING_FREE_SPACE); |
1231 | if (space < 0) | 1231 | if (space < 0) |
1232 | space += ring->size; | 1232 | space += ring->size; |
1233 | if (space >= n) { | 1233 | if (space >= n) { |
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h index d4b7416fa1b0..526182ed0c6d 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.h +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h | |||
@@ -1,6 +1,17 @@ | |||
1 | #ifndef _INTEL_RINGBUFFER_H_ | 1 | #ifndef _INTEL_RINGBUFFER_H_ |
2 | #define _INTEL_RINGBUFFER_H_ | 2 | #define _INTEL_RINGBUFFER_H_ |
3 | 3 | ||
4 | /* | ||
5 | * Gen2 BSpec "1. Programming Environment" / 1.4.4.6 "Ring Buffer Use" | ||
6 | * Gen3 BSpec "vol1c Memory Interface Functions" / 2.3.4.5 "Ring Buffer Use" | ||
7 | * Gen4+ BSpec "vol1c Memory Interface and Command Stream" / 5.3.4.5 "Ring Buffer Use" | ||
8 | * | ||
9 | * "If the Ring Buffer Head Pointer and the Tail Pointer are on the same | ||
10 | * cacheline, the Head Pointer must not be greater than the Tail | ||
11 | * Pointer." | ||
12 | */ | ||
13 | #define I915_RING_FREE_SPACE 64 | ||
14 | |||
4 | struct intel_hw_status_page { | 15 | struct intel_hw_status_page { |
5 | u32 *page_addr; | 16 | u32 *page_addr; |
6 | unsigned int gfx_addr; | 17 | unsigned int gfx_addr; |