Last edited one month ago

Linux Mailbox framework overview


This article gives information about the Linux® mailbox framework. The mailbox framework is involved in interprocessor communication in heterogeneous multicore systems.

1. Framework purpose

The mailbox is used in interprocessor communication to exchange messages or signals between the host and the coprocessor cores. The mailbox framework is based on:

  • A mailbox controller that is platform dependent:
    • It is in charge of configuring and handling IRQ from the IPCC peripheral.
    • It provides a generic API to the mailbox client.
  • A mailbox client that is in charge of the message to send or receive.


A general presentation of the mailbox framework is available in the Linux mailbox documentation [1].

2. System overview

Mailbox overview.png

2.1. Component description

  • Mailbox controller
The mailbox controller is the stm32_ipcc. It configures and controls the IPCC peripheral
  • Mailbox client
The user can define their own mailbox client.
A mailbox client character device driver is provided as an example to demonstrate communication using a mailbox and shared memory ([2]).
Another example is the RPMsg framework, which uses a mailbox for interprocessor communication. In this case, the mailbox client is the remoteproc driver that forwards services from/to the RPMsg framework.
=== API description ===

The APIs are described in the Mailbox client API [3]

3. Configuration

3.1. Kernel Configuration

The following kernel configurations can be enabled using the Linux Menuconfig tool: Menuconfig or how to configure kernel :

  • Activate STM32 IPCC mailbox controller driver
Device drivers  --->
    -*- Mailbox Hardware Support  --->
        <*> STM32 IPCC Mailbox
  • Activate MAILBOX CDEV mailbox client driver
Device drivers  --->
    -*- Mailbox Hardware Support  --->
        <*> mailbox client char device

3.2. Device tree configuration

Please refer to the IPCC device tree configuration.

4. How to use the framework

The Linux mailbox documentation [1] provides with a very simple example of use.

5. How to trace and debug the framework

5.1. How to trace

Dynamic debug traces can be added using the following commands:

echo -n 'file stm32-ipcc.c +p' > /sys/kernel/debug/dynamic_debug/control
echo -n 'file mailbox.c +p' > /sys/kernel/debug/dynamic_debug/control

6. Source code location

7. References