lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 238/376] spi: dw: Return any value retrieved from the dma_transfer callback
    Date
    From: Serge Semin <Sergey.Semin@baikalelectronics.ru>

    [ Upstream commit f0410bbf7d0fb80149e3b17d11d31f5b5197873e ]

    DW APB SSI DMA-part of the driver may need to perform the requested
    SPI-transfer synchronously. In that case the dma_transfer() callback
    will return 0 as a marker of the SPI transfer being finished so the
    SPI core doesn't need to wait and may proceed with the SPI message
    trasnfers pumping procedure. This will be needed to fix the problem
    when DMA transactions are finished, but there is still data left in
    the SPI Tx/Rx FIFOs being sent/received. But for now make dma_transfer
    to return 1 as the normal dw_spi_transfer_one() method.

    Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
    Cc: Georgy Vlasov <Georgy.Vlasov@baikalelectronics.ru>
    Cc: Ramil Zaripov <Ramil.Zaripov@baikalelectronics.ru>
    Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>
    Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: Feng Tang <feng.tang@intel.com>
    Cc: Rob Herring <robh+dt@kernel.org>
    Cc: linux-mips@vger.kernel.org
    Cc: devicetree@vger.kernel.org
    Link: https://lore.kernel.org/r/20200529131205.31838-3-Sergey.Semin@baikalelectronics.ru
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/spi/spi-dw-mid.c | 2 +-
    drivers/spi/spi-dw.c | 7 ++-----
    2 files changed, 3 insertions(+), 6 deletions(-)

    diff --git a/drivers/spi/spi-dw-mid.c b/drivers/spi/spi-dw-mid.c
    index e6c045ecffba..23cebdeb67e2 100644
    --- a/drivers/spi/spi-dw-mid.c
    +++ b/drivers/spi/spi-dw-mid.c
    @@ -266,7 +266,7 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer)
    dma_async_issue_pending(dws->txchan);
    }

    - return 0;
    + return 1;
    }

    static void mid_spi_dma_stop(struct dw_spi *dws)
    diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
    index 5725c37544f2..c86c4bbb102e 100644
    --- a/drivers/spi/spi-dw.c
    +++ b/drivers/spi/spi-dw.c
    @@ -381,11 +381,8 @@ static int dw_spi_transfer_one(struct spi_controller *master,

    spi_enable_chip(dws, 1);

    - if (dws->dma_mapped) {
    - ret = dws->dma_ops->dma_transfer(dws, transfer);
    - if (ret < 0)
    - return ret;
    - }
    + if (dws->dma_mapped)
    + return dws->dma_ops->dma_transfer(dws, transfer);

    if (chip->poll_mode)
    return poll_transfer(dws);
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-19 17:46    [W:4.062 / U:0.864 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site