Skip to main content

<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 familyCores
Alif EnsembleCortex-M55 HP @ 400 MHz + Cortex-M55 HE @ 160 MHz (+ Cortex-A32)
Renesas RZ/V2NQuad Cortex-A55 @ 1.8 GHz + Cortex-M33
NXP i.MX 9352Dual Cortex-A55 @ 1.7 GHz + Cortex-M33

<alp/mproc.h> lets a firmware running on one core talk to firmware running on another.

#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.1Zephyr boots on M55-HP; M55-HE in reset; A32 (E5+) in reset.
v0.3M55-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.4A32 (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