drm/i915: use new macros to access the ring tail register
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
333e9fe94d
commit
870e86ddc2
2 changed files with 22 additions and 50 deletions
|
@ -126,17 +126,12 @@ static unsigned int render_ring_get_head(struct drm_device *dev,
|
|||
return I915_READ(PRB0_HEAD) & HEAD_ADDR;
|
||||
}
|
||||
|
||||
static unsigned int render_ring_get_tail(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring)
|
||||
static void ring_set_tail(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring,
|
||||
u32 value)
|
||||
{
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
return I915_READ(PRB0_TAIL) & TAIL_ADDR;
|
||||
}
|
||||
|
||||
static inline void render_ring_set_tail(struct drm_device *dev, u32 value)
|
||||
{
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
I915_WRITE(PRB0_TAIL, value);
|
||||
I915_WRITE_TAIL(ring, ring->tail);
|
||||
}
|
||||
|
||||
static unsigned int render_ring_get_active_head(struct drm_device *dev,
|
||||
|
@ -159,7 +154,7 @@ static int init_ring_common(struct drm_device *dev,
|
|||
/* Stop the ring if it's running. */
|
||||
I915_WRITE(ring->regs.ctl, 0);
|
||||
I915_WRITE(ring->regs.head, 0);
|
||||
ring->set_tail(dev, 0);
|
||||
ring->set_tail(dev, ring, 0);
|
||||
|
||||
/* Initialize the ring. */
|
||||
I915_WRITE(ring->regs.start, obj_priv->gtt_offset);
|
||||
|
@ -172,7 +167,7 @@ static int init_ring_common(struct drm_device *dev,
|
|||
ring->name,
|
||||
I915_READ(ring->regs.ctl),
|
||||
I915_READ(ring->regs.head),
|
||||
I915_READ(ring->regs.tail),
|
||||
I915_READ_TAIL(ring),
|
||||
I915_READ(ring->regs.start));
|
||||
|
||||
I915_WRITE(ring->regs.head, 0);
|
||||
|
@ -182,7 +177,7 @@ static int init_ring_common(struct drm_device *dev,
|
|||
ring->name,
|
||||
I915_READ(ring->regs.ctl),
|
||||
I915_READ(ring->regs.head),
|
||||
I915_READ(ring->regs.tail),
|
||||
I915_READ_TAIL(ring),
|
||||
I915_READ(ring->regs.start));
|
||||
}
|
||||
|
||||
|
@ -198,7 +193,7 @@ static int init_ring_common(struct drm_device *dev,
|
|||
ring->name,
|
||||
I915_READ(ring->regs.ctl),
|
||||
I915_READ(ring->regs.head),
|
||||
I915_READ(ring->regs.tail),
|
||||
I915_READ_TAIL(ring),
|
||||
I915_READ(ring->regs.start));
|
||||
return -EIO;
|
||||
}
|
||||
|
@ -207,7 +202,7 @@ static int init_ring_common(struct drm_device *dev,
|
|||
i915_kernel_lost_context(dev);
|
||||
else {
|
||||
ring->head = ring->get_head(dev, ring);
|
||||
ring->tail = ring->get_tail(dev, ring);
|
||||
ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
|
||||
ring->space = ring->head - (ring->tail + 8);
|
||||
if (ring->space < 0)
|
||||
ring->space += ring->size;
|
||||
|
@ -393,19 +388,6 @@ static inline unsigned int bsd_ring_get_head(struct drm_device *dev,
|
|||
return I915_READ(BSD_RING_HEAD) & HEAD_ADDR;
|
||||
}
|
||||
|
||||
static inline unsigned int bsd_ring_get_tail(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring)
|
||||
{
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
return I915_READ(BSD_RING_TAIL) & TAIL_ADDR;
|
||||
}
|
||||
|
||||
static inline void bsd_ring_set_tail(struct drm_device *dev, u32 value)
|
||||
{
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
I915_WRITE(BSD_RING_TAIL, value);
|
||||
}
|
||||
|
||||
static inline unsigned int bsd_ring_get_active_head(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring)
|
||||
{
|
||||
|
@ -620,6 +602,7 @@ static int init_status_page(struct drm_device *dev,
|
|||
int intel_init_ring_buffer(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
struct drm_i915_gem_object *obj_priv;
|
||||
struct drm_gem_object *obj;
|
||||
int ret;
|
||||
|
@ -668,7 +651,7 @@ int intel_init_ring_buffer(struct drm_device *dev,
|
|||
i915_kernel_lost_context(dev);
|
||||
else {
|
||||
ring->head = ring->get_head(dev, ring);
|
||||
ring->tail = ring->get_tail(dev, ring);
|
||||
ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
|
||||
ring->space = ring->head - (ring->tail + 8);
|
||||
if (ring->space < 0)
|
||||
ring->space += ring->size;
|
||||
|
@ -774,7 +757,7 @@ void intel_ring_advance(struct drm_device *dev,
|
|||
struct intel_ring_buffer *ring)
|
||||
{
|
||||
ring->tail &= ring->size - 1;
|
||||
ring->set_tail(dev, ring->tail);
|
||||
ring->set_tail(dev, ring, ring->tail);
|
||||
}
|
||||
|
||||
void intel_fill_struct(struct drm_device *dev,
|
||||
|
@ -798,7 +781,6 @@ static const struct intel_ring_buffer render_ring = {
|
|||
.regs = {
|
||||
.ctl = PRB0_CTL,
|
||||
.head = PRB0_HEAD,
|
||||
.tail = PRB0_TAIL,
|
||||
.start = PRB0_START
|
||||
},
|
||||
.mmio_base = RENDER_RING_BASE,
|
||||
|
@ -816,8 +798,7 @@ static const struct intel_ring_buffer render_ring = {
|
|||
.setup_status_page = render_setup_status_page,
|
||||
.init = init_render_ring,
|
||||
.get_head = render_ring_get_head,
|
||||
.get_tail = render_ring_get_tail,
|
||||
.set_tail = render_ring_set_tail,
|
||||
.set_tail = ring_set_tail,
|
||||
.get_active_head = render_ring_get_active_head,
|
||||
.flush = render_ring_flush,
|
||||
.add_request = render_ring_add_request,
|
||||
|
@ -837,7 +818,6 @@ static const struct intel_ring_buffer bsd_ring = {
|
|||
.regs = {
|
||||
.ctl = BSD_RING_CTL,
|
||||
.head = BSD_RING_HEAD,
|
||||
.tail = BSD_RING_TAIL,
|
||||
.start = BSD_RING_START
|
||||
},
|
||||
.mmio_base = BSD_RING_BASE,
|
||||
|
@ -855,8 +835,7 @@ static const struct intel_ring_buffer bsd_ring = {
|
|||
.setup_status_page = bsd_setup_status_page,
|
||||
.init = init_bsd_ring,
|
||||
.get_head = bsd_ring_get_head,
|
||||
.get_tail = bsd_ring_get_tail,
|
||||
.set_tail = bsd_ring_set_tail,
|
||||
.set_tail = ring_set_tail,
|
||||
.get_active_head = bsd_ring_get_active_head,
|
||||
.flush = bsd_ring_flush,
|
||||
.add_request = bsd_ring_add_request,
|
||||
|
@ -884,15 +863,9 @@ static inline unsigned int gen6_bsd_ring_get_head(struct drm_device *dev,
|
|||
return I915_READ(GEN6_BSD_RING_HEAD) & HEAD_ADDR;
|
||||
}
|
||||
|
||||
static inline unsigned int gen6_bsd_ring_get_tail(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring)
|
||||
{
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
return I915_READ(GEN6_BSD_RING_TAIL) & TAIL_ADDR;
|
||||
}
|
||||
|
||||
static inline void gen6_bsd_ring_set_tail(struct drm_device *dev,
|
||||
u32 value)
|
||||
struct intel_ring_buffer *ring,
|
||||
u32 value)
|
||||
{
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
|
||||
|
@ -907,7 +880,7 @@ static inline void gen6_bsd_ring_set_tail(struct drm_device *dev,
|
|||
50))
|
||||
DRM_ERROR("timed out waiting for IDLE Indicator\n");
|
||||
|
||||
I915_WRITE(GEN6_BSD_RING_TAIL, value);
|
||||
I915_WRITE_TAIL(ring, value);
|
||||
I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
|
||||
GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_MODIFY_MASK |
|
||||
GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_ENABLE);
|
||||
|
@ -956,7 +929,6 @@ static const struct intel_ring_buffer gen6_bsd_ring = {
|
|||
.regs = {
|
||||
.ctl = GEN6_BSD_RING_CTL,
|
||||
.head = GEN6_BSD_RING_HEAD,
|
||||
.tail = GEN6_BSD_RING_TAIL,
|
||||
.start = GEN6_BSD_RING_START
|
||||
},
|
||||
.mmio_base = GEN6_BSD_RING_BASE,
|
||||
|
@ -974,7 +946,6 @@ static const struct intel_ring_buffer gen6_bsd_ring = {
|
|||
.setup_status_page = gen6_bsd_setup_status_page,
|
||||
.init = init_bsd_ring,
|
||||
.get_head = gen6_bsd_ring_get_head,
|
||||
.get_tail = gen6_bsd_ring_get_tail,
|
||||
.set_tail = gen6_bsd_ring_set_tail,
|
||||
.get_active_head = gen6_bsd_ring_get_active_head,
|
||||
.flush = gen6_bsd_ring_flush,
|
||||
|
|
|
@ -7,6 +7,9 @@ struct intel_hw_status_page {
|
|||
struct drm_gem_object *obj;
|
||||
};
|
||||
|
||||
#define I915_READ_TAIL(ring) I915_READ(RING_TAIL(ring->mmio_base))
|
||||
#define I915_WRITE_TAIL(ring, val) I915_WRITE(RING_TAIL(ring->mmio_base), val)
|
||||
|
||||
struct drm_i915_gem_execbuffer2;
|
||||
struct intel_ring_buffer {
|
||||
const char *name;
|
||||
|
@ -17,7 +20,6 @@ struct intel_ring_buffer {
|
|||
struct ring_regs {
|
||||
u32 ctl;
|
||||
u32 head;
|
||||
u32 tail;
|
||||
u32 start;
|
||||
} regs;
|
||||
u32 mmio_base;
|
||||
|
@ -47,10 +49,9 @@ struct intel_ring_buffer {
|
|||
|
||||
unsigned int (*get_head)(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring);
|
||||
unsigned int (*get_tail)(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring);
|
||||
void (*set_tail)(struct drm_device *dev,
|
||||
u32 value);
|
||||
struct intel_ring_buffer *ring,
|
||||
u32 value);
|
||||
unsigned int (*get_active_head)(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring);
|
||||
void (*flush)(struct drm_device *dev,
|
||||
|
|
Loading…
Reference in a new issue