18c2ecf20Sopenharmony_ciXilinx IPI Mailbox Controller
28c2ecf20Sopenharmony_ci========================================
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ciThe Xilinx IPI(Inter Processor Interrupt) mailbox controller is to manage
58c2ecf20Sopenharmony_cimessaging between two Xilinx Zynq UltraScale+ MPSoC IPI agents. Each IPI
68c2ecf20Sopenharmony_ciagent owns registers used for notification and buffers for message.
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci               +-------------------------------------+
98c2ecf20Sopenharmony_ci               | Xilinx ZynqMP IPI Controller        |
108c2ecf20Sopenharmony_ci               +-------------------------------------+
118c2ecf20Sopenharmony_ci    +--------------------------------------------------+
128c2ecf20Sopenharmony_ciATF                    |                     |
138c2ecf20Sopenharmony_ci                       |                     |
148c2ecf20Sopenharmony_ci                       |                     |
158c2ecf20Sopenharmony_ci    +--------------------------+             |
168c2ecf20Sopenharmony_ci                       |                     |
178c2ecf20Sopenharmony_ci                       |                     |
188c2ecf20Sopenharmony_ci    +--------------------------------------------------+
198c2ecf20Sopenharmony_ci            +------------------------------------------+
208c2ecf20Sopenharmony_ci            |  +----------------+   +----------------+ |
218c2ecf20Sopenharmony_ciHardware    |  |  IPI Agent     |   |  IPI Buffers   | |
228c2ecf20Sopenharmony_ci            |  |  Registers     |   |                | |
238c2ecf20Sopenharmony_ci            |  |                |   |                | |
248c2ecf20Sopenharmony_ci            |  +----------------+   +----------------+ |
258c2ecf20Sopenharmony_ci            |                                          |
268c2ecf20Sopenharmony_ci            | Xilinx IPI Agent Block                   |
278c2ecf20Sopenharmony_ci            +------------------------------------------+
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ciController Device Node:
318c2ecf20Sopenharmony_ci===========================
328c2ecf20Sopenharmony_ciRequired properties:
338c2ecf20Sopenharmony_ci--------------------
348c2ecf20Sopenharmony_ciIPI agent node:
358c2ecf20Sopenharmony_ci- compatible:		Shall be: "xlnx,zynqmp-ipi-mailbox"
368c2ecf20Sopenharmony_ci- interrupt-parent:	Phandle for the interrupt controller
378c2ecf20Sopenharmony_ci- interrupts:		Interrupt information corresponding to the
388c2ecf20Sopenharmony_ci			interrupt-names property.
398c2ecf20Sopenharmony_ci- xlnx,ipi-id:		local Xilinx IPI agent ID
408c2ecf20Sopenharmony_ci- #address-cells:	number of address cells of internal IPI mailbox nodes
418c2ecf20Sopenharmony_ci- #size-cells:		number of size cells of internal IPI mailbox nodes
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ciInternal IPI mailbox node:
448c2ecf20Sopenharmony_ci- reg:			IPI buffers address ranges
458c2ecf20Sopenharmony_ci- reg-names:		Names of the reg resources. It should have:
468c2ecf20Sopenharmony_ci			* local_request_region
478c2ecf20Sopenharmony_ci			  - IPI request msg buffer written by local and read
488c2ecf20Sopenharmony_ci			    by remote
498c2ecf20Sopenharmony_ci			* local_response_region
508c2ecf20Sopenharmony_ci			  - IPI response msg buffer written by local and read
518c2ecf20Sopenharmony_ci			    by remote
528c2ecf20Sopenharmony_ci			* remote_request_region
538c2ecf20Sopenharmony_ci			  - IPI request msg buffer written by remote and read
548c2ecf20Sopenharmony_ci			    by local
558c2ecf20Sopenharmony_ci			* remote_response_region
568c2ecf20Sopenharmony_ci			  - IPI response msg buffer written by remote and read
578c2ecf20Sopenharmony_ci			    by local
588c2ecf20Sopenharmony_ci- #mbox-cells:		Shall be 1. It contains:
598c2ecf20Sopenharmony_ci			* tx(0) or rx(1) channel
608c2ecf20Sopenharmony_ci- xlnx,ipi-id:		remote Xilinx IPI agent ID of which the mailbox is
618c2ecf20Sopenharmony_ci			connected to.
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ciOptional properties:
648c2ecf20Sopenharmony_ci--------------------
658c2ecf20Sopenharmony_ci- method:              The method of accessing the IPI agent registers.
668c2ecf20Sopenharmony_ci                       Permitted values are: "smc" and "hvc". Default is
678c2ecf20Sopenharmony_ci                       "smc".
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ciClient Device Node:
708c2ecf20Sopenharmony_ci===========================
718c2ecf20Sopenharmony_ciRequired properties:
728c2ecf20Sopenharmony_ci--------------------
738c2ecf20Sopenharmony_ci- mboxes:		Standard property to specify a mailbox
748c2ecf20Sopenharmony_ci			(See ./mailbox.txt)
758c2ecf20Sopenharmony_ci- mbox-names:		List of identifier  strings for each mailbox
768c2ecf20Sopenharmony_ci			channel.
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ciExample:
798c2ecf20Sopenharmony_ci===========================
808c2ecf20Sopenharmony_ci	zynqmp_ipi {
818c2ecf20Sopenharmony_ci		compatible = "xlnx,zynqmp-ipi-mailbox";
828c2ecf20Sopenharmony_ci		interrupt-parent = <&gic>;
838c2ecf20Sopenharmony_ci		interrupts = <0 29 4>;
848c2ecf20Sopenharmony_ci		xlnx,ipi-id = <0>;
858c2ecf20Sopenharmony_ci		#address-cells = <1>;
868c2ecf20Sopenharmony_ci		#size-cells = <1>;
878c2ecf20Sopenharmony_ci		ranges;
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci		/* APU<->RPU0 IPI mailbox controller */
908c2ecf20Sopenharmony_ci		ipi_mailbox_rpu0: mailbox@ff990400 {
918c2ecf20Sopenharmony_ci			reg = <0xff990400 0x20>,
928c2ecf20Sopenharmony_ci			      <0xff990420 0x20>,
938c2ecf20Sopenharmony_ci			      <0xff990080 0x20>,
948c2ecf20Sopenharmony_ci			      <0xff9900a0 0x20>;
958c2ecf20Sopenharmony_ci			reg-names = "local_request_region",
968c2ecf20Sopenharmony_ci				    "local_response_region",
978c2ecf20Sopenharmony_ci				    "remote_request_region",
988c2ecf20Sopenharmony_ci				    "remote_response_region";
998c2ecf20Sopenharmony_ci			#mbox-cells = <1>;
1008c2ecf20Sopenharmony_ci			xlnx,ipi-id = <1>;
1018c2ecf20Sopenharmony_ci		};
1028c2ecf20Sopenharmony_ci		/* APU<->RPU1 IPI mailbox controller */
1038c2ecf20Sopenharmony_ci		ipi_mailbox_rpu1: mailbox@ff990440 {
1048c2ecf20Sopenharmony_ci			reg = <0xff990440 0x20>,
1058c2ecf20Sopenharmony_ci			      <0xff990460 0x20>,
1068c2ecf20Sopenharmony_ci			      <0xff990280 0x20>,
1078c2ecf20Sopenharmony_ci			      <0xff9902a0 0x20>;
1088c2ecf20Sopenharmony_ci			reg-names = "local_request_region",
1098c2ecf20Sopenharmony_ci				    "local_response_region",
1108c2ecf20Sopenharmony_ci				    "remote_request_region",
1118c2ecf20Sopenharmony_ci				    "remote_response_region";
1128c2ecf20Sopenharmony_ci			#mbox-cells = <1>;
1138c2ecf20Sopenharmony_ci			xlnx,ipi-id = <2>;
1148c2ecf20Sopenharmony_ci		};
1158c2ecf20Sopenharmony_ci	};
1168c2ecf20Sopenharmony_ci	rpu0 {
1178c2ecf20Sopenharmony_ci		...
1188c2ecf20Sopenharmony_ci		mboxes = <&ipi_mailbox_rpu0 0>,
1198c2ecf20Sopenharmony_ci			 <&ipi_mailbox_rpu0 1>;
1208c2ecf20Sopenharmony_ci		mbox-names = "tx", "rx";
1218c2ecf20Sopenharmony_ci	};
1228c2ecf20Sopenharmony_ci	rpu1 {
1238c2ecf20Sopenharmony_ci		...
1248c2ecf20Sopenharmony_ci		mboxes = <&ipi_mailbox_rpu1 0>,
1258c2ecf20Sopenharmony_ci			 <&ipi_mailbox_rpu1 1>;
1268c2ecf20Sopenharmony_ci		mbox-names = "tx", "rx";
1278c2ecf20Sopenharmony_ci	};
128