lkml.org 
[lkml]   [2020]   [Jun]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v9 RESEND 12/13] dmaengine: imx-sdma: fix ecspi1 rx dma not work on i.mx8mm
    Date
    Because the number of ecspi1 rx event on i.mx8mm is 0, the condition
    check ignore such special case without dma channel enabled, which caused
    ecspi1 rx works failed. Actually, no need to check event_id0/event_id1
    and replace checking 'event_id1' with 'DMA_DEV_TO_DEV', so that configure
    event_id1 only in case DEV_TO_DEV.

    Signed-off-by: Robin Gong <yibin.gong@nxp.com>
    Acked-by: Vinod Koul <vkoul@kernel.org>
    ---
    drivers/dma/imx-sdma.c | 18 ++++++++----------
    1 file changed, 8 insertions(+), 10 deletions(-)

    diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
    index be86ae8..320104f 100644
    --- a/drivers/dma/imx-sdma.c
    +++ b/drivers/dma/imx-sdma.c
    @@ -1183,7 +1183,7 @@ static int sdma_config_channel(struct dma_chan *chan)
    if ((sdmac->peripheral_type != IMX_DMATYPE_MEMORY) &&
    (sdmac->peripheral_type != IMX_DMATYPE_DSP)) {
    /* Handle multiple event channels differently */
    - if (sdmac->event_id1) {
    + if (sdmac->direction == DMA_DEV_TO_DEV) {
    if (sdmac->peripheral_type == IMX_DMATYPE_ASRC_SP ||
    sdmac->peripheral_type == IMX_DMATYPE_ASRC)
    sdma_set_watermarklevel_for_p2p(sdmac);
    @@ -1351,9 +1351,9 @@ static void sdma_free_chan_resources(struct dma_chan *chan)

    sdma_channel_synchronize(chan);

    - if (sdmac->event_id0 >= 0)
    - sdma_event_disable(sdmac, sdmac->event_id0);
    - if (sdmac->event_id1)
    + sdma_event_disable(sdmac, sdmac->event_id0);
    +
    + if (sdmac->direction == DMA_DEV_TO_DEV)
    sdma_event_disable(sdmac, sdmac->event_id1);

    sdmac->event_id0 = 0;
    @@ -1651,13 +1651,11 @@ static int sdma_config(struct dma_chan *chan,
    memcpy(&sdmac->slave_config, dmaengine_cfg, sizeof(*dmaengine_cfg));

    /* Set ENBLn earlier to make sure dma request triggered after that */
    - if (sdmac->event_id0 >= 0) {
    - if (sdmac->event_id0 >= sdmac->sdma->drvdata->num_events)
    - return -EINVAL;
    - sdma_event_enable(sdmac, sdmac->event_id0);
    - }
    + if (sdmac->event_id0 >= sdmac->sdma->drvdata->num_events)
    + return -EINVAL;
    + sdma_event_enable(sdmac, sdmac->event_id0);

    - if (sdmac->event_id1) {
    + if (sdmac->direction == DMA_DEV_TO_DEV) {
    if (sdmac->event_id1 >= sdmac->sdma->drvdata->num_events)
    return -EINVAL;
    sdma_event_enable(sdmac, sdmac->event_id1);
    --
    2.7.4
    \
     
     \ /
      Last update: 2020-06-06 17:22    [W:4.222 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site