]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/gpu/drm/nouveau/nouveau_drv.c
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
[karo-tx-linux.git] / drivers / gpu / drm / nouveau / nouveau_drv.c
index 910b97e813faf744e1a9928931a304ed810d7653..cad254c8e387ed4c556a260cfbc28a98efef5146 100644 (file)
@@ -33,6 +33,7 @@
 #include "nouveau_fb.h"
 #include "nouveau_fbcon.h"
 #include "nouveau_pm.h"
+#include "nouveau_fifo.h"
 #include "nv50_display.h"
 
 #include "drm_pciids.h"
@@ -175,7 +176,7 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state)
        struct drm_device *dev = pci_get_drvdata(pdev);
        struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_instmem_engine *pinstmem = &dev_priv->engine.instmem;
-       struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo;
+       struct nouveau_fifo_priv *pfifo = nv_engine(dev, NVOBJ_ENGINE_FIFO);
        struct nouveau_channel *chan;
        struct drm_crtc *crtc;
        int ret, i, e;
@@ -214,21 +215,13 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state)
        ttm_bo_evict_mm(&dev_priv->ttm.bdev, TTM_PL_VRAM);
 
        NV_INFO(dev, "Idling channels...\n");
-       for (i = 0; i < pfifo->channels; i++) {
+       for (i = 0; i < (pfifo ? pfifo->channels : 0); i++) {
                chan = dev_priv->channels.ptr[i];
 
                if (chan && chan->pushbuf_bo)
                        nouveau_channel_idle(chan);
        }
 
-       if (dev_priv->card_type < NV_50) {
-               nv_wr32(dev, NV03_PFIFO_CACHES, 0);
-               nv_mask(dev, NV04_PFIFO_CACHE1_DMA_PUSH, 0x00000001, 0);
-               nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, 0);
-               nv_mask(dev, NV04_PFIFO_CACHE1_PULL0, 0x00000001, 0);
-       }
-       pfifo->unload_context(dev);
-
        for (e = NVOBJ_ENGINE_NR - 1; e >= 0; e--) {
                if (!dev_priv->eng[e])
                        continue;
@@ -269,11 +262,6 @@ out_abort:
                if (dev_priv->eng[e])
                        dev_priv->eng[e]->init(dev, e);
        }
-       if (dev_priv->card_type < NV_50) {
-               nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, 1);
-               nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1);
-               nv_wr32(dev, NV03_PFIFO_CACHES, 1);
-       }
        return ret;
 }
 
@@ -281,6 +269,7 @@ int
 nouveau_pci_resume(struct pci_dev *pdev)
 {
        struct drm_device *dev = pci_get_drvdata(pdev);
+       struct nouveau_fifo_priv *pfifo = nv_engine(dev, NVOBJ_ENGINE_FIFO);
        struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_engine *engine = &dev_priv->engine;
        struct drm_crtc *crtc;
@@ -328,7 +317,6 @@ nouveau_pci_resume(struct pci_dev *pdev)
                if (dev_priv->eng[i])
                        dev_priv->eng[i]->init(dev, i);
        }
-       engine->fifo.init(dev);
 
        nouveau_irq_postinstall(dev);
 
@@ -337,7 +325,7 @@ nouveau_pci_resume(struct pci_dev *pdev)
                struct nouveau_channel *chan;
                int j;
 
-               for (i = 0; i < dev_priv->engine.fifo.channels; i++) {
+               for (i = 0; i < (pfifo ? pfifo->channels : 0); i++) {
                        chan = dev_priv->channels.ptr[i];
                        if (!chan || !chan->pushbuf_bo)
                                continue;