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