18c2ecf20Sopenharmony_ciNXP i.MX System Controller Firmware (SCFW)
28c2ecf20Sopenharmony_ci--------------------------------------------------------------------
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ciThe System Controller Firmware (SCFW) is a low-level system function
58c2ecf20Sopenharmony_ciwhich runs on a dedicated Cortex-M core to provide power, clock, and
68c2ecf20Sopenharmony_ciresource management. It exists on some i.MX8 processors. e.g. i.MX8QM
78c2ecf20Sopenharmony_ci(QM, QP), and i.MX8QX (QXP, DX).
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ciThe AP communicates with the SC using a multi-ported MU module found
108c2ecf20Sopenharmony_ciin the LSIO subsystem. The current definition of this MU module provides
118c2ecf20Sopenharmony_ci5 remote AP connections to the SC to support up to 5 execution environments
128c2ecf20Sopenharmony_ci(TZ, HV, standard Linux, etc.). The SC side of this MU module interfaces
138c2ecf20Sopenharmony_ciwith the LSIO DSC IP bus. The SC firmware will communicate with this MU
148c2ecf20Sopenharmony_ciusing the MSI bus.
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ciSystem Controller Device Node:
178c2ecf20Sopenharmony_ci============================================================
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ciThe scu node with the following properties shall be under the /firmware/ node.
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ciRequired properties:
228c2ecf20Sopenharmony_ci-------------------
238c2ecf20Sopenharmony_ci- compatible:	should be "fsl,imx-scu".
248c2ecf20Sopenharmony_ci- mbox-names:	should include "tx0", "tx1", "tx2", "tx3",
258c2ecf20Sopenharmony_ci			       "rx0", "rx1", "rx2", "rx3";
268c2ecf20Sopenharmony_ci		include "gip3" if want to support general MU interrupt.
278c2ecf20Sopenharmony_ci- mboxes:	List of phandle of 4 MU channels for tx, 4 MU channels for
288c2ecf20Sopenharmony_ci		rx, and 1 optional MU channel for general interrupt.
298c2ecf20Sopenharmony_ci		All MU channels must be in the same MU instance.
308c2ecf20Sopenharmony_ci		Cross instances are not allowed. The MU instance can only
318c2ecf20Sopenharmony_ci		be one of LSIO MU0~M4 for imx8qxp and imx8qm. Users need
328c2ecf20Sopenharmony_ci		to make sure use the one which is not conflict with other
338c2ecf20Sopenharmony_ci		execution environments. e.g. ATF.
348c2ecf20Sopenharmony_ci		Note:
358c2ecf20Sopenharmony_ci		Channel 0 must be "tx0" or "rx0".
368c2ecf20Sopenharmony_ci		Channel 1 must be "tx1" or "rx1".
378c2ecf20Sopenharmony_ci		Channel 2 must be "tx2" or "rx2".
388c2ecf20Sopenharmony_ci		Channel 3 must be "tx3" or "rx3".
398c2ecf20Sopenharmony_ci		General interrupt rx channel must be "gip3".
408c2ecf20Sopenharmony_ci		e.g.
418c2ecf20Sopenharmony_ci		mboxes = <&lsio_mu1 0 0
428c2ecf20Sopenharmony_ci			  &lsio_mu1 0 1
438c2ecf20Sopenharmony_ci			  &lsio_mu1 0 2
448c2ecf20Sopenharmony_ci			  &lsio_mu1 0 3
458c2ecf20Sopenharmony_ci			  &lsio_mu1 1 0
468c2ecf20Sopenharmony_ci			  &lsio_mu1 1 1
478c2ecf20Sopenharmony_ci			  &lsio_mu1 1 2
488c2ecf20Sopenharmony_ci			  &lsio_mu1 1 3
498c2ecf20Sopenharmony_ci			  &lsio_mu1 3 3>;
508c2ecf20Sopenharmony_ci		See Documentation/devicetree/bindings/mailbox/fsl,mu.yaml
518c2ecf20Sopenharmony_ci		for detailed mailbox binding.
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ciNote: Each mu which supports general interrupt should have an alias correctly
548c2ecf20Sopenharmony_cinumbered in "aliases" node.
558c2ecf20Sopenharmony_cie.g.
568c2ecf20Sopenharmony_cialiases {
578c2ecf20Sopenharmony_ci	mu1 = &lsio_mu1;
588c2ecf20Sopenharmony_ci};
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_cii.MX SCU Client Device Node:
618c2ecf20Sopenharmony_ci============================================================
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ciClient nodes are maintained as children of the relevant IMX-SCU device node.
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ciPower domain bindings based on SCU Message Protocol
668c2ecf20Sopenharmony_ci------------------------------------------------------------
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ciThis binding for the SCU power domain providers uses the generic power
698c2ecf20Sopenharmony_cidomain binding[2].
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ciRequired properties:
728c2ecf20Sopenharmony_ci- compatible:		Should be one of:
738c2ecf20Sopenharmony_ci			  "fsl,imx8qm-scu-pd",
748c2ecf20Sopenharmony_ci			  "fsl,imx8qxp-scu-pd"
758c2ecf20Sopenharmony_ci			followed by "fsl,scu-pd"
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci- #power-domain-cells:	Must be 1. Contains the Resource ID used by
788c2ecf20Sopenharmony_ci			SCU commands.
798c2ecf20Sopenharmony_ci			See detailed Resource ID list from:
808c2ecf20Sopenharmony_ci			include/dt-bindings/firmware/imx/rsrc.h
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ciClock bindings based on SCU Message Protocol
838c2ecf20Sopenharmony_ci------------------------------------------------------------
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ciThis binding uses the common clock binding[1].
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ciRequired properties:
888c2ecf20Sopenharmony_ci- compatible:		Should be one of:
898c2ecf20Sopenharmony_ci			  "fsl,imx8qm-clock"
908c2ecf20Sopenharmony_ci			  "fsl,imx8qxp-clock"
918c2ecf20Sopenharmony_ci			followed by "fsl,scu-clk"
928c2ecf20Sopenharmony_ci- #clock-cells:		Should be 1. Contains the Clock ID value.
938c2ecf20Sopenharmony_ci- clocks:		List of clock specifiers, must contain an entry for
948c2ecf20Sopenharmony_ci			each required entry in clock-names
958c2ecf20Sopenharmony_ci- clock-names:		Should include entries "xtal_32KHz", "xtal_24MHz"
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ciThe clock consumer should specify the desired clock by having the clock
988c2ecf20Sopenharmony_ciID in its "clocks" phandle cell.
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_ciSee the full list of clock IDs from:
1018c2ecf20Sopenharmony_ciinclude/dt-bindings/clock/imx8qxp-clock.h
1028c2ecf20Sopenharmony_ci
1038c2ecf20Sopenharmony_ciPinctrl bindings based on SCU Message Protocol
1048c2ecf20Sopenharmony_ci------------------------------------------------------------
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ciThis binding uses the i.MX common pinctrl binding[3].
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ciRequired properties:
1098c2ecf20Sopenharmony_ci- compatible:		Should be one of:
1108c2ecf20Sopenharmony_ci			"fsl,imx8qm-iomuxc",
1118c2ecf20Sopenharmony_ci			"fsl,imx8qxp-iomuxc",
1128c2ecf20Sopenharmony_ci			"fsl,imx8dxl-iomuxc".
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ciRequired properties for Pinctrl sub nodes:
1158c2ecf20Sopenharmony_ci- fsl,pins:		Each entry consists of 3 integers which represents
1168c2ecf20Sopenharmony_ci			the mux and config setting for one pin. The first 2
1178c2ecf20Sopenharmony_ci			integers <pin_id mux_mode> are specified using a
1188c2ecf20Sopenharmony_ci			PIN_FUNC_ID macro, which can be found in
1198c2ecf20Sopenharmony_ci			<dt-bindings/pinctrl/pads-imx8qm.h>,
1208c2ecf20Sopenharmony_ci			<dt-bindings/pinctrl/pads-imx8qxp.h>,
1218c2ecf20Sopenharmony_ci			<dt-bindings/pinctrl/pads-imx8dxl.h>.
1228c2ecf20Sopenharmony_ci			The last integer CONFIG is the pad setting value like
1238c2ecf20Sopenharmony_ci			pull-up on this pin.
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_ci			Please refer to i.MX8QXP Reference Manual for detailed
1268c2ecf20Sopenharmony_ci			CONFIG settings.
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_ci[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
1298c2ecf20Sopenharmony_ci[2] Documentation/devicetree/bindings/power/power-domain.yaml
1308c2ecf20Sopenharmony_ci[3] Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ciRTC bindings based on SCU Message Protocol
1338c2ecf20Sopenharmony_ci------------------------------------------------------------
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ciRequired properties:
1368c2ecf20Sopenharmony_ci- compatible: should be "fsl,imx8qxp-sc-rtc";
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_ciOCOTP bindings based on SCU Message Protocol
1398c2ecf20Sopenharmony_ci------------------------------------------------------------
1408c2ecf20Sopenharmony_ciRequired properties:
1418c2ecf20Sopenharmony_ci- compatible:		Should be one of:
1428c2ecf20Sopenharmony_ci			"fsl,imx8qm-scu-ocotp",
1438c2ecf20Sopenharmony_ci			"fsl,imx8qxp-scu-ocotp".
1448c2ecf20Sopenharmony_ci- #address-cells:	Must be 1. Contains byte index
1458c2ecf20Sopenharmony_ci- #size-cells:		Must be 1. Contains byte length
1468c2ecf20Sopenharmony_ci
1478c2ecf20Sopenharmony_ciOptional Child nodes:
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ci- Data cells of ocotp:
1508c2ecf20Sopenharmony_ci  Detailed bindings are described in bindings/nvmem/nvmem.txt
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_ciWatchdog bindings based on SCU Message Protocol
1538c2ecf20Sopenharmony_ci------------------------------------------------------------
1548c2ecf20Sopenharmony_ci
1558c2ecf20Sopenharmony_ciRequired properties:
1568c2ecf20Sopenharmony_ci- compatible: should be:
1578c2ecf20Sopenharmony_ci              "fsl,imx8qxp-sc-wdt"
1588c2ecf20Sopenharmony_ci              followed by "fsl,imx-sc-wdt";
1598c2ecf20Sopenharmony_ciOptional properties:
1608c2ecf20Sopenharmony_ci- timeout-sec: contains the watchdog timeout in seconds.
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_ciSCU key bindings based on SCU Message Protocol
1638c2ecf20Sopenharmony_ci------------------------------------------------------------
1648c2ecf20Sopenharmony_ci
1658c2ecf20Sopenharmony_ciRequired properties:
1668c2ecf20Sopenharmony_ci- compatible: should be:
1678c2ecf20Sopenharmony_ci              "fsl,imx8qxp-sc-key"
1688c2ecf20Sopenharmony_ci              followed by "fsl,imx-sc-key";
1698c2ecf20Sopenharmony_ci- linux,keycodes: See Documentation/devicetree/bindings/input/input.yaml
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_ciThermal bindings based on SCU Message Protocol
1728c2ecf20Sopenharmony_ci------------------------------------------------------------
1738c2ecf20Sopenharmony_ci
1748c2ecf20Sopenharmony_ciRequired properties:
1758c2ecf20Sopenharmony_ci- compatible:			Should be :
1768c2ecf20Sopenharmony_ci				  "fsl,imx8qxp-sc-thermal"
1778c2ecf20Sopenharmony_ci				followed by "fsl,imx-sc-thermal";
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci- #thermal-sensor-cells:	See Documentation/devicetree/bindings/thermal/thermal-sensor.yaml
1808c2ecf20Sopenharmony_ci				for a description.
1818c2ecf20Sopenharmony_ci
1828c2ecf20Sopenharmony_ciExample (imx8qxp):
1838c2ecf20Sopenharmony_ci-------------
1848c2ecf20Sopenharmony_cialiases {
1858c2ecf20Sopenharmony_ci	mu1 = &lsio_mu1;
1868c2ecf20Sopenharmony_ci};
1878c2ecf20Sopenharmony_ci
1888c2ecf20Sopenharmony_cilsio_mu1: mailbox@5d1c0000 {
1898c2ecf20Sopenharmony_ci	...
1908c2ecf20Sopenharmony_ci	#mbox-cells = <2>;
1918c2ecf20Sopenharmony_ci};
1928c2ecf20Sopenharmony_ci
1938c2ecf20Sopenharmony_cifirmware {
1948c2ecf20Sopenharmony_ci	scu {
1958c2ecf20Sopenharmony_ci		compatible = "fsl,imx-scu";
1968c2ecf20Sopenharmony_ci		mbox-names = "tx0", "tx1", "tx2", "tx3",
1978c2ecf20Sopenharmony_ci			     "rx0", "rx1", "rx2", "rx3",
1988c2ecf20Sopenharmony_ci			     "gip3";
1998c2ecf20Sopenharmony_ci		mboxes = <&lsio_mu1 0 0
2008c2ecf20Sopenharmony_ci			  &lsio_mu1 0 1
2018c2ecf20Sopenharmony_ci			  &lsio_mu1 0 2
2028c2ecf20Sopenharmony_ci			  &lsio_mu1 0 3
2038c2ecf20Sopenharmony_ci			  &lsio_mu1 1 0
2048c2ecf20Sopenharmony_ci			  &lsio_mu1 1 1
2058c2ecf20Sopenharmony_ci			  &lsio_mu1 1 2
2068c2ecf20Sopenharmony_ci			  &lsio_mu1 1 3
2078c2ecf20Sopenharmony_ci			  &lsio_mu1 3 3>;
2088c2ecf20Sopenharmony_ci
2098c2ecf20Sopenharmony_ci		clk: clk {
2108c2ecf20Sopenharmony_ci			compatible = "fsl,imx8qxp-clk", "fsl,scu-clk";
2118c2ecf20Sopenharmony_ci			#clock-cells = <1>;
2128c2ecf20Sopenharmony_ci		};
2138c2ecf20Sopenharmony_ci
2148c2ecf20Sopenharmony_ci		iomuxc {
2158c2ecf20Sopenharmony_ci			compatible = "fsl,imx8qxp-iomuxc";
2168c2ecf20Sopenharmony_ci
2178c2ecf20Sopenharmony_ci			pinctrl_lpuart0: lpuart0grp {
2188c2ecf20Sopenharmony_ci				fsl,pins = <
2198c2ecf20Sopenharmony_ci					SC_P_UART0_RX_ADMA_UART0_RX	0x06000020
2208c2ecf20Sopenharmony_ci					SC_P_UART0_TX_ADMA_UART0_TX	0x06000020
2218c2ecf20Sopenharmony_ci				>;
2228c2ecf20Sopenharmony_ci			};
2238c2ecf20Sopenharmony_ci			...
2248c2ecf20Sopenharmony_ci		};
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci		ocotp: imx8qx-ocotp {
2278c2ecf20Sopenharmony_ci			compatible = "fsl,imx8qxp-scu-ocotp";
2288c2ecf20Sopenharmony_ci			#address-cells = <1>;
2298c2ecf20Sopenharmony_ci			#size-cells = <1>;
2308c2ecf20Sopenharmony_ci
2318c2ecf20Sopenharmony_ci			fec_mac0: mac@2c4 {
2328c2ecf20Sopenharmony_ci				reg = <0x2c4 8>;
2338c2ecf20Sopenharmony_ci			};
2348c2ecf20Sopenharmony_ci		};
2358c2ecf20Sopenharmony_ci
2368c2ecf20Sopenharmony_ci		pd: imx8qx-pd {
2378c2ecf20Sopenharmony_ci			compatible = "fsl,imx8qxp-scu-pd", "fsl,scu-pd";
2388c2ecf20Sopenharmony_ci			#power-domain-cells = <1>;
2398c2ecf20Sopenharmony_ci		};
2408c2ecf20Sopenharmony_ci
2418c2ecf20Sopenharmony_ci		rtc: rtc {
2428c2ecf20Sopenharmony_ci			compatible = "fsl,imx8qxp-sc-rtc";
2438c2ecf20Sopenharmony_ci		};
2448c2ecf20Sopenharmony_ci
2458c2ecf20Sopenharmony_ci		scu_key: scu-key {
2468c2ecf20Sopenharmony_ci			compatible = "fsl,imx8qxp-sc-key", "fsl,imx-sc-key";
2478c2ecf20Sopenharmony_ci			linux,keycodes = <KEY_POWER>;
2488c2ecf20Sopenharmony_ci		};
2498c2ecf20Sopenharmony_ci
2508c2ecf20Sopenharmony_ci		watchdog {
2518c2ecf20Sopenharmony_ci			compatible = "fsl,imx8qxp-sc-wdt", "fsl,imx-sc-wdt";
2528c2ecf20Sopenharmony_ci			timeout-sec = <60>;
2538c2ecf20Sopenharmony_ci		};
2548c2ecf20Sopenharmony_ci
2558c2ecf20Sopenharmony_ci		tsens: thermal-sensor {
2568c2ecf20Sopenharmony_ci			compatible = "fsl,imx8qxp-sc-thermal", "fsl,imx-sc-thermal";
2578c2ecf20Sopenharmony_ci			#thermal-sensor-cells = <1>;
2588c2ecf20Sopenharmony_ci		};
2598c2ecf20Sopenharmony_ci	};
2608c2ecf20Sopenharmony_ci};
2618c2ecf20Sopenharmony_ci
2628c2ecf20Sopenharmony_ciserial@5a060000 {
2638c2ecf20Sopenharmony_ci	...
2648c2ecf20Sopenharmony_ci	pinctrl-names = "default";
2658c2ecf20Sopenharmony_ci	pinctrl-0 = <&pinctrl_lpuart0>;
2668c2ecf20Sopenharmony_ci	clocks = <&clk IMX8QXP_UART0_CLK>,
2678c2ecf20Sopenharmony_ci		 <&clk IMX8QXP_UART0_IPG_CLK>;
2688c2ecf20Sopenharmony_ci	clock-names = "per", "ipg";
2698c2ecf20Sopenharmony_ci	power-domains = <&pd IMX_SC_R_UART_0>;
2708c2ecf20Sopenharmony_ci};
271