Module Name:    src
Committed By:   riastradh
Date:           Mon Aug 27 07:35:57 UTC 2018

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/nouveau: nouveau_nvif.c
            nouveau_usif.c
        src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif: driver.h
            ioctl.h object.h
        src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core: object.h
        src/sys/external/bsd/drm2/dist/drm/nouveau/nvif: nouveau_nvif_object.c
        src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core:
            nouveau_nvkm_core_ioctl.c nouveau_nvkm_core_object.c
            nouveau_nvkm_core_oproxy.c
        src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/device:
            nouveau_nvkm_engine_device_user.c
        src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp:
            nouveau_nvkm_engine_disp_channv50.c
        src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo:
            nouveau_nvkm_engine_fifo_chan.c

Log Message:
Kludge to pass bus_space_tag through nvif mappings.

- New `ioctl' NVIF_IOCTL_V0_MAP_NETBSD returns bus_space_tag_t too.
  . Blocked from userland.  (Would only disclose a kernel virtual
    address, so not terribly serious.)
- struct nvif_driver::map function takes bus_sapce_tag, returns
  bus_space_handle in addition to kva pointer.
- struct nvif_driver::unmap function takes bus_space_tag and
  bus_space_handle rather than kva pointer.
- Teach various nvkm object types to return bus space tags too.
- Map them all with BUS_SPACE_MAP_LINEAR so the vaddr works.

XXX The fifo channel might need to be mapped with a subregion.
XXX What to do?


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_nvif.c \
    src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_usif.c
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/driver.h \
    src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/object.h
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/ioctl.h
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/object.h
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/nvif/nouveau_nvif_object.c
cvs rdiff -u -r1.2 -r1.3 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_ioctl.c \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_object.c 
\
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_oproxy.c
cvs rdiff -u -r1.2 -r1.3 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/device/nouveau_nvkm_engine_device_user.c
cvs rdiff -u -r1.2 -r1.3 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_channv50.c
cvs rdiff -u -r1.2 -r1.3 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_chan.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/nouveau_nvif.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_nvif.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_nvif.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_nvif.c:1.2	Mon Aug 27 04:58:24 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_nvif.c	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvif.c,v 1.2 2018/08/27 04:58:24 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvif.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 /*
  * Copyright 2014 Red Hat Inc.
@@ -29,7 +29,7 @@
  ******************************************************************************/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvif.c,v 1.2 2018/08/27 04:58:24 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvif.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $");
 
 #include <core/client.h>
 #include <core/notify.h>
@@ -44,6 +44,30 @@ __KERNEL_RCSID(0, "$NetBSD: nouveau_nvif
 #include "nouveau_drm.h"
 #include "nouveau_usif.h"
 
+#ifdef __NetBSD__
+#define	__iomem	__nvif_iomem
+static int
+nvkm_client_map(void *priv, bus_space_tag_t tag, u64 busaddr, u32 size,
+    bus_space_handle_t *handlep, void __iomem **ptrp)
+{
+	int ret;
+
+	ret = -bus_space_map(tag, busaddr, size, BUS_SPACE_MAP_LINEAR,
+	    handlep);
+	if (ret)
+		return ret;
+	*ptrp = bus_space_vaddr(tag, *handlep);
+	return 0;
+}
+
+static void
+nvkm_client_unmap(void *priv, bus_space_tag_t tag, bus_space_handle_t handle,
+    u32 size)
+{
+
+	bus_space_unmap(tag, handle, size);
+}
+#else
 static void
 nvkm_client_unmap(void *priv, void __iomem *ptr, u32 size)
 {
@@ -55,6 +79,7 @@ nvkm_client_map(void *priv, u64 handle, 
 {
 	return ioremap(handle, size);
 }
+#endif
 
 static int
 nvkm_client_ioctl(void *priv, bool super, void *data, u32 size, void **hack)
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_usif.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_usif.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_usif.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_usif.c:1.2	Mon Aug 27 04:58:24 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_usif.c	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_usif.c,v 1.2 2018/08/27 04:58:24 riastradh Exp $	*/
+/*	$NetBSD: nouveau_usif.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 /*
  * Copyright 2014 Red Hat Inc.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_usif.c,v 1.2 2018/08/27 04:58:24 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_usif.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $");
 
 #include "nouveau_drm.h"
 #include "nouveau_usif.h"
@@ -355,6 +355,9 @@ usif_ioctl(struct drm_file *filp, void _
 	case NVIF_IOCTL_V0_NTFY_PUT:
 		ret = usif_notify_put(filp, data, size, argv, argc);
 		break;
+	case NVIF_IOCTL_V0_MAP_NETBSD:
+		/* Kernel-only kludge.  */
+		ret = -EINVAL;
 	default:
 		ret = nvif_client_ioctl(client, argv, argc);
 		break;

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/driver.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/driver.h:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/driver.h:1.4
--- src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/driver.h:1.3	Mon Aug 27 07:32:59 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/driver.h	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: driver.h,v 1.3 2018/08/27 07:32:59 riastradh Exp $	*/
+/*	$NetBSD: driver.h,v 1.4 2018/08/27 07:35:56 riastradh Exp $	*/
 
 #ifndef __NVIF_DRIVER_H__
 #define __NVIF_DRIVER_H__
@@ -16,8 +16,15 @@ struct nvif_driver {
 	int (*suspend)(void *priv);
 	int (*resume)(void *priv);
 	int (*ioctl)(void *priv, bool super, void *data, u32 size, void **hack);
+#ifdef __NetBSD__
+	int (*map)(void *priv, bus_space_tag_t tag, u64 handle, u32 size,
+	    bus_space_handle_t *handlep, void __iomem **ptrp);
+	void (*unmap)(void *priv, bus_space_tag_t tag,
+	    bus_space_handle_t handle, u32 size);
+#else
 	void __iomem *(*map)(void *priv, u64 handle, u32 size);
 	void (*unmap)(void *priv, void __iomem *ptr, u32 size);
+#endif
 	bool keep;
 };
 
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/object.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/object.h:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/object.h:1.4
--- src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/object.h:1.3	Mon Aug 27 07:32:59 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/object.h	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: object.h,v 1.3 2018/08/27 07:32:59 riastradh Exp $	*/
+/*	$NetBSD: object.h,v 1.4 2018/08/27 07:35:56 riastradh Exp $	*/
 
 #ifndef __NVIF_OBJECT_H__
 #define __NVIF_OBJECT_H__
@@ -67,6 +67,10 @@ struct nvif_object {
 	s32 oclass;
 	void *priv; /*XXX: hack */
 	struct {
+#ifdef __NetBSD__
+		bus_space_tag_t tag;
+		bus_space_handle_t handle;
+#endif
 		void __iomem *ptr;
 		u32 size;
 	} map;

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/ioctl.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/ioctl.h:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/ioctl.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/ioctl.h:1.2	Mon Aug 27 04:58:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/ioctl.h	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: ioctl.h,v 1.2 2018/08/27 04:58:30 riastradh Exp $	*/
+/*	$NetBSD: ioctl.h,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 #ifndef __NVIF_IOCTL_H__
 #define __NVIF_IOCTL_H__
@@ -20,6 +20,7 @@ struct nvif_ioctl_v0 {
 #define NVIF_IOCTL_V0_NTFY_DEL                                             0x0a
 #define NVIF_IOCTL_V0_NTFY_GET                                             0x0b
 #define NVIF_IOCTL_V0_NTFY_PUT                                             0x0c
+#define NVIF_IOCTL_V0_MAP_NETBSD					   0x0d
 	__u8  type;
 	__u8  pad02[4];
 #define NVIF_IOCTL_V0_OWNER_NVIF                                           0x00
@@ -98,6 +99,19 @@ struct nvif_ioctl_map_v0 {
 	__u64 handle;
 };
 
+#ifdef __NetBSD__
+/* XXX Kludge for NetBSD kernel-only use.  */
+#include <sys/bus.h>
+struct nvif_ioctl_map_netbsd_v0 {
+	/* nvif_ioctl ... */
+	__u8  version;
+	__u8  pad01[3];
+	bus_space_tag_t tag;
+	__u32 length;
+	__u64 handle;
+};
+#endif
+
 struct nvif_ioctl_unmap {
 };
 

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/object.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/object.h:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/object.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/object.h:1.2	Mon Aug 27 04:58:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvkm/core/object.h	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: object.h,v 1.2 2018/08/27 04:58:30 riastradh Exp $	*/
+/*	$NetBSD: object.h,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 #ifndef __NVKM_OBJECT_H__
 #define __NVKM_OBJECT_H__
@@ -29,7 +29,12 @@ struct nvkm_object_func {
 	int (*fini)(struct nvkm_object *, bool suspend);
 	int (*mthd)(struct nvkm_object *, u32 mthd, void *data, u32 size);
 	int (*ntfy)(struct nvkm_object *, u32 mthd, struct nvkm_event **);
+#ifdef __NetBSD__
+	int (*map)(struct nvkm_object *, bus_space_tag_t *tagp, u64 *addr,
+	    u32 *size);
+#else
 	int (*map)(struct nvkm_object *, u64 *addr, u32 *size);
+#endif
 	int (*rd08)(struct nvkm_object *, u64 addr, u8 *data);
 	int (*rd16)(struct nvkm_object *, u64 addr, u16 *data);
 	int (*rd32)(struct nvkm_object *, u64 addr, u32 *data);
@@ -54,7 +59,8 @@ int nvkm_object_init(struct nvkm_object 
 int nvkm_object_fini(struct nvkm_object *, bool suspend);
 int nvkm_object_mthd(struct nvkm_object *, u32 mthd, void *data, u32 size);
 int nvkm_object_ntfy(struct nvkm_object *, u32 mthd, struct nvkm_event **);
-int nvkm_object_map(struct nvkm_object *, u64 *addr, u32 *size);
+int nvkm_object_map(struct nvkm_object *, bus_space_tag_t *, u64 *addr,
+    u32 *size);
 int nvkm_object_rd08(struct nvkm_object *, u64 addr, u8  *data);
 int nvkm_object_rd16(struct nvkm_object *, u64 addr, u16 *data);
 int nvkm_object_rd32(struct nvkm_object *, u64 addr, u32 *data);

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvif/nouveau_nvif_object.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvif/nouveau_nvif_object.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvif/nouveau_nvif_object.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvif/nouveau_nvif_object.c:1.2	Mon Aug 27 04:58:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvif/nouveau_nvif_object.c	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvif_object.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvif_object.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 /*
  * Copyright 2014 Red Hat Inc.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvif_object.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvif_object.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $");
 
 #include <nvif/object.h>
 #include <nvif/client.h>
@@ -183,7 +183,8 @@ nvif_object_unmap(struct nvif_object *ob
 		};
 
 		if (object->map.ptr) {
-			client->driver->unmap(client, object->map.ptr,
+			client->driver->unmap(client, object->map.tag,
+						      object->map.handle,
 						      object->map.size);
 			object->map.ptr = NULL;
 		}
@@ -199,18 +200,36 @@ nvif_object_map(struct nvif_object *obje
 	struct nvif_client *client = object->client;
 	struct {
 		struct nvif_ioctl_v0 ioctl;
+#ifdef __NetBSD__
+		struct nvif_ioctl_map_netbsd_v0 map;
+#else
 		struct nvif_ioctl_map_v0 map;
+#endif
 	} args = {
+#ifdef __NetBSD__
+		.ioctl.type = NVIF_IOCTL_V0_MAP_NETBSD,
+#else
 		.ioctl.type = NVIF_IOCTL_V0_MAP,
+#endif
 	};
 	int ret = nvif_object_ioctl(object, &args, sizeof(args), NULL);
 	if (ret == 0) {
 		object->map.size = args.map.length;
+#ifdef __NetBSD__
+		ret = client->driver->map(client, args.map.tag,
+		    args.map.handle, object->map.size, &object->map.handle,
+		    &object->map.ptr);
+		if (ret) {
+			nvif_object_unmap(object);
+			return -ENOMEM;
+		}
+#else
 		object->map.ptr = client->driver->map(client, args.map.handle,
 						      object->map.size);
 		if (ret = -ENOMEM, object->map.ptr)
 			return 0;
 		nvif_object_unmap(object);
+#endif
 	}
 	return ret;
 }

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_ioctl.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_ioctl.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_ioctl.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_ioctl.c:1.2	Mon Aug 27 04:58:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_ioctl.c	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_core_ioctl.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_core_ioctl.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 /*
  * Copyright 2014 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs <[email protected]>
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_ioctl.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_ioctl.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $");
 
 #include <core/ioctl.h>
 #include <core/client.h>
@@ -260,8 +260,29 @@ nvkm_ioctl_map(struct nvkm_object *objec
 
 	nvif_ioctl(object, "map size %d\n", size);
 	if (nvif_unpack(args->v0, 0, 0, false)) {
+		bus_space_tag_t dummy __unused;
 		nvif_ioctl(object, "map vers %d\n", args->v0.version);
-		ret = nvkm_object_map(object, &args->v0.handle,
+		ret = nvkm_object_map(object, &dummy,
+					      &args->v0.handle,
+					      &args->v0.length);
+	}
+
+	return ret;
+}
+
+static int
+nvkm_ioctl_map_netbsd(struct nvkm_object *object, void *data, u32 size)
+{
+	union {
+		struct nvif_ioctl_map_netbsd_v0 v0;
+	} *args = data;
+	int ret;
+
+	nvif_ioctl(object, "map size %d\n", size);
+	if (nvif_unpack(args->v0, 0, 0, false)) {
+		nvif_ioctl(object, "map vers %d\n", args->v0.version);
+		ret = nvkm_object_map(object, &args->v0.tag,
+					      &args->v0.handle,
 					      &args->v0.length);
 	}
 
@@ -385,6 +406,7 @@ nvkm_ioctl_v0[] = {
 	{ 0x00, nvkm_ioctl_ntfy_del },
 	{ 0x00, nvkm_ioctl_ntfy_get },
 	{ 0x00, nvkm_ioctl_ntfy_put },
+	{ 0x00, nvkm_ioctl_map_netbsd },
 };
 
 static int
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_object.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_object.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_object.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_object.c:1.2	Mon Aug 27 04:58:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_object.c	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_core_object.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_core_object.c,v 1.3 2018/08/27 07:35:56 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_object.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_object.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $");
 
 #include <core/object.h>
 #include <core/client.h>
@@ -48,10 +48,11 @@ nvkm_object_ntfy(struct nvkm_object *obj
 }
 
 int
-nvkm_object_map(struct nvkm_object *object, u64 *addr, u32 *size)
+nvkm_object_map(struct nvkm_object *object, bus_space_tag_t *tagp, u64 *addr,
+    u32 *size)
 {
 	if (likely(object->func->map))
-		return object->func->map(object, addr, size);
+		return object->func->map(object, tagp, addr, size);
 	return -ENODEV;
 }
 
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_oproxy.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_oproxy.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_oproxy.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_oproxy.c:1.2	Mon Aug 27 04:58:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_oproxy.c	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_core_oproxy.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_core_oproxy.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 /*
  * Copyright 2015 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs <[email protected]>
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_oproxy.c,v 1.2 2018/08/27 04:58:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_oproxy.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $");
 
 #include <core/oproxy.h>
 
@@ -42,9 +42,10 @@ nvkm_oproxy_ntfy(struct nvkm_object *obj
 }
 
 static int
-nvkm_oproxy_map(struct nvkm_object *object, u64 *addr, u32 *size)
+nvkm_oproxy_map(struct nvkm_object *object, bus_space_tag_t *tagp, u64 *addr,
+    u32 *size)
 {
-	return nvkm_object_map(nvkm_oproxy(object)->object, addr, size);
+	return nvkm_object_map(nvkm_oproxy(object)->object, tagp, addr, size);
 }
 
 static int

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/device/nouveau_nvkm_engine_device_user.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/device/nouveau_nvkm_engine_device_user.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/device/nouveau_nvkm_engine_device_user.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/device/nouveau_nvkm_engine_device_user.c:1.2	Mon Aug 27 04:58:31 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/device/nouveau_nvkm_engine_device_user.c	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_engine_device_user.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_engine_device_user.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_device_user.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_device_user.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $");
 
 #define nvkm_udevice(p) container_of((p), struct nvkm_udevice, object)
 #include "priv.h"
@@ -205,10 +205,12 @@ nvkm_udevice_wr32(struct nvkm_object *ob
 }
 
 static int
-nvkm_udevice_map(struct nvkm_object *object, u64 *addr, u32 *size)
+nvkm_udevice_map(struct nvkm_object *object, bus_space_tag_t *tagp, u64 *addr,
+    u32 *size)
 {
 	struct nvkm_udevice *udev = nvkm_udevice(object);
 	struct nvkm_device *device = udev->device;
+	*tagp = device->func->resource_tag(device, 0);
 	*addr = device->func->resource_addr(device, 0);
 	*size = device->func->resource_size(device, 0);
 	return 0;

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_channv50.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_channv50.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_channv50.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_channv50.c:1.2	Mon Aug 27 04:58:31 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_channv50.c	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_engine_disp_channv50.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_engine_disp_channv50.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_channv50.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_channv50.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $");
 
 #include "channv50.h"
 #include "rootnv50.h"
@@ -194,12 +194,14 @@ nv50_disp_chan_ntfy(struct nvkm_object *
 	return -EINVAL;
 }
 
-int
-nv50_disp_chan_map(struct nvkm_object *object, u64 *addr, u32 *size)
+static int
+nv50_disp_chan_map(struct nvkm_object *object, bus_space_tag_t *tagp,
+    u64 *addr, u32 *size)
 {
 	struct nv50_disp_chan *chan = nv50_disp_chan(object);
 	struct nv50_disp *disp = chan->root->disp;
 	struct nvkm_device *device = disp->base.engine.subdev.device;
+	*tagp = device->func->resource_tag(device, 0);
 	*addr = device->func->resource_addr(device, 0) +
 		0x640000 + (chan->chid * 0x1000);
 	*size = 0x001000;

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_chan.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_chan.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_chan.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_chan.c:1.2	Mon Aug 27 04:58:31 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_chan.c	Mon Aug 27 07:35:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_engine_fifo_chan.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_engine_fifo_chan.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_fifo_chan.c,v 1.2 2018/08/27 04:58:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_fifo_chan.c,v 1.3 2018/08/27 07:35:56 riastradh Exp $");
 
 #include "chan.h"
 
@@ -258,9 +258,12 @@ nvkm_fifo_chan_ntfy(struct nvkm_object *
 }
 
 static int
-nvkm_fifo_chan_map(struct nvkm_object *object, u64 *addr, u32 *size)
+nvkm_fifo_chan_map(struct nvkm_object *object, bus_space_tag_t *tagp,
+    u64 *addr, u32 *size)
 {
 	struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object);
+	/* XXX Uh oh.  Can't map this more than once.  OK?  */
+	*tagp = chan->bst;
 	*addr = chan->addr;
 	*size = chan->size;
 	return 0;

Reply via email to