The AM1808 SoC has 2 Independent Programmable Realtime Unit (PRU) Cores.
PRU0: Used to provide software UART for input ports 3 and 4.
PRU1: Not used.
The PRU requires firmware to implement the UART interfaces. We are using the firmware from LEGO (distributed in the firmware-ev3 package).
/lib/firmware/PRU_SUART.bin
The device driver originally comes from TI and was ported from LMS2012. LMS2012 had 2 copies of this driver, one in the linux kernel source and one in the LMS2012 source. We are using the one from the kernel. The one in the LSM2012 section has been modified by LEGO to work with their d_uart.c driver.
Only slight modifications were made to this driver to get it to work with the 3.16 kernel. Code is here.