diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-06-25 13:06:12 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-06-25 13:10:36 -0400 |
commit | 7b0cfee1a24efdfe0235bac62e53f686fe8a8e24 (patch) | |
tree | eeeb8cc3bf7be5ec0e54b7c4f3808ef88ecca012 /drivers/gpu/drm/i915/intel_ringbuffer.c | |
parent | 9756fe38d10b2bf90c81dc4d2f17d5632e135364 (diff) | |
parent | 6b16351acbd415e66ba16bf7d473ece1574cf0bc (diff) |
Merge tag 'v3.5-rc4' into drm-intel-next-queued
I want to merge the "no more fake agp on gen6+" patches into
drm-intel-next (well, the last pieces). But a patch in 3.5-rc4 also
adds a new use of dev->agp. Hence the backmarge to sort this out, for
otherwise drm-intel-next merged into Linus' tree would conflict in the
relevant code, things would compile but nicely OOPS at driver load :(
Conflicts in this merge are just simple cases of "both branches
changed/added lines at the same place". The only tricky part is to
keep the order correct wrt the unwind code in case of errors in
intel_ringbuffer.c (and the MI_DISPLAY_FLIP #defines in i915_reg.h
together, obviously).
Conflicts:
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/intel_ringbuffer.c
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 7a16f16371e6..f30a53a8917e 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
@@ -267,10 +267,15 @@ u32 intel_ring_get_active_head(struct intel_ring_buffer *ring) | |||
267 | 267 | ||
268 | static int init_ring_common(struct intel_ring_buffer *ring) | 268 | static int init_ring_common(struct intel_ring_buffer *ring) |
269 | { | 269 | { |
270 | drm_i915_private_t *dev_priv = ring->dev->dev_private; | 270 | struct drm_device *dev = ring->dev; |
271 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
271 | struct drm_i915_gem_object *obj = ring->obj; | 272 | struct drm_i915_gem_object *obj = ring->obj; |
273 | int ret = 0; | ||
272 | u32 head; | 274 | u32 head; |
273 | 275 | ||
276 | if (HAS_FORCE_WAKE(dev)) | ||
277 | gen6_gt_force_wake_get(dev_priv); | ||
278 | |||
274 | /* Stop the ring if it's running. */ | 279 | /* Stop the ring if it's running. */ |
275 | I915_WRITE_CTL(ring, 0); | 280 | I915_WRITE_CTL(ring, 0); |
276 | I915_WRITE_HEAD(ring, 0); | 281 | I915_WRITE_HEAD(ring, 0); |
@@ -318,7 +323,8 @@ static int init_ring_common(struct intel_ring_buffer *ring) | |||
318 | I915_READ_HEAD(ring), | 323 | I915_READ_HEAD(ring), |
319 | I915_READ_TAIL(ring), | 324 | I915_READ_TAIL(ring), |
320 | I915_READ_START(ring)); | 325 | I915_READ_START(ring)); |
321 | return -EIO; | 326 | ret = -EIO; |
327 | goto out; | ||
322 | } | 328 | } |
323 | 329 | ||
324 | if (!drm_core_check_feature(ring->dev, DRIVER_MODESET)) | 330 | if (!drm_core_check_feature(ring->dev, DRIVER_MODESET)) |
@@ -327,9 +333,14 @@ static int init_ring_common(struct intel_ring_buffer *ring) | |||
327 | ring->head = I915_READ_HEAD(ring); | 333 | ring->head = I915_READ_HEAD(ring); |
328 | ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR; | 334 | ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR; |
329 | ring->space = ring_space(ring); | 335 | ring->space = ring_space(ring); |
336 | ring->last_retired_head = -1; | ||
330 | } | 337 | } |
331 | 338 | ||
332 | return 0; | 339 | out: |
340 | if (HAS_FORCE_WAKE(dev)) | ||
341 | gen6_gt_force_wake_put(dev_priv); | ||
342 | |||
343 | return ret; | ||
333 | } | 344 | } |
334 | 345 | ||
335 | static int | 346 | static int |
@@ -1006,6 +1017,10 @@ static int intel_init_ring_buffer(struct drm_device *dev, | |||
1006 | if (ret) | 1017 | if (ret) |
1007 | goto err_unref; | 1018 | goto err_unref; |
1008 | 1019 | ||
1020 | ret = i915_gem_object_set_to_gtt_domain(obj, true); | ||
1021 | if (ret) | ||
1022 | goto err_unpin; | ||
1023 | |||
1009 | ring->virtual_start = | 1024 | ring->virtual_start = |
1010 | ioremap_wc(dev_priv->mm.gtt->gma_bus_addr + obj->gtt_offset, | 1025 | ioremap_wc(dev_priv->mm.gtt->gma_bus_addr + obj->gtt_offset, |
1011 | ring->size); | 1026 | ring->size); |