Module Name: src Committed By: riz Date: Fri Nov 6 23:03:20 UTC 2015
Modified Files: src/sys/external/bsd/drm2/dist/drm/nouveau [netbsd-7]: nouveau_drm.c src/sys/external/bsd/drm2/dist/drm/nouveau/core/engine/fifo [netbsd-7]: nouveau_engine_fifo_nve0.c Log Message: Pull up following revision(s) (requested by riastradh in ticket #1002): sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c: revision 1.6 sys/external/bsd/drm2/dist/drm/nouveau/core/engine/fifo/nouveau_engine_fifo_nve0.c: revision 1.5 nouveau_drm.c: - hook up an empty uvm_pagerops like radeon does. - hook up nouveau_ttm_mmap_object(). nouveau_engine_fifo_nve0.c: - if (cold), don't try to wait, but hard-spin until the timeout period. with these in place, i am able to get working text-console with nouveau! ok riastradh. To generate a diff of this commit: cvs rdiff -u -r1.2.4.2 -r1.2.4.3 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c cvs rdiff -u -r1.1.1.1.4.2 -r1.1.1.1.4.3 \ src/sys/external/bsd/drm2/dist/drm/nouveau/core/engine/fifo/nouveau_engine_fifo_nve0.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_drm.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c:1.2.4.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c:1.2.4.3 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c:1.2.4.2 Fri Mar 6 21:39:08 2015 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c Fri Nov 6 23:03:20 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_drm.c,v 1.2.4.2 2015/03/06 21:39:08 snj Exp $ */ +/* $NetBSD: nouveau_drm.c,v 1.2.4.3 2015/11/06 23:03:20 riz Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_drm.c,v 1.2.4.2 2015/03/06 21:39:08 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_drm.c,v 1.2.4.3 2015/11/06 23:03:20 riz Exp $"); #include <linux/console.h> #include <linux/module.h> @@ -62,6 +62,7 @@ __KERNEL_RCSID(0, "$NetBSD: nouveau_drm. #include "nouveau_fbcon.h" #include "nouveau_fence.h" #include "nouveau_debugfs.h" +#include "nouveau_ttm.h" MODULE_PARM_DESC(config, "option string to pass to driver core"); char *nouveau_config; @@ -87,6 +88,10 @@ module_param_named(runpm, nouveau_runtim static struct drm_driver driver; #ifdef __NetBSD__ struct drm_driver *const nouveau_drm_driver = &driver; + +/* XXX Kludge for the non-GEM GEM that nouveau uses. */ +static const struct uvm_pagerops nouveau_gem_uvm_ops; + #endif static u64 @@ -880,7 +885,11 @@ driver = { .ioctls = nouveau_ioctls, .num_ioctls = ARRAY_SIZE(nouveau_ioctls), -#ifndef __NetBSD__ +#ifdef __NetBSD__ + .fops = NULL, + .mmap_object = &nouveau_ttm_mmap_object, + .gem_uvm_ops = &nouveau_gem_uvm_ops, +#else .fops = &nouveau_driver_fops, #endif Index: src/sys/external/bsd/drm2/dist/drm/nouveau/core/engine/fifo/nouveau_engine_fifo_nve0.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/core/engine/fifo/nouveau_engine_fifo_nve0.c:1.1.1.1.4.2 src/sys/external/bsd/drm2/dist/drm/nouveau/core/engine/fifo/nouveau_engine_fifo_nve0.c:1.1.1.1.4.3 --- src/sys/external/bsd/drm2/dist/drm/nouveau/core/engine/fifo/nouveau_engine_fifo_nve0.c:1.1.1.1.4.2 Fri Mar 6 21:39:09 2015 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/core/engine/fifo/nouveau_engine_fifo_nve0.c Fri Nov 6 23:03:20 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_engine_fifo_nve0.c,v 1.1.1.1.4.2 2015/03/06 21:39:09 snj Exp $ */ +/* $NetBSD: nouveau_engine_fifo_nve0.c,v 1.1.1.1.4.3 2015/11/06 23:03:20 riz Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_engine_fifo_nve0.c,v 1.1.1.1.4.2 2015/03/06 21:39:09 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_engine_fifo_nve0.c,v 1.1.1.1.4.3 2015/11/06 23:03:20 riz Exp $"); #include <core/client.h> #include <core/handle.h> @@ -136,18 +136,27 @@ nve0_fifo_runlist_update(struct nve0_fif nv_wr32(priv, 0x002274, (engine << 20) | (p >> 3)); #ifdef __NetBSD__ - { - int ret; + if (cold) { + uint count = 2000; + while (count-- > 0) { + if (!(nv_rd32(priv, 0x002284 + (engine * 0x08)) & 0x00100000)) + break; + delay(1000); + } + if (count == 0) + nv_error(priv, "runlist %d update timeout\n", engine); + } else { + int ret; - spin_lock(&engn->lock); - DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, &engn->wait, &engn->lock, - msecs_to_jiffies(2000), - !(nv_rd32(priv, 0x002284 + - (engine * 0x08)) & 0x00100000)); - if (ret == 0) - nv_error(priv, "runlist %d update timeout\n", engine); - spin_unlock(&engn->lock); - } + spin_lock(&engn->lock); + DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, &engn->wait, &engn->lock, + msecs_to_jiffies(2000), + !(nv_rd32(priv, 0x002284 + + (engine * 0x08)) & 0x00100000)); + if (ret == 0) + nv_error(priv, "runlist %d update timeout\n", engine); + spin_unlock(&engn->lock); + } #else if (wait_event_timeout(engn->wait, !(nv_rd32(priv, 0x002284 + (engine * 0x08)) & 0x00100000),