diff options
author | Ben Wolsieffer <Ben.Wolsieffer@hefring.com> | 2023-09-28 09:56:44 -0400 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2023-10-10 13:35:31 +0200 |
commit | 44ac5e91580b9c88212bd0336214ac204e6e9fe7 (patch) | |
tree | 3fa2a9326ed3e91f4934dc29d8045e7ac505917c /drivers/mmc/host/mmci.c | |
parent | 09b59829715bc3c929bb300e2bd5d01e37faa3d3 (diff) | |
download | lwn-44ac5e91580b9c88212bd0336214ac204e6e9fe7.tar.gz lwn-44ac5e91580b9c88212bd0336214ac204e6e9fe7.zip |
mmc: mmci: use peripheral flow control for STM32
The STM32 SDMMC peripheral (at least for the STM32F429, STM32F469 and
STM32F746, which are all the currently supported devices using periphid
0x00880180) requires DMA to be performed in peripheral flow controller
mode. From the STM32F74/5 reference manual, section 35.3.2:
"SDMMC host allows only to use the DMA in peripheral flow controller
mode. DMA stream used to serve SDMMC must be configured in peripheral
flow controller mode"
This patch adds a variant option to control peripheral flow control and
enables it for the STM32 variant.
Signed-off-by: Ben Wolsieffer <Ben.Wolsieffer@hefring.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20230928135644.1489691-1-ben.wolsieffer@hefring.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc/host/mmci.c')
-rw-r--r-- | drivers/mmc/host/mmci.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index dda756a56379..e967cca7a16f 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -249,6 +249,7 @@ static struct variant_data variant_stm32 = { .f_max = 48000000, .pwrreg_clkgate = true, .pwrreg_nopower = true, + .dma_flow_controller = true, .init = mmci_variant_init, }; @@ -1015,7 +1016,7 @@ static int _mmci_dmae_prep_data(struct mmci_host *host, struct mmc_data *data, .dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES, .src_maxburst = variant->fifohalfsize >> 2, /* # of words */ .dst_maxburst = variant->fifohalfsize >> 2, /* # of words */ - .device_fc = false, + .device_fc = variant->dma_flow_controller, }; struct dma_chan *chan; struct dma_device *device; |