diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 6 |
3 files changed, 8 insertions, 11 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 9d4278be0ca0..0d215e38606a 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
| @@ -445,7 +445,7 @@ static void i915_emit_breadcrumb(struct drm_device *dev) | |||
| 445 | 445 | ||
| 446 | BEGIN_LP_RING(4); | 446 | BEGIN_LP_RING(4); |
| 447 | OUT_RING(MI_STORE_DWORD_INDEX); | 447 | OUT_RING(MI_STORE_DWORD_INDEX); |
| 448 | OUT_RING(5 << MI_STORE_DWORD_INDEX_SHIFT); | 448 | OUT_RING(I915_BREADCRUMB_INDEX << MI_STORE_DWORD_INDEX_SHIFT); |
| 449 | OUT_RING(dev_priv->counter); | 449 | OUT_RING(dev_priv->counter); |
| 450 | OUT_RING(0); | 450 | OUT_RING(0); |
| 451 | ADVANCE_LP_RING(); | 451 | ADVANCE_LP_RING(); |
| @@ -576,7 +576,7 @@ static int i915_dispatch_flip(struct drm_device * dev) | |||
| 576 | 576 | ||
| 577 | BEGIN_LP_RING(4); | 577 | BEGIN_LP_RING(4); |
| 578 | OUT_RING(MI_STORE_DWORD_INDEX); | 578 | OUT_RING(MI_STORE_DWORD_INDEX); |
| 579 | OUT_RING(5 << MI_STORE_DWORD_INDEX_SHIFT); | 579 | OUT_RING(I915_BREADCRUMB_INDEX << MI_STORE_DWORD_INDEX_SHIFT); |
| 580 | OUT_RING(dev_priv->counter); | 580 | OUT_RING(dev_priv->counter); |
| 581 | OUT_RING(0); | 581 | OUT_RING(0); |
| 582 | ADVANCE_LP_RING(); | 582 | ADVANCE_LP_RING(); |
| @@ -611,7 +611,6 @@ static int i915_batchbuffer(struct drm_device *dev, void *data, | |||
| 611 | struct drm_file *file_priv) | 611 | struct drm_file *file_priv) |
| 612 | { | 612 | { |
| 613 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 613 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
| 614 | u32 *hw_status = dev_priv->hw_status_page; | ||
| 615 | drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *) | 614 | drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *) |
| 616 | dev_priv->sarea_priv; | 615 | dev_priv->sarea_priv; |
| 617 | drm_i915_batchbuffer_t *batch = data; | 616 | drm_i915_batchbuffer_t *batch = data; |
| @@ -637,7 +636,7 @@ static int i915_batchbuffer(struct drm_device *dev, void *data, | |||
| 637 | mutex_unlock(&dev->struct_mutex); | 636 | mutex_unlock(&dev->struct_mutex); |
| 638 | 637 | ||
| 639 | if (sarea_priv) | 638 | if (sarea_priv) |
| 640 | sarea_priv->last_dispatch = (int)hw_status[5]; | 639 | sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); |
| 641 | return ret; | 640 | return ret; |
| 642 | } | 641 | } |
| 643 | 642 | ||
| @@ -645,7 +644,6 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data, | |||
| 645 | struct drm_file *file_priv) | 644 | struct drm_file *file_priv) |
| 646 | { | 645 | { |
| 647 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 646 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
| 648 | u32 *hw_status = dev_priv->hw_status_page; | ||
| 649 | drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *) | 647 | drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *) |
| 650 | dev_priv->sarea_priv; | 648 | dev_priv->sarea_priv; |
| 651 | drm_i915_cmdbuffer_t *cmdbuf = data; | 649 | drm_i915_cmdbuffer_t *cmdbuf = data; |
| @@ -673,7 +671,7 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data, | |||
| 673 | } | 671 | } |
| 674 | 672 | ||
| 675 | if (sarea_priv) | 673 | if (sarea_priv) |
| 676 | sarea_priv->last_dispatch = (int)hw_status[5]; | 674 | sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); |
| 677 | return 0; | 675 | return 0; |
| 678 | } | 676 | } |
| 679 | 677 | ||
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 4afbadb13316..ef1c0b8f8d07 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
| @@ -608,8 +608,9 @@ static inline void opregion_enable_asle(struct drm_device *dev) { return; } | |||
| 608 | * The area from dword 0x20 to 0x3ff is available for driver usage. | 608 | * The area from dword 0x20 to 0x3ff is available for driver usage. |
| 609 | */ | 609 | */ |
| 610 | #define READ_HWSP(dev_priv, reg) (((volatile u32*)(dev_priv->hw_status_page))[reg]) | 610 | #define READ_HWSP(dev_priv, reg) (((volatile u32*)(dev_priv->hw_status_page))[reg]) |
| 611 | #define READ_BREADCRUMB(dev_priv) READ_HWSP(dev_priv, 5) | 611 | #define READ_BREADCRUMB(dev_priv) READ_HWSP(dev_priv, I915_BREADCRUMB_INDEX) |
| 612 | #define I915_GEM_HWS_INDEX 0x20 | 612 | #define I915_GEM_HWS_INDEX 0x20 |
| 613 | #define I915_BREADCRUMB_INDEX 0x21 | ||
| 613 | 614 | ||
| 614 | extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller); | 615 | extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller); |
| 615 | 616 | ||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index a75345af62ef..82752d6177a4 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
| @@ -212,12 +212,10 @@ static int i915_emit_irq(struct drm_device * dev) | |||
| 212 | if (dev_priv->sarea_priv) | 212 | if (dev_priv->sarea_priv) |
| 213 | dev_priv->sarea_priv->last_enqueue = dev_priv->counter; | 213 | dev_priv->sarea_priv->last_enqueue = dev_priv->counter; |
| 214 | 214 | ||
| 215 | BEGIN_LP_RING(6); | 215 | BEGIN_LP_RING(4); |
| 216 | OUT_RING(MI_STORE_DWORD_INDEX); | 216 | OUT_RING(MI_STORE_DWORD_INDEX); |
| 217 | OUT_RING(5 << MI_STORE_DWORD_INDEX_SHIFT); | 217 | OUT_RING(I915_BREADCRUMB_INDEX << MI_STORE_DWORD_INDEX_SHIFT); |
| 218 | OUT_RING(dev_priv->counter); | 218 | OUT_RING(dev_priv->counter); |
| 219 | OUT_RING(0); | ||
| 220 | OUT_RING(0); | ||
| 221 | OUT_RING(MI_USER_INTERRUPT); | 219 | OUT_RING(MI_USER_INTERRUPT); |
| 222 | ADVANCE_LP_RING(); | 220 | ADVANCE_LP_RING(); |
| 223 | 221 | ||
