Module Name:    src
Committed By:   jmcneill
Date:           Tue Dec 26 14:54:52 UTC 2017

Modified Files:
        src/sys/arch/arm/nvidia: files.tegra tegra_drm.c tegra_drm.h
            tegra_drm_fb.c tegra_drm_mode.c tegra_fb.c
Removed Files:
        src/sys/arch/arm/nvidia: tegra_drm_gem.c

Log Message:
Use DRM GEM/CMA helper.


To generate a diff of this commit:
cvs rdiff -u -r1.45 -r1.46 src/sys/arch/arm/nvidia/files.tegra
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/nvidia/tegra_drm.c \
    src/sys/arch/arm/nvidia/tegra_drm.h
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_drm_fb.c
cvs rdiff -u -r1.3 -r0 src/sys/arch/arm/nvidia/tegra_drm_gem.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/nvidia/tegra_drm_mode.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_fb.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/arch/arm/nvidia/files.tegra
diff -u src/sys/arch/arm/nvidia/files.tegra:1.45 src/sys/arch/arm/nvidia/files.tegra:1.46
--- src/sys/arch/arm/nvidia/files.tegra:1.45	Tue Sep 26 16:12:45 2017
+++ src/sys/arch/arm/nvidia/files.tegra	Tue Dec 26 14:54:52 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: files.tegra,v 1.45 2017/09/26 16:12:45 jmcneill Exp $
+#	$NetBSD: files.tegra,v 1.46 2017/12/26 14:54:52 jmcneill Exp $
 #
 # Configuration info for NVIDIA Tegra ARM Peripherals
 #
@@ -157,7 +157,6 @@ attach	tegradrm at fdt with tegra_drm
 file	arch/arm/nvidia/tegra_drm.c		tegra_drm
 file	arch/arm/nvidia/tegra_drm_mode.c	tegra_drm
 file	arch/arm/nvidia/tegra_drm_fb.c		tegra_drm
-file	arch/arm/nvidia/tegra_drm_gem.c		tegra_drm
 
 # Framebuffer console
 device	tegrafb: tegrafbbus, drmfb, wsemuldisplaydev

Index: src/sys/arch/arm/nvidia/tegra_drm.c
diff -u src/sys/arch/arm/nvidia/tegra_drm.c:1.7 src/sys/arch/arm/nvidia/tegra_drm.c:1.8
--- src/sys/arch/arm/nvidia/tegra_drm.c:1.7	Sun Apr 16 12:28:21 2017
+++ src/sys/arch/arm/nvidia/tegra_drm.c	Tue Dec 26 14:54:52 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_drm.c,v 1.7 2017/04/16 12:28:21 jmcneill Exp $ */
+/* $NetBSD: tegra_drm.c,v 1.8 2017/12/26 14:54:52 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_drm.c,v 1.7 2017/04/16 12:28:21 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_drm.c,v 1.8 2017/12/26 14:54:52 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -57,29 +57,18 @@ static int	tegra_drm_set_busid(struct dr
 static int	tegra_drm_load(struct drm_device *, unsigned long);
 static int	tegra_drm_unload(struct drm_device *);
 
-static int	tegra_drm_dumb_create(struct drm_file *, struct drm_device *,
-		    struct drm_mode_create_dumb *);
-static int	tegra_drm_dumb_map_offset(struct drm_file *,
-		    struct drm_device *, uint32_t, uint64_t *);
-
-static const struct uvm_pagerops tegra_drm_gem_uvm_ops = {
-	.pgo_reference = drm_gem_pager_reference,
-	.pgo_detach = drm_gem_pager_detach,
-	.pgo_fault = tegra_drm_gem_fault,
-};
-
 static struct drm_driver tegra_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM,
 	.dev_priv_size = 0,
 	.load = tegra_drm_load,
 	.unload = tegra_drm_unload,
 
-	.gem_free_object = tegra_drm_gem_free_object,
+	.gem_free_object = drm_gem_cma_free_object,
 	.mmap_object = drm_gem_or_legacy_mmap_object,
-	.gem_uvm_ops = &tegra_drm_gem_uvm_ops,
+	.gem_uvm_ops = &drm_gem_cma_uvm_ops,
 
-	.dumb_create = tegra_drm_dumb_create,
-	.dumb_map_offset = tegra_drm_dumb_map_offset,
+	.dumb_create = drm_gem_cma_dumb_create,
+	.dumb_map_offset = drm_gem_cma_dumb_map_offset,
 	.dumb_destroy = drm_gem_dumb_destroy,
 
 	.get_vblank_counter = tegra_drm_get_vblank_counter,
@@ -283,62 +272,3 @@ tegra_drm_unload(struct drm_device *ddev
 
 	return 0;
 }
-
-static int
-tegra_drm_dumb_create(struct drm_file *file_priv, struct drm_device *ddev,
-    struct drm_mode_create_dumb *args)
-{
-	struct tegra_gem_object *obj;
-	uint32_t handle;
-	int error;
-
-	args->pitch = args->width * ((args->bpp + 7) / 8);
-	args->size = args->pitch * args->height;
-	args->size = roundup(args->size, PAGE_SIZE);
-	args->handle = 0;
-
-	obj = tegra_drm_obj_alloc(ddev, args->size);
-	if (obj == NULL)
-		return -ENOMEM;
-
-	error = drm_gem_handle_create(file_priv, &obj->base, &handle);
-	drm_gem_object_unreference_unlocked(&obj->base);
-	if (error) {
-		tegra_drm_obj_free(obj);
-		return error;
-	}
-
-	args->handle = handle;
-
-	return 0;
-}
-
-static int
-tegra_drm_dumb_map_offset(struct drm_file *file_priv,
-    struct drm_device *ddev, uint32_t handle, uint64_t *offset)
-{
-	struct drm_gem_object *gem_obj;
-	struct tegra_gem_object *obj;
-	int error;
-
-	gem_obj = drm_gem_object_lookup(ddev, file_priv, handle);
-	if (gem_obj == NULL)
-		return -ENOENT;
-
-	obj = to_tegra_gem_obj(gem_obj);
-
-	if (drm_vma_node_has_offset(&obj->base.vma_node) == 0) {
-		error = drm_gem_create_mmap_offset(&obj->base);
-		if (error)
-			goto done;
-	} else {
-		error = 0;
-	}
-
-	*offset = drm_vma_node_offset_addr(&obj->base.vma_node);
-
-done:
-	drm_gem_object_unreference_unlocked(&obj->base);
-
-	return error;
-}
Index: src/sys/arch/arm/nvidia/tegra_drm.h
diff -u src/sys/arch/arm/nvidia/tegra_drm.h:1.7 src/sys/arch/arm/nvidia/tegra_drm.h:1.8
--- src/sys/arch/arm/nvidia/tegra_drm.h:1.7	Sat Dec 17 12:11:38 2016
+++ src/sys/arch/arm/nvidia/tegra_drm.h	Tue Dec 26 14:54:52 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_drm.h,v 1.7 2016/12/17 12:11:38 maya Exp $ */
+/* $NetBSD: tegra_drm.h,v 1.8 2017/12/26 14:54:52 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -30,6 +30,7 @@
 #define _ARM_TEGRA_DRM_H
 
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_gem_cma_helper.h>
 
 #define DRIVER_AUTHOR		"Jared McNeill"
 
@@ -43,8 +44,6 @@
 
 struct tegra_framebuffer;
 
-struct tegra_gem_object;
-
 struct tegra_drm_softc {
 	device_t		sc_dev;
 	struct drm_device	*sc_ddev;
@@ -93,7 +92,7 @@ struct tegra_crtc {
 	bool			enabled;
 	struct clk		*clk_parent;
 
-	struct tegra_gem_object	*cursor_obj;
+	struct drm_gem_cma_object	*cursor_obj;
 	int			cursor_x;
 	int			cursor_y;
 };
@@ -115,18 +114,9 @@ struct tegra_connector {
 	bool			has_audio;
 };
 
-struct tegra_gem_object {
-	struct drm_gem_object	base;
-	bus_dma_tag_t		dmat;
-	bus_dma_segment_t	dmasegs[1];
-	bus_size_t		dmasize;
-	bus_dmamap_t		dmamap;
-	void			*dmap;
-};
-
 struct tegra_framebuffer {
 	struct drm_framebuffer	base;
-	struct tegra_gem_object *obj;
+	struct drm_gem_cma_object *obj;
 };
 
 struct tegra_fbdev {
@@ -155,7 +145,6 @@ struct tegra_fbdev {
 #define to_tegra_connector(x)	container_of(x, struct tegra_connector, base)
 #define to_tegra_framebuffer(x)	container_of(x, struct tegra_framebuffer, base)
 #define to_tegra_fbdev(x)	container_of(x, struct tegra_fbdev, helper)
-#define to_tegra_gem_obj(x)	container_of(x, struct tegra_gem_object, base)
 
 int	tegra_drm_mode_init(struct drm_device *);
 int	tegra_drm_fb_init(struct drm_device *);
@@ -165,11 +154,4 @@ void	tegra_drm_disable_vblank(struct drm
 int	tegra_drm_framebuffer_init(struct drm_device *,
 	    struct tegra_framebuffer *);
 
-struct tegra_gem_object *tegra_drm_obj_alloc(struct drm_device *, size_t);
-void	tegra_drm_obj_free(struct tegra_gem_object *);
-
-int	tegra_drm_gem_fault(struct uvm_faultinfo *, vaddr_t, struct vm_page **,
-	    int, int, vm_prot_t, int);
-void	tegra_drm_gem_free_object(struct drm_gem_object *);
-
 #endif /* _ARM_TEGRA_DRM_H */

Index: src/sys/arch/arm/nvidia/tegra_drm_fb.c
diff -u src/sys/arch/arm/nvidia/tegra_drm_fb.c:1.5 src/sys/arch/arm/nvidia/tegra_drm_fb.c:1.6
--- src/sys/arch/arm/nvidia/tegra_drm_fb.c:1.5	Thu Jun  1 02:45:05 2017
+++ src/sys/arch/arm/nvidia/tegra_drm_fb.c	Tue Dec 26 14:54:52 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_drm_fb.c,v 1.5 2017/06/01 02:45:05 chs Exp $ */
+/* $NetBSD: tegra_drm_fb.c,v 1.6 2017/12/26 14:54:52 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_drm_fb.c,v 1.5 2017/06/01 02:45:05 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_drm_fb.c,v 1.6 2017/12/26 14:54:52 jmcneill Exp $");
 
 #include <drm/drmP.h>
 #include <drm/drm_crtc.h>
@@ -125,7 +125,7 @@ tegra_fb_init(struct drm_device *ddev, s
 
 	const size_t size = roundup(height * pitch, PAGE_SIZE);
 
-	tegra_fb->obj = tegra_drm_obj_alloc(ddev, size);
+	tegra_fb->obj = drm_gem_cma_create(ddev, size);
 	if (tegra_fb->obj == NULL)
 		return -ENOMEM;
 

Index: src/sys/arch/arm/nvidia/tegra_drm_mode.c
diff -u src/sys/arch/arm/nvidia/tegra_drm_mode.c:1.15 src/sys/arch/arm/nvidia/tegra_drm_mode.c:1.16
--- src/sys/arch/arm/nvidia/tegra_drm_mode.c:1.15	Thu Jun  1 02:45:05 2017
+++ src/sys/arch/arm/nvidia/tegra_drm_mode.c	Tue Dec 26 14:54:52 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_drm_mode.c,v 1.15 2017/06/01 02:45:05 chs Exp $ */
+/* $NetBSD: tegra_drm_mode.c,v 1.16 2017/12/26 14:54:52 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_drm_mode.c,v 1.15 2017/06/01 02:45:05 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_drm_mode.c,v 1.16 2017/12/26 14:54:52 jmcneill Exp $");
 
 #include <drm/drmP.h>
 #include <drm/drm_crtc.h>
@@ -233,7 +233,7 @@ tegra_fb_create(struct drm_device *ddev,
 		return NULL;
 
 	fb = kmem_zalloc(sizeof(*fb), KM_SLEEP);
-	fb->obj = to_tegra_gem_obj(gem_obj);
+	fb->obj = to_drm_gem_cma_obj(gem_obj);
 	fb->base.pitches[0] = cmd->pitches[0];
 	fb->base.offsets[0] = cmd->offsets[0];
 	fb->base.width = cmd->width;
@@ -323,7 +323,7 @@ tegra_crtc_init(struct drm_device *ddev,
 		DRM_ERROR("failed to establish interrupt for crtc %d\n", index);
 	}
 	const size_t cursor_size = 256 * 256 * 4;
-	crtc->cursor_obj = tegra_drm_obj_alloc(ddev, cursor_size);
+	crtc->cursor_obj = drm_gem_cma_create(ddev, cursor_size);
 	if (crtc->cursor_obj == NULL) {
 		kmem_free(crtc, sizeof(*crtc));
 		return -ENOMEM;
@@ -372,7 +372,7 @@ tegra_crtc_cursor_set(struct drm_crtc *c
 {
 	struct tegra_crtc *tegra_crtc = to_tegra_crtc(crtc);
 	struct drm_gem_object *gem_obj = NULL;
-	struct tegra_gem_object *obj;
+	struct drm_gem_cma_object *obj;
 	uint32_t cfg, opt;
 	int error;
 
@@ -410,7 +410,7 @@ tegra_crtc_cursor_set(struct drm_crtc *c
 		error = -ENOENT;
 		goto done;
 	}
-	obj = to_tegra_gem_obj(gem_obj);
+	obj = to_drm_gem_cma_obj(gem_obj);
 
 	if (obj->base.size < width * height * 4) {
 		DRM_ERROR("Cursor buffer is too small\n");
@@ -440,8 +440,8 @@ tegra_crtc_cursor_set(struct drm_crtc *c
 	}
 
 	/* copy cursor (argb -> rgba) */
-	struct tegra_gem_object *cursor_obj = tegra_crtc->cursor_obj;
-	uint32_t off, *cp = obj->dmap, *crtc_cp = cursor_obj->dmap;
+	struct drm_gem_cma_object *cursor_obj = tegra_crtc->cursor_obj;
+	uint32_t off, *cp = obj->vaddr, *crtc_cp = cursor_obj->vaddr;
 	for (off = 0; off < width * height; off++) {
 		crtc_cp[off] = (cp[off] << 8) | (cp[off] >> 24);
 	}
@@ -538,7 +538,7 @@ tegra_crtc_destroy(struct drm_crtc *crtc
 	if (tegra_crtc->ih) {
 		intr_disestablish(tegra_crtc->ih);
 	}
-	tegra_drm_obj_free(tegra_crtc->cursor_obj);
+	drm_gem_cma_free_object(&tegra_crtc->cursor_obj->base);
 	bus_space_unmap(tegra_crtc->bst, tegra_crtc->bsh, tegra_crtc->size);
 	kmem_free(tegra_crtc, sizeof(*tegra_crtc));
 }

Index: src/sys/arch/arm/nvidia/tegra_fb.c
diff -u src/sys/arch/arm/nvidia/tegra_fb.c:1.3 src/sys/arch/arm/nvidia/tegra_fb.c:1.4
--- src/sys/arch/arm/nvidia/tegra_fb.c:1.3	Sat Dec 17 12:11:38 2016
+++ src/sys/arch/arm/nvidia/tegra_fb.c	Tue Dec 26 14:54:52 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_fb.c,v 1.3 2016/12/17 12:11:38 maya Exp $ */
+/* $NetBSD: tegra_fb.c,v 1.4 2017/12/26 14:54:52 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_fb.c,v 1.3 2016/12/17 12:11:38 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_fb.c,v 1.4 2017/12/26 14:54:52 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -92,7 +92,7 @@ tegra_fb_attach(device_t parent, device_
 		.da_dev = self,
 		.da_fb_helper = tfa->tfa_fb_helper,
 		.da_fb_sizes = &tfa->tfa_fb_sizes,
-		.da_fb_vaddr = sc->sc_fb->obj->dmap,
+		.da_fb_vaddr = sc->sc_fb->obj->vaddr,
 		.da_fb_linebytes = tfa->tfa_fb_linebytes,
 		.da_params = &tegrafb_drmfb_params,
 	};
@@ -118,7 +118,7 @@ static paddr_t
 tegra_fb_mmapfb(struct drmfb_softc *sc, off_t off, int prot)
 {
 	struct tegra_fb_softc * const tfb_sc = (struct tegra_fb_softc *)sc;
-	struct tegra_gem_object *obj = tfb_sc->sc_fb->obj;
+	struct drm_gem_cma_object *obj = tfb_sc->sc_fb->obj;
 
 	KASSERT(off >= 0);
 	KASSERT(off < obj->dmasize);

Reply via email to