These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / dma / pl330.c
index 3dabc52..17ee758 100644 (file)
@@ -1198,6 +1198,9 @@ static inline int _loop(unsigned dry_run, u8 buf[],
        unsigned lcnt0, lcnt1, ljmp0, ljmp1;
        struct _arg_LPEND lpend;
 
+       if (*bursts == 1)
+               return _bursts(dry_run, buf, pxs, 1);
+
        /* Max iterations possible in DMALP is 256 */
        if (*bursts >= 256*256) {
                lcnt1 = 256;
@@ -1424,8 +1427,8 @@ static int pl330_submit_req(struct pl330_thread *thrd,
                goto xfer_exit;
 
        if (ret > pl330->mcbufsz / 2) {
-               dev_info(pl330->ddma.dev, "%s:%d Trying increasing mcbufsz\n",
-                               __func__, __LINE__);
+               dev_info(pl330->ddma.dev, "%s:%d Try increasing mcbufsz (%i/%i)\n",
+                               __func__, __LINE__, ret, pl330->mcbufsz / 2);
                ret = -ENOMEM;
                goto xfer_exit;
        }
@@ -2584,12 +2587,14 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst,
 {
        struct dma_pl330_desc *desc;
        struct dma_pl330_chan *pch = to_pchan(chan);
-       struct pl330_dmac *pl330 = pch->dmac;
+       struct pl330_dmac *pl330;
        int burst;
 
        if (unlikely(!pch || !len))
                return NULL;
 
+       pl330 = pch->dmac;
+
        desc = __pl330_prep_dma_memcpy(pch, dst, src, len);
        if (!desc)
                return NULL;