Merge tag 'dmaengine-5.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul...
[platform/kernel/linux-starfive.git] / drivers / dma / xilinx / xilinx_dpdma.c
index 6c70980..b280a53 100644 (file)
@@ -531,7 +531,7 @@ static void xilinx_dpdma_sw_desc_set_dma_addrs(struct xilinx_dpdma_device *xdev,
        for (i = 1; i < num_src_addr; i++) {
                u32 *addr = &hw_desc->src_addr2;
 
-               addr[i-1] = lower_32_bits(dma_addr[i]);
+               addr[i - 1] = lower_32_bits(dma_addr[i]);
 
                if (xdev->ext_addr) {
                        u32 *addr_ext = &hw_desc->addr_ext_23;
@@ -703,8 +703,9 @@ xilinx_dpdma_chan_prep_interleaved_dma(struct xilinx_dpdma_chan *chan,
        size_t stride = hsize + xt->sgl[0].icg;
 
        if (!IS_ALIGNED(xt->src_start, XILINX_DPDMA_ALIGN_BYTES)) {
-               dev_err(chan->xdev->dev, "buffer should be aligned at %d B\n",
-                       XILINX_DPDMA_ALIGN_BYTES);
+               dev_err(chan->xdev->dev,
+                       "chan%u: buffer should be aligned at %d B\n",
+                       chan->id, XILINX_DPDMA_ALIGN_BYTES);
                return NULL;
        }
 
@@ -917,7 +918,7 @@ static u32 xilinx_dpdma_chan_ostand(struct xilinx_dpdma_chan *chan)
 }
 
 /**
- * xilinx_dpdma_chan_no_ostand - Notify no outstanding transaction event
+ * xilinx_dpdma_chan_notify_no_ostand - Notify no outstanding transaction event
  * @chan: DPDMA channel
  *
  * Notify waiters for no outstanding event, so waiters can stop the channel
@@ -936,7 +937,9 @@ static int xilinx_dpdma_chan_notify_no_ostand(struct xilinx_dpdma_chan *chan)
 
        cnt = xilinx_dpdma_chan_ostand(chan);
        if (cnt) {
-               dev_dbg(chan->xdev->dev, "%d outstanding transactions\n", cnt);
+               dev_dbg(chan->xdev->dev,
+                       "chan%u: %d outstanding transactions\n",
+                       chan->id, cnt);
                return -EWOULDBLOCK;
        }
 
@@ -972,8 +975,8 @@ static int xilinx_dpdma_chan_wait_no_ostand(struct xilinx_dpdma_chan *chan)
                return 0;
        }
 
-       dev_err(chan->xdev->dev, "not ready to stop: %d trans\n",
-               xilinx_dpdma_chan_ostand(chan));
+       dev_err(chan->xdev->dev, "chan%u: not ready to stop: %d trans\n",
+               chan->id, xilinx_dpdma_chan_ostand(chan));
 
        if (ret == 0)
                return -ETIMEDOUT;
@@ -1007,8 +1010,8 @@ static int xilinx_dpdma_chan_poll_no_ostand(struct xilinx_dpdma_chan *chan)
                return 0;
        }
 
-       dev_err(chan->xdev->dev, "not ready to stop: %d trans\n",
-               xilinx_dpdma_chan_ostand(chan));
+       dev_err(chan->xdev->dev, "chan%u: not ready to stop: %d trans\n",
+               chan->id, xilinx_dpdma_chan_ostand(chan));
 
        return -ETIMEDOUT;
 }
@@ -1062,7 +1065,8 @@ static void xilinx_dpdma_chan_done_irq(struct xilinx_dpdma_chan *chan)
                vchan_cyclic_callback(&active->vdesc);
        else
                dev_warn(chan->xdev->dev,
-                        "DONE IRQ with no active descriptor!\n");
+                        "chan%u: DONE IRQ with no active descriptor!\n",
+                        chan->id);
 
        spin_unlock_irqrestore(&chan->lock, flags);
 }
@@ -1094,8 +1098,12 @@ static void xilinx_dpdma_chan_vsync_irq(struct  xilinx_dpdma_chan *chan)
        /* If the retrigger raced with vsync, retry at the next frame. */
        sw_desc = list_first_entry(&pending->descriptors,
                                   struct xilinx_dpdma_sw_desc, node);
-       if (sw_desc->hw.desc_id != desc_id)
+       if (sw_desc->hw.desc_id != desc_id) {
+               dev_dbg(chan->xdev->dev,
+                       "chan%u: vsync race lost (%u != %u), retrying\n",
+                       chan->id, sw_desc->hw.desc_id, desc_id);
                goto out;
+       }
 
        /*
         * Complete the active descriptor, if any, promote the pending
@@ -1151,10 +1159,12 @@ static void xilinx_dpdma_chan_handle_err(struct xilinx_dpdma_chan *chan)
 
        spin_lock_irqsave(&chan->lock, flags);
 
-       dev_dbg(xdev->dev, "cur desc addr = 0x%04x%08x\n",
+       dev_dbg(xdev->dev, "chan%u: cur desc addr = 0x%04x%08x\n",
+               chan->id,
                dpdma_read(chan->reg, XILINX_DPDMA_CH_DESC_START_ADDRE),
                dpdma_read(chan->reg, XILINX_DPDMA_CH_DESC_START_ADDR));
-       dev_dbg(xdev->dev, "cur payload addr = 0x%04x%08x\n",
+       dev_dbg(xdev->dev, "chan%u: cur payload addr = 0x%04x%08x\n",
+               chan->id,
                dpdma_read(chan->reg, XILINX_DPDMA_CH_PYLD_CUR_ADDRE),
                dpdma_read(chan->reg, XILINX_DPDMA_CH_PYLD_CUR_ADDR));
 
@@ -1170,7 +1180,8 @@ static void xilinx_dpdma_chan_handle_err(struct xilinx_dpdma_chan *chan)
        xilinx_dpdma_chan_dump_tx_desc(chan, active);
 
        if (active->error)
-               dev_dbg(xdev->dev, "repeated error on desc\n");
+               dev_dbg(xdev->dev, "chan%u: repeated error on desc\n",
+                       chan->id);
 
        /* Reschedule if there's no new descriptor */
        if (!chan->desc.pending &&
@@ -1235,7 +1246,8 @@ static int xilinx_dpdma_alloc_chan_resources(struct dma_chan *dchan)
                                          align, 0);
        if (!chan->desc_pool) {
                dev_err(chan->xdev->dev,
-                       "failed to allocate a descriptor pool\n");
+                       "chan%u: failed to allocate a descriptor pool\n",
+                       chan->id);
                return -ENOMEM;
        }
 
@@ -1588,7 +1600,7 @@ static struct dma_chan *of_dma_xilinx_xlate(struct of_phandle_args *dma_spec,
                                            struct of_dma *ofdma)
 {
        struct xilinx_dpdma_device *xdev = ofdma->of_dma_data;
-       uint32_t chan_id = dma_spec->args[0];
+       u32 chan_id = dma_spec->args[0];
 
        if (chan_id >= ARRAY_SIZE(xdev->chan))
                return NULL;