On 2018/11/29 17:59, Chunyan Zhang wrote:
Hi Adrian,
On Thu, 29 Nov 2018 at 15:36, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote:
On 29/11/18 8:22 AM, Chunyan Zhang wrote:
On Tue, 20 Nov 2018 at 21:41, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote:
On 12/11/18 9:26 AM, Chunyan Zhang wrote:
Some standard SD host controllers can support both external dma
controllers as well as ADMA/SDMA in which the SD host controller
acts as DMA master. TI's omap controller is the case as an example.
Currently the generic SDHCI code supports ADMA/SDMA integrated in
the host controller but does not have any support for external DMA
controllers implemented using dmaengine, meaning that custom code is
needed for any systems that use an external DMA controller with SDHCI.
I still think you probably need to reset the DMA if there are transfer
errors - perhaps you could comment on that. Also there are some comments below.
With regard to "transfer error", do you mean if
sdhci_external_dma_setup() failed?
No, I mean any error interrupt that can leave the DMA uncompleted. For
SDHCI, resetting the data circuit cleans that up, but presumably something
is needed for external DMA?
Yes, it should need a dmaengine_terminate_all().
No, dmaengine_terminate_all is deprecated for quite a long time.
Please use dmaengine_terminate_{async, sync}() instead.
See Documentation/dmaengine/client.txt
How about adding that at here (I will wrap it up of course):
https://elixir.bootlin.com/linux/v4.19.5/source/drivers/mmc/host/sdhci.c#L2553
Is there somewhere else I'm missing?
Thanks,
Chunyan