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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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);