docs: add documentation for entry_point_info

Change-Id: I20b5f2cf70bfff09126f3c0645f40d3e410a4c70
Signed-off-by: Harrison Mutai <harrison.mutai@arm.com>
This commit is contained in:
Harrison Mutai 2024-01-30 14:21:12 +00:00
parent eff1da2aa3
commit 2839a3c405

View file

@ -645,6 +645,35 @@ on entry, these should be enabled during ``bl31_plat_arch_setup()``.
Data structures used in the BL31 cold boot interface
''''''''''''''''''''''''''''''''''''''''''''''''''''
In the cold boot flow, ``entry_point_info`` is used to represent the execution
state of an image; that is, the state of general purpose registers, PC, and
SPSR.
There are two variants of this structure, for AArch64:
.. code:: c
typedef struct entry_point_info {
param_header_t h;
uintptr_t pc;
uint32_t spsr;
aapcs64_params_t args;
}
and, AArch32:
.. code:: c
typedef struct entry_point_info {
param_header_t h;
uintptr_t pc;
uint32_t spsr;
uintptr_t lr_svc;
aapcs32_params_t args;
} entry_point_info_t;
These structures are designed to support compatibility and independent
evolution of the structures and the firmware images. For example, a version of
BL31 that can interpret the BL3x image information from different versions of
@ -662,13 +691,17 @@ BL31 to detect which information is present and respond appropriately. The
uint8_t type; /* type of the structure */
uint8_t version; /* version of this structure */
uint16_t size; /* size of this structure in bytes */
uint32_t attr; /* attributes: unused bits SBZ */
uint32_t attr; /* attributes */
} param_header_t;
The structures using this format are ``entry_point_info``, ``image_info`` and
``bl31_params``. The code that allocates and populates these structures must set
the header fields appropriately, and the ``SET_PARAM_HEAD()`` a macro is defined
to simplify this action.
In `entry_point_info`, Bits 0 and 5 of ``attr`` field are used to encode the
security state; in other words, whether the image is to be executed in Secure,
Non-Secure, or Realm mode.
Other structures using this format are ``image_info`` and ``bl31_params``. The
code that allocates and populates these structures must set the header fields
appropriately, the ``SET_PARAM_HEAD()`` macro is defined to simplify this
action.
Required CPU state for BL31 Warm boot initialization
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^