Module Name: src
Committed By: riastradh
Date: Sun Sep 8 15:54:20 UTC 2013
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [riastradh-drm2]: i915_dma.c
intel_ringbuffer.c intel_ringbuffer.h
src/sys/external/bsd/drm2/i915drm [riastradh-drm2]: intel_pm.c
Removed Files:
src/sys/external/bsd/drm2/i915drm [riastradh-drm2]: intel_ringbuffer.c
Log Message:
Adapt the Intel ringbuffer code to NetBSD.
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1.2.24 -r1.1.1.1.2.25 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c
cvs rdiff -u -r1.1.1.1.2.7 -r1.1.1.1.2.8 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c
cvs rdiff -u -r1.1.1.1.2.6 -r1.1.1.1.2.7 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h
cvs rdiff -u -r1.1.2.4 -r1.1.2.5 src/sys/external/bsd/drm2/i915drm/intel_pm.c
cvs rdiff -u -r1.1.2.2 -r0 \
src/sys/external/bsd/drm2/i915drm/intel_ringbuffer.c
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/i915_dma.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.1.1.1.2.24 src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.1.1.1.2.25
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.1.1.1.2.24 Sun Sep 8 15:34:06 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c Sun Sep 8 15:54:20 2013
@@ -239,19 +239,11 @@ static int i915_dma_resume(struct drm_de
DRM_DEBUG_DRIVER("%s\n", __func__);
-#ifdef __NetBSD__
- if (!ring->virtual_start_mapped) {
- DRM_ERROR("can not ioremap virtual address for"
- " ring buffer\n");
- return -ENOMEM;
- }
-#else
if (ring->virtual_start == NULL) {
DRM_ERROR("can not ioremap virtual address for"
" ring buffer\n");
return -ENOMEM;
}
-#endif
/* Program Hardware Status Page */
if (!ring->status_page.page_addr) {
@@ -834,17 +826,10 @@ static int i915_irq_emit(struct drm_devi
if (drm_core_check_feature(dev, DRIVER_MODESET))
return -ENODEV;
-#ifdef __NetBSD__
- if (!dev_priv || !LP_RING(dev_priv)->virtual_start_mapped) {
- DRM_ERROR("called with no initialization\n");
- return -EINVAL;
- }
-#else
if (!dev_priv || !LP_RING(dev_priv)->virtual_start) {
DRM_ERROR("called with no initialization\n");
return -EINVAL;
}
-#endif
RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
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.7 src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c:1.1.1.1.2.8
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c:1.1.1.1.2.7 Sun Sep 8 15:42:48 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c Sun Sep 8 15:54:20 2013
@@ -464,7 +464,12 @@ init_pipe_control(struct intel_ring_buff
goto err_unref;
pc->gtt_offset = obj->gtt_offset;
+#ifdef __NetBSD__
+ pc->cpu_page = kmap(container_of(TAILQ_FIRST(&obj->igo_pageq),
+ struct page, p_vmp));
+#else
pc->cpu_page = kmap(sg_page(obj->pages->sgl));
+#endif
if (pc->cpu_page == NULL)
goto err_unpin;
@@ -492,7 +497,11 @@ cleanup_pipe_control(struct intel_ring_b
obj = pc->obj;
+#ifdef __NetBSD__
+ kunmap(container_of(TAILQ_FIRST(&obj->igo_pageq), struct page, p_vmp));
+#else
kunmap(sg_page(obj->pages->sgl));
+#endif
i915_gem_object_unpin(obj);
drm_gem_object_unreference(&obj->base);
@@ -1067,7 +1076,11 @@ static void cleanup_status_page(struct i
if (obj == NULL)
return;
+#ifdef __NetBSD__
+ kunmap(container_of(TAILQ_FIRST(&obj->igo_pageq), struct page, p_vmp));
+#else
kunmap(sg_page(obj->pages->sgl));
+#endif
i915_gem_object_unpin(obj);
drm_gem_object_unreference(&obj->base);
ring->status_page.obj = NULL;
@@ -1094,7 +1107,13 @@ static int init_status_page(struct intel
}
ring->status_page.gfx_addr = obj->gtt_offset;
+#ifdef __NetBSD__
+ ring->status_page.page_addr =
+ kmap(container_of(TAILQ_FIRST(&obj->igo_pageq), struct page,
+ p_vmp));
+#else
ring->status_page.page_addr = kmap(sg_page(obj->pages->sgl));
+#endif
if (ring->status_page.page_addr == NULL) {
ret = -ENOMEM;
goto err_unpin;
@@ -1195,22 +1214,17 @@ static int intel_init_ring_buffer(struct
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;
- }
- ring->virtual_start_mapped = true;
+ ring->virtual_start = drm_ioremap(dev, &ring->virtual_start_map);
#else
ring->virtual_start =
ioremap_wc(dev_priv->mm.gtt->gma_bus_addr + obj->gtt_offset,
ring->size);
+#endif
if (ring->virtual_start == NULL) {
DRM_ERROR("Failed to map ringbuffer.\n");
ret = -EINVAL;
goto err_unpin;
}
-#endif
ret = ring->init(ring);
if (ret)
@@ -1229,7 +1243,7 @@ static int intel_init_ring_buffer(struct
err_unmap:
#ifdef __NetBSD__
drm_iounmap(dev, &ring->virtual_start_map);
- ring->virtual_start_mapped = false;
+ ring->virtual_start = NULL;
#else
iounmap(ring->virtual_start);
#endif
@@ -1262,7 +1276,7 @@ void intel_cleanup_ring_buffer(struct in
#ifdef __NetBSD__
drm_iounmap(dev_priv->dev, &ring->virtual_start_map);
- ring->virtual_start_mapped = false;
+ ring->virtual_start = NULL;
#else
iounmap(ring->virtual_start);
#endif
@@ -1388,6 +1402,18 @@ static int ring_wait_for_space(struct in
return -EBUSY;
}
+#ifdef __NetBSD__ /* XXX */
+# define __iomem __ring_iomem
+
+static inline void
+iowrite32(uint32_t value, uint32_t __ring_iomem *ptr)
+{
+
+ __insn_barrier();
+ *ptr = value;
+}
+#endif
+
static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
{
uint32_t __iomem *virt;
@@ -1399,7 +1425,8 @@ static int intel_wrap_ring_buffer(struct
return ret;
}
- virt = ring->virtual_start + ring->tail;
+ virt = (void __iomem *)((char __iomem *)ring->virtual_start +
+ ring->tail);
rem /= 4;
while (rem--)
iowrite32(MI_NOOP, virt++);
@@ -1410,6 +1437,8 @@ static int intel_wrap_ring_buffer(struct
return 0;
}
+#undef __iomem
+
int intel_ring_idle(struct intel_ring_buffer *ring)
{
u32 seqno;
@@ -1763,12 +1792,11 @@ int intel_render_ring_init_dri(struct dr
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) {
+ ring->virtual_start = drm_ioremap(dev, &ring->virtual_start_map);
+ if (ring->virtual_start == NULL) {
DRM_ERROR("cannot ioremap virtual address for ring buffer\n");
- return ret;
+ return -EIO;
}
- ring->virtual_start_mapped = true;
#else
ring->virtual_start = ioremap_wc(start, size);
if (ring->virtual_start == NULL) {
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.6 src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h:1.1.1.1.2.7
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h:1.1.1.1.2.6 Wed Jul 24 03:06:00 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h Sun Sep 8 15:54:20 2013
@@ -39,6 +39,10 @@ struct intel_hw_status_page {
#define I915_READ_SYNC_0(ring) I915_READ(RING_SYNC_0((ring)->mmio_base))
#define I915_READ_SYNC_1(ring) I915_READ(RING_SYNC_1((ring)->mmio_base))
+#ifdef __NetBSD__
+# define __ring_iomem
+#endif
+
struct intel_ring_buffer {
const char *name;
enum intel_ring_id {
@@ -50,7 +54,7 @@ struct intel_ring_buffer {
u32 mmio_base;
#ifdef __NetBSD__
struct drm_local_map virtual_start_map;
- bool virtual_start_mapped;
+ void __ring_iomem *virtual_start;
#else
void __iomem *virtual_start;
#endif
Index: src/sys/external/bsd/drm2/i915drm/intel_pm.c
diff -u src/sys/external/bsd/drm2/i915drm/intel_pm.c:1.1.2.4 src/sys/external/bsd/drm2/i915drm/intel_pm.c:1.1.2.5
--- src/sys/external/bsd/drm2/i915drm/intel_pm.c:1.1.2.4 Wed Jul 24 04:02:12 2013
+++ src/sys/external/bsd/drm2/i915drm/intel_pm.c Sun Sep 8 15:54:20 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: intel_pm.c,v 1.1.2.4 2013/07/24 04:02:12 riastradh Exp $ */
+/* $NetBSD: intel_pm.c,v 1.1.2.5 2013/09/08 15:54:20 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
/* intel_pm.c stubs */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_pm.c,v 1.1.2.4 2013/07/24 04:02:12 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_pm.c,v 1.1.2.5 2013/09/08 15:54:20 riastradh Exp $");
#include "i915_drv.h"
@@ -112,6 +112,12 @@ gen6_set_rps(struct drm_device *dev, u8
/* XXX END KLUDGEY COPYPASTA FROM intel_pm.c */
void
+i915_update_gfx_val(struct drm_i915_private *dev_priv)
+{
+ KASSERT(dev_priv->info->gen != 5); /* XXX gen<6 */
+}
+
+void
intel_disable_fbc(struct drm_device *dev __unused)
{
}