beaglebone dma
https://github.com/maciejjo/beaglebone-pru-dma
https://elinux.org/BeagleBoard/GSoC/BeagleBone_PRU_DMA
https://gist.github.com/maciejjo/58a0d0213712e67fba9d0061f6b5bead
https://www.glennklockwood.com/embedded/beaglebone-pru.html
https://github.com/maciejjo/beaglebone-pru-dma
https://elinux.org/BeagleBoard/GSoC/BeagleBone_PRU_DMA
https://gist.github.com/maciejjo/58a0d0213712e67fba9d0061f6b5bead
https://www.glennklockwood.com/embedded/beaglebone-pru.html
Understand overlay: WL1835
-------------------------------------------------------------------------------------------
https://www.kernel.org/doc/Documentation/devicetree/bindings/net/ti%2Cwilink-st.txt
https://wiki.st.com/stm32mpu/wiki/Dmaengine_overview
mmc property: am335-sdhci to search driver sdhci-omap.c and understand how dma is used in it.
EDMA registers
TPCC (EDMA3CC) 0x4900_0000 0x490F_FFFF 1M BEDMA3 Channel Controller Registers
TPTC0 (EDMA3TC0) 0x4980_0000 0x498F_FFFF 1MB EDMA3 Transfer Controller 0 Registers
TPTC1 (EDMA3TC1) 0x4990_0000 0x499F_FFFF 1MB EDMA3 Transfer Controller 1 Registers
TPTC2 (EDMA3TC2) 0x49A0_0000 0x49AF_FFFF 1MB EDMA3 Transfer Controller 2 Registers
on runnig device
The user can get information about the DMA devices and the used channels through the /sys/kernel/debug/dmaengine .
cat /sys/kernel/debug/dmaengine/summary
dma0 (49000000.dma): number of channels: 62
dma0chan5 | 53500000.aes:rx
dma0chan6 | 53500000.aes:tx
dma0chan16 | 48030000.spi:tx0
dma0chan17 | 48030000.spi:rx0
dma0chan18 | 48030000.spi:tx1
dma0chan19 | 48030000.spi:rx1
dma0chan22 | 48060000.mmc:tx (via router: 44e10f90.dma-router)
dma0chan23 | 48060000.mmc:rx (via router: 44e10f90.dma-router)
dma0chan34 | 53100000.sham:rx
dma0chan40 | 481a0000.spi:tx0
dma0chan41 | 481a0000.spi:rx0
dma0chan42 | 481a0000.spi:tx1
dma0chan43 | 481a0000.spi:rx1
dma1 (49000000.dma): number of channels: 2
dma2 (47400000.dma-controller): number of channels: 60
dma2chan0 | 47401400.usb:rx1
dma2chan1 | 47401400.usb:tx1
dma2chan2 | 47401400.usb:rx2
dma2chan3 | 47401400.usb:tx2
dma2chan4 | 47401400.usb:rx3
dma2chan5 | 47401400.usb:tx3
dma2chan6 | 47401400.usb:rx4
dma2chan7 | 47401400.usb:tx4
dma2chan8 | 47401400.usb:rx5
dma2chan9 | 47401400.usb:tx5
dma2chan10 | 47401400.usb:rx6
dma2chan11 | 47401400.usb:tx6
dma2chan12 | 47401400.usb:rx7
dma2chan13 | 47401400.usb:tx7
dma2chan14 | 47401400.usb:rx8
dma2chan15 | 47401400.usb:tx8
dma2chan16 | 47401400.usb:rx9
dma2chan17 | 47401400.usb:tx9
dma2chan18 | 47401400.usb:rx10
dma2chan19 | 47401400.usb:tx10
dma2chan20 | 47401400.usb:rx11
dma2chan21 | 47401400.usb:tx11
dma2chan22 | 47401400.usb:rx12
dma2chan23 | 47401400.usb:tx12
dma2chan24 | 47401400.usb:rx13
dma2chan25 | 47401400.usb:tx13
dma2chan26 | 47401400.usb:rx14
dma2chan27 | 47401400.usb:tx14
dma2chan28 | 47401400.usb:rx15
dma2chan29 | 47401400.usb:tx15
dma2chan30 | 47401c00.usb:rx1
dma2chan31 | 47401c00.usb:tx1
dma2chan32 | 47401c00.usb:rx2
dma2chan33 | 47401c00.usb:tx2
dma2chan34 | 47401c00.usb:rx3
dma2chan35 | 47401c00.usb:tx3
dma2chan36 | 47401c00.usb:rx4
dma2chan37 | 47401c00.usb:tx4
dma2chan38 | 47401c00.usb:rx5
dma2chan39 | 47401c00.usb:tx5
dma2chan40 | 47401c00.usb:rx6
dma2chan41 | 47401c00.usb:tx6
dma2chan42 | 47401c00.usb:rx7
dma2chan43 | 47401c00.usb:tx7
dma2chan44 | 47401c00.usb:rx8
dma2chan45 | 47401c00.usb:tx8
dma2chan46 | 47401c00.usb:rx9
dma2chan47 | 47401c00.usb:tx9
dma2chan48 | 47401c00.usb:rx10
dma2chan49 | 47401c00.usb:tx10
dma2chan50 | 47401c00.usb:rx11
dma2chan51 | 47401c00.usb:tx11
dma2chan52 | 47401c00.usb:rx12
dma2chan53 | 47401c00.usb:tx12
dma2chan54 | 47401c00.usb:rx13
dma2chan55 | 47401c00.usb:tx13
dma2chan56 | 47401c00.usb:rx14
dma2chan57 | 47401c00.usb:tx14
dma2chan58 | 47401c00.usb:rx15
dma2chan59 | 47401c00.usb:tx15
lists all the registered DMA channels:
ls /sys/class/dma/
echoing in_use indicates whether the channel has been allocated or not.
cat /sys/class/dma/dma0chan0/in_use
----------------------------------------------------------------------------
https://github.com/nghiaphamsg/BBB-linux-device-driver
https://blog.csdn.net/ZZZZZ1113/article/details/131142606?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-131142606-blog-117647308.235%5Ev38%5Epc_relevant_sort_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-131142606-blog-117647308.235%5Ev38%5Epc_relevant_sort_base3
https://blog.csdn.net/hexiaolong2009/article/details/102596772?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-102596772-blog-102641233.235%5Ev38%5Epc_relevant_sort_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-102596772-blog-102641233.235%5Ev38%5Epc_relevant_sort_base3
https://blog.csdn.net/dragon101788/article/details/99673427
https://stackoverflow.com/questions/73137100/asynchronus-dma-mem2mem-copy-doesnt-transfer-data
https://www.kernel.org/doc/html/v4.18/driver-api/dmaengine/provider.html
TISDK
https://www.ti.com/tool/PROCESSOR-SDK-AM335X#downloads
https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/08_02_00_24/exports/docs/linux/Overview/Processor_SDK_Linux_Getting_Started_Guide.html#welcome-to-the-linux-getting-started-guide
https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/08_02_00_24/exports/docs/linux/Overview/Processor_SDK_Linux_create_SD_card.html
edma_test.c from TI
https://blog.csdn.net/qq_40788950/article/details/79168342
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/516527/edma_test-c-compilation-error?tisearch=e2e-sitesearch&keymatch=edma_test.c#
http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/psp/LinuxPSP/AM335x_04_06/index.html
https://wiki.dreamrunner.org/public_html/Embedded-System/DM816x/EDMANotes.html
# dmesg | grep -i dma
[ 0.116019] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.183026] edma 49000000.edma: eDMA3 CC HW configuration (cccfg: 0x03224445):
[ 0.183039] edma 49000000.edma: num_region: 4
[ 0.183046] edma 49000000.edma: num_channels: 64
[ 0.183052] edma 49000000.edma: num_qchannels: 8
[ 0.183058] edma 49000000.edma: num_slots: 256
[ 0.183065] edma 49000000.edma: num_tc: 3
[ 0.183071] edma 49000000.edma: chmap_exist: yes
[ 0.187300] edma 49000000.edma: TI EDMA DMA engine driver
[ 0.187324] edma 49000000.edma: ecc->num_channels 64, ecc->num_qchannels 8, ecc->num_region 4, ecc->num_slots 256, info->slavecnt 0
[ 1.374764] ti-dma-crossbar 44e10f90.dma-router: Mapping XBAR event0 to DMA25
[ 1.374787] edma 49000000.edma: EER0 00000000
[ 1.374800] edma 49000000.edma: Got eDMA channel 25 for virt channel 23 (HW trigger)
[ 1.374852] ti-dma-crossbar 44e10f90.dma-router: Mapping XBAR event0 to DMA24
[ 1.374861] edma 49000000.edma: EER0 00000000
[ 1.374868] edma 49000000.edma: Got eDMA channel 24 for virt channel 22 (HW trigger)
[ 1.402007] omap_hsmmc 47810000.mmc: RX DMA channel request failed
[ 1.487593] edma 49000000.edma: vchan (ptrval): txd (ptrval)[2]: submitted
[ 1.487611] edma 49000000.edma: first transfer starting on channel 25
[ 1.487620] edma 49000000.edma: ER0 00000000
[ 1.487627] edma 49000000.edma: EER0 02000000
[ 1.490313] edma 49000000.edma: EER0 00000000
[ 1.490323] edma 49000000.edma: Transfer completed on channel 25
[ 1.490723] edma 49000000.edma: vchan (ptrval): txd (ptrval)[3]: submitted
[ 1.490732] edma 49000000.edma: first transfer starting on channel 25
[ 1.490739] edma 49000000.edma: ER0 00000000
[ 1.490746] edma 49000000.edma: EER0 02000000
[ 1.492706] edma 49000000.edma: EER0 00000000
[ 1.492714] edma 49000000.edma: Transfer completed on channel 25
[ 1.492795] edma 49000000.edma: vchan (ptrval): txd (ptrval)[4]: submitted
[ 1.492805] edma 49000000.edma: first transfer starting on channel 25
[ 1.492811] edma 49000000.edma: ER0 00000000
[ 1.492818] edma 49000000.edma: EER0 02000000
[ 1.495459] edma 49000000.edma: EER0 00000000
[ 1.495467] edma 49000000.edma: Transfer completed on channel 25
[ 1.503595] edma 49000000.edma: vchan (ptrval): txd (ptrval)[5]: submitted
[ 1.503604] edma 49000000.edma: first transfer starting on channel 25
[ 1.503610] edma 49000000.edma: ER0 00000000
[ 1.503617] edma 49000000.edma: EER0 02000000
[ 1.508338] edma 49000000.edma: EER0 00000000
[ 1.508345] edma 49000000.edma: Transfer completed on channel 25
[ 1.529106] edma 49000000.edma: vchan (ptrval): txd (ptrval)[6]: submitted
[ 1.529148] edma 49000000.edma: first transfer starting on channel 25
[ 1.529157] edma 49000000.edma: ER0 00000000
[ 1.529165] edma 49000000.edma: EER0 02000000
[ 1.539824] edma 49000000.edma: EER0 00000000
[ 1.539833] edma 49000000.edma: Transfer completed on channel 25
[ 1.737542] edma 49000000.edma: vchan (ptrval): txd (ptrval)[7]: submitted
[ 1.737585] edma 49000000.edma: first transfer starting on channel 25
[ 1.737595] edma 49000000.edma: ER0 00000000
[ 1.737602] edma 49000000.edma: EER0 02000000
[ 1.739967] edma 49000000.edma: EER0 00000000
[ 1.739979] edma 49000000.edma: Transfer completed on channel 25
[ 1.740334] edma 49000000.edma: vchan (ptrval): txd (ptrval)[8]: submitted
[ 1.740360] edma 49000000.edma: first transfer starting on channel 25
exploring /sys/class
drwxr-xr-x 62 root root 0 Dec 20 2022 dma
lrwxrwxrwx 1 root root 0 Oct 18 03:28 driver -> ../../../../../bus/platform/drivers/cppi41-dma-engine
-rw-r--r-- 1 root root 4096 Oct 18 03:28 driver_override
-r--r--r-- 1 root root 4096 Oct 18 03:29 modalias
lrwxrwxrwx 1 root root 0 Oct 18 03:29 of_node -> ../../../../../firmware/devicetree/base/ocp/usb@47400000/dma-controller@47402000
drwxr-xr-x 2 root root 0 Oct 18 03:29 power
lrwxrwxrwx 1 root root 0 Dec 20 2022 subsystem -> ../../../../../bus/platform
-rw-r--r-- 1 root root 4096 Dec 20 2022 uevent
# cd /sys/bus/platform/devices/47400000.dma-controller/dma
# ls
dma2chan0 dma2chan18 dma2chan27 dma2chan36 dma2chan45 dma2chan54
dma2chan1 dma2chan19 dma2chan28 dma2chan37 dma2chan46 dma2chan55
dma2chan10 dma2chan2 dma2chan29 dma2chan38 dma2chan47 dma2chan56
dma2chan11 dma2chan20 dma2chan3 dma2chan39 dma2chan48 dma2chan57
dma2chan12 dma2chan21 dma2chan30 dma2chan4 dma2chan49 dma2chan58
dma2chan13 dma2chan22 dma2chan31 dma2chan40 dma2chan5 dma2chan59
dma2chan14 dma2chan23 dma2chan32 dma2chan41 dma2chan50 dma2chan6
dma2chan15 dma2chan24 dma2chan33 dma2chan42 dma2chan51 dma2chan7
dma2chan16 dma2chan25 dma2chan34 dma2chan43 dma2chan52 dma2chan8
dma2chan17 dma2chan26 dma2chan35 dma2chan44 dma2chan53 dma2chan
#cd /sys/bus/platform/devices/49000000.edma/dma
# ls -l
total 0
drwxr-xr-x 66 root root 0 Dec 20 2022 dma
lrwxrwxrwx 1 root root 0 Oct 18 03:14 driver -> ../../../../bus/platform/drivers/edma
-rw-r--r-- 1 root root 4096 Oct 18 03:14 driver_override
-r--r--r-- 1 root root 4096 Oct 18 03:14 modalias
lrwxrwxrwx 1 root root 0 Oct 18 03:14 of_node -> ../../../../firmware/devicetree/base/ocp/edma@49000000
drwxr-xr-x 2 root root 0 Oct 18 03:14 power
lrwxrwxrwx 1 root root 0 Dec 20 2022 subsystem -> ../../../../bus/platform
-rw-r--r-- 1 root root 4096 Dec 20 2022 uevent
# cd dma/
# ls
dma0chan0 dma0chan19 dma0chan29 dma0chan39 dma0chan49 dma0chan59
dma0chan1 dma0chan2 dma0chan3 dma0chan4 dma0chan5 dma0chan6
dma0chan10 dma0chan20 dma0chan30 dma0chan40 dma0chan50 dma0chan60
dma0chan11 dma0chan21 dma0chan31 dma0chan41 dma0chan51 dma0chan61
dma0chan12 dma0chan22 dma0chan32 dma0chan42 dma0chan52 dma0chan7
dma0chan13 dma0chan23 dma0chan33 dma0chan43 dma0chan53 dma0chan8
dma0chan14 dma0chan24 dma0chan34 dma0chan44 dma0chan54 dma0chan9
dma0chan15 dma0chan25 dma0chan35 dma0chan45 dma0chan55 dma1chan0
dma0chan16 dma0chan26 dma0chan36 dma0chan46 dma0chan56 dma1chan1
dma0chan17 dma0chan27 dma0chan37 dma0chan47 dma0chan57
dma0chan18 dma0chan28 dma0chan38 dma0chan48 dma0chan58
#
Communications Port Programming Interface (cppi)
http://trac.gateworks.com/wiki/linux/encryption
crypto test using cryptodev which uses hw accelerated modules, e.g. omap_sham.ko and omap_aes.ko
#openssl speed -evp sha1 -engine devcrypto -elapsed
#openssl speed -evp aes-256-cbc -engine devcrypto -elapsed
for omap_sham.ko we can check hw interrupts,
# cat /proc/interrupts | grep -i sham
26: 9700 INTC 109 Level 53100000.sham
from device tree am33xx.dtsi, we have sham device tree, where we can see its using dma 36
sham: sham@53100000 {
compatible = "ti,omap4-sham";
ti,hwmods = "sham";
reg = <0x53100000 0x200>;
interrupts = <109>;
dmas = <&edma 36 0>;
dma-names = "rx";
};
and after issuing
#openssl speed -evp sha1 -engine devcrypto -elapsed
we can check same channel being used from dmesg logs,
[ 3399.895710] edma 49000000.edma: vchan 02efea47: txd e3f3b0a0[25eb]: submitted
[ 3399.895720] edma 49000000.edma: first transfer starting on channel 36
[ 3399.895728] edma 49000000.edma: ER1 00000000
[ 3399.895735] edma 49000000.edma: EER1 00000010
[ 3399.895835] edma 49000000.edma: EER1 00000000
[ 3399.895845] edma 49000000.edma: Transfer completed on channel 36
# cat /proc/interrupts | grep -i sham
26: 102586 INTC 109 Level 53100000.sham
#
Now we can say dma is being used with dma apis and slave channel is given.
Comments
Post a Comment