summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau/nouveau_object.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2010-10-20 01:47:09 (GMT)
committerBen Skeggs <bskeggs@redhat.com>2010-12-03 05:10:44 (GMT)
commitf4512e6579ddaa9b1f8ab1d5659131243ffc421f (patch)
tree8e2a5b4457ce9eaf8e7ac6d619f7cf69074e0d66 /drivers/gpu/drm/nouveau/nouveau_object.c
parent3052be2cea64371300a0338d3ca5d3575fbd109c (diff)
downloadlinux-f4512e6579ddaa9b1f8ab1d5659131243ffc421f.tar.xz
drm/nv50: create graph and crypt contexts on demand
This really needs cleaning up somehow, and probably investigate what's needed to do this on earlier generations. NVIDIA do something similar there too. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_object.c')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_object.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_object.c b/drivers/gpu/drm/nouveau/nouveau_object.c
index ee52653..5407818 100644
--- a/drivers/gpu/drm/nouveau/nouveau_object.c
+++ b/drivers/gpu/drm/nouveau/nouveau_object.c
@@ -634,6 +634,29 @@ found:
if (oc->engine == NVOBJ_ENGINE_SW)
return nouveau_gpuobj_sw_new(chan, class, gpuobj);
+ switch (oc->engine) {
+ case NVOBJ_ENGINE_GR:
+ if (dev_priv->card_type >= NV_50 && !chan->ramin_grctx) {
+ struct nouveau_pgraph_engine *pgraph =
+ &dev_priv->engine.graph;
+
+ ret = pgraph->create_context(chan);
+ if (ret)
+ return ret;
+ }
+ break;
+ case NVOBJ_ENGINE_CRYPT:
+ if (!chan->crypt_ctx) {
+ struct nouveau_crypt_engine *pcrypt =
+ &dev_priv->engine.crypt;
+
+ ret = pcrypt->create_context(chan);
+ if (ret)
+ return ret;
+ }
+ break;
+ }
+
ret = nouveau_gpuobj_new(dev, chan,
nouveau_gpuobj_class_instmem_size(dev, class),
16,