| * ARM Secure world bindings |
| |
| ARM CPUs with TrustZone support have two distinct address spaces, |
| "Normal" and "Secure". Most devicetree consumers (including the Linux |
| kernel) are not TrustZone aware and run entirely in either the Normal |
| world or the Secure world. However some devicetree consumers are |
| TrustZone aware and need to be able to determine whether devices are |
| visible only in the Secure address space, only in the Normal address |
| space, or visible in both. (One example of that situation would be a |
| virtual machine which boots Secure firmware and wants to tell the |
| firmware about the layout of the machine via devicetree.) |
| |
| The general principle of the naming scheme for Secure world bindings |
| is that any property that needs a different value in the Secure world |
| can be supported by prefixing the property name with "secure-". So for |
| instance "secure-foo" would override "foo". For property names with |
| a vendor prefix, the Secure variant of "vendor,foo" would be |
| "vendor,secure-foo". If there is no "secure-" property then the Secure |
| world value is the same as specified for the Normal world by the |
| non-prefixed property. However, only the properties listed below may |
| validly have "secure-" versions; this list will be enlarged on a |
| case-by-case basis. |
| |
| Defining the bindings in this way means that a device tree which has |
| been annotated to indicate the presence of Secure-only devices can |
| still be processed unmodified by existing Non-secure software (and in |
| particular by the kernel). |
| |
| Note that it is still valid for bindings intended for purely Secure |
| world consumers (like kernels that run entirely in Secure) to simply |
| describe the view of Secure world using the standard bindings. These |
| secure- bindings only need to be used where both the Secure and Normal |
| world views need to be described in a single device tree. |
| |
| Valid Secure world properties |
| ----------------------------- |
| |
| - secure-status : specifies whether the device is present and usable |
| in the secure world. The combination of this with "status" allows |
| the various possible combinations of device visibility to be |
| specified. If "secure-status" is not specified it defaults to the |
| same value as "status"; if "status" is not specified either then |
| both default to "okay". This means the following combinations are |
| possible: |
| |
| /* Neither specified: default to visible in both S and NS */ |
| secure-status = "okay"; /* visible in both */ |
| status = "okay"; /* visible in both */ |
| status = "okay"; secure-status = "okay"; /* visible in both */ |
| secure-status = "disabled"; /* NS-only */ |
| status = "okay"; secure-status = "disabled"; /* NS-only */ |
| status = "disabled"; secure-status = "okay"; /* S-only */ |
| status = "disabled"; /* disabled in both */ |
| status = "disabled"; secure-status = "disabled"; /* disabled in both */ |
| |
| The secure-chosen node |
| ---------------------- |
| |
| Similar to the /chosen node which serves as a place for passing data |
| between firmware and the operating system, the /secure-chosen node may |
| be used to pass data to the Secure OS. Only the properties defined |
| below may appear in the /secure-chosen node. |
| |
| - stdout-path : specifies the device to be used by the Secure OS for |
| its console output. The syntax is the same as for /chosen/stdout-path. |
| If the /secure-chosen node exists but the stdout-path property is not |
| present, the Secure OS should not perform any console output. If |
| /secure-chosen does not exist, the Secure OS should use the value of |
| /chosen/stdout-path instead (that is, use the same device as the |
| Normal world OS). |