Aedan, thank you for your very detailed answer, it’s fantastic. You are right about every point!
I cannot speedup the SPI display transfers so I need to use of separate DMA controller; however to avoid re-spinning a new board, I’d like to continue using SPI5
and to use DMA2
for DCMI
only.
The question is HOW to get DCMI
to use DMA2
?
I enabled DMA for I2C1
in the hope that DCMI
ends up using DMA2
… and it did, everything is working as expected : no more overruns!
New /sys/kernel/debug/dmaengine/summary
output:
dma0 (58000000.dma-controller): number of channels: 32
dma0chan0 | 48000000.dma-controller:ch0
dma0chan1 | 48000000.dma-controller:ch1
dma0chan2 | 48000000.dma-controller:ch2
dma0chan3 | 48000000.dma-controller:ch3
dma0chan4 | 48000000.dma-controller:ch4
dma0chan5 | 48000000.dma-controller:ch5
dma0chan6 | 48000000.dma-controller:ch6
dma0chan7 | 48000000.dma-controller:ch7
dma0chan8 | 48001000.dma-controller:ch0
dma0chan9 | 48001000.dma-controller:ch1
dma0chan10 | 48001000.dma-controller:ch2
dma0chan11 | 48001000.dma-controller:ch3
dma0chan12 | 48001000.dma-controller:ch4
dma0chan13 | 48001000.dma-controller:ch5
dma0chan14 | 48001000.dma-controller:ch6
dma0chan15 | 48001000.dma-controller:ch7
dma1 (48000000.dma-controller): number of channels: 8
dma1chan0 | 4000e000.serial:rx (via router: 48002000.dma-router)
dma1chan1 | 4000e000.serial:tx (via router: 48002000.dma-router)
dma1chan2 | 4000b000.spi:tx (via router: 48002000.dma-router)
dma1chan3 | 4000b000.spi:rx (via router: 48002000.dma-router)dmas
dma1chan4 | 44009000.spi:tx (via router: 48002000.dma-router)
dma1chan5 | 44009000.spi:rx (via router: 48002000.dma-router)
dma1chan6 | 40012000.i2c:tx (via router: 48002000.dma-router)
dma1chan7 | 40012000.i2c:rx (via router: 48002000.dma-router)
dma2 (48001000.dma-controller): number of channels: 8
dma2chan1 | 4c006000.dcmi:tx
This is really good news ! But I don’t like the hackish method I used to getl DCMI
to use DMA2
… What is the recommended method ?
I tried to add dmas = <&dma2 0 0 0x400 0xe0000001>;
in my device tree node for DCMI
to overwrite dmas = <&dmamux1 75 0x400 0xe0000001>;
from stm32mp151.dtsi.
According to /sys/kernel/debug/dmaengine/summary
DCMI uses the DMA2 controller, but it does not work….
Thank you in advance,
Sylvain.
Hi Carlos, thank you for your answer. I missed this notification 🙁
FYI, I fixed this issue by patching the TFA code… I’ll try STM32_PM_SHUTDOWN when I have time as this solution is way more elegant.
Have a good day,
Sylvain.
Aedan, below is a dmesg output showing successful 25600-byte transfer on SPI5 (DMA):
[ 291.136104] spi_stm32 44009000.spi: cpol=0 cpha=0 lsb_first=0 cs_high=0
[ 291.136119] spi_stm32 44009000.spi: stm32_spi_can_dma: true
[ 291.136158] spi_stm32 44009000.spi: stm32_spi_can_dma: true
[ 291.136174] spi_stm32 44009000.spi: transfer communication mode set to 1
[ 291.136189] spi_stm32 44009000.spi: data frame of 16-bit, data packet of 2 data frames
[ 291.136202] spi_stm32 44009000.spi: speed set to 13054870Hz
[ 291.136216] spi_stm32 44009000.spi: transfer of 25600 bytes (12800 data frames)
[ 291.136228] spi_stm32 44009000.spi: dma enabled
[ 291.136244] spi_stm32 44009000.spi: Tx DMA config buswidth=2, maxburst=1
[ 291.136282] stm32-dma 48000000.dma-controller: vchan a624546f: txd d3e6b206[316]: submitted
[ 291.136302] dma dma1chan4: vchan a624546f: issued
[ 291.136318] dma dma1chan4: SCR: 0x00002c56
[ 291.136332] dma dma1chan4: NDTR: 0x00003200
[ 291.136345] dma dma1chan4: SPAR: 0x44009020
[ 291.136358] dma dma1chan4: SM0AR: 0xd8048000
[ 291.136370] dma dma1chan4: SM1AR: 0xd8048000
[ 291.136383] dma dma1chan4: SFCR: 0x00000021
[ 291.136397] dma dma1chan4: vchan a624546f: started
[ 291.136410] spi_stm32 44009000.spi: enable controller
[ 291.152230] spi_stm32 44009000.spi: disable controller
[ 291.152336] spi_stm32 44009000.spi: stm32_spi_can_dma: true
[ 291.152363] spi_stm32 44009000.spi: disable controller
Thank you Neeraj !
Thank you, Neeraj !
Thank you Eshtaartha !
We added CLK_IS_CRITICAL to the clk driver and did not update the kernel DT so Linux is able to boot keep MCO2 running.
My issue is solved even if it is not really convenient because CubeIDE always update the kernel DT regarding MCO configuration…
Have a good day,
Sylvain.
As the .txt file got rejected, here is a gzipped version
Thank you Eshtaartha for this valuable information !
Thank you Neeraj, have a good day !
Octavo Systems LLC all rights reserved
OCTAVO is registered in the U.S. Patent and Trademark Office. OSD, C-SiP, and the Octavo Logo are trademarks of Octavo Systems LLC.
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields