Beaglebone PRU DMA support
This project aims to provide support for bidirectional DMA transfers between
PRU and Cortex-A8 on AM335x SoC. It is developed on BeagleBone Black.
I am developing this project for GSoC 2017 for beagleboard.org.
Goal: Create a sample program to demonstrate using EDMA on the PRU to transfer
data to and from the main (DDR) memory with a Linux host. Most existing code
utilizes (wastes) the 2nd PRU on the PRUSS for data xfer. Using DMA can allow
the PRU to be used for other purposes.
This application was developed and tested using following SW revisions:
To work properly, PRU remoteproc must be enabled in device tree.
Implementation of the project is split in two main parts, kernel module and PRU
firmware. PRU firmware and kernel module communicate via interrupts.
Following scenario is implemented:
firmware - code for PRU software. Receives transfer parameters via resource table,
configures EDMA for transfer and INTC to trigger event on EDMA interrupt
kernel-patch - kernel-side implementation of the project, contains patches
to ti-linux-kernel-dev repository (based on 4.9.36-ti-r46 release)
pru-swpkg-patch - contains patch that needs to be applied to pru software support
package (based on v5.1.0 release)
dts - basic device tree overlay needed to load the module. More concrete dt
overlays exist for each example
examples - every subdirectory is an example usage of pru-dma, demonstrating
practical application, consisting of PRU firmware, kernel module and dt overlay
Documentation - contains detailed description of the project, build instructions
and description of API for PRU firmware and kernel modules
wip - (work in progress) isolated examples created to test specific
features (e.g. linux DMA API, PRU-ARM communication), not an essential part
of the project.