Commit 03b0ba7b authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/mmu/nv44: implement vmm on top of new base



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 77783435
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -48,6 +48,9 @@ struct nvkm_vm {

	bool bootstrapped;
	atomic_t engref[NVKM_SUBDEV_NR];

	dma_addr_t null;
	void *nullp;
};

int  nvkm_vm_new(struct nvkm_device *, u64 offset, u64 length, u64 mm_offset,
+1 −0
Original line number Diff line number Diff line
@@ -15,3 +15,4 @@ nvkm-y += nvkm/subdev/mmu/gp10b.o
nvkm-y += nvkm/subdev/mmu/vmm.o
nvkm-y += nvkm/subdev/mmu/vmmnv04.o
nvkm-y += nvkm/subdev/mmu/vmmnv41.o
nvkm-y += nvkm/subdev/mmu/vmmnv44.o
+1 −4
Original line number Diff line number Diff line
@@ -786,14 +786,11 @@ static void *
nvkm_mmu_dtor(struct nvkm_subdev *subdev)
{
	struct nvkm_mmu *mmu = nvkm_mmu(subdev);
	void *data = mmu;

	if (mmu->func->dtor)
		data = mmu->func->dtor(mmu);
	nvkm_vm_ref(NULL, &mmu->vmm, NULL);

	nvkm_mmu_ptc_fini(mmu);
	return data;
	return mmu;
}

static const struct nvkm_subdev_func
+0 −27
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@
 *
 * Authors: Ben Skeggs
 */
#include "nv04.h"
#include "vmm.h"

#include <nvif/class.h>
@@ -81,32 +80,6 @@ nv04_mmu_oneinit(struct nvkm_mmu *mmu)
	return 0;
}

void *
nv04_mmu_dtor(struct nvkm_mmu *base)
{
	struct nv04_mmu *mmu = nv04_mmu(base);
	struct nvkm_device *device = mmu->base.subdev.device;
	if (mmu->base.vmm)
		nvkm_memory_unref(&mmu->base.vmm->pgt[0].mem[0]);
	if (mmu->nullp) {
		dma_free_coherent(device->dev, 16 * 1024,
				  mmu->nullp, mmu->null);
	}
	return mmu;
}

int
nv04_mmu_new_(const struct nvkm_mmu_func *func, struct nvkm_device *device,
	      int index, struct nvkm_mmu **pmmu)
{
	struct nv04_mmu *mmu;
	if (!(mmu = kzalloc(sizeof(*mmu), GFP_KERNEL)))
		return -ENOMEM;
	*pmmu = &mmu->base;
	nvkm_mmu_ctor(func, device, index, &mmu->base);
	return 0;
}

const struct nvkm_mmu_func
nv04_mmu = {
	.oneinit = nv04_mmu_oneinit,
+0 −17
Original line number Diff line number Diff line
#ifndef __NV04_MMU_PRIV__
#define __NV04_MMU_PRIV__
#define nv04_mmu(p) container_of((p), struct nv04_mmu, base)
#include "priv.h"

struct nv04_mmu {
	struct nvkm_mmu base;
	dma_addr_t null;
	void *nullp;
};

int nv04_mmu_new_(const struct nvkm_mmu_func *, struct nvkm_device *,
		  int index, struct nvkm_mmu **);
void *nv04_mmu_dtor(struct nvkm_mmu *);

extern const struct nvkm_mmu_func nv04_mmu;
#endif
Loading