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