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

Popular posts from this blog

dev_get_platdata understanding

Getting started with pinctrl subsystem linux

How to take systrace in android