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