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.