drm/nouveau/bios: allow loading alternate vbios image as firmware
[GitHub/LineageOS/android_kernel_samsung_universal7580.git] / drivers / dma / mpc512x_dma.c
index 4d6d4cf669496ff0afc65d5dee450452b143a2c6..2ab0a3d0eed53eb107f475944b97a339e4419a77 100644 (file)
@@ -44,6 +44,8 @@
 
 #include <linux/random.h>
 
+#include "dmaengine.h"
+
 /* Number of DMA Transfer descriptors allocated per channel */
 #define MPC_DMA_DESCRIPTORS    64
 
@@ -188,7 +190,6 @@ struct mpc_dma_chan {
        struct list_head                completed;
        struct mpc_dma_tcd              *tcd;
        dma_addr_t                      tcd_paddr;
-       dma_cookie_t                    completed_cookie;
 
        /* Lock for this structure */
        spinlock_t                      lock;
@@ -365,7 +366,7 @@ static void mpc_dma_process_completed(struct mpc_dma *mdma)
                /* Free descriptors */
                spin_lock_irqsave(&mchan->lock, flags);
                list_splice_tail_init(&list, &mchan->free);
-               mchan->completed_cookie = last_cookie;
+               mchan->chan.completed_cookie = last_cookie;
                spin_unlock_irqrestore(&mchan->lock, flags);
        }
 }
@@ -438,13 +439,7 @@ static dma_cookie_t mpc_dma_tx_submit(struct dma_async_tx_descriptor *txd)
                mpc_dma_execute(mchan);
 
        /* Update cookie */
-       cookie = mchan->chan.cookie + 1;
-       if (cookie <= 0)
-               cookie = 1;
-
-       mchan->chan.cookie = cookie;
-       mdesc->desc.cookie = cookie;
-
+       cookie = dma_cookie_assign(txd);
        spin_unlock_irqrestore(&mchan->lock, flags);
 
        return cookie;
@@ -562,17 +557,14 @@ mpc_dma_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
               struct dma_tx_state *txstate)
 {
        struct mpc_dma_chan *mchan = dma_chan_to_mpc_dma_chan(chan);
+       enum dma_status ret;
        unsigned long flags;
-       dma_cookie_t last_used;
-       dma_cookie_t last_complete;
 
        spin_lock_irqsave(&mchan->lock, flags);
-       last_used = mchan->chan.cookie;
-       last_complete = mchan->completed_cookie;
+       ret = dma_cookie_status(chan, cookie, txstate);
        spin_unlock_irqrestore(&mchan->lock, flags);
 
-       dma_set_tx_state(txstate, last_complete, last_used, 0);
-       return dma_async_is_complete(cookie, last_complete, last_used);
+       return ret;
 }
 
 /* Prepare descriptor for memory to memory copy */
@@ -741,8 +733,7 @@ static int __devinit mpc_dma_probe(struct platform_device *op)
                mchan = &mdma->channels[i];
 
                mchan->chan.device = dma;
-               mchan->chan.cookie = 1;
-               mchan->completed_cookie = mchan->chan.cookie;
+               dma_cookie_init(&mchan->chan);
 
                INIT_LIST_HEAD(&mchan->free);
                INIT_LIST_HEAD(&mchan->prepared);