Skip to content

Commit 79b2e77

Browse files
hakonfamnordicjm
authored andcommitted
doc: ironside: improve booting chapter
Ref: NCSDK-NONE Signed-off-by: Håkon Amundsen <[email protected]>
1 parent fc8dc6f commit 79b2e77

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_ironside.rst

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,8 @@ To protect the nRF54H20 SoC in a production-ready device, you must enable the fo
670670
It blocks all `ERASEALL` operations on NVR0, preserving UICR settings even if an attacker attempts a full-chip erase.
671671

672672

673+
.. _ug_nrf54h20_ironside_se_boot_report:
674+
673675
IronSide boot report
674676
********************
675677

@@ -728,24 +730,33 @@ This data is suitable as a source of initial entropy.
728730

729731
.. _ironside_se_booting:
730732

731-
Booting of other domains
733+
Booting of local domains
732734
************************
733735

734-
|ISE| boots the System Controller core first, followed by the application core, in that order.
735-
When booting the application core, |ISE| does the following:
736+
This section describes the default boot flow used by |ISE|.
737+
For information about the alternative boot flow that uses the secondary firmware, see :ref:`ug_nrf54h20_ironside_se_secondary_firmware`.
738+
739+
|ISE| boots only the application core CPU.
740+
The application core then triggers the boot of other local domain CPUs, such as the radio core, through the :ref:`ug_nrf54h20_ironside_se_cpuconf_service`.
741+
742+
Application domain boot sequence
743+
================================
744+
745+
When booting the application domain, |ISE| performs the following operations:
746+
747+
* Sets the processor's vector table address to the start of the application-owned memory region.
748+
* Verifies for firmware availability by reading the reset vector from the second 32-bit word of the vector table and comparing it to the erased value (``0xFFFFFFFF``).
749+
* Sets the secure vector table offset register (INITSVTOR) to point to the vector table address.
750+
* Enables the CPU with the appropriate start mode:
751+
752+
* |ISE| enables the CPU in halted mode if any of the following conditions are met:
736753

737-
* Sets the application domain's INITSVTOR to the first 32-bit word of the application-owned memory.
738-
* Reads the reset vector from the second 32-bit word of the application-owned memory.
739-
* If the reset vector is set to 0xFFFFFFFF, sets CTRL_AP.BOOTSTATUS.BOOTERROR to indicate that no firmware is programmed.
740-
* If any other error is encountered during initialization, sets CTRL_AP.BOOTSTATUS.BOOTERROR accordingly.
741-
* If CTRL_AP.BOOTSTATUS.BOOTERROR is non-zero (meaning an invalid UICR configuration is detected), sets the application domain's CPUWAIT to 1; otherwise, sets it to 0.
742-
* Sets the application domain's CPUSTART to 1.
743-
* Stops the allocation procedure.
744-
* Updates the boot report to indicate the UICR entry (and, if applicable, the array index) that triggered the failure.
745-
* Sets CTRL_AP.BOOTSTATUS.BOOTERROR to indicate the source of the error.
746-
* Starts the application core with application domain's CPUWAIT = 1 (halted mode).
754+
* No firmware is available.
755+
* Boot errors occurred.
756+
* The ``DEBUGWAIT`` boot command was issued.
757+
* Otherwise, |ISE| enables and starts the CPU normally.
747758

748-
This allows the error report to be read by a debugger, if the device is not protected.
759+
* Updates :ref:`CTRL_AP.BOOTSTATUS <ug_nrf54h20_ironside_se_bootstatus_register_format>` and writes the :ref:`boot report <ug_nrf54h20_ironside_se_boot_report>` to reflect any boot errors encountered during the initialization process.
749760

750761
.. _ug_nrf54h20_ironside_se_secondary_firmware:
751762

@@ -824,6 +835,7 @@ For details about the CPUCONF peripheral, refer to the nRF54H20 SoC datasheet.
824835

825836
|ISE| is updated by the Secure Domain ROM (SDROM), which performs the update operation when triggered by a set of SICR registers.
826837
SDROM verifies and copies the update candidate specified through these registers.
838+
SDROM requires the |ISE| update to be located in MRAM.
827839

828840
|ISE| exposes an update service that allows local domains to trigger the update process by indirectly writing to the relevant SICR registers.
829841

@@ -864,8 +876,8 @@ When using the PSA Crypto API to operate on keys, the storage region specified b
864876

865877
This ensures that cryptographic keys are stored in the dedicated secure storage region rather than in regular application memory.
866878

867-
Secure storage through PSA Internal Trusted Storage (ITS) API
868-
=============================================================
879+
Secure storage through PSA ITS API
880+
==================================
869881

870882
When using the PSA ITS API for storing general secure data, the storage region specified by ``UICR.SECURESTORAGE.ITS`` is used automatically.
871883
No special configuration is required for PSA ITS operations, as they inherently use the secure storage when available.

0 commit comments

Comments
 (0)