/*----------------------------------------------------------------------*/
 
+static void dwc_dump_chan_regs(struct dw_dma_chan *dwc)
+{
+       dev_err(chan2dev(&dwc->chan),
+               "  SAR: 0x%x DAR: 0x%x LLP: 0x%x CTL: 0x%x:%08x\n",
+               channel_readl(dwc, SAR),
+               channel_readl(dwc, DAR),
+               channel_readl(dwc, LLP),
+               channel_readl(dwc, CTL_HI),
+               channel_readl(dwc, CTL_LO));
+}
+
+/*----------------------------------------------------------------------*/
+
 /* Called with dwc->lock held and bh disabled */
 static void dwc_dostart(struct dw_dma_chan *dwc, struct dw_desc *first)
 {
        if (dma_readl(dw, CH_EN) & dwc->mask) {
                dev_err(chan2dev(&dwc->chan),
                        "BUG: Attempted to start non-idle channel\n");
-               dev_err(chan2dev(&dwc->chan),
-                       "  SAR: 0x%x DAR: 0x%x LLP: 0x%x CTL: 0x%x:%08x\n",
-                       channel_readl(dwc, SAR),
-                       channel_readl(dwc, DAR),
-                       channel_readl(dwc, LLP),
-                       channel_readl(dwc, CTL_HI),
-                       channel_readl(dwc, CTL_LO));
+               dwc_dump_chan_regs(dwc);
 
                /* The tasklet will hopefully advance the queue... */
                return;
 
                spin_lock_irqsave(&dwc->lock, flags);
 
-               dev_err(chan2dev(&dwc->chan),
-                       "  SAR: 0x%x DAR: 0x%x LLP: 0x%x CTL: 0x%x:%08x\n",
-                       channel_readl(dwc, SAR),
-                       channel_readl(dwc, DAR),
-                       channel_readl(dwc, LLP),
-                       channel_readl(dwc, CTL_HI),
-                       channel_readl(dwc, CTL_LO));
+               dwc_dump_chan_regs(dwc);
 
                channel_clear_bit(dw, CH_EN, dwc->mask);
                while (dma_readl(dw, CH_EN) & dwc->mask)
        if (dma_readl(dw, CH_EN) & dwc->mask) {
                dev_err(chan2dev(&dwc->chan),
                        "BUG: Attempted to start non-idle channel\n");
-               dev_err(chan2dev(&dwc->chan),
-                       "  SAR: 0x%x DAR: 0x%x LLP: 0x%x CTL: 0x%x:%08x\n",
-                       channel_readl(dwc, SAR),
-                       channel_readl(dwc, DAR),
-                       channel_readl(dwc, LLP),
-                       channel_readl(dwc, CTL_HI),
-                       channel_readl(dwc, CTL_LO));
+               dwc_dump_chan_regs(dwc);
                spin_unlock_irqrestore(&dwc->lock, flags);
                return -EBUSY;
        }