return 0;
}
-int
-nvkm_vm_create(struct nvkm_mmu *mmu, u64 offset, u64 length, u64 mm_offset,
- u32 block, struct lock_class_key *key, struct nvkm_vm **pvm)
-{
- static struct lock_class_key _key;
- struct nvkm_vm *vm;
- int ret;
-
- vm = kzalloc(sizeof(*vm), GFP_KERNEL);
- if (!vm)
- return -ENOMEM;
-
- __mutex_init(&vm->mutex, "&vm->mutex", key ? key : &_key);
- vm->mmu = mmu;
-
- ret = nvkm_vm_legacy(mmu, offset, length, mm_offset, block, vm);
- if (ret) {
- kfree(vm);
- return ret;
- }
-
- *pvm = vm;
- return 0;
-}
-
int
nvkm_vm_new(struct nvkm_device *device, u64 offset, u64 length, u64 mm_offset,
struct lock_class_key *key, struct nvkm_vm **pvm)
return ret;
}
- if (!mmu->func->create)
- return -EINVAL;
-
- return mmu->func->create(mmu, offset, length, mm_offset, key, pvm);
+ return -EINVAL;
}
static int
.pgt_bits = 29 - 12,
.spg_shift = 12,
.lpg_shift = 16,
- .create = nv50_vm_create,
.map_pgt = nv50_vm_map_pgt,
.map = nv50_vm_map,
.map_sg = nv50_vm_map_sg,
mutex_unlock(&mmu->subdev.mutex);
}
-int
-gf100_vm_create(struct nvkm_mmu *mmu, u64 offset, u64 length, u64 mm_offset,
- struct lock_class_key *key, struct nvkm_vm **pvm)
-{
- return nvkm_vm_create(mmu, offset, length, mm_offset, 4096, key, pvm);
-}
-
static const struct nvkm_mmu_func
gf100_mmu = {
.limit = (1ULL << 40),
.pgt_bits = 27 - 12,
.spg_shift = 12,
.lpg_shift = 17,
- .create = gf100_vm_create,
.map_pgt = gf100_vm_map_pgt,
.map = gf100_vm_map,
.map_sg = gf100_vm_map_sg,
.pgt_bits = 27 - 12,
.spg_shift = 12,
.lpg_shift = 17,
- .create = gf100_vm_create,
.map_pgt = gf100_vm_map_pgt,
.map = gf100_vm_map,
.map_sg = gf100_vm_map_sg,
.pgt_bits = 27 - 12,
.spg_shift = 12,
.lpg_shift = 17,
- .create = gf100_vm_create,
.map_pgt = gf100_vm_map_pgt,
.map = gf100_vm_map,
.map_sg = gf100_vm_map_sg,
.pgt_bits = 27 - 12,
.spg_shift = 12,
.lpg_shift = 17,
- .create = gf100_vm_create,
.map_pgt = gf100_vm_map_pgt,
.map = gf100_vm_map,
.map_sg = gf100_vm_map_sg,
.pgt_bits = 27 - 12,
.spg_shift = 12,
.lpg_shift = 17,
- .create = gf100_vm_create,
.map_pgt = gf100_vm_map_pgt,
.map = gf100_vm_map,
.map_sg = gf100_vm_map_sg,
.pgt_bits = 27 - 12,
.spg_shift = 12,
.lpg_shift = 17,
- .create = gf100_vm_create,
.map_pgt = gf100_vm_map_pgt,
.map = gf100_vm_map,
.map_sg = gf100_vm_map_sg,
.pgt_bits = 27 - 12,
.spg_shift = 12,
.lpg_shift = 17,
- .create = gf100_vm_create,
.map_pgt = gf100_vm_map_pgt,
.map = gf100_vm_map,
.map_sg = gf100_vm_map_sg,
mutex_unlock(&subdev->mutex);
}
-int
-nv50_vm_create(struct nvkm_mmu *mmu, u64 offset, u64 length, u64 mm_offset,
- struct lock_class_key *key, struct nvkm_vm **pvm)
-{
- u32 block = (1 << (mmu->func->pgt_bits + 12));
- if (block > length)
- block = length;
- return nvkm_vm_create(mmu, offset, length, mm_offset, block, key, pvm);
-}
-
static const struct nvkm_mmu_func
nv50_mmu = {
.limit = (1ULL << 40),
.pgt_bits = 29 - 12,
.spg_shift = 12,
.lpg_shift = 16,
- .create = nv50_vm_create,
.map_pgt = nv50_vm_map_pgt,
.map = nv50_vm_map,
.map_sg = nv50_vm_map_sg,
u8 spg_shift;
u8 lpg_shift;
- int (*create)(struct nvkm_mmu *, u64 offset, u64 length, u64 mm_offset,
- struct lock_class_key *, struct nvkm_vm **);
-
void (*map_pgt)(struct nvkm_gpuobj *pgd, u32 pde,
struct nvkm_memory *pgt[2]);
void (*map)(struct nvkm_vma *, struct nvkm_memory *,
} vmm;
};
-int nvkm_vm_create(struct nvkm_mmu *, u64, u64, u64, u32,
- struct lock_class_key *, struct nvkm_vm **);
-
extern const struct nvkm_mmu_func nv04_mmu;
-int nv50_vm_create(struct nvkm_mmu *, u64, u64, u64, struct lock_class_key *,
- struct nvkm_vm **);
void nv50_vm_map_pgt(struct nvkm_gpuobj *, u32, struct nvkm_memory **);
void nv50_vm_map(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *,
u32, u32, u64, u64);
void nv50_vm_unmap(struct nvkm_vma *, struct nvkm_memory *, u32, u32);
void nv50_vm_flush(struct nvkm_vm *);
-int gf100_vm_create(struct nvkm_mmu *, u64, u64, u64, struct lock_class_key *,
- struct nvkm_vm **);
void gf100_vm_map_pgt(struct nvkm_gpuobj *, u32, struct nvkm_memory **);
void gf100_vm_map(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *,
u32, u32, u64, u64);