Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b11b30d authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/mmu/nv04-nv4x: move global vmm to nvkm_mmu



In a future commit, this will be constructed by common code.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent ffd937bb
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -58,6 +58,8 @@ struct nvkm_mmu {
	u64 limit;
	u8  dma_bits;
	u8  lpg_shift;

	struct nvkm_vmm *vmm;
};

int nv04_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
+1 −4
Original line number Diff line number Diff line
@@ -192,16 +192,13 @@ const struct ttm_mem_type_manager_func nouveau_gart_manager = {
	.debug = nouveau_gart_manager_debug
};

/*XXX*/
#include <subdev/mmu/nv04.h>
static int
nv04_gart_manager_init(struct ttm_mem_type_manager *man, unsigned long psize)
{
	struct nouveau_drm *drm = nouveau_bdev(man->bdev);
	struct nvkm_mmu *mmu = nvxx_mmu(&drm->client.device);
	struct nv04_mmu *priv = (void *)mmu;
	struct nvkm_vm *vm = NULL;
	nvkm_vm_ref(priv->vm, &vm, NULL);
	nvkm_vm_ref(mmu->vmm, &vm, NULL);
	man->priv = vm;
	return 0;
}
+1 −2
Original line number Diff line number Diff line
@@ -49,8 +49,7 @@ nv04_dmaobj_bind(struct nvkm_dmaobj *base, struct nvkm_gpuobj *parent,
	int ret;

	if (dmaobj->clone) {
		struct nv04_mmu *mmu = nv04_mmu(device->mmu);
		struct nvkm_memory *pgt = mmu->vm->pgt[0].mem[0];
		struct nvkm_memory *pgt = device->mmu->vmm->pgt[0].mem[0];
		if (!dmaobj->base.start)
			return nvkm_gpuobj_wrap(pgt, pgpuobj);
		nvkm_kmap(pgt);
+6 −6
Original line number Diff line number Diff line
@@ -81,15 +81,15 @@ nv04_mmu_oneinit(struct nvkm_mmu *base)
	int ret;

	ret = nvkm_vm_create(&mmu->base, 0, NV04_PDMA_SIZE, 0, 4096, NULL,
			     &mmu->vm);
			     &mmu->base.vmm);
	if (ret)
		return ret;

	ret = nvkm_memory_new(device, NVKM_MEM_TARGET_INST,
			      (NV04_PDMA_SIZE / NV04_PDMA_PAGE) * 4 + 8,
			      16, true, &dma);
	mmu->vm->pgt[0].mem[0] = dma;
	mmu->vm->pgt[0].refcount[0] = 1;
	mmu->base.vmm->pgt[0].mem[0] = dma;
	mmu->base.vmm->pgt[0].refcount[0] = 1;
	if (ret)
		return ret;

@@ -105,9 +105,9 @@ nv04_mmu_dtor(struct nvkm_mmu *base)
{
	struct nv04_mmu *mmu = nv04_mmu(base);
	struct nvkm_device *device = mmu->base.subdev.device;
	if (mmu->vm) {
		nvkm_memory_del(&mmu->vm->pgt[0].mem[0]);
		nvkm_vm_ref(NULL, &mmu->vm, NULL);
	if (mmu->base.vmm) {
		nvkm_memory_del(&mmu->base.vmm->pgt[0].mem[0]);
		nvkm_vm_ref(NULL, &mmu->base.vmm, NULL);
	}
	if (mmu->nullp) {
		dma_free_coherent(device->dev, 16 * 1024,
+0 −1
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@

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