summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/include/nvkm
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2017-11-01 03:56:19 +1000
committerBen Skeggs <bskeggs@redhat.com>2017-11-02 13:32:25 +1000
commit806a7335653743a33f476a3705d55bada95b7dfe (patch)
tree21ac49a98d3917c0ffd127e126833c45ff1056cb /drivers/gpu/drm/nouveau/include/nvkm
parentf1280394109a3a3a7ef1c37950d4356b12e75cb9 (diff)
downloadop-kernel-dev-806a7335653743a33f476a3705d55bada95b7dfe.zip
op-kernel-dev-806a7335653743a33f476a3705d55bada95b7dfe.tar.gz
drm/nouveau/mmu: implement base for new vm management
This is the first chunk of the new VMM code that provides the structures needed to describe a GPU virtual address-space layout, as well as common interfaces to handle VMM creation, and connecting instances to a VMM. The constructor now allocates the PD itself, rather than having the user handle that manually. This won't/can't be used until after all backends have been ported to these interfaces, so a little bit of memory will be wasted on Fermi and newer for a couple of commits in the series. Compatibility has been hacked into the old code to allow each GPU backend to be ported individually. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/include/nvkm')
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h16
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h
index 40e21f2..8ff71e7 100644
--- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h
+++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h
@@ -26,20 +26,28 @@ struct nvkm_vma {
};
struct nvkm_vm {
+ const struct nvkm_vmm_func *func;
struct nvkm_mmu *mmu;
-
+ const char *name;
+ struct kref kref;
struct mutex mutex;
+
+ u64 start;
+ u64 limit;
+
+ struct nvkm_vmm_pt *pd;
+ u16 pd_offset;
+ struct list_head join;
+
struct nvkm_mm mm;
struct kref refcount;
-
struct list_head pgd_list;
- atomic_t engref[NVKM_SUBDEV_NR];
-
struct nvkm_vm_pgt *pgt;
u32 fpde;
u32 lpde;
bool bootstrapped;
+ atomic_t engref[NVKM_SUBDEV_NR];
};
int nvkm_vm_new(struct nvkm_device *, u64 offset, u64 length, u64 mm_offset,
OpenPOWER on IntegriCloud