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

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

drm/nvc0: create shared channel vm



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 8984e046
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ struct nvc0_instmem_priv {
	struct nouveau_channel *bar1;
	struct nouveau_gpuobj  *bar3_pgd;
	struct nouveau_channel *bar3;
	struct nouveau_gpuobj  *chan_pgd;
};

int
@@ -179,6 +180,18 @@ nvc0_instmem_init(struct drm_device *dev)
	if (ret)
		goto error;

	/* channel vm */
	ret = nouveau_vm_new(dev, 0, (1ULL << 40), 0x0008000000ULL, &vm);
	if (ret)
		goto error;

	ret = nouveau_gpuobj_new(dev, NULL, 0x8000, 4096, 0, &priv->chan_pgd);
	if (ret)
		goto error;

	nouveau_vm_ref(vm, &dev_priv->chan_vm, priv->chan_pgd);
	nouveau_vm_ref(NULL, &vm, NULL);

	nvc0_instmem_resume(dev);
	return 0;
error:
@@ -198,6 +211,9 @@ nvc0_instmem_takedown(struct drm_device *dev)
	nv_wr32(dev, 0x1704, 0x00000000);
	nv_wr32(dev, 0x1714, 0x00000000);

	nouveau_vm_ref(NULL, &dev_priv->chan_vm, priv->chan_pgd);
	nouveau_gpuobj_ref(NULL, &priv->chan_pgd);

	nvc0_channel_del(&priv->bar1);
	nouveau_vm_ref(NULL, &dev_priv->bar1_vm, priv->bar1_pgd);
	nouveau_gpuobj_ref(NULL, &priv->bar1_pgd);