Commit d30af7ce authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/mmu: handle instance block setup



We previously required each VMM user to allocate their own page directory
and fill in the instance block themselves.

It makes more sense to handle this in a common location.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent af3b8d53
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ struct nvkm_falcon_func {
	void (*load_imem)(struct nvkm_falcon *, void *, u32, u32, u16, u8, bool);
	void (*load_dmem)(struct nvkm_falcon *, void *, u32, u32, u8);
	void (*read_dmem)(struct nvkm_falcon *, u32, u32, u8, void *);
	void (*bind_context)(struct nvkm_falcon *, struct nvkm_gpuobj *);
	void (*bind_context)(struct nvkm_falcon *, struct nvkm_memory *);
	int (*wait_for_halt)(struct nvkm_falcon *, u32);
	int (*clear_interrupt)(struct nvkm_falcon *, u32);
	void (*set_start_addr)(struct nvkm_falcon *, u32 start_addr);
@@ -113,7 +113,7 @@ void nvkm_falcon_load_imem(struct nvkm_falcon *, void *, u32, u32, u16, u8,
			   bool);
void nvkm_falcon_load_dmem(struct nvkm_falcon *, void *, u32, u32, u8);
void nvkm_falcon_read_dmem(struct nvkm_falcon *, u32, u32, u8, void *);
void nvkm_falcon_bind_context(struct nvkm_falcon *, struct nvkm_gpuobj *);
void nvkm_falcon_bind_context(struct nvkm_falcon *, struct nvkm_memory *);
void nvkm_falcon_set_start_addr(struct nvkm_falcon *, u32);
void nvkm_falcon_start(struct nvkm_falcon *);
int nvkm_falcon_wait_for_halt(struct nvkm_falcon *, u32);
+1 −7
Original line number Diff line number Diff line
@@ -10,11 +10,6 @@ struct nvkm_vm_pgt {
	u32 refcount[2];
};

struct nvkm_vm_pgd {
	struct list_head head;
	struct nvkm_gpuobj *obj;
};

struct nvkm_vma {
	struct nvkm_vm *vm;
	struct nvkm_mm_node *node;
@@ -40,7 +35,6 @@ struct nvkm_vm {

	struct nvkm_mm mm;
	struct kref refcount;
	struct list_head pgd_list;
	struct nvkm_vm_pgt *pgt;
	u32 fpde;
	u32 lpde;
@@ -54,7 +48,7 @@ struct nvkm_vm {

int  nvkm_vm_new(struct nvkm_device *, u64 offset, u64 length, u64 mm_offset,
		 struct lock_class_key *, struct nvkm_vm **);
int  nvkm_vm_ref(struct nvkm_vm *, struct nvkm_vm **, struct nvkm_gpuobj *pgd);
int  nvkm_vm_ref(struct nvkm_vm *, struct nvkm_vm **, struct nvkm_memory *inst);
int  nvkm_vm_boot(struct nvkm_vm *, u64 size);
int  nvkm_vm_get(struct nvkm_vm *, u64 size, u32 page_shift, u32 access,
		 struct nvkm_vma *);
+1 −1
Original line number Diff line number Diff line
@@ -281,5 +281,5 @@ g84_fifo_chan_ctor(struct nv50_fifo *fifo, u64 vm, u64 push,
	if (ret)
		return ret;

	return nvkm_vm_ref(chan->base.vm, &chan->vm, chan->pgd);
	return nvkm_vm_ref(chan->base.vm, &chan->vm, chan->base.inst->memory);
}
+0 −1
Original line number Diff line number Diff line
@@ -11,7 +11,6 @@ struct gf100_fifo_chan {
	struct list_head head;
	bool killed;

	struct nvkm_gpuobj *pgd;
	struct nvkm_vm *vm;

	struct {
+0 −1
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@ struct gk104_fifo_chan {
	struct list_head head;
	bool killed;

	struct nvkm_gpuobj *pgd;
	struct nvkm_vm *vm;

	struct {
Loading