summaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/mailbox/xlnx,zynqmp-ipi-mailbox.txt
blob: ad76edccf881661b627afdb1a95c2791d2896ce8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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@ff990400 {
			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";
	};