drm/nvc0: gpuobj_new need only check validity and init the relevant engine
authorBen Skeggs <bskeggs@redhat.com>
Wed, 24 Nov 2010 00:10:23 +0000 (10:10 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 21 Dec 2010 07:17:26 +0000 (17:17 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_object.c

index 55c9fdcfa67fc3a02517f9308f752ddf26c67508..c64fd971b867edc24ed5eee36ba55a8a82857c83 100644 (file)
@@ -643,10 +643,13 @@ nouveau_gpuobj_gr_new(struct nouveau_channel *chan, u32 handle, int class)
 found:
        switch (oc->engine) {
        case NVOBJ_ENGINE_SW:
-               ret = nouveau_gpuobj_sw_new(chan, class, &gpuobj);
-               if (ret)
-                       return ret;
-               goto insert;
+               if (dev_priv->card_type < NV_C0) {
+                       ret = nouveau_gpuobj_sw_new(chan, class, &gpuobj);
+                       if (ret)
+                               return ret;
+                       goto insert;
+               }
+               break;
        case NVOBJ_ENGINE_GR:
                if (dev_priv->card_type >= NV_50 && !chan->ramin_grctx) {
                        struct nouveau_pgraph_engine *pgraph =
@@ -669,6 +672,10 @@ found:
                break;
        }
 
+       /* we're done if this is fermi */
+       if (dev_priv->card_type >= NV_C0)
+               return 0;
+
        ret = nouveau_gpuobj_new(dev, chan,
                                 nouveau_gpuobj_class_instmem_size(dev, class),
                                 16,