blob: d5fc569b05a26ad4745d87aedebb852f950f4050 [file] [log] [blame]
RSS provisioning
================
The LifeCycle Manager controls access to the RSS OTP, and includes a
state-machine that controls Lifecycle-state transitions. The LCM is derived from
the OTP management and state machine components of the CryptoCell-3XX series
accelerators, and will be familiar to those who have worked with them.
When the chip hasn't been provisioned, the OTP is blank, which means the LCM is
in "Virgin" Test/Production mode "TP mode" state. The first step for
provisioning must be to set the LCM to either test-chip mode "TCI" or
production-chip mode "PCI". In TCI mode the RTL key is masked to avoid
disclosure, several OTP fields are changed from write-only to read-write, to aid
in debugging, and debugging is not limited in secure provisioning mode.
Once the TP mode has been set, the chip is then is Chip Manufacturer
provisioning state "CM". This mode is intended for the provisioning of the HUK,
GUK, CM provisioning key, CM code-encryption key, the root-of-trust public key
and the CM config. To provision these fields, The firmware must first receive a
provisioning bundle via a side-band channel (UART or debug interface). This
bundle either contains just the keys, or more usually the keys and also
provisioning code. The chip must then enter secure provisioning mode by setting
the SP_ENABLE register. This causes a reset (but does not clear the RSS SRAMs),
and allows access to the RTL key by exporting it to the KMU. The RSS must then
decrypt and authenticate the bundle using the RTL key. Under TCI mode the RTL
key is zeroed, so encryption and signing must use a zeroed key. Once the CM
provisioning bundle has been unpacked, run if it contains code, and the CM
values have been set. The RSS must be cold-reset.
After the cold reset, the RSS will then be in Device Manufacturer provisioning
state "DM". This state is designed to provision the DM provisioning key, the DM
code-encryption key and the DM config. The procedure follows the same steps as
the CM provisioning flow, with the exception that the bundle will now be
encrypted and signed using the CM provisioning key. Once the provisioning bundle
has been unpacked/run, the RSS must be cold-reset.
After the cold reset, the device will now be in Secure Enable "SE" mode. Debug
may be limited based on the hardware DCU mask for SE state. Provisioning will
not be run on boot.
--------------
*Copyright (c) 2022, Arm Limited. All rights reserved.*