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