Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Doorbell Register Model Comparison

HSEM is stale for new STM32MP2 work. Prefer IPCC where possible: IPCC is present across STM32MP21/23/25 and follows ST’s better supported inter-processor communication path, while HSEM exists only on STM32MP23/25 and has produced surprising hardware access failures in practice.

AspectHSEMIPCCMU (GI)
PlatformSTM32MP23/25STM32MP21/23/25NXP i.MX 9x
Signal mechanism1-step read-lock then unlock semaphoreSet CxSCR.CHnS to mark a channel occupiedSet GCR[GIRn]
Backpressure guardLOCKID ownership check; can report AlreadyLockedOutgoing CxTOCySR.CHnF; returns ChannelOccupied while occupiedNo guard; setting GIRn while pending is idempotent
Receive statusCnMISR masked interrupt statusOpposite direction CyTOCxSR.CHnFGSR[GIPn]
Interrupt enableCnIER bit per semaphoreCxCR.RXOIE plus CxMR.CHnOM unmaskGIER[GIEn]
Interrupt clearDedicated CnICR W1C bitCxSCR.CHnC W1C-style clearGSR[GIPn] W1C
Const genericPROC: u8 selects C1/C2/C3 interrupt bankPROC: u8 selects processor 1 or 2 register bankNone; base array and channel mapping select instance
IRQ wakeupSingle HSEM_IRQHandlerBoard/PAC calls notify_rx_occupied_interrupt() from the verified IPCC RX occupied lineMU1_IRQHandlerMU8_IRQHandler by instance
Channel count16 flat semaphore IDs; 0-1 reserved16 channels per IPCC instance; 0-1 reservedMU_INSTANCE_COUNT * 4; 0-1 reserved
Register stylebitfield register wrappers + volatile accessbitfield register wrappers + volatile accessbitfield register wrappers + volatile access

MU notes:

  • Chip features select the MU instance count: imx8mp = 1, imx93 = 2, imx95 = 8.
  • Side features select register view: mua for A-core and mub for M-core.
  • On current i.MX95 CA55 <-> CM7 defaults, use MU7 flat channels 24 and 25 (IMX95_CA55_CM7_TX_CHAN / IMX95_CA55_CM7_RX_CHAN).

IPCC address map:

FamilyIPCC1IPCC2
STM32MP210x4049_0000..=0x4049_03FFnot present
STM32MP23/250x4049_0000..=0x4049_03FFSmartRun 0x4625_0000..=0x4625_03FF