1*c66ec88fSEmmanuel VadotWakeup M3 IPC Driver 2*c66ec88fSEmmanuel Vadot===================== 3*c66ec88fSEmmanuel Vadot 4*c66ec88fSEmmanuel VadotThe TI AM33xx and AM43xx family of devices use a small Cortex M3 co-processor 5*c66ec88fSEmmanuel Vadot(commonly referred to as Wakeup M3 or CM3) to help with various low power tasks 6*c66ec88fSEmmanuel Vadotthat cannot be controlled from the MPU, like suspend/resume and certain deep 7*c66ec88fSEmmanuel VadotC-states for CPU Idle. Once the wkup_m3_ipc driver uses the wkup_m3_rproc driver 8*c66ec88fSEmmanuel Vadotto boot the wkup_m3, it handles communication with the CM3 using IPC registers 9*c66ec88fSEmmanuel Vadotpresent in the SoC's control module and a mailbox. The wkup_m3_ipc exposes an 10*c66ec88fSEmmanuel VadotAPI to allow the SoC PM code to execute specific PM tasks. 11*c66ec88fSEmmanuel Vadot 12*c66ec88fSEmmanuel VadotWkup M3 Device Node: 13*c66ec88fSEmmanuel Vadot==================== 14*c66ec88fSEmmanuel VadotA wkup_m3_ipc device node is used to represent the IPC registers within an 15*c66ec88fSEmmanuel VadotSoC. 16*c66ec88fSEmmanuel Vadot 17*c66ec88fSEmmanuel VadotRequired properties: 18*c66ec88fSEmmanuel Vadot-------------------- 19*c66ec88fSEmmanuel Vadot- compatible: Should be, 20*c66ec88fSEmmanuel Vadot "ti,am3352-wkup-m3-ipc" for AM33xx SoCs 21*c66ec88fSEmmanuel Vadot "ti,am4372-wkup-m3-ipc" for AM43xx SoCs 22*c66ec88fSEmmanuel Vadot- reg: Contains the IPC register address space to communicate 23*c66ec88fSEmmanuel Vadot with the Wakeup M3 processor 24*c66ec88fSEmmanuel Vadot- interrupts: Contains the interrupt information for the wkup_m3 25*c66ec88fSEmmanuel Vadot interrupt that signals the MPU. 26*c66ec88fSEmmanuel Vadot- ti,rproc: phandle to the wkup_m3 rproc node so the IPC driver 27*c66ec88fSEmmanuel Vadot can boot it. 28*c66ec88fSEmmanuel Vadot- mboxes: phandles used by IPC framework to get correct mbox 29*c66ec88fSEmmanuel Vadot channel for communication. Must point to appropriate 30*c66ec88fSEmmanuel Vadot mbox_wkupm3 child node. 31*c66ec88fSEmmanuel Vadot 32*c66ec88fSEmmanuel VadotExample: 33*c66ec88fSEmmanuel Vadot-------- 34*c66ec88fSEmmanuel Vadot/* AM33xx */ 35*c66ec88fSEmmanuel Vadot l4_wkup: l4_wkup@44c00000 { 36*c66ec88fSEmmanuel Vadot ... 37*c66ec88fSEmmanuel Vadot 38*c66ec88fSEmmanuel Vadot scm: scm@210000 { 39*c66ec88fSEmmanuel Vadot compatible = "ti,am3-scm", "simple-bus"; 40*c66ec88fSEmmanuel Vadot reg = <0x210000 0x2000>; 41*c66ec88fSEmmanuel Vadot #address-cells = <1>; 42*c66ec88fSEmmanuel Vadot #size-cells = <1>; 43*c66ec88fSEmmanuel Vadot ranges = <0 0x210000 0x2000>; 44*c66ec88fSEmmanuel Vadot 45*c66ec88fSEmmanuel Vadot ... 46*c66ec88fSEmmanuel Vadot 47*c66ec88fSEmmanuel Vadot wkup_m3_ipc: wkup_m3_ipc@1324 { 48*c66ec88fSEmmanuel Vadot compatible = "ti,am3352-wkup-m3-ipc"; 49*c66ec88fSEmmanuel Vadot reg = <0x1324 0x24>; 50*c66ec88fSEmmanuel Vadot interrupts = <78>; 51*c66ec88fSEmmanuel Vadot ti,rproc = <&wkup_m3>; 52*c66ec88fSEmmanuel Vadot mboxes = <&mailbox &mbox_wkupm3>; 53*c66ec88fSEmmanuel Vadot }; 54*c66ec88fSEmmanuel Vadot 55*c66ec88fSEmmanuel Vadot ... 56*c66ec88fSEmmanuel Vadot }; 57*c66ec88fSEmmanuel Vadot }; 58