<alp/mproc.h> — Inter-Core IPC
Mailbox + shared-memory + hardware-semaphore primitives for the heterogeneous multi-core SoCs in the E1M catalogue.
Where it matters
| SoC family | Cores |
|---|---|
| Alif Ensemble | Cortex-M55 HP @ 400 MHz + Cortex-M55 HE @ 160 MHz (+ Cortex-A32) |
| Renesas RZ/V2N | Quad Cortex-A55 @ 1.8 GHz + Cortex-M33 |
| NXP i.MX 9352 | Dual Cortex-A55 @ 1.7 GHz + Cortex-M33 |
<alp/mproc.h> lets a firmware running on one core talk to firmware running on another.
Header
#include <alp/mproc.h>
Mailbox (small messages)
alp_mbox_t *mbox = alp_mbox_open(&(alp_mbox_config_t){
.channel = 0, // 0..N per the SoC's mailbox controller
});
uint8_t payload[12] = { /* ... */ };
alp_mbox_send(mbox, payload, sizeof(payload));
// Receive (on the peer core)
uint8_t rx[12];
size_t got;
alp_mbox_recv(mbox, rx, sizeof(rx), &got);
Shared memory + hardware semaphore
alp_shmem_t *shm = alp_shmem_open(&(alp_shmem_config_t){
.region = ALP_SHMEM_REGION_SRAM_SHARED,
.size_kb = 32,
});
void *base;
size_t size;
alp_shmem_get(shm, &base, &size);
alp_hwsem_t *sem = alp_hwsem_open(0); // hardware semaphore id 0
alp_hwsem_take(sem, K_FOREVER);
// ... critical section over shared memory ...
alp_hwsem_give(sem);
OpenAMP RPC (v0.3)
For block-style RPC where one core offloads compute to another, <alp/mproc.h> wraps an OpenAMP-based RPC primitive. The Studio's signal library uses this to call CMSIS-DSP filters hosted on the AEN's M55-HE core.
AEN multi-proc roadmap
| v0.1 | Zephyr boots on M55-HP; M55-HE in reset; A32 (E5+) in reset. |
|---|---|
| v0.3 | M55-HE first-class peer of M55-HP via <alp/mproc.h> + OpenAMP RPC; second-firmware build target (prj-rtss-he.conf); reference firmware hosting CMSIS-DSP filters. |
| v0.4 | A32 (Cortex-A) Linux/Yocto handoff on E5/E6/E7/E8 variants. |
See the V2N+M1 bring-up for the V2N-side multi-proc story.
See also
Questions about this page? Discuss in Community Forum