Module Name:    src
Committed By:   riastradh
Date:           Mon Aug 27 07:36:18 UTC 2018

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core: gpuobj.h
        src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core:
            nouveau_nvkm_core_gpuobj.c

Log Message:
Use bogus ioread32/iowrite32 wrappers for gpuobj memory.

Not clear how to turn this into bus_space, or whether it's worthwhile
at all.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/gpuobj.h
cvs rdiff -u -r1.2 -r1.3 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.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/nouveau/include/nvkm/core/gpuobj.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/gpuobj.h:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/gpuobj.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/gpuobj.h:1.2	Mon Aug 27 04:58:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/gpuobj.h	Mon Aug 27 07:36:18 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: gpuobj.h,v 1.2 2018/08/27 04:58:30 riastradh Exp $	*/
+/*	$NetBSD: gpuobj.h,v 1.3 2018/08/27 07:36:18 riastradh Exp $	*/
 
 #ifndef __NVKM_GPUOBJ_H__
 #define __NVKM_GPUOBJ_H__
@@ -11,6 +11,11 @@ struct nvkm_vm;
 #define NVOBJ_FLAG_ZERO_ALLOC 0x00000001
 #define NVOBJ_FLAG_HEAP       0x00000004
 
+#ifdef __NetBSD__
+#  define	__nvkm_gpuobj_iomem
+#  define	__iomem			__nvkm_gpuobj_iomem
+#endif
+
 struct nvkm_gpuobj {
 	struct nvkm_object object;
 	const struct nvkm_gpuobj_func *func;
@@ -25,6 +30,10 @@ struct nvkm_gpuobj {
 	void __iomem *map;
 };
 
+#ifdef __NetBSD__
+#  undef	__iomem
+#endif
+
 struct nvkm_gpuobj_func {
 	void *(*acquire)(struct nvkm_gpuobj *);
 	void (*release)(struct nvkm_gpuobj *);

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.c:1.2	Mon Aug 27 04:58:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.c	Mon Aug 27 07:36:18 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_core_gpuobj.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_core_gpuobj.c,v 1.3 2018/08/27 07:36:18 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_gpuobj.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_gpuobj.c,v 1.3 2018/08/27 07:36:18 riastradh Exp $");
 
 #include <core/gpuobj.h>
 #include <core/engine.h>
@@ -33,19 +33,57 @@ __KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm
 #include <subdev/bar.h>
 #include <subdev/mmu.h>
 
+#ifdef __NetBSD__
+
+/*
+ * XXX I think this should be done with bus_space, but the depth of
+ * abstractions is dizzying and I'm not actually sure where these
+ * pointers come from.
+ */
+
+#  define	__iomem			__nvkm_gpuobj_iomem
+#  define	ioread32_native		fake_ioread32_native
+#  define	iowrite32_native	fake_iowrite32_native
+
+static inline uint32_t
+fake_ioread32_native(const void __iomem *ptr)
+{
+	uint32_t v;
+
+	v = *(const uint32_t __iomem *)ptr;
+	membar_consumer();
+
+	return v;
+}
+
+static inline void
+fake_iowrite32_native(uint32_t v, void __iomem *ptr)
+{
+
+	membar_producer();
+	*(uint32_t __iomem *)ptr = v;
+}
+
+#endif
+
 /* fast-path, where backend is able to provide direct pointer to memory */
 static u32
 nvkm_gpuobj_rd32_fast(struct nvkm_gpuobj *gpuobj, u32 offset)
 {
-	return ioread32_native(gpuobj->map + offset);
+	return ioread32_native((const char __iomem *)gpuobj->map + offset);
 }
 
 static void
 nvkm_gpuobj_wr32_fast(struct nvkm_gpuobj *gpuobj, u32 offset, u32 data)
 {
-	iowrite32_native(data, gpuobj->map + offset);
+	iowrite32_native(data, (char __iomem *)gpuobj->map + offset);
 }
 
+#ifdef __NetBSD__
+#  undef	ioread32_native
+#  undef	iowrite32_native
+#endif
+
 /* accessor functions for gpuobjs allocated directly from instmem */
 static u32
 nvkm_gpuobj_heap_rd32(struct nvkm_gpuobj *gpuobj, u32 offset)

Reply via email to