1*c66ec88fSEmmanuel VadotXilinx IPI Mailbox Controller 2*c66ec88fSEmmanuel Vadot======================================== 3*c66ec88fSEmmanuel Vadot 4*c66ec88fSEmmanuel VadotThe Xilinx IPI(Inter Processor Interrupt) mailbox controller is to manage 5*c66ec88fSEmmanuel Vadotmessaging between two Xilinx Zynq UltraScale+ MPSoC IPI agents. Each IPI 6*c66ec88fSEmmanuel Vadotagent owns registers used for notification and buffers for message. 7*c66ec88fSEmmanuel Vadot 8*c66ec88fSEmmanuel Vadot +-------------------------------------+ 9*c66ec88fSEmmanuel Vadot | Xilinx ZynqMP IPI Controller | 10*c66ec88fSEmmanuel Vadot +-------------------------------------+ 11*c66ec88fSEmmanuel Vadot +--------------------------------------------------+ 12*c66ec88fSEmmanuel VadotATF | | 13*c66ec88fSEmmanuel Vadot | | 14*c66ec88fSEmmanuel Vadot | | 15*c66ec88fSEmmanuel Vadot +--------------------------+ | 16*c66ec88fSEmmanuel Vadot | | 17*c66ec88fSEmmanuel Vadot | | 18*c66ec88fSEmmanuel Vadot +--------------------------------------------------+ 19*c66ec88fSEmmanuel Vadot +------------------------------------------+ 20*c66ec88fSEmmanuel Vadot | +----------------+ +----------------+ | 21*c66ec88fSEmmanuel VadotHardware | | IPI Agent | | IPI Buffers | | 22*c66ec88fSEmmanuel Vadot | | Registers | | | | 23*c66ec88fSEmmanuel Vadot | | | | | | 24*c66ec88fSEmmanuel Vadot | +----------------+ +----------------+ | 25*c66ec88fSEmmanuel Vadot | | 26*c66ec88fSEmmanuel Vadot | Xilinx IPI Agent Block | 27*c66ec88fSEmmanuel Vadot +------------------------------------------+ 28*c66ec88fSEmmanuel Vadot 29*c66ec88fSEmmanuel Vadot 30*c66ec88fSEmmanuel VadotController Device Node: 31*c66ec88fSEmmanuel Vadot=========================== 32*c66ec88fSEmmanuel VadotRequired properties: 33*c66ec88fSEmmanuel Vadot-------------------- 34*c66ec88fSEmmanuel VadotIPI agent node: 35*c66ec88fSEmmanuel Vadot- compatible: Shall be: "xlnx,zynqmp-ipi-mailbox" 36*c66ec88fSEmmanuel Vadot- interrupt-parent: Phandle for the interrupt controller 37*c66ec88fSEmmanuel Vadot- interrupts: Interrupt information corresponding to the 38*c66ec88fSEmmanuel Vadot interrupt-names property. 39*c66ec88fSEmmanuel Vadot- xlnx,ipi-id: local Xilinx IPI agent ID 40*c66ec88fSEmmanuel Vadot- #address-cells: number of address cells of internal IPI mailbox nodes 41*c66ec88fSEmmanuel Vadot- #size-cells: number of size cells of internal IPI mailbox nodes 42*c66ec88fSEmmanuel Vadot 43*c66ec88fSEmmanuel VadotInternal IPI mailbox node: 44*c66ec88fSEmmanuel Vadot- reg: IPI buffers address ranges 45*c66ec88fSEmmanuel Vadot- reg-names: Names of the reg resources. It should have: 46*c66ec88fSEmmanuel Vadot * local_request_region 47*c66ec88fSEmmanuel Vadot - IPI request msg buffer written by local and read 48*c66ec88fSEmmanuel Vadot by remote 49*c66ec88fSEmmanuel Vadot * local_response_region 50*c66ec88fSEmmanuel Vadot - IPI response msg buffer written by local and read 51*c66ec88fSEmmanuel Vadot by remote 52*c66ec88fSEmmanuel Vadot * remote_request_region 53*c66ec88fSEmmanuel Vadot - IPI request msg buffer written by remote and read 54*c66ec88fSEmmanuel Vadot by local 55*c66ec88fSEmmanuel Vadot * remote_response_region 56*c66ec88fSEmmanuel Vadot - IPI response msg buffer written by remote and read 57*c66ec88fSEmmanuel Vadot by local 58*c66ec88fSEmmanuel Vadot- #mbox-cells: Shall be 1. It contains: 59*c66ec88fSEmmanuel Vadot * tx(0) or rx(1) channel 60*c66ec88fSEmmanuel Vadot- xlnx,ipi-id: remote Xilinx IPI agent ID of which the mailbox is 61*c66ec88fSEmmanuel Vadot connected to. 62*c66ec88fSEmmanuel Vadot 63*c66ec88fSEmmanuel VadotOptional properties: 64*c66ec88fSEmmanuel Vadot-------------------- 65*c66ec88fSEmmanuel Vadot- method: The method of accessing the IPI agent registers. 66*c66ec88fSEmmanuel Vadot Permitted values are: "smc" and "hvc". Default is 67*c66ec88fSEmmanuel Vadot "smc". 68*c66ec88fSEmmanuel Vadot 69*c66ec88fSEmmanuel VadotClient Device Node: 70*c66ec88fSEmmanuel Vadot=========================== 71*c66ec88fSEmmanuel VadotRequired properties: 72*c66ec88fSEmmanuel Vadot-------------------- 73*c66ec88fSEmmanuel Vadot- mboxes: Standard property to specify a mailbox 74*c66ec88fSEmmanuel Vadot (See ./mailbox.txt) 75*c66ec88fSEmmanuel Vadot- mbox-names: List of identifier strings for each mailbox 76*c66ec88fSEmmanuel Vadot channel. 77*c66ec88fSEmmanuel Vadot 78*c66ec88fSEmmanuel VadotExample: 79*c66ec88fSEmmanuel Vadot=========================== 80*c66ec88fSEmmanuel Vadot zynqmp_ipi { 81*c66ec88fSEmmanuel Vadot compatible = "xlnx,zynqmp-ipi-mailbox"; 82*c66ec88fSEmmanuel Vadot interrupt-parent = <&gic>; 83*c66ec88fSEmmanuel Vadot interrupts = <0 29 4>; 84*c66ec88fSEmmanuel Vadot xlnx,ipi-id = <0>; 85*c66ec88fSEmmanuel Vadot #address-cells = <1>; 86*c66ec88fSEmmanuel Vadot #size-cells = <1>; 87*c66ec88fSEmmanuel Vadot ranges; 88*c66ec88fSEmmanuel Vadot 89*c66ec88fSEmmanuel Vadot /* APU<->RPU0 IPI mailbox controller */ 90*c66ec88fSEmmanuel Vadot ipi_mailbox_rpu0: mailbox@ff990400 { 91*c66ec88fSEmmanuel Vadot reg = <0xff990400 0x20>, 92*c66ec88fSEmmanuel Vadot <0xff990420 0x20>, 93*c66ec88fSEmmanuel Vadot <0xff990080 0x20>, 94*c66ec88fSEmmanuel Vadot <0xff9900a0 0x20>; 95*c66ec88fSEmmanuel Vadot reg-names = "local_request_region", 96*c66ec88fSEmmanuel Vadot "local_response_region", 97*c66ec88fSEmmanuel Vadot "remote_request_region", 98*c66ec88fSEmmanuel Vadot "remote_response_region"; 99*c66ec88fSEmmanuel Vadot #mbox-cells = <1>; 100*c66ec88fSEmmanuel Vadot xlnx,ipi-id = <1>; 101*c66ec88fSEmmanuel Vadot }; 102*c66ec88fSEmmanuel Vadot /* APU<->RPU1 IPI mailbox controller */ 103*c66ec88fSEmmanuel Vadot ipi_mailbox_rpu1: mailbox@ff990440 { 104*c66ec88fSEmmanuel Vadot reg = <0xff990440 0x20>, 105*c66ec88fSEmmanuel Vadot <0xff990460 0x20>, 106*c66ec88fSEmmanuel Vadot <0xff990280 0x20>, 107*c66ec88fSEmmanuel Vadot <0xff9902a0 0x20>; 108*c66ec88fSEmmanuel Vadot reg-names = "local_request_region", 109*c66ec88fSEmmanuel Vadot "local_response_region", 110*c66ec88fSEmmanuel Vadot "remote_request_region", 111*c66ec88fSEmmanuel Vadot "remote_response_region"; 112*c66ec88fSEmmanuel Vadot #mbox-cells = <1>; 113*c66ec88fSEmmanuel Vadot xlnx,ipi-id = <2>; 114*c66ec88fSEmmanuel Vadot }; 115*c66ec88fSEmmanuel Vadot }; 116*c66ec88fSEmmanuel Vadot rpu0 { 117*c66ec88fSEmmanuel Vadot ... 118*c66ec88fSEmmanuel Vadot mboxes = <&ipi_mailbox_rpu0 0>, 119*c66ec88fSEmmanuel Vadot <&ipi_mailbox_rpu0 1>; 120*c66ec88fSEmmanuel Vadot mbox-names = "tx", "rx"; 121*c66ec88fSEmmanuel Vadot }; 122*c66ec88fSEmmanuel Vadot rpu1 { 123*c66ec88fSEmmanuel Vadot ... 124*c66ec88fSEmmanuel Vadot mboxes = <&ipi_mailbox_rpu1 0>, 125*c66ec88fSEmmanuel Vadot <&ipi_mailbox_rpu1 1>; 126*c66ec88fSEmmanuel Vadot mbox-names = "tx", "rx"; 127*c66ec88fSEmmanuel Vadot }; 128