Wakeup M3 IPC Driver ===================== The TI AM33xx and AM43xx family of devices use a small Cortex M3 co-processor (commonly referred to as Wakeup M3 or CM3) to help with various low power tasks that cannot be controlled from the MPU, like suspend/resume and certain deep C-states for CPU Idle. Once the wkup_m3_ipc driver uses the wkup_m3_rproc driver to boot the wkup_m3, it handles communication with the CM3 using IPC registers present in the SoC's control module and a mailbox. The wkup_m3_ipc exposes an API to allow the SoC PM code to execute specific PM tasks. Wkup M3 Device Node: ==================== A wkup_m3_ipc device node is used to represent the IPC registers within an SoC. Required properties: -------------------- - compatible: Should be, "ti,am3352-wkup-m3-ipc" for AM33xx SoCs "ti,am4372-wkup-m3-ipc" for AM43xx SoCs - reg: Contains the IPC register address space to communicate with the Wakeup M3 processor - interrupts: Contains the interrupt information for the wkup_m3 interrupt that signals the MPU. - ti,rproc: phandle to the wkup_m3 rproc node so the IPC driver can boot it. - mboxes: phandles used by IPC framework to get correct mbox channel for communication. Must point to appropriate mbox_wkupm3 child node. Example: -------- /* AM33xx */ l4_wkup: l4_wkup@44c00000 { ... scm: scm@210000 { compatible = "ti,am3-scm", "simple-bus"; reg = <0x210000 0x2000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0x210000 0x2000>; ... wkup_m3_ipc: wkup_m3_ipc@1324 { compatible = "ti,am3352-wkup-m3-ipc"; reg = <0x1324 0x24>; interrupts = <78>; ti,rproc = <&wkup_m3>; mboxes = <&mailbox &mbox_wkupm3>; }; ... }; };