xref: /freebsd/sys/contrib/device-tree/Bindings/arm/freescale/fsl,scu.txt (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
1*c66ec88fSEmmanuel VadotNXP i.MX System Controller Firmware (SCFW)
2*c66ec88fSEmmanuel Vadot--------------------------------------------------------------------
3*c66ec88fSEmmanuel Vadot
4*c66ec88fSEmmanuel VadotThe System Controller Firmware (SCFW) is a low-level system function
5*c66ec88fSEmmanuel Vadotwhich runs on a dedicated Cortex-M core to provide power, clock, and
6*c66ec88fSEmmanuel Vadotresource management. It exists on some i.MX8 processors. e.g. i.MX8QM
7*c66ec88fSEmmanuel Vadot(QM, QP), and i.MX8QX (QXP, DX).
8*c66ec88fSEmmanuel Vadot
9*c66ec88fSEmmanuel VadotThe AP communicates with the SC using a multi-ported MU module found
10*c66ec88fSEmmanuel Vadotin the LSIO subsystem. The current definition of this MU module provides
11*c66ec88fSEmmanuel Vadot5 remote AP connections to the SC to support up to 5 execution environments
12*c66ec88fSEmmanuel Vadot(TZ, HV, standard Linux, etc.). The SC side of this MU module interfaces
13*c66ec88fSEmmanuel Vadotwith the LSIO DSC IP bus. The SC firmware will communicate with this MU
14*c66ec88fSEmmanuel Vadotusing the MSI bus.
15*c66ec88fSEmmanuel Vadot
16*c66ec88fSEmmanuel VadotSystem Controller Device Node:
17*c66ec88fSEmmanuel Vadot============================================================
18*c66ec88fSEmmanuel Vadot
19*c66ec88fSEmmanuel VadotThe scu node with the following properties shall be under the /firmware/ node.
20*c66ec88fSEmmanuel Vadot
21*c66ec88fSEmmanuel VadotRequired properties:
22*c66ec88fSEmmanuel Vadot-------------------
23*c66ec88fSEmmanuel Vadot- compatible:	should be "fsl,imx-scu".
24*c66ec88fSEmmanuel Vadot- mbox-names:	should include "tx0", "tx1", "tx2", "tx3",
25*c66ec88fSEmmanuel Vadot			       "rx0", "rx1", "rx2", "rx3";
26*c66ec88fSEmmanuel Vadot		include "gip3" if want to support general MU interrupt.
27*c66ec88fSEmmanuel Vadot- mboxes:	List of phandle of 4 MU channels for tx, 4 MU channels for
28*c66ec88fSEmmanuel Vadot		rx, and 1 optional MU channel for general interrupt.
29*c66ec88fSEmmanuel Vadot		All MU channels must be in the same MU instance.
30*c66ec88fSEmmanuel Vadot		Cross instances are not allowed. The MU instance can only
31*c66ec88fSEmmanuel Vadot		be one of LSIO MU0~M4 for imx8qxp and imx8qm. Users need
32*c66ec88fSEmmanuel Vadot		to make sure use the one which is not conflict with other
33*c66ec88fSEmmanuel Vadot		execution environments. e.g. ATF.
34*c66ec88fSEmmanuel Vadot		Note:
35*c66ec88fSEmmanuel Vadot		Channel 0 must be "tx0" or "rx0".
36*c66ec88fSEmmanuel Vadot		Channel 1 must be "tx1" or "rx1".
37*c66ec88fSEmmanuel Vadot		Channel 2 must be "tx2" or "rx2".
38*c66ec88fSEmmanuel Vadot		Channel 3 must be "tx3" or "rx3".
39*c66ec88fSEmmanuel Vadot		General interrupt rx channel must be "gip3".
40*c66ec88fSEmmanuel Vadot		e.g.
41*c66ec88fSEmmanuel Vadot		mboxes = <&lsio_mu1 0 0
42*c66ec88fSEmmanuel Vadot			  &lsio_mu1 0 1
43*c66ec88fSEmmanuel Vadot			  &lsio_mu1 0 2
44*c66ec88fSEmmanuel Vadot			  &lsio_mu1 0 3
45*c66ec88fSEmmanuel Vadot			  &lsio_mu1 1 0
46*c66ec88fSEmmanuel Vadot			  &lsio_mu1 1 1
47*c66ec88fSEmmanuel Vadot			  &lsio_mu1 1 2
48*c66ec88fSEmmanuel Vadot			  &lsio_mu1 1 3
49*c66ec88fSEmmanuel Vadot			  &lsio_mu1 3 3>;
50*c66ec88fSEmmanuel Vadot		See Documentation/devicetree/bindings/mailbox/fsl,mu.yaml
51*c66ec88fSEmmanuel Vadot		for detailed mailbox binding.
52*c66ec88fSEmmanuel Vadot
53*c66ec88fSEmmanuel VadotNote: Each mu which supports general interrupt should have an alias correctly
54*c66ec88fSEmmanuel Vadotnumbered in "aliases" node.
55*c66ec88fSEmmanuel Vadote.g.
56*c66ec88fSEmmanuel Vadotaliases {
57*c66ec88fSEmmanuel Vadot	mu1 = &lsio_mu1;
58*c66ec88fSEmmanuel Vadot};
59*c66ec88fSEmmanuel Vadot
60*c66ec88fSEmmanuel Vadoti.MX SCU Client Device Node:
61*c66ec88fSEmmanuel Vadot============================================================
62*c66ec88fSEmmanuel Vadot
63*c66ec88fSEmmanuel VadotClient nodes are maintained as children of the relevant IMX-SCU device node.
64*c66ec88fSEmmanuel Vadot
65*c66ec88fSEmmanuel VadotPower domain bindings based on SCU Message Protocol
66*c66ec88fSEmmanuel Vadot------------------------------------------------------------
67*c66ec88fSEmmanuel Vadot
68*c66ec88fSEmmanuel VadotThis binding for the SCU power domain providers uses the generic power
69*c66ec88fSEmmanuel Vadotdomain binding[2].
70*c66ec88fSEmmanuel Vadot
71*c66ec88fSEmmanuel VadotRequired properties:
72*c66ec88fSEmmanuel Vadot- compatible:		Should be one of:
73*c66ec88fSEmmanuel Vadot			  "fsl,imx8qm-scu-pd",
74*c66ec88fSEmmanuel Vadot			  "fsl,imx8qxp-scu-pd"
75*c66ec88fSEmmanuel Vadot			followed by "fsl,scu-pd"
76*c66ec88fSEmmanuel Vadot
77*c66ec88fSEmmanuel Vadot- #power-domain-cells:	Must be 1. Contains the Resource ID used by
78*c66ec88fSEmmanuel Vadot			SCU commands.
79*c66ec88fSEmmanuel Vadot			See detailed Resource ID list from:
80*c66ec88fSEmmanuel Vadot			include/dt-bindings/firmware/imx/rsrc.h
81*c66ec88fSEmmanuel Vadot
82*c66ec88fSEmmanuel VadotClock bindings based on SCU Message Protocol
83*c66ec88fSEmmanuel Vadot------------------------------------------------------------
84*c66ec88fSEmmanuel Vadot
85*c66ec88fSEmmanuel VadotThis binding uses the common clock binding[1].
86*c66ec88fSEmmanuel Vadot
87*c66ec88fSEmmanuel VadotRequired properties:
88*c66ec88fSEmmanuel Vadot- compatible:		Should be one of:
89*c66ec88fSEmmanuel Vadot			  "fsl,imx8qm-clock"
90*c66ec88fSEmmanuel Vadot			  "fsl,imx8qxp-clock"
91*c66ec88fSEmmanuel Vadot			followed by "fsl,scu-clk"
92*c66ec88fSEmmanuel Vadot- #clock-cells:		Should be 1. Contains the Clock ID value.
93*c66ec88fSEmmanuel Vadot- clocks:		List of clock specifiers, must contain an entry for
94*c66ec88fSEmmanuel Vadot			each required entry in clock-names
95*c66ec88fSEmmanuel Vadot- clock-names:		Should include entries "xtal_32KHz", "xtal_24MHz"
96*c66ec88fSEmmanuel Vadot
97*c66ec88fSEmmanuel VadotThe clock consumer should specify the desired clock by having the clock
98*c66ec88fSEmmanuel VadotID in its "clocks" phandle cell.
99*c66ec88fSEmmanuel Vadot
100*c66ec88fSEmmanuel VadotSee the full list of clock IDs from:
101*c66ec88fSEmmanuel Vadotinclude/dt-bindings/clock/imx8qxp-clock.h
102*c66ec88fSEmmanuel Vadot
103*c66ec88fSEmmanuel VadotPinctrl bindings based on SCU Message Protocol
104*c66ec88fSEmmanuel Vadot------------------------------------------------------------
105*c66ec88fSEmmanuel Vadot
106*c66ec88fSEmmanuel VadotThis binding uses the i.MX common pinctrl binding[3].
107*c66ec88fSEmmanuel Vadot
108*c66ec88fSEmmanuel VadotRequired properties:
109*c66ec88fSEmmanuel Vadot- compatible:		Should be one of:
110*c66ec88fSEmmanuel Vadot			"fsl,imx8qm-iomuxc",
111*c66ec88fSEmmanuel Vadot			"fsl,imx8qxp-iomuxc",
112*c66ec88fSEmmanuel Vadot			"fsl,imx8dxl-iomuxc".
113*c66ec88fSEmmanuel Vadot
114*c66ec88fSEmmanuel VadotRequired properties for Pinctrl sub nodes:
115*c66ec88fSEmmanuel Vadot- fsl,pins:		Each entry consists of 3 integers which represents
116*c66ec88fSEmmanuel Vadot			the mux and config setting for one pin. The first 2
117*c66ec88fSEmmanuel Vadot			integers <pin_id mux_mode> are specified using a
118*c66ec88fSEmmanuel Vadot			PIN_FUNC_ID macro, which can be found in
119*c66ec88fSEmmanuel Vadot			<dt-bindings/pinctrl/pads-imx8qm.h>,
120*c66ec88fSEmmanuel Vadot			<dt-bindings/pinctrl/pads-imx8qxp.h>,
121*c66ec88fSEmmanuel Vadot			<dt-bindings/pinctrl/pads-imx8dxl.h>.
122*c66ec88fSEmmanuel Vadot			The last integer CONFIG is the pad setting value like
123*c66ec88fSEmmanuel Vadot			pull-up on this pin.
124*c66ec88fSEmmanuel Vadot
125*c66ec88fSEmmanuel Vadot			Please refer to i.MX8QXP Reference Manual for detailed
126*c66ec88fSEmmanuel Vadot			CONFIG settings.
127*c66ec88fSEmmanuel Vadot
128*c66ec88fSEmmanuel Vadot[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
129*c66ec88fSEmmanuel Vadot[2] Documentation/devicetree/bindings/power/power-domain.yaml
130*c66ec88fSEmmanuel Vadot[3] Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt
131*c66ec88fSEmmanuel Vadot
132*c66ec88fSEmmanuel VadotRTC bindings based on SCU Message Protocol
133*c66ec88fSEmmanuel Vadot------------------------------------------------------------
134*c66ec88fSEmmanuel Vadot
135*c66ec88fSEmmanuel VadotRequired properties:
136*c66ec88fSEmmanuel Vadot- compatible: should be "fsl,imx8qxp-sc-rtc";
137*c66ec88fSEmmanuel Vadot
138*c66ec88fSEmmanuel VadotOCOTP bindings based on SCU Message Protocol
139*c66ec88fSEmmanuel Vadot------------------------------------------------------------
140*c66ec88fSEmmanuel VadotRequired properties:
141*c66ec88fSEmmanuel Vadot- compatible:		Should be one of:
142*c66ec88fSEmmanuel Vadot			"fsl,imx8qm-scu-ocotp",
143*c66ec88fSEmmanuel Vadot			"fsl,imx8qxp-scu-ocotp".
144*c66ec88fSEmmanuel Vadot- #address-cells:	Must be 1. Contains byte index
145*c66ec88fSEmmanuel Vadot- #size-cells:		Must be 1. Contains byte length
146*c66ec88fSEmmanuel Vadot
147*c66ec88fSEmmanuel VadotOptional Child nodes:
148*c66ec88fSEmmanuel Vadot
149*c66ec88fSEmmanuel Vadot- Data cells of ocotp:
150*c66ec88fSEmmanuel Vadot  Detailed bindings are described in bindings/nvmem/nvmem.txt
151*c66ec88fSEmmanuel Vadot
152*c66ec88fSEmmanuel VadotWatchdog bindings based on SCU Message Protocol
153*c66ec88fSEmmanuel Vadot------------------------------------------------------------
154*c66ec88fSEmmanuel Vadot
155*c66ec88fSEmmanuel VadotRequired properties:
156*c66ec88fSEmmanuel Vadot- compatible: should be:
157*c66ec88fSEmmanuel Vadot              "fsl,imx8qxp-sc-wdt"
158*c66ec88fSEmmanuel Vadot              followed by "fsl,imx-sc-wdt";
159*c66ec88fSEmmanuel VadotOptional properties:
160*c66ec88fSEmmanuel Vadot- timeout-sec: contains the watchdog timeout in seconds.
161*c66ec88fSEmmanuel Vadot
162*c66ec88fSEmmanuel VadotSCU key bindings based on SCU Message Protocol
163*c66ec88fSEmmanuel Vadot------------------------------------------------------------
164*c66ec88fSEmmanuel Vadot
165*c66ec88fSEmmanuel VadotRequired properties:
166*c66ec88fSEmmanuel Vadot- compatible: should be:
167*c66ec88fSEmmanuel Vadot              "fsl,imx8qxp-sc-key"
168*c66ec88fSEmmanuel Vadot              followed by "fsl,imx-sc-key";
169*c66ec88fSEmmanuel Vadot- linux,keycodes: See Documentation/devicetree/bindings/input/input.yaml
170*c66ec88fSEmmanuel Vadot
171*c66ec88fSEmmanuel VadotThermal bindings based on SCU Message Protocol
172*c66ec88fSEmmanuel Vadot------------------------------------------------------------
173*c66ec88fSEmmanuel Vadot
174*c66ec88fSEmmanuel VadotRequired properties:
175*c66ec88fSEmmanuel Vadot- compatible:			Should be :
176*c66ec88fSEmmanuel Vadot				  "fsl,imx8qxp-sc-thermal"
177*c66ec88fSEmmanuel Vadot				followed by "fsl,imx-sc-thermal";
178*c66ec88fSEmmanuel Vadot
179*c66ec88fSEmmanuel Vadot- #thermal-sensor-cells:	See Documentation/devicetree/bindings/thermal/thermal-sensor.yaml
180*c66ec88fSEmmanuel Vadot				for a description.
181*c66ec88fSEmmanuel Vadot
182*c66ec88fSEmmanuel VadotExample (imx8qxp):
183*c66ec88fSEmmanuel Vadot-------------
184*c66ec88fSEmmanuel Vadotaliases {
185*c66ec88fSEmmanuel Vadot	mu1 = &lsio_mu1;
186*c66ec88fSEmmanuel Vadot};
187*c66ec88fSEmmanuel Vadot
188*c66ec88fSEmmanuel Vadotlsio_mu1: mailbox@5d1c0000 {
189*c66ec88fSEmmanuel Vadot	...
190*c66ec88fSEmmanuel Vadot	#mbox-cells = <2>;
191*c66ec88fSEmmanuel Vadot};
192*c66ec88fSEmmanuel Vadot
193*c66ec88fSEmmanuel Vadotfirmware {
194*c66ec88fSEmmanuel Vadot	scu {
195*c66ec88fSEmmanuel Vadot		compatible = "fsl,imx-scu";
196*c66ec88fSEmmanuel Vadot		mbox-names = "tx0", "tx1", "tx2", "tx3",
197*c66ec88fSEmmanuel Vadot			     "rx0", "rx1", "rx2", "rx3",
198*c66ec88fSEmmanuel Vadot			     "gip3";
199*c66ec88fSEmmanuel Vadot		mboxes = <&lsio_mu1 0 0
200*c66ec88fSEmmanuel Vadot			  &lsio_mu1 0 1
201*c66ec88fSEmmanuel Vadot			  &lsio_mu1 0 2
202*c66ec88fSEmmanuel Vadot			  &lsio_mu1 0 3
203*c66ec88fSEmmanuel Vadot			  &lsio_mu1 1 0
204*c66ec88fSEmmanuel Vadot			  &lsio_mu1 1 1
205*c66ec88fSEmmanuel Vadot			  &lsio_mu1 1 2
206*c66ec88fSEmmanuel Vadot			  &lsio_mu1 1 3
207*c66ec88fSEmmanuel Vadot			  &lsio_mu1 3 3>;
208*c66ec88fSEmmanuel Vadot
209*c66ec88fSEmmanuel Vadot		clk: clk {
210*c66ec88fSEmmanuel Vadot			compatible = "fsl,imx8qxp-clk", "fsl,scu-clk";
211*c66ec88fSEmmanuel Vadot			#clock-cells = <1>;
212*c66ec88fSEmmanuel Vadot		};
213*c66ec88fSEmmanuel Vadot
214*c66ec88fSEmmanuel Vadot		iomuxc {
215*c66ec88fSEmmanuel Vadot			compatible = "fsl,imx8qxp-iomuxc";
216*c66ec88fSEmmanuel Vadot
217*c66ec88fSEmmanuel Vadot			pinctrl_lpuart0: lpuart0grp {
218*c66ec88fSEmmanuel Vadot				fsl,pins = <
219*c66ec88fSEmmanuel Vadot					SC_P_UART0_RX_ADMA_UART0_RX	0x06000020
220*c66ec88fSEmmanuel Vadot					SC_P_UART0_TX_ADMA_UART0_TX	0x06000020
221*c66ec88fSEmmanuel Vadot				>;
222*c66ec88fSEmmanuel Vadot			};
223*c66ec88fSEmmanuel Vadot			...
224*c66ec88fSEmmanuel Vadot		};
225*c66ec88fSEmmanuel Vadot
226*c66ec88fSEmmanuel Vadot		ocotp: imx8qx-ocotp {
227*c66ec88fSEmmanuel Vadot			compatible = "fsl,imx8qxp-scu-ocotp";
228*c66ec88fSEmmanuel Vadot			#address-cells = <1>;
229*c66ec88fSEmmanuel Vadot			#size-cells = <1>;
230*c66ec88fSEmmanuel Vadot
231*c66ec88fSEmmanuel Vadot			fec_mac0: mac@2c4 {
232*c66ec88fSEmmanuel Vadot				reg = <0x2c4 8>;
233*c66ec88fSEmmanuel Vadot			};
234*c66ec88fSEmmanuel Vadot		};
235*c66ec88fSEmmanuel Vadot
236*c66ec88fSEmmanuel Vadot		pd: imx8qx-pd {
237*c66ec88fSEmmanuel Vadot			compatible = "fsl,imx8qxp-scu-pd", "fsl,scu-pd";
238*c66ec88fSEmmanuel Vadot			#power-domain-cells = <1>;
239*c66ec88fSEmmanuel Vadot		};
240*c66ec88fSEmmanuel Vadot
241*c66ec88fSEmmanuel Vadot		rtc: rtc {
242*c66ec88fSEmmanuel Vadot			compatible = "fsl,imx8qxp-sc-rtc";
243*c66ec88fSEmmanuel Vadot		};
244*c66ec88fSEmmanuel Vadot
245*c66ec88fSEmmanuel Vadot		scu_key: scu-key {
246*c66ec88fSEmmanuel Vadot			compatible = "fsl,imx8qxp-sc-key", "fsl,imx-sc-key";
247*c66ec88fSEmmanuel Vadot			linux,keycodes = <KEY_POWER>;
248*c66ec88fSEmmanuel Vadot		};
249*c66ec88fSEmmanuel Vadot
250*c66ec88fSEmmanuel Vadot		watchdog {
251*c66ec88fSEmmanuel Vadot			compatible = "fsl,imx8qxp-sc-wdt", "fsl,imx-sc-wdt";
252*c66ec88fSEmmanuel Vadot			timeout-sec = <60>;
253*c66ec88fSEmmanuel Vadot		};
254*c66ec88fSEmmanuel Vadot
255*c66ec88fSEmmanuel Vadot		tsens: thermal-sensor {
256*c66ec88fSEmmanuel Vadot			compatible = "fsl,imx8qxp-sc-thermal", "fsl,imx-sc-thermal";
257*c66ec88fSEmmanuel Vadot			#thermal-sensor-cells = <1>;
258*c66ec88fSEmmanuel Vadot		};
259*c66ec88fSEmmanuel Vadot	};
260*c66ec88fSEmmanuel Vadot};
261*c66ec88fSEmmanuel Vadot
262*c66ec88fSEmmanuel Vadotserial@5a060000 {
263*c66ec88fSEmmanuel Vadot	...
264*c66ec88fSEmmanuel Vadot	pinctrl-names = "default";
265*c66ec88fSEmmanuel Vadot	pinctrl-0 = <&pinctrl_lpuart0>;
266*c66ec88fSEmmanuel Vadot	clocks = <&clk IMX8QXP_UART0_CLK>,
267*c66ec88fSEmmanuel Vadot		 <&clk IMX8QXP_UART0_IPG_CLK>;
268*c66ec88fSEmmanuel Vadot	clock-names = "per", "ipg";
269*c66ec88fSEmmanuel Vadot	power-domains = <&pd IMX_SC_R_UART_0>;
270*c66ec88fSEmmanuel Vadot};
271