aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nouveau_object.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2010-10-19 21:47:09 -0400
committerBen Skeggs <bskeggs@redhat.com>2010-12-03 00:10:44 -0500
commitf4512e6579ddaa9b1f8ab1d5659131243ffc421f (patch)
tree8e2a5b4457ce9eaf8e7ac6d619f7cf69074e0d66 /drivers/gpu/drm/nouveau/nouveau_object.c
parent3052be2cea64371300a0338d3ca5d3575fbd109c (diff)
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 ee526534c6f4..54078186fe65 100644
--- a/drivers/gpu/drm/nouveau/nouveau_object.c
+++ b/drivers/gpu/drm/nouveau/nouveau_object.c
@@ -634,6 +634,29 @@ found:
634 if (oc->engine == NVOBJ_ENGINE_SW) 634 if (oc->engine == NVOBJ_ENGINE_SW)
635 return nouveau_gpuobj_sw_new(chan, class, gpuobj); 635 return nouveau_gpuobj_sw_new(chan, class, gpuobj);
636 636
637 switch (oc->engine) {
638 case NVOBJ_ENGINE_GR:
639 if (dev_priv->card_type >= NV_50 && !chan->ramin_grctx) {
640 struct nouveau_pgraph_engine *pgraph =
641 &dev_priv->engine.graph;
642
643 ret = pgraph->create_context(chan);
644 if (ret)
645 return ret;
646 }
647 break;
648 case NVOBJ_ENGINE_CRYPT:
649 if (!chan->crypt_ctx) {
650 struct nouveau_crypt_engine *pcrypt =
651 &dev_priv->engine.crypt;
652
653 ret = pcrypt->create_context(chan);
654 if (ret)
655 return ret;
656 }
657 break;
658 }
659
637 ret = nouveau_gpuobj_new(dev, chan, 660 ret = nouveau_gpuobj_new(dev, chan,
638 nouveau_gpuobj_class_instmem_size(dev, class), 661 nouveau_gpuobj_class_instmem_size(dev, class),
639 16, 662 16,