Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/external/bsd/drm2/dist/drm/nouveau Use bogus ioread32/io...



details:   https://anonhg.NetBSD.org/src/rev/c926d9876b8c
branches:  trunk
changeset: 366024:c926d9876b8c
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Mon Aug 27 07:36:18 2018 +0000

description:
Use bogus ioread32/iowrite32 wrappers for gpuobj memory.

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

diffstat:

 sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/gpuobj.h           |  11 ++-
 sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.c |  46 +++++++++-
 2 files changed, 52 insertions(+), 5 deletions(-)

diffs (110 lines):

diff -r 6849f3c0c8a3 -r c926d9876b8c sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/gpuobj.h
--- a/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/gpuobj.h Mon Aug 27 07:36:07 2018 +0000
+++ b/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/gpuobj.h Mon Aug 27 07:36:18 2018 +0000
@@ -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 @@
 #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 @@
        void __iomem *map;
 };
 
+#ifdef __NetBSD__
+#  undef       __iomem
+#endif
+
 struct nvkm_gpuobj_func {
        void *(*acquire)(struct nvkm_gpuobj *);
        void (*release)(struct nvkm_gpuobj *);
diff -r 6849f3c0c8a3 -r c926d9876b8c sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.c
--- a/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.c       Mon Aug 27 07:36:07 2018 +0000
+++ b/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_gpuobj.c       Mon Aug 27 07:36:18 2018 +0000
@@ -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 @@
 #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)



Home | Main Index | Thread Index | Old Index