summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 84bea38)
raw | patch | inline | side by side (parent: 84bea38)
author | Michel Dänzer <michel@tungstengraphics.com> | |
Fri, 15 Jun 2007 15:13:11 +0000 (17:13 +0200) | ||
committer | Michel Dänzer <michel@tungstengraphics.com> | |
Fri, 15 Jun 2007 15:13:11 +0000 (17:13 +0200) |
linux-core/i915_drv.c | patch | blob | history | |
linux-core/i915_fence.c | patch | blob | history | |
shared-core/i915_dma.c | patch | blob | history | |
shared-core/i915_drv.h | patch | blob | history |
diff --git a/linux-core/i915_drv.c b/linux-core/i915_drv.c
index 4c35b4c3939f289d657decf6b3cd7c03f608f66e..4943706620c7b46f3cc8c04cdc7150de482db53b 100644 (file)
--- a/linux-core/i915_drv.c
+++ b/linux-core/i915_drv.c
#ifdef I915_HAVE_FENCE
static drm_fence_driver_t i915_fence_driver = {
.num_classes = 1,
- .wrap_diff = (1 << 30),
- .flush_diff = (1 << 29),
- .sequence_mask = 0x7fffffffU,
+ .wrap_diff = (1U << (BREADCRUMB_BITS - 1)),
+ .flush_diff = (1U << (BREADCRUMB_BITS - 2)),
+ .sequence_mask = BREADCRUMB_MASK,
.lazy_capable = 1,
.emit = i915_fence_emit_sequence,
.poke_flush = i915_poke_flush,
index 88daa57cf35ba88cbe737091d6e923ef703301dc..008734850aaea697573555550c7096878085cc52 100644 (file)
--- a/linux-core/i915_fence.c
+++ b/linux-core/i915_fence.c
* First update fences with the current breadcrumb.
*/
- diff = sequence - fc->last_exe_flush;
+ diff = (sequence - fc->last_exe_flush) & BREADCRUMB_MASK;
if (diff < driver->wrap_diff && diff != 0) {
drm_fence_handler(dev, 0, sequence, DRM_FENCE_TYPE_EXE);
}
diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c
index ebb184cc428da8fd0bbf0c8e04395fecb1c3b9f8..dbc5f9597ef90f965b3f9cd5165e8d4942eeae9e 100644 (file)
--- a/shared-core/i915_dma.c
+++ b/shared-core/i915_dma.c
drm_i915_private_t *dev_priv = dev->dev_private;
RING_LOCALS;
- dev_priv->sarea_priv->last_enqueue = ++dev_priv->counter;
+ if (++dev_priv->counter > BREADCRUMB_MASK) {
+ dev_priv->counter = 1;
+ DRM_DEBUG("Breadcrumb counter wrapped around\n");
+ }
- if (dev_priv->counter > 0x7FFFFFFFUL)
- dev_priv->sarea_priv->last_enqueue = dev_priv->counter = 1;
+ dev_priv->sarea_priv->last_enqueue = dev_priv->counter;
BEGIN_LP_RING(4);
OUT_RING(CMD_STORE_DWORD_IDX);
diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h
index 9deee8ec2470fb0d767e58782179ba6bc474461e..e0432996d4192b072d78341695ba99918cb0f6cf 100644 (file)
--- a/shared-core/i915_drv.h
+++ b/shared-core/i915_drv.h
#define CMD_OP_DESTBUFFER_INFO ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1)
+#define BREADCRUMB_BITS 31
+#define BREADCRUMB_MASK ((1U << BREADCRUMB_BITS) - 1)
+
#define READ_BREADCRUMB(dev_priv) (((volatile u32*)(dev_priv->hw_status_page))[5])
#define READ_HWSP(dev_priv, reg) (((volatile u32*)(dev_priv->hw_status_page))[reg])
#endif