linux/drivers/dma
Amelie Delaunay 12eb621e1a dmaengine: stm32-dma3: prevent pack/unpack thanks to DT configuration
When source data width/burst and destination data width/burst are
different, data are packed or unpacked in DMA3 channel FIFO, using
CxTR1.PAM.
Data are pushed out from DMA3 channel FIFO when the destination burst
length (= data width * burst) is reached.
If the transfer is stopped before CxBR1.BNDT = 0, and if some bytes are
packed/unpacked in the DMA3 channel FIFO, these bytes are lost.
Indeed, DMA3 channel FIFO has no flush capability, only reset.
To avoid potential bytes lost, pack/unpack must be prevented by setting
memory data width/burst equal to peripheral data width/burst.
Memory accesses will be penalized. But it is the only way to avoid bytes
lost.

Prevent pack/unpack feature can be activated by setting bit 16 of DMA3
Transfer requirements bitfield (tr_conf) in device tree.

Signed-off-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
Link: https://lore.kernel.org/r/20241016-dma3-mp25-updates-v3-2-8311fe6f228d@foss.st.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2024-10-21 22:51:44 +05:30
..
amd dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
bestcomm dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
dw dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
dw-axi-dmac dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
dw-edma dmaengine: dw-edma: Do not enable watermark interrupts for HDMA 2024-08-28 18:40:17 +05:30
fsl-dpaa2-qdma dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
hsu dmaengine: hsu: Include headers we are direct user of 2022-09-04 22:49:35 +05:30
idxd dmaengine: idxd: Move DSA/IAA device IDs to IDXD driver 2024-10-21 22:32:39 +05:30
ioat dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
lgm dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
mediatek dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
ppc4xx dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
ptdma dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
qcom dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
sf-pdma dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
sh dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
stm32 dmaengine: stm32-dma3: prevent pack/unpack thanks to DT configuration 2024-10-21 22:51:44 +05:30
ti dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
xilinx dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
acpi-dma.c dmaengine: acpi: Clean up headers 2024-10-14 23:27:57 +05:30
altera-msgdma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
amba-pl08x.c dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
apple-admac.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
at_hdmac.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
at_xdmac.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
bcm2835-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
bcm-sba-raid.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
dma-axi-dmac.c dmaengine: dma-axi-dmac: Implement device_prep_peripheral_dma_vec 2024-06-21 15:31:57 +05:30
dma-jz4780.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
dmaengine.c dmaengine: avoid non-constant format string 2024-08-29 22:49:53 +05:30
dmaengine.h dmaengine: dmaengine_desc_callback_valid(): Check for callback_result 2021-10-25 09:42:56 +05:30
dmatest.c dmaengine: dmatest: Explicitly cast divisor to u32 2024-08-05 22:30:55 +05:30
ep93xx_dma.c dmaengine: ep93xx: Fix unsigned compared against 0 2024-10-14 23:45:37 +05:30
fsl_raid.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
fsl_raid.h
fsl-edma-common.c dmaengine: fsl-edma: change the memory access from local into remote mode in i.MX 8QM 2024-06-11 23:55:34 +05:30
fsl-edma-common.h dmaengine: fsl-edma: change the memory access from local into remote mode in i.MX 8QM 2024-06-11 23:55:34 +05:30
fsl-edma-main.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
fsl-edma-trace.c dmaengine: fsl-edma: add trace event support 2024-05-04 18:00:16 +05:30
fsl-edma-trace.h dmaengine: fsl-edma: add trace event support 2024-05-04 18:00:16 +05:30
fsl-qdma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
fsldma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
fsldma.h fsldma: fix very broken 32-bit ppc ioread64 functionality 2020-08-29 13:50:56 -07:00
hisi_dma.c dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
idma64.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
idma64.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
img-mdc-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
imx-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
imx-sdma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
k3dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
Kconfig dmaengine: Add dma router for pl08x in LPC32XX SoC 2024-08-29 22:54:11 +05:30
loongson1-apb-dma.c dmaengine: loongson1-apb-dma: Fix the build warning caused by the size of pdev_irqname 2024-09-02 13:56:32 +05:30
lpc18xx-dmamux.c dmaengine: Explicitly include correct DT includes 2023-08-01 23:51:27 +05:30
lpc32xx-dmamux.c dmaengine: Add dma router for pl08x in LPC32XX SoC 2024-08-29 22:54:11 +05:30
ls2x-apb-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
Makefile dmaengine: Add dma router for pl08x in LPC32XX SoC 2024-08-29 22:54:11 +05:30
mcf-edma-main.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
milbeaut-hdmac.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
milbeaut-xdmac.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
mmp_pdma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
mmp_tdma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
moxart-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
mpc512x_dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
mv_xor_v2.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
mv_xor.c dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
mv_xor.h dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
mxs-dma.c dmaengine: Explicitly include correct DT includes 2023-08-01 23:51:27 +05:30
nbpfaxi.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
of-dma.c dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
owl-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
pch_dma.c dmaengine: pch_dma: remove unused function chan2parent 2024-04-07 18:36:58 +05:30
pl330.c dma-mapping: don't return errors from dma_set_max_seg_size 2024-08-29 07:22:49 +03:00
plx_dma.c dmaengine: plx_dma: Don't set chancnt 2023-05-24 12:24:32 +05:30
pxa_dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
sa11x0-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
sprd-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
st_fdma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
st_fdma.h dmaengine: st_fdma: Annotate struct st_fdma_desc with __counted_by 2023-09-28 16:42:14 +05:30
ste_dma40_ll.c dmaengine: ste_dma40: Remove platform data 2023-05-16 23:00:19 +05:30
ste_dma40_ll.h dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
ste_dma40.c dma-mapping: don't return errors from dma_set_max_seg_size 2024-08-29 07:22:49 +03:00
ste_dma40.h dmaengine: Fix spelling mistakes 2024-09-02 13:56:01 +05:30
sun4i-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
sun6i-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
tegra20-apb-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
tegra186-gpc-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
tegra210-adma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
timb_dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
TODO
txx9dmac.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
txx9dmac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
uniphier-mdmac.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
uniphier-xdmac.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30
virt-dma.c dmaengine: virt-dma: add missing MODULE_DESCRIPTION() macro 2024-06-28 13:03:13 +05:30
virt-dma.h dma: Add lockdep asserts to virt-dma 2024-04-07 17:08:19 +05:30
xgene-dma.c dmaengine: Switch back to struct platform_driver::remove() 2024-10-14 23:50:34 +05:30