HDMI_AUDIO_ON, /* force turn on HDMI audio */
};
-#define I915_GTT_RESERVED ((struct drm_mm_node *)0x1)
+#define I915_GTT_RESERVED (1<<0)
#define I915_GTT_OFFSET_NONE ((u32)-1)
struct drm_i915_gem_object_ops {
unsigned long exec_handle;
struct drm_i915_gem_exec_object2 *exec_entry;
- /**
- * Current offset of the object in GTT space.
- *
- * This is the same as gtt_space->start
- */
- uint32_t gtt_offset;
-
struct intel_ring_buffer *ring;
/** Breadcrumb of last rendering to the buffer. */
drm_mm_put_block(obj->gtt_space);
obj->gtt_space = NULL;
- obj->gtt_offset = 0;
return 0;
}
list_add_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
obj->gtt_space = node;
- obj->gtt_offset = node->start;
fenceable =
node->size == fence_size &&
/* Mark any preallocated objects as occupied */
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
+ uintptr_t offset = (uintptr_t) obj->gtt_space;
int ret;
- DRM_DEBUG_KMS("reserving preallocated space: %x + %zx\n",
- obj->gtt_offset, obj->base.size);
+ DRM_DEBUG_KMS("reserving preallocated space: %lx + %zx\n",
+ offset, obj->base.size);
- BUG_ON(obj->gtt_space != I915_GTT_RESERVED);
+ BUG_ON((offset & I915_GTT_RESERVED) != 0);
+ offset &= ~I915_GTT_RESERVED;
obj->gtt_space = kzalloc(sizeof(*obj->gtt_space), GFP_KERNEL);
if (!obj->gtt_space) {
- DRM_ERROR("Failed to preserve object at offset %x\n",
- obj->gtt_offset);
+ DRM_ERROR("Failed to preserve object at offset %lx\n",
+ offset);
continue;
}
- obj->gtt_space->start = obj->gtt_offset;
+ obj->gtt_space->start = (unsigned long)offset;
obj->gtt_space->size = obj->base.size;
ret = drm_mm_reserve_node(&dev_priv->mm.gtt_space,
obj->gtt_space);
DRM_DEBUG_KMS("failed to allocate stolen GTT space\n");
goto free_out;
}
- } else
- obj->gtt_space = I915_GTT_RESERVED;
+ } else {
+ if (WARN_ON(gtt_offset & ~PAGE_MASK))
+ DRM_DEBUG_KMS("Cannot preserve non page aligned offset\n");
+ obj->gtt_space =
+ (struct drm_mm_node *)((uintptr_t)(I915_GTT_RESERVED | gtt_offset));
+ }
- obj->gtt_offset = gtt_offset;
obj->has_global_gtt_mapping = 1;
list_add_tail(&obj->global_list, &dev_priv->mm.bound_list);