128 lines
4.1 KiB
Plaintext
128 lines
4.1 KiB
Plaintext
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";
|
|
};
|