linux/drivers/dma
Serge Semin e8ee6c8cb6 dmaengine: dw: Add DMA-channels mask cell support
DW DMA IP-core provides a way to synthesize the DMA controller with
channels having different parameters like maximum burst-length,
multi-block support, maximum data width, etc. Those parameters both
explicitly and implicitly affect the channels performance. Since DMA slave
devices might be very demanding to the DMA performance, let's provide a
functionality for the slaves to be assigned with DW DMA channels, which
performance according to the platform engineer fulfill their requirements.
After this patch is applied it can be done by passing the mask of suitable
DMA-channels either directly in the dw_dma_slave structure instance or as
a fifth cell of the DMA DT-property. If mask is zero or not provided, then
there is no limitation on the channels allocation.

For instance Baikal-T1 SoC is equipped with a DW DMAC engine, which first
two channels are synthesized with max burst length of 16, while the rest
of the channels have been created with max-burst-len=4. It would seem that
the first two channels must be faster than the others and should be more
preferable for the time-critical DMA slave devices. In practice it turned
out that the situation is quite the opposite. The channels with
max-burst-len=4 demonstrated a better performance than the channels with
max-burst-len=16 even when they both had been initialized with the same
settings. The performance drop of the first two DMA-channels made them
unsuitable for the DW APB SSI slave device. No matter what settings they
are configured with, full-duplex SPI transfers occasionally experience the
Rx FIFO overflow. It means that the DMA-engine doesn't keep up with
incoming data pace even though the SPI-bus is enabled with speed of 25MHz
while the DW DMA controller is clocked with 50MHz signal. There is no such
problem has been noticed for the channels synthesized with
max-burst-len=4.

Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Link: https://lore.kernel.org/r/20200731200826.9292-6-Sergey.Semin@baikalelectronics.ru
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2020-08-17 11:58:31 +05:30
..
bestcomm treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
dw dmaengine: dw: Add DMA-channels mask cell support 2020-08-17 11:58:31 +05:30
dw-axi-dmac dmaengine: virt-dma: Add missing locking 2019-12-26 10:04:18 +05:30
dw-edma dmaengine: dw-edma: support local dma device transfer semantics 2020-05-04 14:24:27 +05:30
fsl-dpaa2-qdma dmaengine: fsl-dpaa2-qdma: remove set but not used variable 'dpaa2_qdma' 2020-03-06 19:04:55 +05:30
hsu dmaengine updates for v5.3-rc1 2019-07-17 09:55:43 -07:00
idxd dmaengine: idxd: clear misc interrupt cause after read 2020-08-17 10:49:11 +05:30
ioat pci-v5.9-changes 2020-08-07 18:48:15 -07:00
ipu treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mediatek dmaengine: mediatek: mtk-hsdma: Fix formatting in 'struct mtk_hsdma_pdesc' doc block 2020-07-15 17:50:46 +05:30
ppc4xx dmaengine: ppc4xx: Use scnprintf() for avoiding potential buffer overflow 2020-03-11 15:10:45 +05:30
qcom treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
sf-pdma iov_iter: Move unnecessary inclusion of crypto/hash.h 2020-06-30 09:34:23 -04:00
sh dmaengine: sh: usb-dmac: set tx_result parameters 2020-06-24 11:34:53 +05:30
ti dmaengine: ti: k3-psil-j721e: Add entries for 2nd port of MCU SA2UL 2020-08-17 10:50:31 +05:30
xilinx dmaengine: xilinx: dpdma: Add debugfs support 2020-08-17 11:20:49 +05:30
acpi-dma.c dmaengine: acpi: Drop double check for ACPI companion device 2020-06-24 11:28:41 +05:30
altera-msgdma.c dmaengine: altera-msgdma: Fix struct documentation blocks 2020-07-15 17:50:46 +05:30
amba-pl08x.c dmaengine updates for v5.3-rc1 2019-07-17 09:55:43 -07:00
at_hdmac_regs.h dmaengine: at_hdmac: Replace zero-length array with flexible-array 2020-05-13 20:25:16 +05:30
at_hdmac.c dmaengine: at_hdmac: Repair parameter misspelling and demote non-kerneldoc headers 2020-07-15 17:50:46 +05:30
at_xdmac.c dmaengine: at_xdmac: Replace zero-length array with flexible-array 2020-05-13 20:25:41 +05:30
bcm2835-dma.c dmaengine: bcm2835: do not call vchan_vdesc_fini() with lock held 2019-12-26 10:04:18 +05:30
bcm-sba-raid.c dmaengine: bcm-sba-raid: Replace zero-length array with flexible-array member 2020-02-13 20:15:35 +05:30
coh901318_lli.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
coh901318.c dmaengine: coh901318: Fix a double lock bug in dma_tc_handle() 2020-02-24 21:59:45 +05:30
coh901318.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
dma-axi-dmac.c dmaengine: axi-dmac: add a check for devm_regmap_init_mmio 2019-12-11 16:11:50 +05:30
dma-jz4780.c dmaengine updates for v5.6-rc1 2020-01-27 10:55:50 -08:00
dmaengine.c dmaengine: Introduce DMA-device device_caps callback 2020-07-27 14:30:55 +05:30
dmaengine.h dmaengine: Create debug directories for DMA devices 2020-03-11 14:56:14 +05:30
dmatest.c Merge branch 'for-linus' into fixes 2020-08-05 19:02:07 +05:30
ep93xx_dma.c dmaengine: ep93xx_dma: Provide some missing struct attribute documentation 2020-07-15 17:50:46 +05:30
fsl_raid.c
fsl_raid.h
fsl-edma-common.c dmaengine: fsl-edma: fix wrong tcd endianness for big-endian cpu 2020-07-06 14:49:22 +05:30
fsl-edma-common.h dmaengine: fsl-edma-common: correct DSIZE_32BYTE 2020-07-06 10:24:49 +05:30
fsl-edma.c dmaengine: fsl-edma: Fix NULL pointer exception in fsl_edma_tx_handler 2020-06-24 13:05:01 +05:30
fsl-qdma.c dmaengine: Extend NXP QDMA driver to check transmission errors 2020-07-17 11:50:03 +05:30
fsldma.c dmaengine: fsldma: Mark expected switch fall-through 2019-08-20 19:42:34 -05:00
fsldma.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 40 2019-05-24 17:27:12 +02:00
hisi_dma.c dmaengine: hisilicon: Use struct_size() in devm_kzalloc() 2020-06-24 11:26:23 +05:30
idma64.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
idma64.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
img-mdc-dma.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422 2019-06-05 17:37:15 +02:00
imx-dma.c dmaengine: imx-dma: Mark expected switch fall-through 2019-07-31 20:49:04 +05:30
imx-sdma.c Merge branch 'for-linus' into fixes 2020-08-05 19:02:07 +05:30
iop-adma.c dmaengine: iop-adma: Function parameter documentation must adhere to correct formatting 2020-07-15 17:50:47 +05:30
iop-adma.h dma: iop-adma: allow building without platform headers 2019-08-14 15:36:22 +02:00
k3dma.c dmaengine: k3dma: Avoid null pointer traversal 2019-12-23 13:21:14 +05:30
Kconfig Merge branch 'topic/xilinx' into fixes 2020-08-07 11:13:37 +05:30
lpc18xx-dmamux.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
Makefile dmaengine: uniphier-xdmac: Add UniPhier external DMA controller driver 2020-03-02 14:54:34 +05:30
mcf-edma.c dmaengine: mcf-edma: Fix NULL pointer exception in mcf_edma_tx_handler 2020-06-24 13:06:15 +05:30
mic_x100_dma.c dmaengine updates for v5.3-rc1 2019-07-17 09:55:43 -07:00
mic_x100_dma.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 290 2019-06-05 17:36:38 +02:00
milbeaut-hdmac.c dmaengine: Replace zero-length array with flexible-array 2020-06-15 23:08:30 -05:00
milbeaut-xdmac.c dmaengine: Replace zero-length array with flexible-array 2020-06-15 23:08:30 -05:00
mmp_pdma.c dmaengine: mmp_pdma: Demote obvious misuse of kerneldoc to standard comment blocks 2020-07-15 17:50:46 +05:30
mmp_tdma.c dmaengine: mmp_tdma: share the IRQ line 2020-06-16 21:59:01 +05:30
moxart-dma.c dmaengine: Replace zero-length array with flexible-array 2020-06-15 23:08:30 -05:00
mpc512x_dma.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 7 2019-05-21 11:28:40 +02:00
mv_xor_v2.c dmaengine: mv_xor_v2: Supply some missing 'struct mv_xor_v2_device' attribute docs 2020-07-15 17:50:47 +05:30
mv_xor.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288 2019-06-05 17:36:37 +02:00
mv_xor.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288 2019-06-05 17:36:37 +02:00
mxs-dma.c dmaengine updates for v5.3-rc1 2019-07-17 09:55:43 -07:00
nbpfaxi.c dmaengine: nbpfaxi: Provide some missing attribute docs and split out slave info 2020-07-15 17:50:47 +05:30
of-dma.c dmaengine: of-dma: Fix misspellings/formatting issues in some function headers 2020-07-15 17:50:46 +05:30
owl-dma.c dmaengine: Actions: Add support for S700 DMA engine 2020-07-27 14:43:08 +05:30
pch_dma.c dmaengine: pch_dma: use generic power management 2020-08-17 10:23:55 +05:30
pl330.c dmaengine: pl330: Demote obvious misuse of kerneldoc to standard comment block 2020-07-15 17:50:46 +05:30
plx_dma.c dmaengine: plx-dma: Implement descriptor submission 2020-01-15 19:40:51 +05:30
pxa_dma.c dmaengine updates for v5.3-rc1 2019-07-17 09:55:43 -07:00
s3c24xx-dma.c dmaengine: s3c24xx-dma: fix spelling mistake "to" -> "too" 2020-01-23 17:03:25 +05:30
sa11x0-dma.c dmaengine: sa11x0: Replace zero-length array with flexible-array member 2020-02-19 17:48:40 +05:30
sirf-dma.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 4 2019-05-21 11:28:40 +02:00
sprd-dma.c dmaengine: sprd: Set request pending flag when DMA controller is active 2020-03-23 11:38:24 +05:30
st_fdma.c iov_iter: Move unnecessary inclusion of crypto/hash.h 2020-06-30 09:34:23 -04:00
st_fdma.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ste_dma40_ll.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
ste_dma40_ll.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
ste_dma40.c dmaengine: ste_dma40: Supply 2 missing struct attribute descriptions 2020-07-15 17:50:46 +05:30
stm32-dma.c dmaengine: stm32-dma: direct mode support through device tree 2020-04-27 21:40:12 +05:30
stm32-dmamux.c dmaengine: stm32-dmamux: driver defers probe for clock and reset 2020-02-24 22:22:44 +05:30
stm32-mdma.c dmaengine: stm32-mdma: use vchan_terminate_vdesc() in .terminate_all 2020-02-24 22:20:01 +05:30
sun4i-dma.c dmaengine: sun4i-dma: Demote obvious misuse of kerneldoc to standard comment blocks 2020-07-15 17:50:47 +05:30
sun6i-dma.c dmaengine: Remove dev_err() usage after platform_get_irq() 2019-07-31 20:50:53 +05:30
tegra20-apb-dma.c dmaengine: tegra-apb: Replace zero-length array with flexible-array 2020-06-15 23:08:32 -05:00
tegra210-adma.c dmaengine: tegra210-adma: Fix runtime PM imbalance on error 2020-06-24 15:11:39 +05:30
timb_dma.c dmaengine: Replace zero-length array with flexible-array 2020-06-15 23:08:30 -05:00
TODO
txx9dmac.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
txx9dmac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
uniphier-mdmac.c dmaengine: uniphier-mdmac: replace zero-length array with flexible-array member 2020-02-13 20:15:57 +05:30
uniphier-xdmac.c iov_iter: Move unnecessary inclusion of crypto/hash.h 2020-06-30 09:34:23 -04:00
virt-dma.c dmaengine updates for v5.6-rc1 2020-01-27 10:55:50 -08:00
virt-dma.h dmaengine: virt-dma: Add missing locking around list operations 2019-12-26 10:04:18 +05:30
xgene-dma.c dmaengine: xgene-dma: Provide descriptions for 'dev' and 'clk' in device's ddata 2020-07-15 17:50:47 +05:30
zx_dma.c dmaengine: zx: remove: removed dmam_pool_destroy 2019-11-14 12:16:53 +05:30