drm/nv50-nvc0: disp channels have fixed purposes, don't "allocate" them
authorBen Skeggs <bskeggs@redhat.com>
Tue, 1 Feb 2011 00:39:45 +0000 (10:39 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 24 Feb 2011 20:44:45 +0000 (06:44 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nv50_display.h
drivers/gpu/drm/nouveau/nv50_evo.c

index 0d99951..97d3ed5 100644 (file)
@@ -37,7 +37,6 @@
 
 struct nv50_display {
        struct nouveau_channel *master;
-       u32 evo_alloc;
 
        struct {
                struct dcb_entry *dcb;
index d837168..d9c77d8 100644 (file)
@@ -33,15 +33,11 @@ static void
 nv50_evo_channel_del(struct nouveau_channel **pevo)
 {
        struct nouveau_channel *evo = *pevo;
-       struct nv50_display *disp;
 
        if (!evo)
                return;
        *pevo = NULL;
 
-       disp = nv50_display(evo->dev);
-       disp->evo_alloc &= ~(1 << evo->id);
-
        nouveau_gpuobj_channel_takedown(evo);
        nouveau_bo_unmap(evo->pushbuf_bo);
        nouveau_bo_ref(NULL, &evo->pushbuf_bo);
@@ -85,7 +81,8 @@ nv50_evo_dmaobj_new(struct nouveau_channel *evo, u32 class, u32 name,
 }
 
 static int
-nv50_evo_channel_new(struct drm_device *dev, struct nouveau_channel **pevo)
+nv50_evo_channel_new(struct drm_device *dev, int chid,
+                    struct nouveau_channel **pevo)
 {
        struct nv50_display *disp = nv50_display(dev);
        struct nouveau_channel *evo;
@@ -96,19 +93,7 @@ nv50_evo_channel_new(struct drm_device *dev, struct nouveau_channel **pevo)
                return -ENOMEM;
        *pevo = evo;
 
-       for (evo->id = 0; evo->id < 5; evo->id++) {
-               if (disp->evo_alloc & (1 << evo->id))
-                       continue;
-
-               disp->evo_alloc |= (1 << evo->id);
-               break;
-       }
-
-       if (evo->id == 5) {
-               kfree(evo);
-               return -ENODEV;
-       }
-
+       evo->id = chid;
        evo->dev = dev;
        evo->user_get = 4;
        evo->user_put = 0;
@@ -225,7 +210,7 @@ nv50_evo_create(struct drm_device *dev)
        /* create primary evo channel, the one we use for modesetting
         * purporses
         */
-       ret = nv50_evo_channel_new(dev, &disp->master);
+       ret = nv50_evo_channel_new(dev, 0, &disp->master);
        if (ret)
                return ret;
        evo = disp->master;