Module Name:    src
Committed By:   riastradh
Date:           Wed Feb 25 22:12:00 UTC 2015

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/nouveau: nouveau_ttm.c nouveau_ttm.h
        src/sys/external/bsd/drm2/dist/drm/nouveau/core/include/subdev: pwr.h
        src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/pwr:
            nouveau_subdev_pwr_base.c
        src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/therm:
            nouveau_subdev_therm_ic.c
        src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/timer:
            nouveau_subdev_timer_nv04.c
        src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm:
            nouveau_subdev_vm_base.c nouveau_subdev_vm_nv04.c
            nouveau_subdev_vm_nv44.c nv04.h
        src/sys/external/bsd/drm2/nouveau: files.nouveau

Log Message:
Another round of nouveau whack-a-mole.

Nouveau compiles now, though it doesn't link yet.

Need to write driver attachment, wscons framebuffer, &c.  Probably
also some i2c stuff.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.c
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.h
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/core/include/subdev/pwr.h
cvs rdiff -u -r1.3 -r1.4 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/pwr/nouveau_subdev_pwr_base.c
cvs rdiff -u -r1.1.1.1 -r1.2 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/therm/nouveau_subdev_therm_ic.c
cvs rdiff -u -r1.1.1.1 -r1.2 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/timer/nouveau_subdev_timer_nv04.c
cvs rdiff -u -r1.1.1.1 -r1.2 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_base.c
 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv04.c
 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv44.c
 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nv04.h
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/nouveau/files.nouveau

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_ttm.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.c:1.2	Wed Aug  6 13:35:13 2014
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.c	Wed Feb 25 22:12:00 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_ttm.c,v 1.2 2014/08/06 13:35:13 riastradh Exp $	*/
+/*	$NetBSD: nouveau_ttm.c,v 1.3 2015/02/25 22:12:00 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA,
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_ttm.c,v 1.2 2014/08/06 13:35:13 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_ttm.c,v 1.3 2015/02/25 22:12:00 riastradh Exp $");
 
 #include <subdev/fb.h>
 #include <subdev/vm.h>
@@ -118,7 +118,7 @@ nouveau_vram_manager_debug(struct ttm_me
 
 	mutex_lock(&nv_subdev(pfb)->mutex);
 	list_for_each_entry(r, &mm->nodes, nl_entry) {
-		printk(KERN_DEBUG "%s %d: 0x%010llx 0x%010llx\n",
+		printk(KERN_DEBUG "%s %d: 0x%010"PRIx64" 0x%010"PRIx64"\n",
 		       prefix, r->type, ((u64)r->offset << 12),
 		       (((u64)r->offset + r->length) << 12));
 
@@ -128,7 +128,7 @@ nouveau_vram_manager_debug(struct ttm_me
 	}
 	mutex_unlock(&nv_subdev(pfb)->mutex);
 
-	printk(KERN_DEBUG "%s  total: 0x%010llx free: 0x%010llx\n",
+	printk(KERN_DEBUG "%s  total: 0x%010"PRIx64" free: 0x%010"PRIx64"\n",
 	       prefix, (u64)total << 12, (u64)free << 12);
 	printk(KERN_DEBUG "%s  block: 0x%08x\n",
 	       prefix, mm->block_size << 12);
@@ -283,6 +283,27 @@ const struct ttm_mem_type_manager_func n
 	nv04_gart_manager_debug
 };
 
+#ifdef __NetBSD__
+
+int
+nouveau_ttm_mmap_object(struct drm_device *dev, off_t offset, size_t size,
+    vm_prot_t prot, struct uvm_object **uobjp, voff_t *uoffsetp,
+    struct file *file)
+{
+	struct nouveau_drm *const drm = nouveau_drm(dev);
+
+	KASSERT(0 == (offset & (PAGE_SIZE - 1)));
+
+	if (__predict_false((offset >> PAGE_SHIFT) < DRM_FILE_PAGE_OFFSET))
+		return drm_mmap_object(dev, offset, size, prot, uobjp,
+		    uoffsetp, file);
+	else
+		return ttm_bo_mmap_object(&drm->ttm.bdev, offset, size, prot,
+		    uobjp, uoffsetp, file);
+}
+
+#else
+
 int
 nouveau_ttm_mmap(struct file *filp, struct vm_area_struct *vma)
 {
@@ -295,6 +316,8 @@ nouveau_ttm_mmap(struct file *filp, stru
 	return ttm_bo_mmap(filp, vma, &drm->ttm.bdev);
 }
 
+#endif
+
 static int
 nouveau_ttm_mem_global_init(struct drm_global_reference *ref)
 {

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.h:1.1.1.1 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.h:1.2
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.h:1.1.1.1	Wed Jul 16 19:35:26 2014
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.h	Wed Feb 25 22:12:00 2015
@@ -17,7 +17,12 @@ struct ttm_tt *nouveau_sgdma_create_ttm(
 
 int  nouveau_ttm_init(struct nouveau_drm *drm);
 void nouveau_ttm_fini(struct nouveau_drm *drm);
+#ifdef __NetBSD__
+int  nouveau_ttm_mmap_object(struct drm_device *, off_t, size_t, vm_prot_t,
+	    struct uvm_object **, voff_t *, struct file *);
+#else
 int  nouveau_ttm_mmap(struct file *, struct vm_area_struct *);
+#endif
 
 int  nouveau_ttm_global_init(struct nouveau_drm *);
 void nouveau_ttm_global_release(struct nouveau_drm *);

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/core/include/subdev/pwr.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/core/include/subdev/pwr.h:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/core/include/subdev/pwr.h:1.4
--- src/sys/external/bsd/drm2/dist/drm/nouveau/core/include/subdev/pwr.h:1.3	Wed Feb 25 17:29:43 2015
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/core/include/subdev/pwr.h	Wed Feb 25 22:12:00 2015
@@ -66,7 +66,7 @@ nouveau_pwr(void *obj)
 int nouveau_pwr_create_(struct nouveau_object *, struct nouveau_object *,
 			   struct nouveau_oclass *, int, void **);
 #ifdef __NetBSD__
-int _nouveau_pwr_dtor(struct nouveau_object *);
+void _nouveau_pwr_dtor(struct nouveau_object *);
 #else
 #define _nouveau_pwr_dtor _nouveau_subdev_dtor
 #endif

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/pwr/nouveau_subdev_pwr_base.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/pwr/nouveau_subdev_pwr_base.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/pwr/nouveau_subdev_pwr_base.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/pwr/nouveau_subdev_pwr_base.c:1.3	Wed Feb 25 17:29:43 2015
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/pwr/nouveau_subdev_pwr_base.c	Wed Feb 25 22:12:00 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_subdev_pwr_base.c,v 1.3 2015/02/25 17:29:43 riastradh Exp $	*/
+/*	$NetBSD: nouveau_subdev_pwr_base.c,v 1.4 2015/02/25 22:12:00 riastradh Exp $	*/
 
 /*
  * Copyright 2013 Red Hat Inc.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_pwr_base.c,v 1.3 2015/02/25 17:29:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_pwr_base.c,v 1.4 2015/02/25 22:12:00 riastradh Exp $");
 
 #include <subdev/pwr.h>
 #include <subdev/timer.h>
@@ -271,7 +271,7 @@ nouveau_pwr_create_(struct nouveau_objec
 }
 
 #ifdef __NetBSD__
-int
+void
 _nouveau_pwr_dtor(struct nouveau_object *object)
 {
 	struct nouveau_pwr *ppwr = (void *)object;

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/therm/nouveau_subdev_therm_ic.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/therm/nouveau_subdev_therm_ic.c:1.1.1.1 src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/therm/nouveau_subdev_therm_ic.c:1.2
--- src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/therm/nouveau_subdev_therm_ic.c:1.1.1.1	Wed Aug  6 12:36:32 2014
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/therm/nouveau_subdev_therm_ic.c	Wed Feb 25 22:12:00 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_subdev_therm_ic.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $	*/
+/*	$NetBSD: nouveau_subdev_therm_ic.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Nouveau community
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_therm_ic.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_therm_ic.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $");
 
 #include "priv.h"
 
@@ -36,6 +36,9 @@ static bool
 probe_monitoring_device(struct nouveau_i2c_port *i2c,
 			struct i2c_board_info *info, void *data)
 {
+#ifdef __NetBSD__
+	return false;
+#else
 	struct nouveau_therm_priv *priv = data;
 	struct nvbios_therm_sensor *sensor = &priv->bios_sensor;
 	struct i2c_client *client;
@@ -59,6 +62,7 @@ probe_monitoring_device(struct nouveau_i
 	priv->ic = client;
 
 	return true;
+#endif
 }
 
 static struct nouveau_i2c_board_info

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/timer/nouveau_subdev_timer_nv04.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/timer/nouveau_subdev_timer_nv04.c:1.1.1.1 src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/timer/nouveau_subdev_timer_nv04.c:1.2
--- src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/timer/nouveau_subdev_timer_nv04.c:1.1.1.1	Wed Aug  6 12:36:32 2014
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/timer/nouveau_subdev_timer_nv04.c	Wed Feb 25 22:12:00 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_subdev_timer_nv04.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $	*/
+/*	$NetBSD: nouveau_subdev_timer_nv04.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_timer_nv04.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_timer_nv04.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $");
 
 #include "nv04.h"
 
@@ -49,7 +49,7 @@ nv04_timer_alarm_trigger(struct nouveau_
 	struct nv04_timer_priv *priv = (void *)ptimer;
 	struct nouveau_alarm *alarm, *atemp;
 	unsigned long flags;
-	LIST_HEAD(exec);
+	struct list_head exec = LIST_HEAD_INIT(exec);
 
 	/* move any due alarms off the pending list */
 	spin_lock_irqsave(&priv->lock, flags);

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_base.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_base.c:1.1.1.1 src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_base.c:1.2
--- src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_base.c:1.1.1.1	Wed Aug  6 12:36:32 2014
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_base.c	Wed Feb 25 22:12:00 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_subdev_vm_base.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $	*/
+/*	$NetBSD: nouveau_subdev_vm_base.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $	*/
 
 /*
  * Copyright 2010 Red Hat Inc.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_vm_base.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_vm_base.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $");
 
 #include <core/gpuobj.h>
 #include <core/mm.h>
@@ -77,6 +77,47 @@ nouveau_vm_map_at(struct nouveau_vma *vm
 	vmm->flush(vm);
 }
 
+#ifdef __NetBSD__
+
+static void
+nouveau_vm_map_dma(struct nouveau_vma *vma, u64 delta, u64 length,
+    struct nouveau_mem *mem)
+{
+	struct nouveau_vm *vm = vma->vm;
+	struct nouveau_vmmgr *vmm = vm->vmm;
+	int big = vma->node->type != vmm->spg_shift;
+	u32 offset = vma->node->offset + (delta >> 12);
+	u32 bits = vma->node->type - 12;
+	u32 num  = length >> vma->node->type;
+	u32 pde  = (offset >> vmm->pgt_bits) - vm->fpde;
+	u32 pte  = (offset & ((1 << vmm->pgt_bits) - 1)) >> bits;
+	u32 max  = 1 << (vmm->pgt_bits - bits);
+	unsigned seg;
+
+	for (seg = 0; seg < mem->pages->dm_nsegs; seg++) {
+		struct nouveau_gpuobj *pgt = vm->pgt[pde].obj[big];
+		dma_addr_t addr = mem->pages->dm_segs[seg].ds_addr;
+
+		KASSERT(mem->pages->dm_segs[seg].ds_len == PAGE_SIZE);
+		vmm->map_sg(vma, pgt, mem, pte, 1, &addr);
+		num--;
+		pte++;
+
+		if (num == 0)
+			goto finish;
+
+		if (__predict_false(pte >= max)) {
+			pde++;
+			pte = 0;
+		}
+	}
+
+finish:
+	vmm->flush(vm);
+}
+
+#else
+
 static void
 nouveau_vm_map_sg_table(struct nouveau_vma *vma, u64 delta, u64 length,
 			struct nouveau_mem *mem)
@@ -173,9 +214,17 @@ nouveau_vm_map_sg(struct nouveau_vma *vm
 	vmm->flush(vm);
 }
 
+#endif
+
 void
 nouveau_vm_map(struct nouveau_vma *vma, struct nouveau_mem *node)
 {
+#ifdef __NetBSD__
+	if (node->pages)
+		nouveau_vm_map_dma(vma, 0, node->size << 12, node);
+	else
+		nouveau_vm_map_at(vma, 0, node);
+#else
 	if (node->sg)
 		nouveau_vm_map_sg_table(vma, 0, node->size << 12, node);
 	else
@@ -183,6 +232,7 @@ nouveau_vm_map(struct nouveau_vma *vma, 
 		nouveau_vm_map_sg(vma, 0, node->size << 12, node);
 	else
 		nouveau_vm_map_at(vma, 0, node);
+#endif
 }
 
 void
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv04.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv04.c:1.1.1.1 src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv04.c:1.2
--- src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv04.c:1.1.1.1	Wed Aug  6 12:36:32 2014
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv04.c	Wed Feb 25 22:12:00 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_subdev_vm_nv04.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $	*/
+/*	$NetBSD: nouveau_subdev_vm_nv04.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_vm_nv04.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_vm_nv04.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $");
 
 #include <core/gpuobj.h>
 
@@ -137,10 +137,23 @@ nv04_vmmgr_dtor(struct nouveau_object *o
 		nouveau_gpuobj_ref(NULL, &priv->vm->pgt[0].obj[0]);
 		nouveau_vm_ref(NULL, &priv->vm, NULL);
 	}
+#ifdef __NetBSD__
+	if (priv->nullp) {
+		/* XXX pa_dmat or pa_dmat64?  */
+		struct nouveau_device *device = nv_device(priv);
+		const bus_dma_tag_t dmat = device->pdev->pd_pa.pa_dmat64;
+
+		bus_dmamap_unload(dmat, priv->nullmap);
+		bus_dmamem_unmap(dmat, priv->nullp, PAGE_SIZE);
+		bus_dmamap_destroy(dmat, priv->nullmap);
+		bus_dmamem_free(dmat, &priv->nullseg, 1);
+	}
+#else
 	if (priv->nullp) {
 		pci_free_consistent(nv_device(priv)->pdev, 16 * 1024,
 				    priv->nullp, priv->null);
 	}
+#endif
 	nouveau_vmmgr_destroy(&priv->base);
 }
 
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv44.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv44.c:1.1.1.1 src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv44.c:1.2
--- src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv44.c:1.1.1.1	Wed Aug  6 12:36:32 2014
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nouveau_subdev_vm_nv44.c	Wed Feb 25 22:12:00 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_subdev_vm_nv44.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $	*/
+/*	$NetBSD: nouveau_subdev_vm_nv44.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_vm_nv44.c,v 1.1.1.1 2014/08/06 12:36:32 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_subdev_vm_nv44.c,v 1.2 2015/02/25 22:12:00 riastradh Exp $");
 
 #include <core/gpuobj.h>
 #include <core/option.h>
@@ -190,11 +190,54 @@ nv44_vmmgr_ctor(struct nouveau_object *p
 	priv->base.unmap = nv44_vm_unmap;
 	priv->base.flush = nv44_vm_flush;
 
+#ifdef __NetBSD__
+    {
+	/* XXX pa_dmat or pa_dmat64?  */
+	const bus_dma_tag_t dmat = device->pdev->pd_pa.pa_dmat64;
+	int nsegs;
+
+	/* XXX errno NetBSD->Linux */
+	ret = -bus_dmamem_alloc(dmat, PAGE_SIZE, PAGE_SIZE, 0,
+	    &priv->nullseg, 1, &nsegs, BUS_DMA_WAITOK);
+	if (ret) {
+		/* XXX Need to destroy stuff...  */
+fail0:		nv_error(priv, "unable to allocate dummy pages\n");
+		return ret;
+	}
+	KASSERT(nsegs == 1);
+
+	/* XXX errno NetBSD->Linux */
+	ret = -bus_dmamap_create(dmat, PAGE_SIZE, 1, PAGE_SIZE, 0,
+	    BUS_DMA_WAITOK, &priv->nullmap);
+	if (ret) {
+fail1:		bus_dmamem_free(dmat, &priv->nullseg, 1);
+		goto fail0;
+	}
+
+	/* XXX errno NetBSD->Linux */
+	ret = -bus_dmamem_map(dmat, &priv->nullseg, 1, PAGE_SIZE,
+	    &priv->nullp, BUS_DMA_WAITOK);
+	if (ret) {
+fail2:		bus_dmamap_destroy(dmat, priv->nullmap);
+		goto fail1;
+	}
+
+	/* XXX errno NetBSD->Linux */
+	ret = -bus_dmamap_load(dmat, priv->nullmap, priv->nullp, PAGE_SIZE,
+	    NULL, BUS_DMA_WAITOK);
+	if (ret) {
+fail3: __unused	bus_dmamem_unmap(dmat, priv->nullp, PAGE_SIZE);
+		goto fail2;
+	}
+	priv->null = priv->nullmap->dm_segs[0].ds_addr;
+    }
+#else
 	priv->nullp = pci_alloc_consistent(device->pdev, 16 * 1024, &priv->null);
 	if (!priv->nullp) {
 		nv_error(priv, "unable to allocate dummy pages\n");
 		return -ENOMEM;
 	}
+#endif
 
 	ret = nouveau_vm_create(&priv->base, 0, NV44_GART_SIZE, 0, 4096,
 				&priv->vm);
Index: src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nv04.h
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nv04.h:1.1.1.1 src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nv04.h:1.2
--- src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nv04.h:1.1.1.1	Thu Jul 17 01:51:00 2014
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/core/subdev/vm/nv04.h	Wed Feb 25 22:12:00 2015
@@ -6,6 +6,10 @@
 struct nv04_vmmgr_priv {
 	struct nouveau_vmmgr base;
 	struct nouveau_vm *vm;
+#ifdef __NetBSD__
+	bus_dma_segment_t nullseg;
+	bus_dmamap_t nullmap;
+#endif
 	dma_addr_t null;
 	void *nullp;
 };

Index: src/sys/external/bsd/drm2/nouveau/files.nouveau
diff -u src/sys/external/bsd/drm2/nouveau/files.nouveau:1.6 src/sys/external/bsd/drm2/nouveau/files.nouveau:1.7
--- src/sys/external/bsd/drm2/nouveau/files.nouveau:1.6	Wed Feb 25 17:29:42 2015
+++ src/sys/external/bsd/drm2/nouveau/files.nouveau	Wed Feb 25 22:11:59 2015
@@ -1,4 +1,4 @@
-#	$NetBSD: files.nouveau,v 1.6 2015/02/25 17:29:42 riastradh Exp $
+#	$NetBSD: files.nouveau,v 1.7 2015/02/25 22:11:59 riastradh Exp $
 
 device	nouveau: drmkms, drmkms_pci, drmkms_ttm, genfb, wsemuldisplaydev
 attach	nouveau at pci
@@ -229,7 +229,16 @@ makeoptions	nouveau	"CWARNFLAGS.nouveau_
 makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_therm_nv40.c"+="-Wno-missing-field-initializers"
 makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_therm_nv50.c"+="-Wno-missing-field-initializers"
 makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_therm_nv84.c"+="-Wno-missing-field-initializers"
+makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_therm_nva3.c"+="-Wno-missing-field-initializers"
 makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_therm_nvd0.c"+="-Wno-missing-field-initializers"
+makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_timer_gk20a.c"+="-Wno-missing-field-initializers"
+makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_timer_nv04.c"+="-Wno-missing-field-initializers"
+makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_vm_nv04.c"+="-Wno-missing-field-initializers"
+makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_vm_nv41.c"+="-Wno-missing-field-initializers"
+makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_vm_nv44.c"+="-Wno-missing-field-initializers"
+makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_vm_nv50.c"+="-Wno-missing-field-initializers"
+makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_vm_nvc0.c"+="-Wno-missing-field-initializers"
+makeoptions	nouveau	"CWARNFLAGS.nouveau_subdev_volt_nv40.c"+="-Wno-missing-field-initializers"
 
 file	external/bsd/drm2/nouveau/nouveau_module.c	nouveau
 
@@ -564,6 +573,6 @@ file	external/bsd/drm2/dist/drm/nouveau/
 file	external/bsd/drm2/dist/drm/nouveau/nouveau_nvc0_fence.c	nouveau
 #file	external/bsd/drm2/dist/drm/nouveau/nouveau_prime.c	nouveau	# XXX drm prime
 file	external/bsd/drm2/dist/drm/nouveau/nouveau_sgdma.c	nouveau
-file	external/bsd/drm2/dist/drm/nouveau/nouveau_sysfs.c	nouveau
+#file	external/bsd/drm2/dist/drm/nouveau/nouveau_sysfs.c	nouveau
 file	external/bsd/drm2/dist/drm/nouveau/nouveau_ttm.c	nouveau
-file	external/bsd/drm2/dist/drm/nouveau/nouveau_vga.c	nouveau
+#file	external/bsd/drm2/dist/drm/nouveau/nouveau_vga.c	nouveau

Reply via email to