drm/nv50/fifo: use hardware channel kickoff functionality
[linux-2.6-microblaze.git] / drivers / gpu / drm / nouveau / nouveau_drv.c
index 4f2030b..910b97e 100644 (file)
@@ -221,8 +221,12 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state)
                        nouveau_channel_idle(chan);
        }
 
-       pfifo->reassign(dev, false);
-       pfifo->disable(dev);
+       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--) {
@@ -265,8 +269,11 @@ out_abort:
                if (dev_priv->eng[e])
                        dev_priv->eng[e]->init(dev, e);
        }
-       pfifo->enable(dev);
-       pfifo->reassign(dev, true);
+       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;
 }
 
@@ -408,7 +415,7 @@ static struct drm_driver driver = {
        .driver_features =
                DRIVER_USE_AGP | DRIVER_PCI_DMA | DRIVER_SG |
                DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM |
-               DRIVER_MODESET,
+               DRIVER_MODESET | DRIVER_PRIME,
        .load = nouveau_load,
        .firstopen = nouveau_firstopen,
        .lastclose = nouveau_lastclose,
@@ -430,6 +437,12 @@ static struct drm_driver driver = {
        .reclaim_buffers = drm_core_reclaim_buffers,
        .ioctls = nouveau_ioctls,
        .fops = &nouveau_driver_fops,
+
+       .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
+       .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
+       .gem_prime_export = nouveau_gem_prime_export,
+       .gem_prime_import = nouveau_gem_prime_import,
+
        .gem_init_object = nouveau_gem_object_new,
        .gem_free_object = nouveau_gem_object_del,
        .gem_open_object = nouveau_gem_object_open,