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