dmaengine/amba-pl08x: Config ccfg and increment phychan_hold if phychan is true
Currently, if plchan->phychan is true, we return immediately from prep_phy_chan(). We must configure txd->ccfg and increment phychan_hold before returning. Otherwise, request line number wouldn't be configured in this txd. Reported-by: Rajeev Kumar <rajeev-dlh.kumar@st.com> Signed-off-by: Viresh Kumar <viresh.kumar@st.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
This commit is contained in:
Родитель
c94e910535
Коммит
8f0d30f9ee
|
@ -854,8 +854,10 @@ static int prep_phy_channel(struct pl08x_dma_chan *plchan,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Check if we already have a channel */
|
/* Check if we already have a channel */
|
||||||
if (plchan->phychan)
|
if (plchan->phychan) {
|
||||||
return 0;
|
ch = plchan->phychan;
|
||||||
|
goto got_channel;
|
||||||
|
}
|
||||||
|
|
||||||
ch = pl08x_get_phy_channel(pl08x, plchan);
|
ch = pl08x_get_phy_channel(pl08x, plchan);
|
||||||
if (!ch) {
|
if (!ch) {
|
||||||
|
@ -880,21 +882,22 @@ static int prep_phy_channel(struct pl08x_dma_chan *plchan,
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
ch->signal = ret;
|
ch->signal = ret;
|
||||||
|
|
||||||
/* Assign the flow control signal to this channel */
|
|
||||||
if (txd->direction == DMA_MEM_TO_DEV)
|
|
||||||
txd->ccfg |= ch->signal << PL080_CONFIG_DST_SEL_SHIFT;
|
|
||||||
else if (txd->direction == DMA_DEV_TO_MEM)
|
|
||||||
txd->ccfg |= ch->signal << PL080_CONFIG_SRC_SEL_SHIFT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plchan->phychan = ch;
|
||||||
dev_dbg(&pl08x->adev->dev, "allocated physical channel %d and signal %d for xfer on %s\n",
|
dev_dbg(&pl08x->adev->dev, "allocated physical channel %d and signal %d for xfer on %s\n",
|
||||||
ch->id,
|
ch->id,
|
||||||
ch->signal,
|
ch->signal,
|
||||||
plchan->name);
|
plchan->name);
|
||||||
|
|
||||||
|
got_channel:
|
||||||
|
/* Assign the flow control signal to this channel */
|
||||||
|
if (txd->direction == DMA_MEM_TO_DEV)
|
||||||
|
txd->ccfg |= ch->signal << PL080_CONFIG_DST_SEL_SHIFT;
|
||||||
|
else if (txd->direction == DMA_DEV_TO_MEM)
|
||||||
|
txd->ccfg |= ch->signal << PL080_CONFIG_SRC_SEL_SHIFT;
|
||||||
|
|
||||||
plchan->phychan_hold++;
|
plchan->phychan_hold++;
|
||||||
plchan->phychan = ch;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче