Category:RPMsg

= Remote Processor Messaging (RPMsg) Main Page =

RPMsg or Remote Processor Messaging is a new open-source friendly Inter Processor Communication (IPC) framework developed in 2011. RPMsg facilitates multimedia applications to offload some of the processor-intensive tasks to dedicated co-processors or hardware accelerators. RPMsg is the IPC component used within Android 4.0 (IceCream Sandwich), and was first developed on top of Linux 3.0 kernel.

RPMsg simplifies a lot of the design features of SysLink 2.0, and provides much simpler userspace interfaces. RPMsg effectively replaces SysLink 2.0 and is intended to run on OMAP4 and beyond, while providing the same core functional features. RPMsg at times may be referred to as SysLink 3.0, to indicate the evolution of the IPC component.

The following are the main features provided by the RPMsg framework:
 * Device Management: Complete life-cycle management of the remote processor cores including the following specific functionalities
 * Device Initialization - Programming and loading an executable, memory management and powering up the processor
 * Power Management - Runtime power management of the remote processors, putting them into lowest power state (suspend) when not being used actively
 * Tracing - Provide trace logging of code running on remote processors
 * Exception Management - Provide information regarding a remote processor fatal errors or exceptions
 * Error Recovery - Reload and reboot the remote processors upon any fatal error or exception
 * Messaging Framework: A generic Linux messaging architecture/framework with the ability to exchange fixed size control messages with remote processors
 * Resource Management: Request and release peripherals/hardware accelerators for usage by the remote processors, and putting constraints like bandwidth, frequency and latency to meet specific application performance and power requirements

The following are the main sub-components of RPMsg:
 * remoteproc - Generic remoteproc driver for managing the remote processor device state. Functional features supported are Device Loading & Bootup, Power Management, Exception Management & Error Recovery. Provides generic interfaces allowing a platform-specific driver to plug-in and handle architecture-specific implementation details.
 * rpmsg - Remote Processor Messaging bus which can support a number of drivers. Provides the messaging infrastructure, facilitating client drivers to write their own wire-protocol messages.
 * rpmsg-resmgr - A RPMsg client driver interacting with remote processors to service their clock and constraints requests for various peripherals used by remote processor.
 * rpmsg-omx - A RPMsg client driver, providing a user-space interface and interacting with TI's Distributed OMX framework. This enables MPU to offload some OMX components to the slave processors.

RPMsg is built on top of the upstream VirtIO framework and leverages the following existing upstream components:
 * iommu - Driver managing the OMAP remote processor MMUs and is used internally by remoteproc
 * mailbox - Driver managing the mailbox peripheral within OMAP SoC, providing inter-processor signaling between the different processor subsystems
 * hwspinlock - Driver managing the HW Spinlock peripheral within OMAP SOC, providing support for HW arbitration of peripherals between different processor cores.
 * virtio - VirtIO framework that supports Virtualization.

Feel free to browse through the following project pages for detailed information including design overview, source code locations, build instructions, customization examples, software samples and debugging features.


 * Design: This page explains the basic high-level design principles of RPMsg and its sub-components.
 * Sources: RPMsg source code include both Linux kernel code, as well as code running on on top of the SYS/BIOS RTOS on the slave processors (Cortex M3, DSP etc).
 * Kernel Sources: This page gives out the details on the kernel-side source code repositories, build instructions and build customization.
 * BIOS Sources: This page gives out the details on the BIOS-side source code repositories, build instructions and build customization.
 * Samples: This page gives out the necessary details to start executing some basic rpmsg samples after building code on both the kernel and BIOS sides.
 * Debugging: This topic explains some of the basic debugging features of RPMsg.
 * Tesla: This details the procedure to enable Tesla support over RPMsg.
 * Open Source: This page (coming soon) captures the design details, source trees and current status of the upstreaming of RPMsg into the Linux kernel.