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

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

drm/nvc0: implement channel structure initialisation



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 7460d703
Loading
Loading
Loading
Loading
+20 −4
Original line number Diff line number Diff line
@@ -779,6 +779,25 @@ nouveau_gpuobj_channel_init(struct nouveau_channel *chan,

	NV_DEBUG(dev, "ch%d vram=0x%08x tt=0x%08x\n", chan->id, vram_h, tt_h);

	if (dev_priv->card_type == NV_C0) {
		struct nouveau_vm *vm = dev_priv->chan_vm;
		struct nouveau_vm_pgd *vpgd;

		ret = nouveau_gpuobj_new(dev, NULL, 4096, 0x1000, 0,
					 &chan->ramin);
		if (ret)
			return ret;

		nouveau_vm_ref(vm, &chan->vm, NULL);

		vpgd = list_first_entry(&vm->pgd_list, struct nouveau_vm_pgd, head);
		nv_wo32(chan->ramin, 0x0200, lower_32_bits(vpgd->obj->vinst));
		nv_wo32(chan->ramin, 0x0204, upper_32_bits(vpgd->obj->vinst));
		nv_wo32(chan->ramin, 0x0208, 0xffffffff);
		nv_wo32(chan->ramin, 0x020c, 0x000000ff);
		return 0;
	}

	/* Allocate a chunk of memory for per-channel object storage */
	ret = nouveau_gpuobj_channel_init_pramin(chan);
	if (ret) {
@@ -786,7 +805,7 @@ nouveau_gpuobj_channel_init(struct nouveau_channel *chan,
		return ret;
	}

	/* NV50/NVC0 VM
	/* NV50 VM
	 *  - Allocate per-channel page-directory
	 *  - Link with shared channel VM
	 */
@@ -884,9 +903,6 @@ nouveau_gpuobj_channel_takedown(struct nouveau_channel *chan)

	NV_DEBUG(dev, "ch%d\n", chan->id);

	if (!chan->ramht)
		return;

	nouveau_ramht_ref(NULL, &chan->ramht, chan);

	nouveau_vm_ref(NULL, &chan->vm, chan->vm_pd);