| Xilinx IPI Mailbox Controller |
| ======================================== |
| |
| The Xilinx IPI(Inter Processor Interrupt) mailbox controller is to manage |
| messaging between two Xilinx Zynq UltraScale+ MPSoC IPI agents. Each IPI |
| agent owns registers used for notification and buffers for message. |
| |
| +-------------------------------------+ |
| | Xilinx ZynqMP IPI Controller | |
| +-------------------------------------+ |
| +--------------------------------------------------+ |
| ATF | | |
| | | |
| | | |
| +--------------------------+ | |
| | | |
| | | |
| +--------------------------------------------------+ |
| +------------------------------------------+ |
| | +----------------+ +----------------+ | |
| Hardware | | IPI Agent | | IPI Buffers | | |
| | | Registers | | | | |
| | | | | | | |
| | +----------------+ +----------------+ | |
| | | |
| | Xilinx IPI Agent Block | |
| +------------------------------------------+ |
| |
| |
| Controller Device Node: |
| =========================== |
| Required properties: |
| -------------------- |
| IPI agent node: |
| - compatible: Shall be: "xlnx,zynqmp-ipi-mailbox" |
| - interrupt-parent: Phandle for the interrupt controller |
| - interrupts: Interrupt information corresponding to the |
| interrupt-names property. |
| - xlnx,ipi-id: local Xilinx IPI agent ID |
| - #address-cells: number of address cells of internal IPI mailbox nodes |
| - #size-cells: number of size cells of internal IPI mailbox nodes |
| |
| Internal IPI mailbox node: |
| - reg: IPI buffers address ranges |
| - reg-names: Names of the reg resources. It should have: |
| * local_request_region |
| - IPI request msg buffer written by local and read |
| by remote |
| * local_response_region |
| - IPI response msg buffer written by local and read |
| by remote |
| * remote_request_region |
| - IPI request msg buffer written by remote and read |
| by local |
| * remote_response_region |
| - IPI response msg buffer written by remote and read |
| by local |
| - #mbox-cells: Shall be 1. It contains: |
| * tx(0) or rx(1) channel |
| - xlnx,ipi-id: remote Xilinx IPI agent ID of which the mailbox is |
| connected to. |
| |
| Optional properties: |
| -------------------- |
| - method: The method of accessing the IPI agent registers. |
| Permitted values are: "smc" and "hvc". Default is |
| "smc". |
| |
| Client Device Node: |
| =========================== |
| Required properties: |
| -------------------- |
| - mboxes: Standard property to specify a mailbox |
| (See ./mailbox.txt) |
| - mbox-names: List of identifier strings for each mailbox |
| channel. |
| |
| Example: |
| =========================== |
| zynqmp_ipi { |
| compatible = "xlnx,zynqmp-ipi-mailbox"; |
| interrupt-parent = <&gic>; |
| interrupts = <0 29 4>; |
| xlnx,ipi-id = <0>; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| /* APU<->RPU0 IPI mailbox controller */ |
| ipi_mailbox_rpu0: mailbox@ff90400 { |
| reg = <0xff990400 0x20>, |
| <0xff990420 0x20>, |
| <0xff990080 0x20>, |
| <0xff9900a0 0x20>; |
| reg-names = "local_request_region", |
| "local_response_region", |
| "remote_request_region", |
| "remote_response_region"; |
| #mbox-cells = <1>; |
| xlnx,ipi-id = <1>; |
| }; |
| /* APU<->RPU1 IPI mailbox controller */ |
| ipi_mailbox_rpu1: mailbox@ff990440 { |
| reg = <0xff990440 0x20>, |
| <0xff990460 0x20>, |
| <0xff990280 0x20>, |
| <0xff9902a0 0x20>; |
| reg-names = "local_request_region", |
| "local_response_region", |
| "remote_request_region", |
| "remote_response_region"; |
| #mbox-cells = <1>; |
| xlnx,ipi-id = <2>; |
| }; |
| }; |
| rpu0 { |
| ... |
| mboxes = <&ipi_mailbox_rpu0 0>, |
| <&ipi_mailbox_rpu0 1>; |
| mbox-names = "tx", "rx"; |
| }; |
| rpu1 { |
| ... |
| mboxes = <&ipi_mailbox_rpu1 0>, |
| <&ipi_mailbox_rpu1 1>; |
| mbox-names = "tx", "rx"; |
| }; |