• Serge Semin's avatar
    spi: dw: Fix Rx-only DMA transfers · 46164fde
    Serge Semin authored
    Tx-only DMA transfers are working perfectly fine since in this case
    the code just ignores the Rx FIFO overflow interrupts. But it turns
    out the SPI Rx-only transfers are broken since nothing pushing any
    data to the shift registers, so the Rx FIFO is left empty and the
    SPI core subsystems just returns a timeout error. Since DW DMAC
    driver doesn't support something like cyclic write operations of
    a single byte to a device register, the only way to support the
    Rx-only SPI transfers is to fake it by using a dummy Tx-buffer.
    This is what we intend to fix in this commit by setting the
    SPI_CONTROLLER_MUST_TX flag for DMA-capable platform.
    Signed-off-by: default avatarSerge Semin <Sergey.Semin@baikalelectronics.ru>
    Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    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: 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-9-Sergey.Semin@baikalelectronics.ruSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    46164fde
spi-dw.c 14.9 KB