271 lines
7.6 KiB
Plaintext
271 lines
7.6 KiB
Plaintext
|
NXP i.MX System Controller Firmware (SCFW)
|
||
|
--------------------------------------------------------------------
|
||
|
|
||
|
The System Controller Firmware (SCFW) is a low-level system function
|
||
|
which runs on a dedicated Cortex-M core to provide power, clock, and
|
||
|
resource management. It exists on some i.MX8 processors. e.g. i.MX8QM
|
||
|
(QM, QP), and i.MX8QX (QXP, DX).
|
||
|
|
||
|
The AP communicates with the SC using a multi-ported MU module found
|
||
|
in the LSIO subsystem. The current definition of this MU module provides
|
||
|
5 remote AP connections to the SC to support up to 5 execution environments
|
||
|
(TZ, HV, standard Linux, etc.). The SC side of this MU module interfaces
|
||
|
with the LSIO DSC IP bus. The SC firmware will communicate with this MU
|
||
|
using the MSI bus.
|
||
|
|
||
|
System Controller Device Node:
|
||
|
============================================================
|
||
|
|
||
|
The scu node with the following properties shall be under the /firmware/ node.
|
||
|
|
||
|
Required properties:
|
||
|
-------------------
|
||
|
- compatible: should be "fsl,imx-scu".
|
||
|
- mbox-names: should include "tx0", "tx1", "tx2", "tx3",
|
||
|
"rx0", "rx1", "rx2", "rx3";
|
||
|
include "gip3" if want to support general MU interrupt.
|
||
|
- mboxes: List of phandle of 4 MU channels for tx, 4 MU channels for
|
||
|
rx, and 1 optional MU channel for general interrupt.
|
||
|
All MU channels must be in the same MU instance.
|
||
|
Cross instances are not allowed. The MU instance can only
|
||
|
be one of LSIO MU0~M4 for imx8qxp and imx8qm. Users need
|
||
|
to make sure use the one which is not conflict with other
|
||
|
execution environments. e.g. ATF.
|
||
|
Note:
|
||
|
Channel 0 must be "tx0" or "rx0".
|
||
|
Channel 1 must be "tx1" or "rx1".
|
||
|
Channel 2 must be "tx2" or "rx2".
|
||
|
Channel 3 must be "tx3" or "rx3".
|
||
|
General interrupt rx channel must be "gip3".
|
||
|
e.g.
|
||
|
mboxes = <&lsio_mu1 0 0
|
||
|
&lsio_mu1 0 1
|
||
|
&lsio_mu1 0 2
|
||
|
&lsio_mu1 0 3
|
||
|
&lsio_mu1 1 0
|
||
|
&lsio_mu1 1 1
|
||
|
&lsio_mu1 1 2
|
||
|
&lsio_mu1 1 3
|
||
|
&lsio_mu1 3 3>;
|
||
|
See Documentation/devicetree/bindings/mailbox/fsl,mu.yaml
|
||
|
for detailed mailbox binding.
|
||
|
|
||
|
Note: Each mu which supports general interrupt should have an alias correctly
|
||
|
numbered in "aliases" node.
|
||
|
e.g.
|
||
|
aliases {
|
||
|
mu1 = &lsio_mu1;
|
||
|
};
|
||
|
|
||
|
i.MX SCU Client Device Node:
|
||
|
============================================================
|
||
|
|
||
|
Client nodes are maintained as children of the relevant IMX-SCU device node.
|
||
|
|
||
|
Power domain bindings based on SCU Message Protocol
|
||
|
------------------------------------------------------------
|
||
|
|
||
|
This binding for the SCU power domain providers uses the generic power
|
||
|
domain binding[2].
|
||
|
|
||
|
Required properties:
|
||
|
- compatible: Should be one of:
|
||
|
"fsl,imx8qm-scu-pd",
|
||
|
"fsl,imx8qxp-scu-pd"
|
||
|
followed by "fsl,scu-pd"
|
||
|
|
||
|
- #power-domain-cells: Must be 1. Contains the Resource ID used by
|
||
|
SCU commands.
|
||
|
See detailed Resource ID list from:
|
||
|
include/dt-bindings/firmware/imx/rsrc.h
|
||
|
|
||
|
Clock bindings based on SCU Message Protocol
|
||
|
------------------------------------------------------------
|
||
|
|
||
|
This binding uses the common clock binding[1].
|
||
|
|
||
|
Required properties:
|
||
|
- compatible: Should be one of:
|
||
|
"fsl,imx8qm-clk"
|
||
|
"fsl,imx8qxp-clk"
|
||
|
followed by "fsl,scu-clk"
|
||
|
- #clock-cells: Should be 2.
|
||
|
Contains the Resource and Clock ID value.
|
||
|
- clocks: List of clock specifiers, must contain an entry for
|
||
|
each required entry in clock-names
|
||
|
- clock-names: Should include entries "xtal_32KHz", "xtal_24MHz"
|
||
|
|
||
|
The clock consumer should specify the desired clock by having the clock
|
||
|
ID in its "clocks" phandle cell.
|
||
|
|
||
|
See the full list of clock IDs from:
|
||
|
include/dt-bindings/clock/imx8qxp-clock.h
|
||
|
|
||
|
Pinctrl bindings based on SCU Message Protocol
|
||
|
------------------------------------------------------------
|
||
|
|
||
|
This binding uses the i.MX common pinctrl binding[3].
|
||
|
|
||
|
Required properties:
|
||
|
- compatible: Should be one of:
|
||
|
"fsl,imx8qm-iomuxc",
|
||
|
"fsl,imx8qxp-iomuxc",
|
||
|
"fsl,imx8dxl-iomuxc".
|
||
|
|
||
|
Required properties for Pinctrl sub nodes:
|
||
|
- fsl,pins: Each entry consists of 3 integers which represents
|
||
|
the mux and config setting for one pin. The first 2
|
||
|
integers <pin_id mux_mode> are specified using a
|
||
|
PIN_FUNC_ID macro, which can be found in
|
||
|
<dt-bindings/pinctrl/pads-imx8qm.h>,
|
||
|
<dt-bindings/pinctrl/pads-imx8qxp.h>,
|
||
|
<dt-bindings/pinctrl/pads-imx8dxl.h>.
|
||
|
The last integer CONFIG is the pad setting value like
|
||
|
pull-up on this pin.
|
||
|
|
||
|
Please refer to i.MX8QXP Reference Manual for detailed
|
||
|
CONFIG settings.
|
||
|
|
||
|
[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
|
||
|
[2] Documentation/devicetree/bindings/power/power-domain.yaml
|
||
|
[3] Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt
|
||
|
|
||
|
RTC bindings based on SCU Message Protocol
|
||
|
------------------------------------------------------------
|
||
|
|
||
|
Required properties:
|
||
|
- compatible: should be "fsl,imx8qxp-sc-rtc";
|
||
|
|
||
|
OCOTP bindings based on SCU Message Protocol
|
||
|
------------------------------------------------------------
|
||
|
Required properties:
|
||
|
- compatible: Should be one of:
|
||
|
"fsl,imx8qm-scu-ocotp",
|
||
|
"fsl,imx8qxp-scu-ocotp".
|
||
|
- #address-cells: Must be 1. Contains byte index
|
||
|
- #size-cells: Must be 1. Contains byte length
|
||
|
|
||
|
Optional Child nodes:
|
||
|
|
||
|
- Data cells of ocotp:
|
||
|
Detailed bindings are described in bindings/nvmem/nvmem.txt
|
||
|
|
||
|
Watchdog bindings based on SCU Message Protocol
|
||
|
------------------------------------------------------------
|
||
|
|
||
|
Required properties:
|
||
|
- compatible: should be:
|
||
|
"fsl,imx8qxp-sc-wdt"
|
||
|
followed by "fsl,imx-sc-wdt";
|
||
|
Optional properties:
|
||
|
- timeout-sec: contains the watchdog timeout in seconds.
|
||
|
|
||
|
SCU key bindings based on SCU Message Protocol
|
||
|
------------------------------------------------------------
|
||
|
|
||
|
Required properties:
|
||
|
- compatible: should be:
|
||
|
"fsl,imx8qxp-sc-key"
|
||
|
followed by "fsl,imx-sc-key";
|
||
|
- linux,keycodes: See Documentation/devicetree/bindings/input/input.yaml
|
||
|
|
||
|
Thermal bindings based on SCU Message Protocol
|
||
|
------------------------------------------------------------
|
||
|
|
||
|
Required properties:
|
||
|
- compatible: Should be :
|
||
|
"fsl,imx8qxp-sc-thermal"
|
||
|
followed by "fsl,imx-sc-thermal";
|
||
|
|
||
|
- #thermal-sensor-cells: See Documentation/devicetree/bindings/thermal/thermal-sensor.yaml
|
||
|
for a description.
|
||
|
|
||
|
Example (imx8qxp):
|
||
|
-------------
|
||
|
aliases {
|
||
|
mu1 = &lsio_mu1;
|
||
|
};
|
||
|
|
||
|
lsio_mu1: mailbox@5d1c0000 {
|
||
|
...
|
||
|
#mbox-cells = <2>;
|
||
|
};
|
||
|
|
||
|
firmware {
|
||
|
scu {
|
||
|
compatible = "fsl,imx-scu";
|
||
|
mbox-names = "tx0", "tx1", "tx2", "tx3",
|
||
|
"rx0", "rx1", "rx2", "rx3",
|
||
|
"gip3";
|
||
|
mboxes = <&lsio_mu1 0 0
|
||
|
&lsio_mu1 0 1
|
||
|
&lsio_mu1 0 2
|
||
|
&lsio_mu1 0 3
|
||
|
&lsio_mu1 1 0
|
||
|
&lsio_mu1 1 1
|
||
|
&lsio_mu1 1 2
|
||
|
&lsio_mu1 1 3
|
||
|
&lsio_mu1 3 3>;
|
||
|
|
||
|
clk: clk {
|
||
|
compatible = "fsl,imx8qxp-clk", "fsl,scu-clk";
|
||
|
#clock-cells = <2>;
|
||
|
};
|
||
|
|
||
|
iomuxc {
|
||
|
compatible = "fsl,imx8qxp-iomuxc";
|
||
|
|
||
|
pinctrl_lpuart0: lpuart0grp {
|
||
|
fsl,pins = <
|
||
|
SC_P_UART0_RX_ADMA_UART0_RX 0x06000020
|
||
|
SC_P_UART0_TX_ADMA_UART0_TX 0x06000020
|
||
|
>;
|
||
|
};
|
||
|
...
|
||
|
};
|
||
|
|
||
|
ocotp: imx8qx-ocotp {
|
||
|
compatible = "fsl,imx8qxp-scu-ocotp";
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <1>;
|
||
|
|
||
|
fec_mac0: mac@2c4 {
|
||
|
reg = <0x2c4 8>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
pd: imx8qx-pd {
|
||
|
compatible = "fsl,imx8qxp-scu-pd", "fsl,scu-pd";
|
||
|
#power-domain-cells = <1>;
|
||
|
};
|
||
|
|
||
|
rtc: rtc {
|
||
|
compatible = "fsl,imx8qxp-sc-rtc";
|
||
|
};
|
||
|
|
||
|
scu_key: scu-key {
|
||
|
compatible = "fsl,imx8qxp-sc-key", "fsl,imx-sc-key";
|
||
|
linux,keycodes = <KEY_POWER>;
|
||
|
};
|
||
|
|
||
|
watchdog {
|
||
|
compatible = "fsl,imx8qxp-sc-wdt", "fsl,imx-sc-wdt";
|
||
|
timeout-sec = <60>;
|
||
|
};
|
||
|
|
||
|
tsens: thermal-sensor {
|
||
|
compatible = "fsl,imx8qxp-sc-thermal", "fsl,imx-sc-thermal";
|
||
|
#thermal-sensor-cells = <1>;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
serial@5a060000 {
|
||
|
...
|
||
|
pinctrl-names = "default";
|
||
|
pinctrl-0 = <&pinctrl_lpuart0>;
|
||
|
clocks = <&uart0_clk IMX_SC_R_UART_0 IMX_SC_PM_CLK_PER>;
|
||
|
clock-names = "ipg";
|
||
|
power-domains = <&pd IMX_SC_R_UART_0>;
|
||
|
};
|