PSCI

PSCI is the Power State Coordination Interface on various ARM-based devices. It defines a standard interface for power management, designed to work across various operating systems and privilege levels.

See:
 * Linux kernel documentation on PSCI
 * ARM Infocenter document DEN 0022C

= U-Boot and PSCI =

Boot modes
On architectures that support it (e.g. sun7i), recent mainline U-Boot allows booting in two different modes: secure ("sec", SVC) and non-secure ("nonsec", HYP). It's important to note that "secure" mode is more restrictive, and the PSCI provided by U-Boot is currently only available in non-secure boot mode.

In standard U-Boot configuration (CONFIG_ARMV7_NONSEC set, and CONFIG_ARMV7_BOOT_SEC_DEFAULT absent) the non-secure (or "hypervisor") boot mode will be the default for these platforms. This mode will cause U-Boot to provide the PSCI firmware and corresponding device tree nodes automatically.

The boot mode can also be specified by explicitly setting the bootm_boot_mode environment variable.

see: http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/cpu/armv7/Kconfig, TrustZone

Mainline kernel
With some combinations of mainline kernel version and architecture, PSCI may be required for SMP (i.e. to bring up more than one CPU). For example Linux 3.19.x and sun7i/A20 have been observed to show this behaviour. If the Linux kernel fails to bring up secondary core(s), you might want to double-check the boot mode and presence of the /psci node in the device tree.

To verify the actual boot mode, you can also check the mainline kernel boot messages. Search for a line that says CPU: All CPU(s) started in  mode. where  will be SVC for secure, and HYP for non-secure boot mode.

3.4.x kernels
Older kernels might not support non-secure boot mode, and thus may require the bootm_boot_mode=sec setting instead.