Module Name: src
Committed By: riastradh
Date: Wed Jul 24 02:59:46 UTC 2013
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [riastradh-drm2]:
intel_ringbuffer.c intel_ringbuffer.h
Log Message:
Switch intel_ring_buffers from Linux ioremap to drm_ioremap.
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1.2.2 -r1.1.1.1.2.3 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c
cvs rdiff -u -r1.1.1.1.2.3 -r1.1.1.1.2.4 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c:1.1.1.1.2.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c:1.1.1.1.2.3
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c:1.1.1.1.2.2 Tue Jul 23 21:28:22 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c Wed Jul 24 02:59:46 2013
@@ -1181,6 +1181,21 @@ static int intel_init_ring_buffer(struct
if (ret)
goto err_unpin;
+#ifdef __NetBSD__
+ ring->virtual_start_map.offset = (dev_priv->mm.gtt->gma_bus_addr +
+ obj->gtt_offset);
+ ring->virtual_start_map.size = ring->size;
+ ring->virtual_start_map.flags = 0;
+ ring->virtual_start_map.flags |= _DRM_RESTRICTED;
+ ring->virtual_start_map.flags |= _DRM_KERNEL;
+ ring->virtual_start_map.flags |= _DRM_WRITE_COMBINING;
+ ring->virtual_start_map.flags |= _DRM_DRIVER;
+ ret = drm_ioremap(dev, &ring->virtual_start_map);
+ if (ret) {
+ DRM_ERROR("failed to map ring buffer\n");
+ goto err_unpin;
+ }
+#else
ring->virtual_start =
ioremap_wc(dev_priv->mm.gtt->gma_bus_addr + obj->gtt_offset,
ring->size);
@@ -1189,6 +1204,7 @@ static int intel_init_ring_buffer(struct
ret = -EINVAL;
goto err_unpin;
}
+#endif
ret = ring->init(ring);
if (ret)
@@ -1205,7 +1221,11 @@ static int intel_init_ring_buffer(struct
return 0;
err_unmap:
+#ifdef __NetBSD__
+ drm_iounmap(dev, &ring->virtual_start_map);
+#else
iounmap(ring->virtual_start);
+#endif
err_unpin:
i915_gem_object_unpin(obj);
err_unref:
@@ -1233,7 +1253,11 @@ void intel_cleanup_ring_buffer(struct in
I915_WRITE_CTL(ring, 0);
+#ifdef __NetBSD__
+ drm_iounmap(dev, &ring->virtual_start_map);
+#else
iounmap(ring->virtual_start);
+#endif
i915_gem_object_unpin(ring->obj);
drm_gem_object_unreference(&ring->obj->base);
@@ -1722,12 +1746,28 @@ int intel_render_ring_init_dri(struct dr
if (IS_I830(ring->dev) || IS_845G(ring->dev))
ring->effective_size -= 128;
+#ifdef __NetBSD__
+ ring->virtual_start_map.offset = start;
+ ring->virtual_start_map.size = size;
+ ring->virtual_start_map.type = _DRM_REGISTERS;
+ ring->virtual_start_map.flags = 0;
+ ring->virtual_start_map.flags |= _DRM_RESTRICTED;
+ ring->virtual_start_map.flags |= _DRM_KERNEL;
+ ring->virtual_start_map.flags |= _DRM_WRITE_COMBINING;
+ ring->virtual_start_map.flags |= _DRM_DRIVER;
+ ret = drm_ioremap(dev, &ring->virtual_start_map);
+ if (ret) {
+ DRM_ERROR("cannot ioremap virtual address for ring buffer\n");
+ return ret;
+ }
+#else
ring->virtual_start = ioremap_wc(start, size);
if (ring->virtual_start == NULL) {
DRM_ERROR("can not ioremap virtual address for"
" ring buffer\n");
return -ENOMEM;
}
+#endif
if (!I915_NEED_GFX_HWS(dev)) {
ret = init_phys_hws_pga(ring);
Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h:1.1.1.1.2.3 src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h:1.1.1.1.2.4
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h:1.1.1.1.2.3 Wed Jul 24 02:59:29 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h Wed Jul 24 02:59:46 2013
@@ -48,7 +48,11 @@ struct intel_ring_buffer {
} id;
#define I915_NUM_RINGS 3
u32 mmio_base;
+#ifdef __NetBSD__
+ struct drm_local_map virtual_start_map;
+#else
void __iomem *virtual_start;
+#endif
struct drm_device *dev;
struct drm_i915_gem_object *obj;
@@ -205,7 +209,11 @@ int __must_check intel_ring_begin(struct
static inline void intel_ring_emit(struct intel_ring_buffer *ring,
u32 data)
{
+#ifdef __NetBSD__
+ DRM_WRITE32(&ring->virtual_start_map, ring->tail, data);
+#else
iowrite32(data, ring->virtual_start + ring->tail);
+#endif
ring->tail += 4;
}
void intel_ring_advance(struct intel_ring_buffer *ring);