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

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core: memory.h
        src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem:
            nouveau_nvkm_subdev_instmem_base.c
            nouveau_nvkm_subdev_instmem_gk20a.c
            nouveau_nvkm_subdev_instmem_nv04.c
            nouveau_nvkm_subdev_instmem_nv40.c
            nouveau_nvkm_subdev_instmem_nv50.c

Log Message:
Work bus_space or kludges into instmem stuff as expedient.


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/memory.h
cvs rdiff -u -r1.2 -r1.3 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c
 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c
 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv04.c
 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv40.c
cvs rdiff -u -r1.3 -r1.4 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv50.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/memory.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/memory.h:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/memory.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/memory.h:1.2	Mon Aug 27 04:58:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/memory.h	Mon Aug 27 07:36:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: memory.h,v 1.2 2018/08/27 04:58:30 riastradh Exp $	*/
+/*	$NetBSD: memory.h,v 1.3 2018/08/27 07:36:28 riastradh Exp $	*/
 
 #ifndef __NVKM_MEMORY_H__
 #define __NVKM_MEMORY_H__
@@ -17,6 +17,11 @@ struct nvkm_memory {
 	const struct nvkm_memory_func *func;
 };
 
+#ifdef __NetBSD__
+#  define	__nvkm_memory_iomem
+#  define	__iomem			__nvkm_memory_iomem
+#endif
+
 struct nvkm_memory_func {
 	void *(*dtor)(struct nvkm_memory *);
 	enum nvkm_memory_target (*target)(struct nvkm_memory *);
@@ -30,6 +35,10 @@ struct nvkm_memory_func {
 	void (*map)(struct nvkm_memory *, struct nvkm_vma *, u64 offset);
 };
 
+#ifdef __NetBSD__
+#  undef	__iomem
+#endif
+
 void nvkm_memory_ctor(const struct nvkm_memory_func *, struct nvkm_memory *);
 int nvkm_memory_new(struct nvkm_device *, enum nvkm_memory_target,
 		    u64 size, u32 align, bool zero, struct nvkm_memory **);

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c:1.2	Mon Aug 27 04:58:34 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c	Mon Aug 27 07:36:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_instmem_base.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_instmem_base.c,v 1.3 2018/08/27 07:36:28 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -24,13 +24,17 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_base.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_base.c,v 1.3 2018/08/27 07:36:28 riastradh Exp $");
 
 #include "priv.h"
 
 #include <core/memory.h>
 #include <subdev/bar.h>
 
+#ifdef __NetBSD__
+#  define	__iomem	__nvkm_memory_iomem
+#endif
+
 /******************************************************************************
  * instmem object base implementation
  *****************************************************************************/
@@ -87,7 +91,6 @@ nvkm_instobj_acquire(struct nvkm_memory 
  * pointers come from.
  */
 
-#  define	__iomem
 #  define	ioread32_native		fake_ioread32_native
 #  define	iowrite32_native	fake_iowrite32_native
 
@@ -115,13 +118,13 @@ fake_iowrite32_native(uint32_t v, void _
 static u32
 nvkm_instobj_rd32(struct nvkm_memory *memory, u64 offset)
 {
-	return ioread32_native(nvkm_instobj(memory)->map + offset);
+	return ioread32_native((const char *)nvkm_instobj(memory)->map + offset);
 }
 
 static void
 nvkm_instobj_wr32(struct nvkm_memory *memory, u64 offset, u32 data)
 {
-	iowrite32_native(data, nvkm_instobj(memory)->map + offset);
+	iowrite32_native(data, (char *)nvkm_instobj(memory)->map + offset);
 }
 
 #ifdef __NetBSD__
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c:1.2	Mon Aug 27 04:58:34 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c	Mon Aug 27 07:36:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.3 2018/08/27 07:36:28 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved.
@@ -44,7 +44,7 @@
  * goes beyond a certain threshold. At the moment this limit is 1MB.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.3 2018/08/27 07:36:28 riastradh Exp $");
 
 #include "priv.h"
 
@@ -54,6 +54,10 @@ __KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm
 #include <subdev/fb.h>
 #include <subdev/ltc.h>
 
+#ifdef __NetBSD__
+#  define	__iomem	__nvkm_memory_iomem
+#endif
+
 struct gk20a_instobj {
 	struct nvkm_memory memory;
 	struct nvkm_mem mem;
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv04.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv04.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv04.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv04.c:1.2	Mon Aug 27 04:58:34 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv04.c	Mon Aug 27 07:36:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_instmem_nv04.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_instmem_nv04.c,v 1.3 2018/08/27 07:36:28 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_nv04.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_nv04.c,v 1.3 2018/08/27 07:36:28 riastradh Exp $");
 
 #define nv04_instmem(p) container_of((p), struct nv04_instmem, base)
 #include "priv.h"
@@ -32,6 +32,10 @@ __KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm
 #include <core/memory.h>
 #include <core/ramht.h>
 
+#ifdef __NetBSD__
+#  define	__iomem	__nvkm_memory_iomem
+#endif
+
 struct nv04_instmem {
 	struct nvkm_instmem base;
 	struct nvkm_mm heap;
@@ -71,7 +75,8 @@ nv04_instobj_acquire(struct nvkm_memory 
 {
 	struct nv04_instobj *iobj = nv04_instobj(memory);
 	struct nvkm_device *device = iobj->imem->base.subdev.device;
-	return device->pri + 0x700000 + iobj->node->offset;
+	return (char __iomem *)bus_space_vaddr(device->mmiot, device->mmioh) +
+	    0x700000 + iobj->node->offset;
 }
 
 static void
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv40.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv40.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv40.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv40.c:1.2	Mon Aug 27 04:58:34 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv40.c	Mon Aug 27 07:36:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_instmem_nv40.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_instmem_nv40.c,v 1.3 2018/08/27 07:36:28 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_nv40.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_nv40.c,v 1.3 2018/08/27 07:36:28 riastradh Exp $");
 
 #define nv40_instmem(p) container_of((p), struct nv40_instmem, base)
 #include "priv.h"
@@ -33,6 +33,10 @@ __KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm
 #include <core/ramht.h>
 #include <engine/gr/nv40.h>
 
+#ifdef __NetBSD__
+#  define	__iomem	__nvkm_memory_iomem
+#endif
+
 struct nv40_instmem {
 	struct nvkm_instmem base;
 	struct nvkm_mm heap;
@@ -40,9 +44,8 @@ struct nv40_instmem {
 	bus_space_tag_t iomemt;
 	bus_space_handle_t iomemh;
 	bus_size_t iomemsz;
-#else
-	void __iomem *iomem;
 #endif
+	void __iomem *iomem;
 };
 
 /******************************************************************************
@@ -78,7 +81,7 @@ static void __iomem *
 nv40_instobj_acquire(struct nvkm_memory *memory)
 {
 	struct nv40_instobj *iobj = nv40_instobj(memory);
-	return iobj->imem->iomem + iobj->node->offset;
+	return (char __iomem *)iobj->imem->iomem + iobj->node->offset;
 }
 
 static void
@@ -162,7 +165,7 @@ static u32
 nv40_instmem_rd32(struct nvkm_instmem *base, u32 addr)
 {
 #ifdef __NetBSD__
-	struct nv40_instmem *imem = nv40_instmem(base)
+	struct nv40_instmem *imem = nv40_instmem(base);
 	return bus_space_read_4(imem->iomemt, imem->iomemh, addr);
 #else
 	return ioread32_native(nv40_instmem(base)->iomem + addr);
@@ -173,7 +176,7 @@ static void
 nv40_instmem_wr32(struct nvkm_instmem *base, u32 addr, u32 data)
 {
 #ifdef __NetBSD__
-	struct nv40_instmem *imem = nv40_instmem(base)
+	struct nv40_instmem *imem = nv40_instmem(base);
 	bus_space_write_4(imem->iomemt, imem->iomemh, addr, data);
 #else
 	iowrite32_native(data, nv40_instmem(base)->iomem + addr);
@@ -246,7 +249,11 @@ nv40_instmem_dtor(struct nvkm_instmem *b
 	nvkm_memory_del(&imem->base.vbios);
 	nvkm_mm_fini(&imem->heap);
 	if (imem->iomem)
+#ifdef __NetBSD__
+		bus_space_unmap(imem->iomemt, imem->iomemh, imem->iomemsz);
+#else
 		iounmap(imem->iomem);
+#endif
 	return imem;
 }
 
@@ -290,14 +297,15 @@ nv40_instmem_new(struct nvkm_device *dev
 	iomembase = device->func->resource_addr(device, bar);
 	iomemsz = device->func->resource_size(device, bar);
 	/* XXX errno NetBSD->Linux */
-	ret = -bus_space_map(imem->iomemt, iomemaddr, imem->iomemsz, 0,
-	    &imem->iomemh);
+	ret = -bus_space_map(imem->iomemt, iomembase, imem->iomemsz,
+	    BUS_SPACE_MAP_LINEAR, &imem->iomemh);
 	if (ret) {
 		nvkm_error(&imem->base.subdev, "unable to map PRAMIN BAR %d"
 		    ": %d\n", bar, ret);
 		return ret;
 	}
 	imem->iomemsz = iomemsz;
+	imem->iomem = bus_space_vaddr(imem->iomemt, imem->iomemh);
     }
 #else
 	imem->iomem = ioremap(device->func->resource_addr(device, bar),

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv50.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv50.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv50.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv50.c:1.3	Mon Aug 27 06:36:48 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_nv50.c	Mon Aug 27 07:36:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_instmem_nv50.c,v 1.3 2018/08/27 06:36:48 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_instmem_nv50.c,v 1.4 2018/08/27 07:36:28 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_nv50.c,v 1.3 2018/08/27 06:36:48 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_nv50.c,v 1.4 2018/08/27 07:36:28 riastradh Exp $");
 
 #define nv50_instmem(p) container_of((p), struct nv50_instmem, base)
 #include "priv.h"
@@ -34,6 +34,10 @@ __KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm
 #include <subdev/fb.h>
 #include <subdev/mmu.h>
 
+#ifdef __NetBSD__
+#  define	__iomem	__nvkm_memory_iomem
+#endif
+
 struct nv50_instmem {
 	struct nvkm_instmem base;
 	unsigned long lock_flags;
@@ -83,7 +87,9 @@ nv50_instobj_boot(struct nvkm_memory *me
 	struct nvkm_subdev *subdev = &iobj->imem->base.subdev;
 	struct nvkm_device *device = subdev->device;
 	u64 size = nvkm_memory_size(memory);
+#ifndef __NetBSD__
 	void __iomem *map;
+#endif
 	int ret;
 
 	iobj->map = ERR_PTR(-ENOMEM);
@@ -201,7 +207,7 @@ nv50_instobj_dtor(struct nvkm_memory *me
 		nvkm_vm_put(&iobj->bar);
 #ifdef __NetBSD__
 		bus_space_unmap(iobj->bst, iobj->bsh,
-		    nvkm_memory_size(iobj->memory));
+		    nvkm_memory_size(&iobj->memory));
 		iobj->map = NULL;
 #else
 		iounmap(iobj->map);

Reply via email to