drm/nve0/fifo: copy engine context stored in ramfc, not externally
authorBen Skeggs <bskeggs@redhat.com>
Sun, 28 Apr 2013 23:35:28 +0000 (09:35 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 1 Jul 2013 03:43:30 +0000 (13:43 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c

index 56192a7242aee51ab1fdbb575b8463a47a41acb7..4419fd23d0d1339254e3044c9b8be4c4b82906bb 100644 (file)
@@ -138,10 +138,12 @@ nve0_fifo_context_attach(struct nouveau_object *parent,
        int ret;
 
        switch (nv_engidx(object->engine)) {
-       case NVDEV_ENGINE_SW   : return 0;
-       case NVDEV_ENGINE_GR   :
+       case NVDEV_ENGINE_SW   :
        case NVDEV_ENGINE_COPY0:
-       case NVDEV_ENGINE_COPY1: addr = 0x0210; break;
+       case NVDEV_ENGINE_COPY1:
+       case NVDEV_ENGINE_COPY2:
+               return 0;
+       case NVDEV_ENGINE_GR   : addr = 0x0210; break;
        case NVDEV_ENGINE_BSP  : addr = 0x0270; break;
        case NVDEV_ENGINE_VP   : addr = 0x0250; break;
        case NVDEV_ENGINE_PPP  : addr = 0x0260; break;
@@ -176,9 +178,10 @@ nve0_fifo_context_detach(struct nouveau_object *parent, bool suspend,
 
        switch (nv_engidx(object->engine)) {
        case NVDEV_ENGINE_SW   : return 0;
-       case NVDEV_ENGINE_GR   :
        case NVDEV_ENGINE_COPY0:
-       case NVDEV_ENGINE_COPY1: addr = 0x0210; break;
+       case NVDEV_ENGINE_COPY1:
+       case NVDEV_ENGINE_COPY2: addr = 0x0000; break;
+       case NVDEV_ENGINE_GR   : addr = 0x0210; break;
        case NVDEV_ENGINE_BSP  : addr = 0x0270; break;
        case NVDEV_ENGINE_VP   : addr = 0x0250; break;
        case NVDEV_ENGINE_PPP  : addr = 0x0260; break;
@@ -194,9 +197,12 @@ nve0_fifo_context_detach(struct nouveau_object *parent, bool suspend,
                        return -EBUSY;
        }
 
-       nv_wo32(base, addr + 0x00, 0x00000000);
-       nv_wo32(base, addr + 0x04, 0x00000000);
-       bar->flush(bar);
+       if (addr) {
+               nv_wo32(base, addr + 0x00, 0x00000000);
+               nv_wo32(base, addr + 0x04, 0x00000000);
+               bar->flush(bar);
+       }
+
        return 0;
 }