554 lines
16 KiB
Plaintext
554 lines
16 KiB
Plaintext
=====================================================================
|
|
SEC 4 Device Tree Binding
|
|
Copyright (C) 2008-2011 Freescale Semiconductor Inc.
|
|
|
|
CONTENTS
|
|
-Overview
|
|
-SEC 4 Node
|
|
-Job Ring Node
|
|
-Run Time Integrity Check (RTIC) Node
|
|
-Run Time Integrity Check (RTIC) Memory Node
|
|
-Secure Non-Volatile Storage (SNVS) Node
|
|
-Secure Non-Volatile Storage (SNVS) Low Power (LP) RTC Node
|
|
-Full Example
|
|
|
|
NOTE: the SEC 4 is also known as Freescale's Cryptographic Accelerator
|
|
Accelerator and Assurance Module (CAAM).
|
|
|
|
=====================================================================
|
|
Overview
|
|
|
|
DESCRIPTION
|
|
|
|
SEC 4 h/w can process requests from 2 types of sources.
|
|
1. DPAA Queue Interface (HW interface between Queue Manager & SEC 4).
|
|
2. Job Rings (HW interface between cores & SEC 4 registers).
|
|
|
|
High Speed Data Path Configuration:
|
|
|
|
HW interface between QM & SEC 4 and also BM & SEC 4, on DPAA-enabled parts
|
|
such as the P4080. The number of simultaneous dequeues the QI can make is
|
|
equal to the number of Descriptor Controller (DECO) engines in a particular
|
|
SEC version. E.g., the SEC 4.0 in the P4080 has 5 DECOs and can thus
|
|
dequeue from 5 subportals simultaneously.
|
|
|
|
Job Ring Data Path Configuration:
|
|
|
|
Each JR is located on a separate 4k page, they may (or may not) be made visible
|
|
in the memory partition devoted to a particular core. The P4080 has 4 JRs, so
|
|
up to 4 JRs can be configured; and all 4 JRs process requests in parallel.
|
|
|
|
=====================================================================
|
|
SEC 4 Node
|
|
|
|
Description
|
|
|
|
Node defines the base address of the SEC 4 block.
|
|
This block specifies the address range of all global
|
|
configuration registers for the SEC 4 block. It
|
|
also receives interrupts from the Run Time Integrity Check
|
|
(RTIC) function within the SEC 4 block.
|
|
|
|
PROPERTIES
|
|
|
|
- compatible
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Must include "fsl,sec-v4.0"
|
|
|
|
- fsl,sec-era
|
|
Usage: optional
|
|
Value type: <u32>
|
|
Definition: A standard property. Define the 'ERA' of the SEC
|
|
device.
|
|
|
|
- #address-cells
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition: A standard property. Defines the number of cells
|
|
for representing physical addresses in child nodes.
|
|
|
|
- #size-cells
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition: A standard property. Defines the number of cells
|
|
for representing the size of physical addresses in
|
|
child nodes.
|
|
|
|
- reg
|
|
Usage: required
|
|
Value type: <prop-encoded-array>
|
|
Definition: A standard property. Specifies the physical
|
|
address and length of the SEC4 configuration registers.
|
|
registers
|
|
|
|
- ranges
|
|
Usage: required
|
|
Value type: <prop-encoded-array>
|
|
Definition: A standard property. Specifies the physical address
|
|
range of the SEC 4.0 register space (-SNVS not included). A
|
|
triplet that includes the child address, parent address, &
|
|
length.
|
|
|
|
- interrupts
|
|
Usage: required
|
|
Value type: <prop_encoded-array>
|
|
Definition: Specifies the interrupts generated by this
|
|
device. The value of the interrupts property
|
|
consists of one interrupt specifier. The format
|
|
of the specifier is defined by the binding document
|
|
describing the node's interrupt parent.
|
|
|
|
- clocks
|
|
Usage: required if SEC 4.0 requires explicit enablement of clocks
|
|
Value type: <prop_encoded-array>
|
|
Definition: A list of phandle and clock specifier pairs describing
|
|
the clocks required for enabling and disabling SEC 4.0.
|
|
|
|
- clock-names
|
|
Usage: required if SEC 4.0 requires explicit enablement of clocks
|
|
Value type: <string>
|
|
Definition: A list of clock name strings in the same order as the
|
|
clocks property.
|
|
|
|
Note: All other standard properties (see the Devicetree Specification)
|
|
are allowed but are optional.
|
|
|
|
|
|
EXAMPLE
|
|
|
|
iMX6QDL/SX requires four clocks
|
|
|
|
crypto@300000 {
|
|
compatible = "fsl,sec-v4.0";
|
|
fsl,sec-era = <2>;
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
reg = <0x300000 0x10000>;
|
|
ranges = <0 0x300000 0x10000>;
|
|
interrupt-parent = <&mpic>;
|
|
interrupts = <92 2>;
|
|
clocks = <&clks IMX6QDL_CLK_CAAM_MEM>,
|
|
<&clks IMX6QDL_CLK_CAAM_ACLK>,
|
|
<&clks IMX6QDL_CLK_CAAM_IPG>,
|
|
<&clks IMX6QDL_CLK_EIM_SLOW>;
|
|
clock-names = "mem", "aclk", "ipg", "emi_slow";
|
|
};
|
|
|
|
|
|
iMX6UL does only require three clocks
|
|
|
|
crypto: caam@2140000 {
|
|
compatible = "fsl,sec-v4.0";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
reg = <0x2140000 0x3c000>;
|
|
ranges = <0 0x2140000 0x3c000>;
|
|
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
|
|
|
|
clocks = <&clks IMX6UL_CLK_CAAM_MEM>,
|
|
<&clks IMX6UL_CLK_CAAM_ACLK>,
|
|
<&clks IMX6UL_CLK_CAAM_IPG>;
|
|
clock-names = "mem", "aclk", "ipg";
|
|
};
|
|
|
|
=====================================================================
|
|
Job Ring (JR) Node
|
|
|
|
Child of the crypto node defines data processing interface to SEC 4
|
|
across the peripheral bus for purposes of processing
|
|
cryptographic descriptors. The specified address
|
|
range can be made visible to one (or more) cores.
|
|
The interrupt defined for this node is controlled within
|
|
the address range of this node.
|
|
|
|
- compatible
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Must include "fsl,sec-v4.0-job-ring"
|
|
|
|
- reg
|
|
Usage: required
|
|
Value type: <prop-encoded-array>
|
|
Definition: Specifies a two JR parameters: an offset from
|
|
the parent physical address and the length the JR registers.
|
|
|
|
- fsl,liodn
|
|
Usage: optional-but-recommended
|
|
Value type: <prop-encoded-array>
|
|
Definition:
|
|
Specifies the LIODN to be used in conjunction with
|
|
the ppid-to-liodn table that specifies the PPID to LIODN mapping.
|
|
Needed if the PAMU is used. Value is a 12 bit value
|
|
where value is a LIODN ID for this JR. This property is
|
|
normally set by boot firmware.
|
|
|
|
- interrupts
|
|
Usage: required
|
|
Value type: <prop_encoded-array>
|
|
Definition: Specifies the interrupts generated by this
|
|
device. The value of the interrupts property
|
|
consists of one interrupt specifier. The format
|
|
of the specifier is defined by the binding document
|
|
describing the node's interrupt parent.
|
|
|
|
EXAMPLE
|
|
jr@1000 {
|
|
compatible = "fsl,sec-v4.0-job-ring";
|
|
reg = <0x1000 0x1000>;
|
|
fsl,liodn = <0x081>;
|
|
interrupt-parent = <&mpic>;
|
|
interrupts = <88 2>;
|
|
};
|
|
|
|
|
|
=====================================================================
|
|
Run Time Integrity Check (RTIC) Node
|
|
|
|
Child node of the crypto node. Defines a register space that
|
|
contains up to 5 sets of addresses and their lengths (sizes) that
|
|
will be checked at run time. After an initial hash result is
|
|
calculated, these addresses are checked by HW to monitor any
|
|
change. If any memory is modified, a Security Violation is
|
|
triggered (see SNVS definition).
|
|
|
|
|
|
- compatible
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Must include "fsl,sec-v4.0-rtic".
|
|
|
|
- #address-cells
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition: A standard property. Defines the number of cells
|
|
for representing physical addresses in child nodes. Must
|
|
have a value of 1.
|
|
|
|
- #size-cells
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition: A standard property. Defines the number of cells
|
|
for representing the size of physical addresses in
|
|
child nodes. Must have a value of 1.
|
|
|
|
- reg
|
|
Usage: required
|
|
Value type: <prop-encoded-array>
|
|
Definition: A standard property. Specifies a two parameters:
|
|
an offset from the parent physical address and the length
|
|
the SEC4 registers.
|
|
|
|
- ranges
|
|
Usage: required
|
|
Value type: <prop-encoded-array>
|
|
Definition: A standard property. Specifies the physical address
|
|
range of the SEC 4 register space (-SNVS not included). A
|
|
triplet that includes the child address, parent address, &
|
|
length.
|
|
|
|
EXAMPLE
|
|
rtic@6000 {
|
|
compatible = "fsl,sec-v4.0-rtic";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
reg = <0x6000 0x100>;
|
|
ranges = <0x0 0x6100 0xe00>;
|
|
};
|
|
|
|
=====================================================================
|
|
Run Time Integrity Check (RTIC) Memory Node
|
|
A child node that defines individual RTIC memory regions that are used to
|
|
perform run-time integrity check of memory areas that should not modified.
|
|
The node defines a register that contains the memory address &
|
|
length (combined) and a second register that contains the hash result
|
|
in big endian format.
|
|
|
|
- compatible
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Must include "fsl,sec-v4.0-rtic-memory".
|
|
|
|
- reg
|
|
Usage: required
|
|
Value type: <prop-encoded-array>
|
|
Definition: A standard property. Specifies two parameters:
|
|
an offset from the parent physical address and the length:
|
|
|
|
1. The location of the RTIC memory address & length registers.
|
|
2. The location RTIC hash result.
|
|
|
|
- fsl,rtic-region
|
|
Usage: optional-but-recommended
|
|
Value type: <prop-encoded-array>
|
|
Definition:
|
|
Specifies the HW address (36 bit address) for this region
|
|
followed by the length of the HW partition to be checked;
|
|
the address is represented as a 64 bit quantity followed
|
|
by a 32 bit length.
|
|
|
|
- fsl,liodn
|
|
Usage: optional-but-recommended
|
|
Value type: <prop-encoded-array>
|
|
Definition:
|
|
Specifies the LIODN to be used in conjunction with
|
|
the ppid-to-liodn table that specifies the PPID to LIODN
|
|
mapping. Needed if the PAMU is used. Value is a 12 bit value
|
|
where value is a LIODN ID for this RTIC memory region. This
|
|
property is normally set by boot firmware.
|
|
|
|
EXAMPLE
|
|
rtic-a@0 {
|
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
|
reg = <0x00 0x20 0x100 0x80>;
|
|
fsl,liodn = <0x03c>;
|
|
fsl,rtic-region = <0x12345678 0x12345678 0x12345678>;
|
|
};
|
|
|
|
=====================================================================
|
|
Secure Non-Volatile Storage (SNVS) Node
|
|
|
|
Node defines address range and the associated
|
|
interrupt for the SNVS function. This function
|
|
monitors security state information & reports
|
|
security violations. This also included rtc,
|
|
system power off and ON/OFF key.
|
|
|
|
- compatible
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Must include "fsl,sec-v4.0-mon" and "syscon".
|
|
|
|
- reg
|
|
Usage: required
|
|
Value type: <prop-encoded-array>
|
|
Definition: A standard property. Specifies the physical
|
|
address and length of the SEC4 configuration
|
|
registers.
|
|
|
|
- #address-cells
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition: A standard property. Defines the number of cells
|
|
for representing physical addresses in child nodes. Must
|
|
have a value of 1.
|
|
|
|
- #size-cells
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition: A standard property. Defines the number of cells
|
|
for representing the size of physical addresses in
|
|
child nodes. Must have a value of 1.
|
|
|
|
- ranges
|
|
Usage: required
|
|
Value type: <prop-encoded-array>
|
|
Definition: A standard property. Specifies the physical address
|
|
range of the SNVS register space. A triplet that includes
|
|
the child address, parent address, & length.
|
|
|
|
- interrupts
|
|
Usage: optional
|
|
Value type: <prop_encoded-array>
|
|
Definition: Specifies the interrupts generated by this
|
|
device. The value of the interrupts property
|
|
consists of one interrupt specifier. The format
|
|
of the specifier is defined by the binding document
|
|
describing the node's interrupt parent.
|
|
|
|
EXAMPLE
|
|
sec_mon@314000 {
|
|
compatible = "fsl,sec-v4.0-mon", "syscon";
|
|
reg = <0x314000 0x1000>;
|
|
ranges = <0 0x314000 0x1000>;
|
|
interrupt-parent = <&mpic>;
|
|
interrupts = <93 2>;
|
|
};
|
|
|
|
=====================================================================
|
|
Secure Non-Volatile Storage (SNVS) Low Power (LP) RTC Node
|
|
|
|
A SNVS child node that defines SNVS LP RTC.
|
|
|
|
- compatible
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Must include "fsl,sec-v4.0-mon-rtc-lp".
|
|
|
|
- interrupts
|
|
Usage: required
|
|
Value type: <prop_encoded-array>
|
|
Definition: Specifies the interrupts generated by this
|
|
device. The value of the interrupts property
|
|
consists of one interrupt specifier. The format
|
|
of the specifier is defined by the binding document
|
|
describing the node's interrupt parent.
|
|
|
|
- regmap
|
|
Usage: required
|
|
Value type: <phandle>
|
|
Definition: this is phandle to the register map node.
|
|
|
|
- offset
|
|
Usage: option
|
|
value type: <u32>
|
|
Definition: LP register offset. default it is 0x34.
|
|
|
|
- clocks
|
|
Usage: optional, required if SNVS LP RTC requires explicit
|
|
enablement of clocks
|
|
Value type: <prop_encoded-array>
|
|
Definition: a clock specifier describing the clock required for
|
|
enabling and disabling SNVS LP RTC.
|
|
|
|
- clock-names
|
|
Usage: optional, required if SNVS LP RTC requires explicit
|
|
enablement of clocks
|
|
Value type: <string>
|
|
Definition: clock name string should be "snvs-rtc".
|
|
|
|
EXAMPLE
|
|
sec_mon_rtc_lp@1 {
|
|
compatible = "fsl,sec-v4.0-mon-rtc-lp";
|
|
interrupts = <93 2>;
|
|
regmap = <&snvs>;
|
|
offset = <0x34>;
|
|
clocks = <&clks IMX7D_SNVS_CLK>;
|
|
clock-names = "snvs-rtc";
|
|
};
|
|
|
|
=====================================================================
|
|
System ON/OFF key driver
|
|
|
|
The snvs-pwrkey is designed to enable POWER key function which controlled
|
|
by SNVS ONOFF, the driver can report the status of POWER key and wakeup
|
|
system if pressed after system suspend.
|
|
|
|
- compatible:
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Mush include "fsl,sec-v4.0-pwrkey".
|
|
|
|
- interrupts:
|
|
Usage: required
|
|
Value type: <prop_encoded-array>
|
|
Definition: The SNVS ON/OFF interrupt number to the CPU(s).
|
|
|
|
- linux,keycode:
|
|
Usage: option
|
|
Value type: <int>
|
|
Definition: Keycode to emit, KEY_POWER by default.
|
|
|
|
- wakeup-source:
|
|
Usage: option
|
|
Value type: <boo>
|
|
Definition: Button can wake-up the system.
|
|
|
|
- regmap:
|
|
Usage: required:
|
|
Value type: <phandle>
|
|
Definition: this is phandle to the register map node.
|
|
|
|
EXAMPLE:
|
|
snvs-pwrkey@020cc000 {
|
|
compatible = "fsl,sec-v4.0-pwrkey";
|
|
regmap = <&snvs>;
|
|
interrupts = <0 4 0x4>
|
|
linux,keycode = <116>; /* KEY_POWER */
|
|
wakeup-source;
|
|
};
|
|
|
|
=====================================================================
|
|
FULL EXAMPLE
|
|
|
|
crypto: crypto@300000 {
|
|
compatible = "fsl,sec-v4.0";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
reg = <0x300000 0x10000>;
|
|
ranges = <0 0x300000 0x10000>;
|
|
interrupt-parent = <&mpic>;
|
|
interrupts = <92 2>;
|
|
|
|
sec_jr0: jr@1000 {
|
|
compatible = "fsl,sec-v4.0-job-ring";
|
|
reg = <0x1000 0x1000>;
|
|
interrupt-parent = <&mpic>;
|
|
interrupts = <88 2>;
|
|
};
|
|
|
|
sec_jr1: jr@2000 {
|
|
compatible = "fsl,sec-v4.0-job-ring";
|
|
reg = <0x2000 0x1000>;
|
|
interrupt-parent = <&mpic>;
|
|
interrupts = <89 2>;
|
|
};
|
|
|
|
sec_jr2: jr@3000 {
|
|
compatible = "fsl,sec-v4.0-job-ring";
|
|
reg = <0x3000 0x1000>;
|
|
interrupt-parent = <&mpic>;
|
|
interrupts = <90 2>;
|
|
};
|
|
|
|
sec_jr3: jr@4000 {
|
|
compatible = "fsl,sec-v4.0-job-ring";
|
|
reg = <0x4000 0x1000>;
|
|
interrupt-parent = <&mpic>;
|
|
interrupts = <91 2>;
|
|
};
|
|
|
|
rtic@6000 {
|
|
compatible = "fsl,sec-v4.0-rtic";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
reg = <0x6000 0x100>;
|
|
ranges = <0x0 0x6100 0xe00>;
|
|
|
|
rtic_a: rtic-a@0 {
|
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
|
reg = <0x00 0x20 0x100 0x80>;
|
|
};
|
|
|
|
rtic_b: rtic-b@20 {
|
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
|
reg = <0x20 0x20 0x200 0x80>;
|
|
};
|
|
|
|
rtic_c: rtic-c@40 {
|
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
|
reg = <0x40 0x20 0x300 0x80>;
|
|
};
|
|
|
|
rtic_d: rtic-d@60 {
|
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
|
reg = <0x60 0x20 0x500 0x80>;
|
|
};
|
|
};
|
|
};
|
|
|
|
sec_mon: sec_mon@314000 {
|
|
compatible = "fsl,sec-v4.0-mon";
|
|
reg = <0x314000 0x1000>;
|
|
ranges = <0 0x314000 0x1000>;
|
|
|
|
sec_mon_rtc_lp@34 {
|
|
compatible = "fsl,sec-v4.0-mon-rtc-lp";
|
|
regmap = <&sec_mon>;
|
|
offset = <0x34>;
|
|
interrupts = <93 2>;
|
|
clocks = <&clks IMX7D_SNVS_CLK>;
|
|
clock-names = "snvs-rtc";
|
|
};
|
|
|
|
snvs-pwrkey@020cc000 {
|
|
compatible = "fsl,sec-v4.0-pwrkey";
|
|
regmap = <&sec_mon>;
|
|
interrupts = <0 4 0x4>;
|
|
linux,keycode = <116>; /* KEY_POWER */
|
|
wakeup-source;
|
|
};
|
|
};
|
|
|
|
=====================================================================
|