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)