1<!DOCTYPE html> 2<html class="writer-html5" lang="en" > 3<head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <title>5. Coding Guidelines — Trusted Firmware-A documentation</title> 7 <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> 8 <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> 9 <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> 10 <!--[if lt IE 9]> 11 <script src="../_static/js/html5shiv.min.js"></script> 12 <![endif]--> 13 14 <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> 15 <script src="../_static/jquery.js"></script> 16 <script src="../_static/underscore.js"></script> 17 <script src="../_static/doctools.js"></script> 18 <script src="../_static/js/theme.js"></script> 19 <link rel="index" title="Index" href="../genindex.html" /> 20 <link rel="search" title="Search" href="../search.html" /> 21 <link rel="next" title="6. Contributor’s Guide" href="contributing.html" /> 22 <link rel="prev" title="4. Coding Style" href="coding-style.html" /> 23</head> 24 25<body class="wy-body-for-nav"> 26 <div class="wy-grid-for-nav"> 27 <nav data-toggle="wy-nav-shift" class="wy-nav-side"> 28 <div class="wy-side-scroll"> 29 <div class="wy-side-nav-search" > 30 <a href="../index.html" class="icon icon-home"> Trusted Firmware-A 31 <img src="../_static/TrustedFirmware-Logo_standard-white.png" class="logo" alt="Logo"/> 32 </a> 33<div role="search"> 34 <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> 35 <input type="text" name="q" placeholder="Search docs" /> 36 <input type="hidden" name="check_keywords" value="yes" /> 37 <input type="hidden" name="area" value="default" /> 38 </form> 39</div> 40 </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> 41 <ul class="current"> 42<li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li> 43<li class="toctree-l1"><a class="reference internal" href="../about/index.html">About</a><ul> 44<li class="toctree-l2"><a class="reference internal" href="../about/features.html">1. Feature Overview</a><ul> 45<li class="toctree-l3"><a class="reference internal" href="../about/features.html#current-features">1.1. Current features</a></li> 46<li class="toctree-l3"><a class="reference internal" href="../about/features.html#still-to-come">1.2. Still to come</a></li> 47</ul> 48</li> 49<li class="toctree-l2"><a class="reference internal" href="../about/release-information.html">2. Release Processes</a><ul> 50<li class="toctree-l3"><a class="reference internal" href="../about/release-information.html#project-release-cadence">2.1. Project Release Cadence</a><ul> 51<li class="toctree-l4"><a class="reference internal" href="../about/release-information.html#upcoming-releases">2.1.1. Upcoming Releases</a></li> 52</ul> 53</li> 54<li class="toctree-l3"><a class="reference internal" href="../about/release-information.html#removal-of-deprecated-interfaces">2.2. Removal of Deprecated Interfaces</a></li> 55</ul> 56</li> 57<li class="toctree-l2"><a class="reference internal" href="../about/maintainers.html">3. Project Maintenance</a><ul> 58<li class="toctree-l3"><a class="reference internal" href="../about/maintainers.html#maintainers">3.1. Maintainers</a></li> 59<li class="toctree-l3"><a class="reference internal" href="../about/maintainers.html#code-owners">3.2. Code owners</a><ul> 60<li class="toctree-l4"><a class="reference internal" href="../about/maintainers.html#common-code">3.2.1. Common Code</a></li> 61<li class="toctree-l4"><a class="reference internal" href="../about/maintainers.html#drivers-libraries-and-framework-code">3.2.2. Drivers, Libraries and Framework Code</a></li> 62<li class="toctree-l4"><a class="reference internal" href="../about/maintainers.html#platform-ports">3.2.3. Platform Ports</a></li> 63<li class="toctree-l4"><a class="reference internal" href="../about/maintainers.html#secure-payloads-and-dispatchers">3.2.4. Secure Payloads and Dispatchers</a></li> 64<li class="toctree-l4"><a class="reference internal" href="../about/maintainers.html#tools">3.2.5. Tools</a></li> 65<li class="toctree-l4"><a class="reference internal" href="../about/maintainers.html#threat-model">3.2.6. Threat Model</a></li> 66<li class="toctree-l4"><a class="reference internal" href="../about/maintainers.html#conventional-changelog-extensions">3.2.7. Conventional Changelog Extensions</a></li> 67</ul> 68</li> 69</ul> 70</li> 71<li class="toctree-l2"><a class="reference internal" href="../about/contact.html">4. Support & Contact</a><ul> 72<li class="toctree-l3"><a class="reference internal" href="../about/contact.html#mailing-lists">4.1. Mailing Lists</a></li> 73<li class="toctree-l3"><a class="reference internal" href="../about/contact.html#open-tech-forum-call">4.2. Open Tech Forum Call</a></li> 74<li class="toctree-l3"><a class="reference internal" href="../about/contact.html#issue-tracker">4.3. Issue Tracker</a></li> 75<li class="toctree-l3"><a class="reference internal" href="../about/contact.html#arm-licensees">4.4. Arm Licensees</a></li> 76</ul> 77</li> 78<li class="toctree-l2"><a class="reference internal" href="../about/acknowledgements.html">5. Contributor Acknowledgements</a></li> 79</ul> 80</li> 81<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a><ul> 82<li class="toctree-l2"><a class="reference internal" href="../getting_started/prerequisites.html">1. Prerequisites</a><ul> 83<li class="toctree-l3"><a class="reference internal" href="../getting_started/prerequisites.html#build-host">1.1. Build Host</a></li> 84<li class="toctree-l3"><a class="reference internal" href="../getting_started/prerequisites.html#toolchain">1.2. Toolchain</a></li> 85<li class="toctree-l3"><a class="reference internal" href="../getting_started/prerequisites.html#software-and-libraries">1.3. Software and Libraries</a><ul> 86<li class="toctree-l4"><a class="reference internal" href="../getting_started/prerequisites.html#package-installation-linux">1.3.1. Package Installation (Linux)</a></li> 87</ul> 88</li> 89<li class="toctree-l3"><a class="reference internal" href="../getting_started/prerequisites.html#supporting-files">1.4. Supporting Files</a></li> 90<li class="toctree-l3"><a class="reference internal" href="../getting_started/prerequisites.html#getting-the-tf-a-source">1.5. Getting the TF-A Source</a><ul> 91<li class="toctree-l4"><a class="reference internal" href="../getting_started/prerequisites.html#additional-steps-for-contributors">1.5.1. Additional Steps for Contributors</a></li> 92</ul> 93</li> 94</ul> 95</li> 96<li class="toctree-l2"><a class="reference internal" href="../getting_started/docs-build.html">2. Building Documentation</a><ul> 97<li class="toctree-l3"><a class="reference internal" href="../getting_started/docs-build.html#prerequisites">2.1. Prerequisites</a></li> 98<li class="toctree-l3"><a class="reference internal" href="../getting_started/docs-build.html#building-rendered-documentation">2.2. Building rendered documentation</a></li> 99<li class="toctree-l3"><a class="reference internal" href="../getting_started/docs-build.html#building-rendered-documentation-from-a-container">2.3. Building rendered documentation from a container</a></li> 100</ul> 101</li> 102<li class="toctree-l2"><a class="reference internal" href="../getting_started/tools-build.html">3. Building Supporting Tools</a><ul> 103<li class="toctree-l3"><a class="reference internal" href="../getting_started/tools-build.html#building-and-using-the-fip-tool">3.1. Building and using the FIP tool</a></li> 104<li class="toctree-l3"><a class="reference internal" href="../getting_started/tools-build.html#building-the-certificate-generation-tool">3.2. Building the Certificate Generation Tool</a><ul> 105<li class="toctree-l4"><a class="reference internal" href="../getting_started/tools-build.html#building-the-firmware-encryption-tool">3.2.1. Building the Firmware Encryption Tool</a></li> 106</ul> 107</li> 108</ul> 109</li> 110<li class="toctree-l2"><a class="reference internal" href="../getting_started/initial-build.html">4. Performing an Initial Build</a></li> 111<li class="toctree-l2"><a class="reference internal" href="../getting_started/build-options.html">5. Build Options</a><ul> 112<li class="toctree-l3"><a class="reference internal" href="../getting_started/build-options.html#common-build-options">5.1. Common build options</a></li> 113<li class="toctree-l3"><a class="reference internal" href="../getting_started/build-options.html#gicv3-driver-options">5.2. GICv3 driver options</a></li> 114<li class="toctree-l3"><a class="reference internal" href="../getting_started/build-options.html#debugging-options">5.3. Debugging options</a></li> 115<li class="toctree-l3"><a class="reference internal" href="../getting_started/build-options.html#firmware-update-options">5.4. Firmware update options</a></li> 116</ul> 117</li> 118<li class="toctree-l2"><a class="reference internal" href="../getting_started/image-terminology.html">6. Image Terminology</a><ul> 119<li class="toctree-l3"><a class="reference internal" href="../getting_started/image-terminology.html#general-notes">6.1. General Notes</a></li> 120<li class="toctree-l3"><a class="reference internal" href="../getting_started/image-terminology.html#trusted-firmware-images">6.2. Trusted Firmware Images</a><ul> 121<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#ap-boot-rom-ap-bl1">6.2.1. AP Boot ROM: <code class="docutils literal notranslate"><span class="pre">AP_BL1</span></code></a></li> 122<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#ap-ram-firmware-ap-bl2">6.2.2. AP RAM Firmware: <code class="docutils literal notranslate"><span class="pre">AP_BL2</span></code></a></li> 123<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#el3-runtime-firmware-ap-bl31">6.2.3. EL3 Runtime Firmware: <code class="docutils literal notranslate"><span class="pre">AP_BL31</span></code></a></li> 124<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#secure-el1-payload-sp-ap-bl32">6.2.4. Secure-EL1 Payload (SP): <code class="docutils literal notranslate"><span class="pre">AP_BL32</span></code></a></li> 125<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#ap-normal-world-firmware-ap-bl33">6.2.5. AP Normal World Firmware: <code class="docutils literal notranslate"><span class="pre">AP_BL33</span></code></a></li> 126<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#other-ap-3rd-level-images-ap-bl3-xxx">6.2.6. Other AP 3rd level images: <code class="docutils literal notranslate"><span class="pre">AP_BL3_XXX</span></code></a></li> 127<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#realm-monitor-management-firmware-rmm">6.2.7. Realm Monitor Management Firmware: <code class="docutils literal notranslate"><span class="pre">RMM</span></code></a></li> 128<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#scp-boot-rom-scp-bl1-previously-bl0">6.2.8. SCP Boot ROM: <code class="docutils literal notranslate"><span class="pre">SCP_BL1</span></code> (previously <code class="docutils literal notranslate"><span class="pre">BL0</span></code>)</a></li> 129<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#scp-ram-firmware-scp-bl2-previously-bl3-0">6.2.9. SCP RAM Firmware: <code class="docutils literal notranslate"><span class="pre">SCP_BL2</span></code> (previously <code class="docutils literal notranslate"><span class="pre">BL3-0</span></code>)</a></li> 130</ul> 131</li> 132<li class="toctree-l3"><a class="reference internal" href="../getting_started/image-terminology.html#firmware-update-fwu-images">6.3. Firmware Update (FWU) Images</a><ul> 133<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#ap-firmware-update-boot-rom-ap-ns-bl1u">6.3.1. AP Firmware Update Boot ROM: <code class="docutils literal notranslate"><span class="pre">AP_NS_BL1U</span></code></a></li> 134<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#ap-firmware-update-config-ap-bl2u">6.3.2. AP Firmware Update Config: <code class="docutils literal notranslate"><span class="pre">AP_BL2U</span></code></a></li> 135<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#scp-firmware-update-config-scp-bl2u-previously-bl2-u0">6.3.3. SCP Firmware Update Config: <code class="docutils literal notranslate"><span class="pre">SCP_BL2U</span></code> (previously <code class="docutils literal notranslate"><span class="pre">BL2-U0</span></code>)</a></li> 136<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#ap-firmware-updater-ap-ns-bl2u-previously-bl3-u">6.3.4. AP Firmware Updater: <code class="docutils literal notranslate"><span class="pre">AP_NS_BL2U</span></code> (previously <code class="docutils literal notranslate"><span class="pre">BL3-U</span></code>)</a></li> 137</ul> 138</li> 139<li class="toctree-l3"><a class="reference internal" href="../getting_started/image-terminology.html#other-processor-firmware-images">6.4. Other Processor Firmware Images</a><ul> 140<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#mcp-boot-rom-mcp-bl1">6.4.1. MCP Boot ROM: <code class="docutils literal notranslate"><span class="pre">MCP_BL1</span></code></a></li> 141<li class="toctree-l4"><a class="reference internal" href="../getting_started/image-terminology.html#mcp-ram-firmware-mcp-bl2">6.4.2. MCP RAM Firmware: <code class="docutils literal notranslate"><span class="pre">MCP_BL2</span></code></a></li> 142</ul> 143</li> 144</ul> 145</li> 146<li class="toctree-l2"><a class="reference internal" href="../getting_started/porting-guide.html">7. Porting Guide</a><ul> 147<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#introduction">7.1. Introduction</a></li> 148<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#common-modifications">7.2. Common modifications</a></li> 149<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#common-mandatory-modifications">7.3. Common mandatory modifications</a><ul> 150<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#file-platform-def-h-mandatory">7.3.1. File : platform_def.h [mandatory]</a></li> 151<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#file-plat-macros-s-mandatory">7.3.2. File : plat_macros.S [mandatory]</a></li> 152</ul> 153</li> 154<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#handling-reset">7.4. Handling Reset</a><ul> 155<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-my-entrypoint-mandatory-when-programmable-reset-address-0">7.4.1. Function : plat_get_my_entrypoint() [mandatory when PROGRAMMABLE_RESET_ADDRESS == 0]</a></li> 156<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-secondary-cold-boot-setup-mandatory-when-cold-boot-single-cpu-0">7.4.2. Function : plat_secondary_cold_boot_setup() [mandatory when COLD_BOOT_SINGLE_CPU == 0]</a></li> 157<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-is-my-cpu-primary-mandatory-when-cold-boot-single-cpu-0">7.4.3. Function : plat_is_my_cpu_primary() [mandatory when COLD_BOOT_SINGLE_CPU == 0]</a></li> 158<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-platform-mem-init-mandatory">7.4.4. Function : platform_mem_init() [mandatory]</a></li> 159<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-rotpk-info">7.4.5. Function: plat_get_rotpk_info()</a></li> 160<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-nv-ctr">7.4.6. Function: plat_get_nv_ctr()</a></li> 161<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-set-nv-ctr">7.4.7. Function: plat_set_nv_ctr()</a></li> 162<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-set-nv-ctr2">7.4.8. Function: plat_set_nv_ctr2()</a></li> 163</ul> 164</li> 165<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#common-mandatory-function-modifications">7.5. Common mandatory function modifications</a><ul> 166<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-my-core-pos">7.5.1. Function : plat_my_core_pos()</a></li> 167<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-core-pos-by-mpidr">7.5.2. Function : plat_core_pos_by_mpidr()</a></li> 168<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-mbedtls-heap-when-trusted-board-boot-1">7.5.3. Function : plat_get_mbedtls_heap() [when TRUSTED_BOARD_BOOT == 1]</a></li> 169<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-enc-key-info-when-fw-enc-status-0-or-1">7.5.4. Function : plat_get_enc_key_info() [when FW_ENC_STATUS == 0 or 1]</a></li> 170<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-fwu-set-images-source-when-psa-fwu-support-1">7.5.5. Function : plat_fwu_set_images_source() [when PSA_FWU_SUPPORT == 1]</a></li> 171<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-fwu-set-metadata-image-source-when-psa-fwu-support-1">7.5.6. Function : plat_fwu_set_metadata_image_source() [when PSA_FWU_SUPPORT == 1]</a></li> 172</ul> 173</li> 174<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#common-optional-modifications">7.6. Common optional modifications</a><ul> 175<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-set-my-stack">7.6.1. Function : plat_set_my_stack()</a></li> 176<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-my-stack">7.6.2. Function : plat_get_my_stack()</a></li> 177<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-report-exception">7.6.3. Function : plat_report_exception()</a></li> 178<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-reset-handler">7.6.4. Function : plat_reset_handler()</a></li> 179<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-disable-acp">7.6.5. Function : plat_disable_acp()</a></li> 180<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-error-handler">7.6.6. Function : plat_error_handler()</a></li> 181<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-panic-handler">7.6.7. Function : plat_panic_handler()</a></li> 182<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-bl-image-load-info">7.6.8. Function : plat_get_bl_image_load_info()</a></li> 183<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-next-bl-params">7.6.9. Function : plat_get_next_bl_params()</a></li> 184<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-stack-protector-canary">7.6.10. Function : plat_get_stack_protector_canary()</a></li> 185<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-flush-next-bl-params">7.6.11. Function : plat_flush_next_bl_params()</a></li> 186<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-log-get-prefix">7.6.12. Function : plat_log_get_prefix()</a></li> 187<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-soc-version">7.6.13. Function : plat_get_soc_version()</a></li> 188<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-soc-revision">7.6.14. Function : plat_get_soc_revision()</a></li> 189<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-is-smccc-feature-available">7.6.15. Function : plat_is_smccc_feature_available()</a></li> 190<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-mboot-measure-image">7.6.16. Function : plat_mboot_measure_image()</a></li> 191</ul> 192</li> 193<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#modifications-specific-to-a-boot-loader-stage">7.7. Modifications specific to a Boot Loader stage</a></li> 194<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#boot-loader-stage-1-bl1">7.8. Boot Loader Stage 1 (BL1)</a><ul> 195<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-early-platform-setup-mandatory">7.8.1. Function : bl1_early_platform_setup() [mandatory]</a></li> 196<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-arch-setup-mandatory">7.8.2. Function : bl1_plat_arch_setup() [mandatory]</a></li> 197<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-platform-setup-mandatory">7.8.3. Function : bl1_platform_setup() [mandatory]</a></li> 198<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-sec-mem-layout-mandatory">7.8.4. Function : bl1_plat_sec_mem_layout() [mandatory]</a></li> 199<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-prepare-exit-optional">7.8.5. Function : bl1_plat_prepare_exit() [optional]</a></li> 200<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-set-ep-info-optional">7.8.6. Function : bl1_plat_set_ep_info() [optional]</a></li> 201<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-get-next-image-id-optional">7.8.7. Function : bl1_plat_get_next_image_id() [optional]</a></li> 202<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-get-image-desc-optional">7.8.8. Function : bl1_plat_get_image_desc() [optional]</a></li> 203<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-handle-pre-image-load-optional">7.8.9. Function : bl1_plat_handle_pre_image_load() [optional]</a></li> 204<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-handle-post-image-load-optional">7.8.10. Function : bl1_plat_handle_post_image_load() [optional]</a></li> 205<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-fwu-done-optional">7.8.11. Function : bl1_plat_fwu_done() [optional]</a></li> 206<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-mem-check-mandatory">7.8.12. Function : bl1_plat_mem_check() [mandatory]</a></li> 207<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-mboot-init-optional">7.8.13. Function : bl1_plat_mboot_init() [optional]</a></li> 208<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl1-plat-mboot-finish-optional">7.8.14. Function : bl1_plat_mboot_finish() [optional]</a></li> 209</ul> 210</li> 211<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#boot-loader-stage-2-bl2">7.9. Boot Loader Stage 2 (BL2)</a><ul> 212<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-early-platform-setup2-mandatory">7.9.1. Function : bl2_early_platform_setup2() [mandatory]</a></li> 213<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-plat-arch-setup-mandatory">7.9.2. Function : bl2_plat_arch_setup() [mandatory]</a></li> 214<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-platform-setup-mandatory">7.9.3. Function : bl2_platform_setup() [mandatory]</a></li> 215<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-plat-handle-pre-image-load-optional">7.9.4. Function : bl2_plat_handle_pre_image_load() [optional]</a></li> 216<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-plat-handle-post-image-load-optional">7.9.5. Function : bl2_plat_handle_post_image_load() [optional]</a></li> 217<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-plat-preload-setup-optional">7.9.6. Function : bl2_plat_preload_setup [optional]</a></li> 218<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-try-next-boot-source-optional">7.9.7. Function : plat_try_next_boot_source() [optional]</a></li> 219</ul> 220</li> 221<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#boot-loader-stage-2-bl2-at-el3">7.10. Boot Loader Stage 2 (BL2) at EL3</a><ul> 222<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-el3-early-platform-setup-mandatory">7.10.1. Function : bl2_el3_early_platform_setup() [mandatory]</a></li> 223<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-el3-plat-arch-setup-mandatory">7.10.2. Function : bl2_el3_plat_arch_setup() [mandatory]</a></li> 224<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-el3-plat-prepare-exit-optional">7.10.3. Function : bl2_el3_plat_prepare_exit() [optional]</a></li> 225</ul> 226</li> 227<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#fwu-boot-loader-stage-2-bl2u">7.11. FWU Boot Loader Stage 2 (BL2U)</a><ul> 228<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2u-early-platform-setup-mandatory">7.11.1. Function : bl2u_early_platform_setup() [mandatory]</a></li> 229<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2u-plat-arch-setup-mandatory">7.11.2. Function : bl2u_plat_arch_setup() [mandatory]</a></li> 230<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2u-platform-setup-mandatory">7.11.3. Function : bl2u_platform_setup() [mandatory]</a></li> 231<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2u-plat-handle-scp-bl2u-optional">7.11.4. Function : bl2u_plat_handle_scp_bl2u() [optional]</a></li> 232<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-plat-mboot-init-optional">7.11.5. Function : bl2_plat_mboot_init() [optional]</a></li> 233<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl2-plat-mboot-finish-optional">7.11.6. Function : bl2_plat_mboot_finish() [optional]</a></li> 234</ul> 235</li> 236<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#boot-loader-stage-3-1-bl31">7.12. Boot Loader Stage 3-1 (BL31)</a><ul> 237<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl31-early-platform-setup2-mandatory">7.12.1. Function : bl31_early_platform_setup2() [mandatory]</a></li> 238<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl31-plat-arch-setup-mandatory">7.12.2. Function : bl31_plat_arch_setup() [mandatory]</a></li> 239<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl31-platform-setup-mandatory">7.12.3. Function : bl31_platform_setup() [mandatory]</a></li> 240<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl31-plat-runtime-setup-optional">7.12.4. Function : bl31_plat_runtime_setup() [optional]</a></li> 241<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl31-plat-get-next-image-ep-info-mandatory">7.12.5. Function : bl31_plat_get_next_image_ep_info() [mandatory]</a></li> 242<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-bl31-plat-enable-mmu-optional">7.12.6. Function : bl31_plat_enable_mmu [optional]</a></li> 243<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-init-apkey-optional">7.12.7. Function : plat_init_apkey [optional]</a></li> 244<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-syscnt-freq2-mandatory">7.12.8. Function : plat_get_syscnt_freq2() [mandatory]</a></li> 245<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-arm-set-twedel-scr-el3-optional">7.12.9. Function : plat_arm_set_twedel_scr_el3() [optional]</a></li> 246<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#define-plat-percpu-bakery-lock-size-optional">7.12.10. #define : PLAT_PERCPU_BAKERY_LOCK_SIZE [optional]</a></li> 247<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#sdei-porting-requirements">7.12.11. SDEI porting requirements</a></li> 248<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#trng-porting-requirements">7.12.12. TRNG porting requirements</a></li> 249</ul> 250</li> 251<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#power-state-coordination-interface-in-bl31">7.13. Power State Coordination Interface (in BL31)</a><ul> 252<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-psci-stat-accounting-start-optional">7.13.1. Function : plat_psci_stat_accounting_start() [optional]</a></li> 253<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-psci-stat-accounting-stop-optional">7.13.2. Function : plat_psci_stat_accounting_stop() [optional]</a></li> 254<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-psci-stat-get-residency-optional">7.13.3. Function : plat_psci_stat_get_residency() [optional]</a></li> 255<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-target-pwr-state-optional">7.13.4. Function : plat_get_target_pwr_state() [optional]</a></li> 256<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-get-power-domain-tree-desc-mandatory">7.13.5. Function : plat_get_power_domain_tree_desc() [mandatory]</a></li> 257<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-setup-psci-ops-mandatory">7.13.6. Function : plat_setup_psci_ops() [mandatory]</a></li> 258</ul> 259</li> 260<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#interrupt-management-framework-in-bl31">7.14. Interrupt Management framework (in BL31)</a><ul> 261<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-interrupt-type-to-line-mandatory">7.14.1. Function : plat_interrupt_type_to_line() [mandatory]</a></li> 262<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-ic-get-pending-interrupt-type-mandatory">7.14.2. Function : plat_ic_get_pending_interrupt_type() [mandatory]</a></li> 263<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-ic-get-pending-interrupt-id-mandatory">7.14.3. Function : plat_ic_get_pending_interrupt_id() [mandatory]</a></li> 264<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-ic-acknowledge-interrupt-mandatory">7.14.4. Function : plat_ic_acknowledge_interrupt() [mandatory]</a></li> 265<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-ic-end-of-interrupt-mandatory">7.14.5. Function : plat_ic_end_of_interrupt() [mandatory]</a></li> 266<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-ic-get-interrupt-type-mandatory">7.14.6. Function : plat_ic_get_interrupt_type() [mandatory]</a></li> 267</ul> 268</li> 269<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#crash-reporting-mechanism-in-bl31">7.15. Crash Reporting mechanism (in BL31)</a><ul> 270<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-crash-console-init-mandatory">7.15.1. Function : plat_crash_console_init [mandatory]</a></li> 271<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-crash-console-putc-mandatory">7.15.2. Function : plat_crash_console_putc [mandatory]</a></li> 272<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-crash-console-flush-mandatory">7.15.3. Function : plat_crash_console_flush [mandatory]</a></li> 273</ul> 274</li> 275<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#external-abort-handling-and-ras-support">7.16. External Abort handling and RAS Support</a><ul> 276<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-ea-handler">7.16.1. Function : plat_ea_handler</a></li> 277<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-handle-uncontainable-ea">7.16.2. Function : plat_handle_uncontainable_ea</a></li> 278<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-handle-double-fault">7.16.3. Function : plat_handle_double_fault</a></li> 279<li class="toctree-l4"><a class="reference internal" href="../getting_started/porting-guide.html#function-plat-handle-el3-ea">7.16.4. Function : plat_handle_el3_ea</a></li> 280</ul> 281</li> 282<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#build-flags">7.17. Build flags</a></li> 283<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#platform-include-paths">7.18. Platform include paths</a></li> 284<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#c-library">7.19. C Library</a></li> 285<li class="toctree-l3"><a class="reference internal" href="../getting_started/porting-guide.html#storage-abstraction-layer">7.20. Storage abstraction layer</a></li> 286</ul> 287</li> 288<li class="toctree-l2"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html">8. PSCI Library Integration guide for Armv8-A AArch32 systems</a><ul> 289<li class="toctree-l3"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#generic-call-sequence-for-psci-library-interface-aarch32">8.1. Generic call sequence for PSCI Library interface (AArch32)</a></li> 290<li class="toctree-l3"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#psci-cpu-context-management">8.2. PSCI CPU context management</a></li> 291<li class="toctree-l3"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#psci-library-interface">8.3. PSCI Library Interface</a><ul> 292<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#interface-psci-setup">8.3.1. Interface : psci_setup()</a></li> 293<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#interface-psci-prepare-next-non-secure-ctx">8.3.2. Interface : psci_prepare_next_non_secure_ctx()</a></li> 294<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#interface-psci-register-spd-pm-hook">8.3.3. Interface : psci_register_spd_pm_hook()</a></li> 295<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#interface-psci-smc-handler">8.3.4. Interface : psci_smc_handler()</a></li> 296<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#interface-psci-warmboot-entrypoint">8.3.5. Interface : psci_warmboot_entrypoint()</a></li> 297</ul> 298</li> 299<li class="toctree-l3"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#el3-runtime-software-dependencies">8.4. EL3 Runtime Software dependencies</a><ul> 300<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#general-dependencies">8.4.1. General dependencies</a></li> 301<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#cpu-context-management-api">8.4.2. CPU Context management API</a></li> 302<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#platform-api">8.4.3. Platform API</a></li> 303<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#secure-payload-power-management-callback">8.4.4. Secure payload power management callback</a></li> 304<li class="toctree-l4"><a class="reference internal" href="../getting_started/psci-lib-integration-guide.html#cpu-operations">8.4.5. CPU operations</a></li> 305</ul> 306</li> 307</ul> 308</li> 309<li class="toctree-l2"><a class="reference internal" href="../getting_started/rt-svc-writers-guide.html">9. EL3 Runtime Service Writer’s Guide</a><ul> 310<li class="toctree-l3"><a class="reference internal" href="../getting_started/rt-svc-writers-guide.html#introduction">9.1. Introduction</a></li> 311<li class="toctree-l3"><a class="reference internal" href="../getting_started/rt-svc-writers-guide.html#owning-entities-call-types-and-function-ids">9.2. Owning Entities, Call Types and Function IDs</a></li> 312<li class="toctree-l3"><a class="reference internal" href="../getting_started/rt-svc-writers-guide.html#getting-started">9.3. Getting started</a></li> 313<li class="toctree-l3"><a class="reference internal" href="../getting_started/rt-svc-writers-guide.html#registering-a-runtime-service">9.4. Registering a runtime service</a></li> 314<li class="toctree-l3"><a class="reference internal" href="../getting_started/rt-svc-writers-guide.html#initializing-a-runtime-service">9.5. Initializing a runtime service</a></li> 315<li class="toctree-l3"><a class="reference internal" href="../getting_started/rt-svc-writers-guide.html#handling-runtime-service-requests">9.6. Handling runtime service requests</a></li> 316<li class="toctree-l3"><a class="reference internal" href="../getting_started/rt-svc-writers-guide.html#services-that-contain-multiple-sub-services">9.7. Services that contain multiple sub-services</a></li> 317<li class="toctree-l3"><a class="reference internal" href="../getting_started/rt-svc-writers-guide.html#secure-el1-payload-dispatcher-service-spd">9.8. Secure-EL1 Payload Dispatcher service (SPD)</a></li> 318</ul> 319</li> 320</ul> 321</li> 322<li class="toctree-l1 current"><a class="reference internal" href="index.html">Processes & Policies</a><ul class="current"> 323<li class="toctree-l2"><a class="reference internal" href="security.html">1. Security Handling</a><ul> 324<li class="toctree-l3"><a class="reference internal" href="security.html#security-disclosures">1.1. Security Disclosures</a></li> 325<li class="toctree-l3"><a class="reference internal" href="security.html#found-a-security-issue">1.2. Found a Security Issue?</a></li> 326<li class="toctree-l3"><a class="reference internal" href="security.html#attribution">1.3. Attribution</a></li> 327<li class="toctree-l3"><a class="reference internal" href="security.html#security-advisories">1.4. Security Advisories</a></li> 328</ul> 329</li> 330<li class="toctree-l2"><a class="reference internal" href="platform-compatibility-policy.html">2. Platform Compatibility Policy</a><ul> 331<li class="toctree-l3"><a class="reference internal" href="platform-compatibility-policy.html#introduction">2.1. Introduction</a></li> 332<li class="toctree-l3"><a class="reference internal" href="platform-compatibility-policy.html#id1">2.2. Platform compatibility policy</a></li> 333</ul> 334</li> 335<li class="toctree-l2"><a class="reference internal" href="commit-style.html">3. Commit Style</a><ul> 336<li class="toctree-l3"><a class="reference internal" href="commit-style.html#adding-scopes">3.1. Adding Scopes</a></li> 337<li class="toctree-l3"><a class="reference internal" href="commit-style.html#mandated-trailers">3.2. Mandated Trailers</a></li> 338</ul> 339</li> 340<li class="toctree-l2"><a class="reference internal" href="coding-style.html">4. Coding Style</a><ul> 341<li class="toctree-l3"><a class="reference internal" href="coding-style.html#file-encoding">4.1. File Encoding</a></li> 342<li class="toctree-l3"><a class="reference internal" href="coding-style.html#language">4.2. Language</a></li> 343<li class="toctree-l3"><a class="reference internal" href="coding-style.html#c-language-standard">4.3. C Language Standard</a></li> 344<li class="toctree-l3"><a class="reference internal" href="coding-style.html#misra-compliance">4.4. MISRA Compliance</a></li> 345<li class="toctree-l3"><a class="reference internal" href="coding-style.html#indentation">4.5. Indentation</a></li> 346<li class="toctree-l3"><a class="reference internal" href="coding-style.html#spacing">4.6. Spacing</a></li> 347<li class="toctree-l3"><a class="reference internal" href="coding-style.html#line-length">4.7. Line Length</a></li> 348<li class="toctree-l3"><a class="reference internal" href="coding-style.html#blank-lines">4.8. Blank Lines</a></li> 349<li class="toctree-l3"><a class="reference internal" href="coding-style.html#braces">4.9. Braces</a><ul> 350<li class="toctree-l4"><a class="reference internal" href="coding-style.html#opening-brace-placement">4.9.1. Opening Brace Placement</a></li> 351<li class="toctree-l4"><a class="reference internal" href="coding-style.html#conditional-statement-bodies">4.9.2. Conditional Statement Bodies</a></li> 352</ul> 353</li> 354<li class="toctree-l3"><a class="reference internal" href="coding-style.html#naming">4.10. Naming</a><ul> 355<li class="toctree-l4"><a class="reference internal" href="coding-style.html#functions">4.10.1. Functions</a></li> 356<li class="toctree-l4"><a class="reference internal" href="coding-style.html#local-variables-and-parameters">4.10.2. Local Variables and Parameters</a></li> 357<li class="toctree-l4"><a class="reference internal" href="coding-style.html#preprocessor-macros">4.10.3. Preprocessor Macros</a></li> 358</ul> 359</li> 360<li class="toctree-l3"><a class="reference internal" href="coding-style.html#function-attributes">4.11. Function Attributes</a></li> 361<li class="toctree-l3"><a class="reference internal" href="coding-style.html#alignment">4.12. Alignment</a><ul> 362<li class="toctree-l4"><a class="reference internal" href="coding-style.html#switch-statement-alignment">4.12.1. Switch Statement Alignment</a></li> 363<li class="toctree-l4"><a class="reference internal" href="coding-style.html#pointer-alignment">4.12.2. Pointer Alignment</a></li> 364</ul> 365</li> 366<li class="toctree-l3"><a class="reference internal" href="coding-style.html#comments">4.13. Comments</a></li> 367<li class="toctree-l3"><a class="reference internal" href="coding-style.html#headers-and-inclusion">4.14. Headers and inclusion</a><ul> 368<li class="toctree-l4"><a class="reference internal" href="coding-style.html#header-guards">4.14.1. Header guards</a></li> 369<li class="toctree-l4"><a class="reference internal" href="coding-style.html#include-statement-ordering">4.14.2. Include statement ordering</a></li> 370<li class="toctree-l4"><a class="reference internal" href="coding-style.html#include-statement-variants">4.14.3. Include statement variants</a></li> 371</ul> 372</li> 373<li class="toctree-l3"><a class="reference internal" href="coding-style.html#typedefs">4.15. Typedefs</a><ul> 374<li class="toctree-l4"><a class="reference internal" href="coding-style.html#avoid-anonymous-typedefs-of-structs-enums-in-headers">4.15.1. Avoid anonymous typedefs of structs/enums in headers</a></li> 375</ul> 376</li> 377</ul> 378</li> 379<li class="toctree-l2 current"><a class="current reference internal" href="#">5. Coding Guidelines</a><ul> 380<li class="toctree-l3"><a class="reference internal" href="#automatic-editor-configuration">5.1. Automatic Editor Configuration</a></li> 381<li class="toctree-l3"><a class="reference internal" href="#automatic-compliance-checking">5.2. Automatic Compliance Checking</a><ul> 382<li class="toctree-l4"><a class="reference internal" href="#ignored-checkpatch-warnings">5.2.1. Ignored Checkpatch Warnings</a></li> 383</ul> 384</li> 385<li class="toctree-l3"><a class="reference internal" href="#performance-considerations">5.3. Performance considerations</a><ul> 386<li class="toctree-l4"><a class="reference internal" href="#avoid-printf-and-use-logging-macros">5.3.1. Avoid printf and use logging macros</a></li> 387<li class="toctree-l4"><a class="reference internal" href="#use-const-data-where-possible">5.3.2. Use const data where possible</a></li> 388</ul> 389</li> 390<li class="toctree-l3"><a class="reference internal" href="#libc-functions-that-are-banned-or-to-be-used-with-caution">5.4. Libc functions that are banned or to be used with caution</a></li> 391<li class="toctree-l3"><a class="reference internal" href="#error-handling-and-robustness">5.5. Error handling and robustness</a><ul> 392<li class="toctree-l4"><a class="reference internal" href="#using-cassert-to-check-for-compile-time-data-errors">5.5.1. Using CASSERT to check for compile time data errors</a></li> 393<li class="toctree-l4"><a class="reference internal" href="#using-assert-to-check-for-programming-errors">5.5.2. Using assert() to check for programming errors</a></li> 394<li class="toctree-l4"><a class="reference internal" href="#handling-integration-errors">5.5.3. Handling integration errors</a></li> 395<li class="toctree-l4"><a class="reference internal" href="#handling-recoverable-errors">5.5.4. Handling recoverable errors</a></li> 396<li class="toctree-l4"><a class="reference internal" href="#handling-unrecoverable-errors">5.5.5. Handling unrecoverable errors</a></li> 397<li class="toctree-l4"><a class="reference internal" href="#handling-critical-unresponsiveness">5.5.6. Handling critical unresponsiveness</a></li> 398</ul> 399</li> 400<li class="toctree-l3"><a class="reference internal" href="#use-of-built-in-c-and-libc-data-types">5.6. Use of built-in <em>C</em> and <em>libc</em> data types</a></li> 401<li class="toctree-l3"><a class="reference internal" href="#favor-c-language-over-assembly-language">5.7. Favor C language over assembly language</a></li> 402</ul> 403</li> 404<li class="toctree-l2"><a class="reference internal" href="contributing.html">6. Contributor’s Guide</a><ul> 405<li class="toctree-l3"><a class="reference internal" href="contributing.html#getting-started">6.1. Getting Started</a></li> 406<li class="toctree-l3"><a class="reference internal" href="contributing.html#making-changes">6.2. Making Changes</a></li> 407<li class="toctree-l3"><a class="reference internal" href="contributing.html#submitting-changes">6.3. Submitting Changes</a></li> 408<li class="toctree-l3"><a class="reference internal" href="contributing.html#add-build-configurations">6.4. Add Build Configurations</a></li> 409<li class="toctree-l3"><a class="reference internal" href="contributing.html#binary-components">6.5. Binary Components</a></li> 410</ul> 411</li> 412<li class="toctree-l2"><a class="reference internal" href="code-review-guidelines.html">7. Code Review Guidelines</a><ul> 413<li class="toctree-l3"><a class="reference internal" href="code-review-guidelines.html#why-do-we-do-code-reviews">7.1. Why do we do code reviews?</a></li> 414<li class="toctree-l3"><a class="reference internal" href="code-review-guidelines.html#good-practices">7.2. Good practices</a></li> 415<li class="toctree-l3"><a class="reference internal" href="code-review-guidelines.html#guidelines-for-patch-contributors">7.3. Guidelines for patch contributors</a></li> 416<li class="toctree-l3"><a class="reference internal" href="code-review-guidelines.html#guidelines-for-all-reviewers">7.4. Guidelines for all reviewers</a></li> 417<li class="toctree-l3"><a class="reference internal" href="code-review-guidelines.html#guidelines-for-code-owners">7.5. Guidelines for code owners</a></li> 418<li class="toctree-l3"><a class="reference internal" href="code-review-guidelines.html#guidelines-for-maintainers">7.6. Guidelines for maintainers</a></li> 419</ul> 420</li> 421<li class="toctree-l2"><a class="reference internal" href="faq.html">8. Frequently-Asked Questions (FAQ)</a><ul> 422<li class="toctree-l3"><a class="reference internal" href="faq.html#how-do-i-update-my-changes">8.1. How do I update my changes?</a></li> 423<li class="toctree-l3"><a class="reference internal" href="faq.html#how-long-will-my-changes-take-to-merge-into-integration">8.2. How long will my changes take to merge into <code class="docutils literal notranslate"><span class="pre">integration</span></code>?</a></li> 424<li class="toctree-l3"><a class="reference internal" href="faq.html#how-long-will-it-take-for-my-changes-to-go-from-integration-to-master">8.3. How long will it take for my changes to go from <code class="docutils literal notranslate"><span class="pre">integration</span></code> to <code class="docutils literal notranslate"><span class="pre">master</span></code>?</a></li> 425<li class="toctree-l3"><a class="reference internal" href="faq.html#what-are-these-strange-comments-in-my-changes">8.4. What are these strange comments in my changes?</a></li> 426</ul> 427</li> 428<li class="toctree-l2"><a class="reference internal" href="security-hardening.html">9. Secure Development Guidelines</a><ul> 429<li class="toctree-l3"><a class="reference internal" href="security-hardening.html#security-considerations">9.1. Security considerations</a><ul> 430<li class="toctree-l4"><a class="reference internal" href="security-hardening.html#do-not-leak-secrets-to-the-normal-world">9.1.1. Do not leak secrets to the normal world</a></li> 431<li class="toctree-l4"><a class="reference internal" href="security-hardening.html#handling-denial-of-service-attacks">9.1.2. Handling Denial of Service attacks</a></li> 432<li class="toctree-l4"><a class="reference internal" href="security-hardening.html#preventing-secure-world-timing-information-leakage-via-pmu-counters">9.1.3. Preventing Secure-world timing information leakage via PMU counters</a></li> 433</ul> 434</li> 435<li class="toctree-l3"><a class="reference internal" href="security-hardening.html#build-options">9.2. Build options</a></li> 436</ul> 437</li> 438</ul> 439</li> 440<li class="toctree-l1"><a class="reference internal" href="../components/index.html">Components</a><ul> 441<li class="toctree-l2"><a class="reference internal" href="../components/spd/index.html">1. Secure Payload Dispatcher (SPD)</a><ul> 442<li class="toctree-l3"><a class="reference internal" href="../components/spd/optee-dispatcher.html">1.1. OP-TEE Dispatcher</a></li> 443<li class="toctree-l3"><a class="reference internal" href="../components/spd/tlk-dispatcher.html">1.2. Trusted Little Kernel (TLK) Dispatcher</a><ul> 444<li class="toctree-l4"><a class="reference internal" href="../components/spd/tlk-dispatcher.html#trusted-little-kernel-tlk">1.2.1. Trusted Little Kernel (TLK)</a></li> 445<li class="toctree-l4"><a class="reference internal" href="../components/spd/tlk-dispatcher.html#build-tlk">1.2.2. Build TLK</a></li> 446<li class="toctree-l4"><a class="reference internal" href="../components/spd/tlk-dispatcher.html#input-parameters-to-tlk">1.2.3. Input parameters to TLK</a></li> 447</ul> 448</li> 449<li class="toctree-l3"><a class="reference internal" href="../components/spd/trusty-dispatcher.html">1.3. Trusty Dispatcher</a><ul> 450<li class="toctree-l4"><a class="reference internal" href="../components/spd/trusty-dispatcher.html#boot-parameters">1.3.1. Boot parameters</a></li> 451<li class="toctree-l4"><a class="reference internal" href="../components/spd/trusty-dispatcher.html#supported-platforms">1.3.2. Supported platforms</a></li> 452</ul> 453</li> 454</ul> 455</li> 456<li class="toctree-l2"><a class="reference internal" href="../components/activity-monitors.html">2. Activity Monitors</a><ul> 457<li class="toctree-l3"><a class="reference internal" href="../components/activity-monitors.html#auxiliary-counters">2.1. Auxiliary counters</a></li> 458</ul> 459</li> 460<li class="toctree-l2"><a class="reference internal" href="../components/arm-sip-service.html">3. Arm SiP Services</a><ul> 461<li class="toctree-l3"><a class="reference internal" href="../components/arm-sip-service.html#performance-measurement-framework-pmf">3.1. Performance Measurement Framework (PMF)</a></li> 462<li class="toctree-l3"><a class="reference internal" href="../components/arm-sip-service.html#execution-state-switching-service">3.2. Execution State Switching service</a><ul> 463<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#arm-sip-svc-exe-state-switch">3.2.1. <code class="docutils literal notranslate"><span class="pre">ARM_SIP_SVC_EXE_STATE_SWITCH</span></code></a></li> 464</ul> 465</li> 466<li class="toctree-l3"><a class="reference internal" href="../components/arm-sip-service.html#debugfs-interface">3.3. DebugFS interface</a><ul> 467<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#mount">3.3.1. MOUNT</a></li> 468<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#open">3.3.2. OPEN</a></li> 469<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#close">3.3.3. CLOSE</a></li> 470<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#read">3.3.4. READ</a></li> 471<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#seek">3.3.5. SEEK</a></li> 472<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#bind">3.3.6. BIND</a></li> 473<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#stat">3.3.7. STAT</a></li> 474<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#init">3.3.8. INIT</a></li> 475<li class="toctree-l4"><a class="reference internal" href="../components/arm-sip-service.html#version">3.3.9. VERSION</a></li> 476</ul> 477</li> 478</ul> 479</li> 480<li class="toctree-l2"><a class="reference internal" href="../components/debugfs-design.html">4. Debug FS</a><ul> 481<li class="toctree-l3"><a class="reference internal" href="../components/debugfs-design.html#overview">4.1. Overview</a></li> 482<li class="toctree-l3"><a class="reference internal" href="../components/debugfs-design.html#virtual-filesystem">4.2. Virtual filesystem</a><ul> 483<li class="toctree-l4"><a class="reference internal" href="../components/debugfs-design.html#namespace">4.2.1. Namespace</a></li> 484<li class="toctree-l4"><a class="reference internal" href="../components/debugfs-design.html#p-interface">4.2.2. 9p interface</a></li> 485</ul> 486</li> 487<li class="toctree-l3"><a class="reference internal" href="../components/debugfs-design.html#smc-interface">4.3. SMC interface</a></li> 488<li class="toctree-l3"><a class="reference internal" href="../components/debugfs-design.html#security-considerations">4.4. Security considerations</a></li> 489<li class="toctree-l3"><a class="reference internal" href="../components/debugfs-design.html#limitations">4.5. Limitations</a></li> 490<li class="toctree-l3"><a class="reference internal" href="../components/debugfs-design.html#applications">4.6. Applications</a></li> 491</ul> 492</li> 493<li class="toctree-l2"><a class="reference internal" href="../components/exception-handling.html">5. Exception Handling Framework</a><ul> 494<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#introduction">5.1. Introduction</a></li> 495<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#the-role-of-exception-handling-framework">5.2. The role of Exception Handling Framework</a></li> 496<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#interrupt-handling">5.3. Interrupt handling</a><ul> 497<li class="toctree-l4"><a class="reference internal" href="../components/exception-handling.html#partitioning-priority-levels">5.3.1. Partitioning priority levels</a></li> 498<li class="toctree-l4"><a class="reference internal" href="../components/exception-handling.html#programming-priority">5.3.2. Programming priority</a></li> 499</ul> 500</li> 501<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#registering-handler">5.4. Registering handler</a></li> 502<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#interrupt-handling-example">5.5. Interrupt handling example</a></li> 503<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#activating-and-deactivating-priorities">5.6. Activating and Deactivating priorities</a></li> 504<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#transition-of-priority-levels">5.7. Transition of priority levels</a></li> 505<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#effect-on-smc-calls">5.8. Effect on SMC calls</a></li> 506<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#build-time-flow">5.9. Build-time flow</a></li> 507<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#run-time-flow">5.10. Run-time flow</a></li> 508<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#interrupt-prioritisation-considerations">5.11. Interrupt Prioritisation Considerations</a></li> 509<li class="toctree-l3"><a class="reference internal" href="../components/exception-handling.html#limitations">5.12. Limitations</a></li> 510</ul> 511</li> 512<li class="toctree-l2"><a class="reference internal" href="../components/fconf/index.html">6. Firmware Configuration Framework</a><ul> 513<li class="toctree-l3"><a class="reference internal" href="../components/fconf/index.html#introduction">6.1. Introduction</a></li> 514<li class="toctree-l3"><a class="reference internal" href="../components/fconf/index.html#accessing-properties">6.2. Accessing properties</a></li> 515<li class="toctree-l3"><a class="reference internal" href="../components/fconf/index.html#defining-properties">6.3. Defining properties</a></li> 516<li class="toctree-l3"><a class="reference internal" href="../components/fconf/index.html#loading-the-property-device-tree">6.4. Loading the property device tree</a></li> 517<li class="toctree-l3"><a class="reference internal" href="../components/fconf/index.html#populating-the-properties">6.5. Populating the properties</a></li> 518<li class="toctree-l3"><a class="reference internal" href="../components/fconf/index.html#namespace-guidance">6.6. Namespace guidance</a></li> 519<li class="toctree-l3"><a class="reference internal" href="../components/fconf/index.html#properties-binding-information">6.7. Properties binding information</a><ul> 520<li class="toctree-l4"><a class="reference internal" href="../components/fconf/fconf_properties.html">6.7.1. DTB binding for FCONF properties</a></li> 521<li class="toctree-l4"><a class="reference internal" href="../components/fconf/amu-bindings.html">6.7.2. Activity Monitor Unit (AMU) Bindings</a></li> 522<li class="toctree-l4"><a class="reference internal" href="../components/fconf/mpmm-bindings.html">6.7.3. Maximum Power Mitigation Mechanism (MPMM) Bindings</a></li> 523</ul> 524</li> 525</ul> 526</li> 527<li class="toctree-l2"><a class="reference internal" href="../components/firmware-update.html">7. Firmware Update (FWU)</a><ul> 528<li class="toctree-l3"><a class="reference internal" href="../components/firmware-update.html#introduction">7.1. Introduction</a><ul> 529<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#scope">7.1.1. Scope</a></li> 530</ul> 531</li> 532<li class="toctree-l3"><a class="reference internal" href="../components/firmware-update.html#fwu-overview">7.2. FWU Overview</a></li> 533<li class="toctree-l3"><a class="reference internal" href="../components/firmware-update.html#image-identification">7.3. Image Identification</a></li> 534<li class="toctree-l3"><a class="reference internal" href="../components/firmware-update.html#fwu-state-machine">7.4. FWU State Machine</a></li> 535<li class="toctree-l3"><a class="reference internal" href="../components/firmware-update.html#bl1-smc-interface">7.5. BL1 SMC Interface</a><ul> 536<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#bl1-smc-call-count">7.5.1. BL1_SMC_CALL_COUNT</a></li> 537<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#bl1-smc-uid">7.5.2. BL1_SMC_UID</a></li> 538<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#bl1-smc-version">7.5.3. BL1_SMC_VERSION</a></li> 539<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#bl1-smc-run-image">7.5.4. BL1_SMC_RUN_IMAGE</a></li> 540<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#fwu-smc-image-copy">7.5.5. FWU_SMC_IMAGE_COPY</a></li> 541<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#fwu-smc-image-auth">7.5.6. FWU_SMC_IMAGE_AUTH</a></li> 542<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#fwu-smc-image-execute">7.5.7. FWU_SMC_IMAGE_EXECUTE</a></li> 543<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#fwu-smc-image-resume">7.5.8. FWU_SMC_IMAGE_RESUME</a></li> 544<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#fwu-smc-sec-image-done">7.5.9. FWU_SMC_SEC_IMAGE_DONE</a></li> 545<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#fwu-smc-update-done">7.5.10. FWU_SMC_UPDATE_DONE</a></li> 546<li class="toctree-l4"><a class="reference internal" href="../components/firmware-update.html#fwu-smc-image-reset">7.5.11. FWU_SMC_IMAGE_RESET</a></li> 547</ul> 548</li> 549</ul> 550</li> 551<li class="toctree-l2"><a class="reference internal" href="../components/measured_boot/index.html">8. Measured Boot Driver (MBD)</a><ul> 552<li class="toctree-l3"><a class="reference internal" href="../components/measured_boot/index.html#properties-binding-information">8.1. Properties binding information</a><ul> 553<li class="toctree-l4"><a class="reference internal" href="../components/measured_boot/event_log.html">8.1.1. DTB binding for Event Log properties</a></li> 554</ul> 555</li> 556</ul> 557</li> 558<li class="toctree-l2"><a class="reference internal" href="../components/mpmm.html">9. Maximum Power Mitigation Mechanism (MPMM)</a></li> 559<li class="toctree-l2"><a class="reference internal" href="../components/platform-interrupt-controller-API.html">10. Platform Interrupt Controller API</a><ul> 560<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-unsigned-int-plat-ic-get-running-priority-void-optional">10.1. Function: unsigned int plat_ic_get_running_priority(void); [optional]</a></li> 561<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-int-plat-ic-is-spi-unsigned-int-id-optional">10.2. Function: int plat_ic_is_spi(unsigned int id); [optional]</a></li> 562<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-int-plat-ic-is-ppi-unsigned-int-id-optional">10.3. Function: int plat_ic_is_ppi(unsigned int id); [optional]</a></li> 563<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-int-plat-ic-is-sgi-unsigned-int-id-optional">10.4. Function: int plat_ic_is_sgi(unsigned int id); [optional]</a></li> 564<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-unsigned-int-plat-ic-get-interrupt-active-unsigned-int-id-optional">10.5. Function: unsigned int plat_ic_get_interrupt_active(unsigned int id); [optional]</a></li> 565<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-void-plat-ic-enable-interrupt-unsigned-int-id-optional">10.6. Function: void plat_ic_enable_interrupt(unsigned int id); [optional]</a></li> 566<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-void-plat-ic-disable-interrupt-unsigned-int-id-optional">10.7. Function: void plat_ic_disable_interrupt(unsigned int id); [optional]</a></li> 567<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-void-plat-ic-set-interrupt-priority-unsigned-int-id-unsigned-int-priority-optional">10.8. Function: void plat_ic_set_interrupt_priority(unsigned int id, unsigned int priority); [optional]</a></li> 568<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-int-plat-ic-has-interrupt-type-unsigned-int-type-optional">10.9. Function: int plat_ic_has_interrupt_type(unsigned int type); [optional]</a></li> 569<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-void-plat-ic-set-interrupt-type-unsigned-int-id-unsigned-int-type-optional">10.10. Function: void plat_ic_set_interrupt_type(unsigned int id, unsigned int type); [optional]</a></li> 570<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-void-plat-ic-raise-el3-sgi-int-sgi-num-u-register-t-target-optional">10.11. Function: void plat_ic_raise_el3_sgi(int sgi_num, u_register_t target); [optional]</a></li> 571<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-void-plat-ic-set-spi-routing-unsigned-int-id-unsigned-int-routing-mode-u-register-t-mpidr-optional">10.12. Function: void plat_ic_set_spi_routing(unsigned int id, unsigned int routing_mode, u_register_t mpidr); [optional]</a></li> 572<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-void-plat-ic-set-interrupt-pending-unsigned-int-id-optional">10.13. Function: void plat_ic_set_interrupt_pending(unsigned int id); [optional]</a></li> 573<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-void-plat-ic-clear-interrupt-pending-unsigned-int-id-optional">10.14. Function: void plat_ic_clear_interrupt_pending(unsigned int id); [optional]</a></li> 574<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-unsigned-int-plat-ic-set-priority-mask-unsigned-int-id-optional">10.15. Function: unsigned int plat_ic_set_priority_mask(unsigned int id); [optional]</a></li> 575<li class="toctree-l3"><a class="reference internal" href="../components/platform-interrupt-controller-API.html#function-unsigned-int-plat-ic-get-interrupt-id-unsigned-int-raw-optional">10.16. Function: unsigned int plat_ic_get_interrupt_id(unsigned int raw); [optional]</a></li> 576</ul> 577</li> 578<li class="toctree-l2"><a class="reference internal" href="../components/ras.html">11. Reliability, Availability, and Serviceability (RAS) Extensions</a><ul> 579<li class="toctree-l3"><a class="reference internal" href="../components/ras.html#overview">11.1. Overview</a></li> 580<li class="toctree-l3"><a class="reference internal" href="../components/ras.html#platform-apis">11.2. Platform APIs</a></li> 581<li class="toctree-l3"><a class="reference internal" href="../components/ras.html#registering-ras-error-records">11.3. Registering RAS error records</a><ul> 582<li class="toctree-l4"><a class="reference internal" href="../components/ras.html#standard-error-record-helpers">11.3.1. Standard Error Record helpers</a></li> 583</ul> 584</li> 585<li class="toctree-l3"><a class="reference internal" href="../components/ras.html#registering-ras-interrupts">11.4. Registering RAS interrupts</a></li> 586<li class="toctree-l3"><a class="reference internal" href="../components/ras.html#double-fault-handling">11.5. Double-fault handling</a></li> 587<li class="toctree-l3"><a class="reference internal" href="../components/ras.html#engaging-the-ras-framework">11.6. Engaging the RAS framework</a></li> 588<li class="toctree-l3"><a class="reference internal" href="../components/ras.html#interaction-with-exception-handling-framework">11.7. Interaction with Exception Handling Framework</a></li> 589</ul> 590</li> 591<li class="toctree-l2"><a class="reference internal" href="../components/romlib-design.html">12. Library at ROM</a><ul> 592<li class="toctree-l3"><a class="reference internal" href="../components/romlib-design.html#introduction">12.1. Introduction</a></li> 593<li class="toctree-l3"><a class="reference internal" href="../components/romlib-design.html#index-file">12.2. Index file</a></li> 594<li class="toctree-l3"><a class="reference internal" href="../components/romlib-design.html#wrapper-functions">12.3. Wrapper functions</a></li> 595<li class="toctree-l3"><a class="reference internal" href="../components/romlib-design.html#script">12.4. Script</a></li> 596<li class="toctree-l3"><a class="reference internal" href="../components/romlib-design.html#patching-of-functions-in-library-at-rom">12.5. Patching of functions in library at ROM</a></li> 597<li class="toctree-l3"><a class="reference internal" href="../components/romlib-design.html#memory-impact">12.6. Memory impact</a></li> 598<li class="toctree-l3"><a class="reference internal" href="../components/romlib-design.html#build-library-at-rom">12.7. Build library at ROM</a></li> 599</ul> 600</li> 601<li class="toctree-l2"><a class="reference internal" href="../components/sdei.html">13. SDEI: Software Delegated Exception Interface</a><ul> 602<li class="toctree-l3"><a class="reference internal" href="../components/sdei.html#introduction">13.1. Introduction</a></li> 603<li class="toctree-l3"><a class="reference internal" href="../components/sdei.html#defining-events">13.2. Defining events</a><ul> 604<li class="toctree-l4"><a class="reference internal" href="../components/sdei.html#event-flags">13.2.1. Event flags</a></li> 605</ul> 606</li> 607<li class="toctree-l3"><a class="reference internal" href="../components/sdei.html#event-definition-example">13.3. Event definition example</a></li> 608<li class="toctree-l3"><a class="reference internal" href="../components/sdei.html#configuration-within-exception-handling-framework">13.4. Configuration within Exception Handling Framework</a></li> 609<li class="toctree-l3"><a class="reference internal" href="../components/sdei.html#determining-client-el">13.5. Determining client EL</a></li> 610<li class="toctree-l3"><a class="reference internal" href="../components/sdei.html#explicit-dispatch-of-events">13.6. Explicit dispatch of events</a><ul> 611<li class="toctree-l4"><a class="reference internal" href="../components/sdei.html#conditions-for-event-dispatch">13.6.1. Conditions for event dispatch</a></li> 612</ul> 613</li> 614<li class="toctree-l3"><a class="reference internal" href="../components/sdei.html#porting-requirements">13.7. Porting requirements</a></li> 615<li class="toctree-l3"><a class="reference internal" href="../components/sdei.html#note-on-writing-sdei-event-handlers">13.8. Note on writing SDEI event handlers</a></li> 616</ul> 617</li> 618<li class="toctree-l2"><a class="reference internal" href="../components/secure-partition-manager.html">14. Secure Partition Manager</a><ul> 619<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#acronyms">14.1. Acronyms</a></li> 620<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#foreword">14.2. Foreword</a><ul> 621<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#terminology">14.2.1. Terminology</a></li> 622<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#support-for-legacy-platforms">14.2.2. Support for legacy platforms</a></li> 623</ul> 624</li> 625<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#sample-reference-stack">14.3. Sample reference stack</a></li> 626<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#tf-a-build-options">14.4. TF-A build options</a></li> 627<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#fvp-model-invocation">14.5. FVP model invocation</a></li> 628<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#boot-process">14.6. Boot process</a><ul> 629<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#loading-hafnium-and-secure-partitions-in-the-secure-world">14.6.1. Loading Hafnium and secure partitions in the secure world</a></li> 630<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#booting-through-tf-a">14.6.2. Booting through TF-A</a></li> 631</ul> 632</li> 633<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#hafnium-in-the-secure-world">14.7. Hafnium in the secure world</a><ul> 634<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#general-considerations">14.7.1. General considerations</a></li> 635<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#parsing-sp-partition-manifests">14.7.2. Parsing SP partition manifests</a></li> 636<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#passing-boot-data-to-the-sp">14.7.3. Passing boot data to the SP</a></li> 637<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#sp-boot-order">14.7.4. SP Boot order</a></li> 638<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#boot-phases">14.7.5. Boot phases</a></li> 639<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#notifications">14.7.6. Notifications</a></li> 640<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#mandatory-interfaces">14.7.7. Mandatory interfaces</a></li> 641<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#spmc-spmd-direct-requests-responses">14.7.8. SPMC-SPMD direct requests/responses</a></li> 642<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#pe-mmu-configuration">14.7.9. PE MMU configuration</a></li> 643<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#interrupt-management">14.7.10. Interrupt management</a></li> 644<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#secure-interrupt-handling">14.7.11. Secure interrupt handling</a></li> 645<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#power-management">14.7.12. Power management</a></li> 646</ul> 647</li> 648<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#smmuv3-support-in-hafnium">14.8. SMMUv3 support in Hafnium</a><ul> 649<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#smmuv3-features">14.8.1. SMMUv3 features</a></li> 650<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#smmuv3-programming-interfaces">14.8.2. SMMUv3 Programming Interfaces</a></li> 651<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#peripheral-device-manifest">14.8.3. Peripheral device manifest</a></li> 652<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager.html#smmuv3-driver-limitations">14.8.4. SMMUv3 driver limitations</a></li> 653</ul> 654</li> 655<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#s-el0-partition-support">14.9. S-EL0 Partition support</a></li> 656<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager.html#references">14.10. References</a></li> 657</ul> 658</li> 659<li class="toctree-l2"><a class="reference internal" href="../components/secure-partition-manager-mm.html">15. Secure Partition Manager (MM)</a><ul> 660<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager-mm.html#foreword">15.1. Foreword</a></li> 661<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager-mm.html#background">15.2. Background</a></li> 662<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager-mm.html#introduction">15.3. Introduction</a></li> 663<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager-mm.html#description">15.4. Description</a><ul> 664<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#building-tf-a-with-secure-partition-support">15.4.1. Building TF-A with Secure Partition support</a></li> 665<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#describing-secure-partition-resources">15.4.2. Describing Secure Partition resources</a></li> 666<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#accessing-secure-partition-services">15.4.3. Accessing Secure Partition services</a></li> 667<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#exchanging-data-with-the-secure-partition">15.4.4. Exchanging data with the Secure Partition</a></li> 668</ul> 669</li> 670<li class="toctree-l3"><a class="reference internal" href="../components/secure-partition-manager-mm.html#runtime-model-of-the-secure-partition">15.5. Runtime model of the Secure Partition</a><ul> 671<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#interface-with-spm">15.5.1. Interface with SPM</a></li> 672<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#miscellaneous-interfaces">15.5.2. Miscellaneous interfaces</a></li> 673<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#secure-partition-initialisation">15.5.3. Secure Partition Initialisation</a></li> 674<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#runtime-event-delegation">15.5.4. Runtime Event Delegation</a></li> 675<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#secure-partition-memory-management">15.5.5. Secure Partition Memory Management</a></li> 676<li class="toctree-l4"><a class="reference internal" href="../components/secure-partition-manager-mm.html#error-codes">15.5.6. Error Codes</a></li> 677</ul> 678</li> 679</ul> 680</li> 681<li class="toctree-l2"><a class="reference internal" href="../components/ffa-manifest-binding.html">16. FF-A manifest binding to device tree</a><ul> 682<li class="toctree-l3"><a class="reference internal" href="../components/ffa-manifest-binding.html#version-1-0">16.1. Version 1.0</a><ul> 683<li class="toctree-l4"><a class="reference internal" href="../components/ffa-manifest-binding.html#partition-properties">16.1.1. Partition Properties</a></li> 684</ul> 685</li> 686<li class="toctree-l3"><a class="reference internal" href="../components/ffa-manifest-binding.html#memory-regions">16.2. Memory Regions</a></li> 687<li class="toctree-l3"><a class="reference internal" href="../components/ffa-manifest-binding.html#device-regions">16.3. Device Regions</a></li> 688</ul> 689</li> 690<li class="toctree-l2"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html">17. Translation (XLAT) Tables Library</a><ul> 691<li class="toctree-l3"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#about-version-1-version-2-and-mpu-libraries">17.1. About version 1, version 2 and MPU libraries</a></li> 692<li class="toctree-l3"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#design-concepts-and-interfaces">17.2. Design concepts and interfaces</a><ul> 693<li class="toctree-l4"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#mmap-regions">17.2.1. <cite>mmap</cite> regions</a></li> 694<li class="toctree-l4"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#translation-context">17.2.2. Translation Context</a></li> 695<li class="toctree-l4"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#static-and-dynamic-memory-regions">17.2.3. Static and dynamic memory regions</a></li> 696</ul> 697</li> 698<li class="toctree-l3"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#library-apis">17.3. Library APIs</a></li> 699<li class="toctree-l3"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#library-limitations">17.4. Library limitations</a></li> 700<li class="toctree-l3"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#implementation-details">17.5. Implementation details</a><ul> 701<li class="toctree-l4"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#code-structure">17.5.1. Code structure</a></li> 702<li class="toctree-l4"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#from-mmap-regions-to-translation-tables">17.5.2. From mmap regions to translation tables</a></li> 703<li class="toctree-l4"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#the-memory-mapping-algorithm">17.5.3. The memory mapping algorithm</a></li> 704<li class="toctree-l4"><a class="reference internal" href="../components/xlat-tables-lib-v2-design.html#tlb-maintenance-operations">17.5.4. TLB maintenance operations</a></li> 705</ul> 706</li> 707</ul> 708</li> 709<li class="toctree-l2"><a class="reference internal" href="../components/cot-binding.html">18. Chain of trust bindings</a><ul> 710<li class="toctree-l3"><a class="reference internal" href="../components/cot-binding.html#cot">18.1. cot</a></li> 711<li class="toctree-l3"><a class="reference internal" href="../components/cot-binding.html#manifests-and-certificate-node-bindings-definition">18.2. Manifests and Certificate node bindings definition</a></li> 712<li class="toctree-l3"><a class="reference internal" href="../components/cot-binding.html#images-and-image-node-bindings-definition">18.3. Images and Image node bindings definition</a></li> 713<li class="toctree-l3"><a class="reference internal" href="../components/cot-binding.html#non-volatile-counter-node-binding-definition">18.4. non-volatile counter node binding definition</a></li> 714<li class="toctree-l3"><a class="reference internal" href="../components/cot-binding.html#future-update-to-chain-of-trust-binding">18.5. Future update to chain of trust binding</a></li> 715</ul> 716</li> 717<li class="toctree-l2"><a class="reference internal" href="../components/realm-management-extension.html">19. Realm Management Extension (RME)</a><ul> 718<li class="toctree-l3"><a class="reference internal" href="../components/realm-management-extension.html#rme-support-in-tf-a">19.1. RME support in TF-A</a><ul> 719<li class="toctree-l4"><a class="reference internal" href="../components/realm-management-extension.html#changes-to-translation-tables-library">19.1.1. Changes to translation tables library</a></li> 720<li class="toctree-l4"><a class="reference internal" href="../components/realm-management-extension.html#changes-to-context-management">19.1.2. Changes to context management</a></li> 721<li class="toctree-l4"><a class="reference internal" href="../components/realm-management-extension.html#boot-flow-changes">19.1.3. Boot flow changes</a></li> 722<li class="toctree-l4"><a class="reference internal" href="../components/realm-management-extension.html#granule-protection-tables-gpt-library">19.1.4. Granule Protection Tables (GPT) library</a></li> 723<li class="toctree-l4"><a class="reference internal" href="../components/realm-management-extension.html#rmm-dispatcher-rmmd">19.1.5. RMM Dispatcher (RMMD)</a></li> 724<li class="toctree-l4"><a class="reference internal" href="../components/realm-management-extension.html#test-realm-payload-trp">19.1.6. Test Realm Payload (TRP)</a></li> 725</ul> 726</li> 727<li class="toctree-l3"><a class="reference internal" href="../components/realm-management-extension.html#building-and-running-tf-a-with-rme">19.2. Building and running TF-A with RME</a><ul> 728<li class="toctree-l4"><a class="reference internal" href="../components/realm-management-extension.html#building-tf-a-with-tf-a-tests">19.2.1. Building TF-A with TF-A Tests</a></li> 729<li class="toctree-l4"><a class="reference internal" href="../components/realm-management-extension.html#four-world-execution-with-hafnium-and-tf-a-tests">19.2.2. Four-world execution with Hafnium and TF-A Tests</a></li> 730<li class="toctree-l4"><a class="reference internal" href="../components/realm-management-extension.html#running-the-tests">19.2.3. Running the tests</a></li> 731</ul> 732</li> 733</ul> 734</li> 735<li class="toctree-l2"><a class="reference internal" href="../components/granule-protection-tables-design.html">20. Granule Protection Tables Library</a><ul> 736<li class="toctree-l3"><a class="reference internal" href="../components/granule-protection-tables-design.html#design-concepts-and-interfaces">20.1. Design Concepts and Interfaces</a><ul> 737<li class="toctree-l4"><a class="reference internal" href="../components/granule-protection-tables-design.html#defining-pas-regions">20.1.1. Defining PAS regions</a></li> 738<li class="toctree-l4"><a class="reference internal" href="../components/granule-protection-tables-design.html#level-0-and-level-1-tables">20.1.2. Level 0 and Level 1 Tables</a></li> 739<li class="toctree-l4"><a class="reference internal" href="../components/granule-protection-tables-design.html#granule-transition-service">20.1.3. Granule Transition Service</a></li> 740</ul> 741</li> 742<li class="toctree-l3"><a class="reference internal" href="../components/granule-protection-tables-design.html#library-apis">20.2. Library APIs</a><ul> 743<li class="toctree-l4"><a class="reference internal" href="../components/granule-protection-tables-design.html#api-constraints">20.2.1. API Constraints</a></li> 744<li class="toctree-l4"><a class="reference internal" href="../components/granule-protection-tables-design.html#sample-calculation-for-l0-memory-size-and-alignment">20.2.2. Sample Calculation for L0 memory size and alignment</a></li> 745<li class="toctree-l4"><a class="reference internal" href="../components/granule-protection-tables-design.html#sample-calculation-for-l1-table-size-and-alignment">20.2.3. Sample calculation for L1 table size and alignment</a></li> 746</ul> 747</li> 748</ul> 749</li> 750</ul> 751</li> 752<li class="toctree-l1"><a class="reference internal" href="../design/index.html">System Design</a><ul> 753<li class="toctree-l2"><a class="reference internal" href="../design/alt-boot-flows.html">1. Alternative Boot Flows</a><ul> 754<li class="toctree-l3"><a class="reference internal" href="../design/alt-boot-flows.html#el3-payloads-alternative-boot-flow">1.1. EL3 payloads alternative boot flow</a><ul> 755<li class="toctree-l4"><a class="reference internal" href="../design/alt-boot-flows.html#booting-an-el3-payload">1.1.1. Booting an EL3 payload</a></li> 756</ul> 757</li> 758<li class="toctree-l3"><a class="reference internal" href="../design/alt-boot-flows.html#preloaded-bl33-alternative-boot-flow">1.2. Preloaded BL33 alternative boot flow</a></li> 759</ul> 760</li> 761<li class="toctree-l2"><a class="reference internal" href="../design/auth-framework.html">2. Authentication Framework & Chain of Trust</a><ul> 762<li class="toctree-l3"><a class="reference internal" href="../design/auth-framework.html#framework-design">2.1. Framework design</a><ul> 763<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#chain-of-trust">2.1.1. Chain of Trust</a></li> 764<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#image-types">2.1.2. Image types</a></li> 765<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#component-responsibilities">2.1.3. Component responsibilities</a></li> 766<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#authentication-methods">2.1.4. Authentication methods</a></li> 767</ul> 768</li> 769<li class="toctree-l3"><a class="reference internal" href="../design/auth-framework.html#specifying-a-chain-of-trust">2.2. Specifying a Chain of Trust</a><ul> 770<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#describing-the-image-parsing-methods">2.2.1. Describing the image parsing methods</a></li> 771<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#describing-the-authentication-method-s">2.2.2. Describing the authentication method(s)</a></li> 772<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#storing-authentication-parameters">2.2.3. Storing Authentication parameters</a></li> 773<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#describing-an-image-in-a-cot">2.2.4. Describing an image in a CoT</a></li> 774</ul> 775</li> 776<li class="toctree-l3"><a class="reference internal" href="../design/auth-framework.html#implementation-example">2.3. Implementation example</a><ul> 777<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#the-tbbr-cot">2.3.1. The TBBR CoT</a></li> 778<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#the-image-parser-library">2.3.2. The image parser library</a></li> 779<li class="toctree-l4"><a class="reference internal" href="../design/auth-framework.html#the-cryptographic-library">2.3.3. The cryptographic library</a></li> 780</ul> 781</li> 782</ul> 783</li> 784<li class="toctree-l2"><a class="reference internal" href="../design/cpu-specific-build-macros.html">3. Arm CPU Specific Build Macros</a><ul> 785<li class="toctree-l3"><a class="reference internal" href="../design/cpu-specific-build-macros.html#security-vulnerability-workarounds">3.1. Security Vulnerability Workarounds</a></li> 786<li class="toctree-l3"><a class="reference internal" href="../design/cpu-specific-build-macros.html#cpu-errata-workarounds">3.2. CPU Errata Workarounds</a></li> 787<li class="toctree-l3"><a class="reference internal" href="../design/cpu-specific-build-macros.html#dsu-errata-workarounds">3.3. DSU Errata Workarounds</a></li> 788<li class="toctree-l3"><a class="reference internal" href="../design/cpu-specific-build-macros.html#cpu-specific-optimizations">3.4. CPU Specific optimizations</a></li> 789</ul> 790</li> 791<li class="toctree-l2"><a class="reference internal" href="../design/firmware-design.html">4. Firmware Design</a><ul> 792<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#cold-boot">4.1. Cold boot</a><ul> 793<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#dynamic-configuration-during-cold-boot">4.1.1. Dynamic Configuration during cold boot</a></li> 794<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#bl1">4.1.2. BL1</a></li> 795<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#bl2">4.1.3. BL2</a></li> 796<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#running-bl2-at-el3-execution-level">4.1.4. Running BL2 at EL3 execution level</a></li> 797<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#aarch64-bl31">4.1.5. AArch64 BL31</a></li> 798<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#using-alternative-trusted-boot-firmware-in-place-of-bl1-bl2-aarch64-only">4.1.6. Using alternative Trusted Boot Firmware in place of BL1 & BL2 (AArch64 only)</a></li> 799<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#aarch32-el3-runtime-software-entrypoint-interface">4.1.7. AArch32 EL3 Runtime Software entrypoint interface</a></li> 800</ul> 801</li> 802<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#el3-runtime-services-framework">4.2. EL3 runtime services framework</a><ul> 803<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#registration">4.2.1. Registration</a></li> 804<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#initialization">4.2.2. Initialization</a></li> 805<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#handling-an-smc">4.2.3. Handling an SMC</a></li> 806</ul> 807</li> 808<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#exception-handling-framework">4.3. Exception Handling Framework</a></li> 809<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#power-state-coordination-interface">4.4. Power State Coordination Interface</a></li> 810<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#secure-el1-payloads-and-dispatchers">4.5. Secure-EL1 Payloads and Dispatchers</a><ul> 811<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#initializing-a-bl32-image">4.5.1. Initializing a BL32 Image</a></li> 812</ul> 813</li> 814<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#crash-reporting-in-bl31">4.6. Crash Reporting in BL31</a></li> 815<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#guidelines-for-reset-handlers">4.7. Guidelines for Reset Handlers</a></li> 816<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#configuring-secure-interrupts">4.8. Configuring secure interrupts</a></li> 817<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#cpu-specific-operations-framework">4.9. CPU specific operations framework</a><ul> 818<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#cpu-specific-reset-handling">4.9.1. CPU specific Reset Handling</a></li> 819<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#cpu-specific-power-down-sequence">4.9.2. CPU specific power down sequence</a></li> 820<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#cpu-specific-register-reporting-during-crash">4.9.3. CPU specific register reporting during crash</a></li> 821<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#cpu-errata-status-reporting">4.9.4. CPU errata status reporting</a></li> 822</ul> 823</li> 824<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#memory-layout-of-bl-images">4.10. Memory layout of BL images</a><ul> 825<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#linker-scripts-and-symbols">4.10.1. Linker scripts and symbols</a></li> 826<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#how-to-choose-the-right-base-addresses-for-each-bootloader-stage-image">4.10.2. How to choose the right base addresses for each bootloader stage image</a></li> 827</ul> 828</li> 829<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#firmware-image-package-fip">4.11. Firmware Image Package (FIP)</a><ul> 830<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#firmware-image-package-layout">4.11.1. Firmware Image Package layout</a></li> 831<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#firmware-image-package-creation-tool">4.11.2. Firmware Image Package creation tool</a></li> 832<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#loading-from-a-firmware-image-package-fip">4.11.3. Loading from a Firmware Image Package (FIP)</a></li> 833</ul> 834</li> 835<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#use-of-coherent-memory-in-tf-a">4.12. Use of coherent memory in TF-A</a><ul> 836<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#disabling-the-use-of-coherent-memory-in-tf-a">4.12.1. Disabling the use of coherent memory in TF-A</a></li> 837<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#coherent-memory-usage-in-psci-implementation">4.12.2. Coherent memory usage in PSCI implementation</a></li> 838<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#bakery-lock-data">4.12.3. Bakery lock data</a></li> 839<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#non-functional-impact-of-removing-coherent-memory">4.12.4. Non Functional Impact of removing coherent memory</a></li> 840</ul> 841</li> 842<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#isolating-code-and-read-only-data-on-separate-memory-pages">4.13. Isolating code and read-only data on separate memory pages</a></li> 843<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#publish-and-subscribe-framework">4.14. Publish and Subscribe Framework</a><ul> 844<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#publish-and-subscribe-example">4.14.1. Publish and Subscribe Example</a></li> 845<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#reclaiming-the-bl31-initialization-code">4.14.2. Reclaiming the BL31 initialization code</a></li> 846</ul> 847</li> 848<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#performance-measurement-framework">4.15. Performance Measurement Framework</a><ul> 849<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#timestamp-identifier-format">4.15.1. Timestamp identifier format</a></li> 850<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#registering-a-pmf-service">4.15.2. Registering a PMF service</a></li> 851<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#capturing-a-timestamp">4.15.3. Capturing a timestamp</a></li> 852<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#retrieving-a-timestamp">4.15.4. Retrieving a timestamp</a></li> 853<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#pmf-code-structure">4.15.5. PMF code structure</a></li> 854</ul> 855</li> 856<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#armv8-a-architecture-extensions">4.16. Armv8-A Architecture Extensions</a><ul> 857<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#armv8-1-a">4.16.1. Armv8.1-A</a></li> 858<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#armv8-2-a">4.16.2. Armv8.2-A</a></li> 859<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#armv8-3-a">4.16.3. Armv8.3-A</a></li> 860<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#armv8-5-a">4.16.4. Armv8.5-A</a></li> 861<li class="toctree-l4"><a class="reference internal" href="../design/firmware-design.html#armv7-a">4.16.5. Armv7-A</a></li> 862</ul> 863</li> 864<li class="toctree-l3"><a class="reference internal" href="../design/firmware-design.html#code-structure">4.17. Code Structure</a></li> 865</ul> 866</li> 867<li class="toctree-l2"><a class="reference internal" href="../design/interrupt-framework-design.html">5. Interrupt Management Framework</a><ul> 868<li class="toctree-l3"><a class="reference internal" href="../design/interrupt-framework-design.html#concepts">5.1. Concepts</a><ul> 869<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#interrupt-types">5.1.1. Interrupt types</a></li> 870<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#routing-model">5.1.2. Routing model</a></li> 871<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#valid-routing-models">5.1.3. Valid routing models</a></li> 872<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#mapping-of-interrupt-type-to-signal">5.1.4. Mapping of interrupt type to signal</a></li> 873</ul> 874</li> 875<li class="toctree-l3"><a class="reference internal" href="../design/interrupt-framework-design.html#assumptions-in-interrupt-management-framework">5.2. Assumptions in Interrupt Management Framework</a></li> 876<li class="toctree-l3"><a class="reference internal" href="../design/interrupt-framework-design.html#software-components">5.3. Software components</a></li> 877<li class="toctree-l3"><a class="reference internal" href="../design/interrupt-framework-design.html#interrupt-registration">5.4. Interrupt registration</a><ul> 878<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#el3-runtime-firmware">5.4.1. EL3 runtime firmware</a></li> 879<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#secure-payload-dispatcher">5.4.2. Secure payload dispatcher</a></li> 880<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#test-secure-payload-dispatcher-behavior">5.4.3. Test secure payload dispatcher behavior</a></li> 881<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#secure-payload">5.4.4. Secure payload</a></li> 882<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#test-secure-payload-behavior">5.4.5. Test secure payload behavior</a></li> 883</ul> 884</li> 885<li class="toctree-l3"><a class="reference internal" href="../design/interrupt-framework-design.html#interrupt-handling">5.5. Interrupt handling</a><ul> 886<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#id4">5.5.1. EL3 runtime firmware</a></li> 887<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#id5">5.5.2. Secure payload dispatcher</a></li> 888<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#secure-payload-interrupt-handling">5.5.3. Secure payload interrupt handling</a></li> 889</ul> 890</li> 891<li class="toctree-l3"><a class="reference internal" href="../design/interrupt-framework-design.html#other-considerations">5.6. Other considerations</a><ul> 892<li class="toctree-l4"><a class="reference internal" href="../design/interrupt-framework-design.html#implication-of-preempted-smc-on-non-secure-software">5.6.1. Implication of preempted SMC on Non-Secure Software</a></li> 893</ul> 894</li> 895</ul> 896</li> 897<li class="toctree-l2"><a class="reference internal" href="../design/psci-pd-tree.html">6. PSCI Power Domain Tree Structure</a><ul> 898<li class="toctree-l3"><a class="reference internal" href="../design/psci-pd-tree.html#requirements">6.1. Requirements</a></li> 899<li class="toctree-l3"><a class="reference internal" href="../design/psci-pd-tree.html#design">6.2. Design</a><ul> 900<li class="toctree-l4"><a class="reference internal" href="../design/psci-pd-tree.html#describing-a-power-domain-tree">6.2.1. Describing a power domain tree</a></li> 901<li class="toctree-l4"><a class="reference internal" href="../design/psci-pd-tree.html#removing-assumptions-about-mpidrs-used-in-a-platform">6.2.2. Removing assumptions about MPIDRs used in a platform</a></li> 902<li class="toctree-l4"><a class="reference internal" href="../design/psci-pd-tree.html#traversing-through-and-distinguishing-between-core-and-non-core-power-domains">6.2.3. Traversing through and distinguishing between core and non-core power domains</a></li> 903<li class="toctree-l4"><a class="reference internal" href="../design/psci-pd-tree.html#populating-the-power-domain-tree">6.2.4. Populating the power domain tree</a></li> 904</ul> 905</li> 906</ul> 907</li> 908<li class="toctree-l2"><a class="reference internal" href="../design/reset-design.html">7. CPU Reset</a><ul> 909<li class="toctree-l3"><a class="reference internal" href="../design/reset-design.html#general-reset-code-flow">7.1. General reset code flow</a></li> 910<li class="toctree-l3"><a class="reference internal" href="../design/reset-design.html#programmable-cpu-reset-address">7.2. Programmable CPU reset address</a></li> 911<li class="toctree-l3"><a class="reference internal" href="../design/reset-design.html#cold-boot-on-a-single-cpu">7.3. Cold boot on a single CPU</a></li> 912<li class="toctree-l3"><a class="reference internal" href="../design/reset-design.html#programmable-cpu-reset-address-cold-boot-on-a-single-cpu">7.4. Programmable CPU reset address, Cold boot on a single CPU</a></li> 913<li class="toctree-l3"><a class="reference internal" href="../design/reset-design.html#using-bl31-entrypoint-as-the-reset-address">7.5. Using BL31 entrypoint as the reset address</a><ul> 914<li class="toctree-l4"><a class="reference internal" href="../design/reset-design.html#determination-of-boot-path">7.5.1. Determination of boot path</a></li> 915<li class="toctree-l4"><a class="reference internal" href="../design/reset-design.html#platform-initialization">7.5.2. Platform initialization</a></li> 916</ul> 917</li> 918</ul> 919</li> 920<li class="toctree-l2"><a class="reference internal" href="../design/trusted-board-boot.html">8. Trusted Board Boot</a><ul> 921<li class="toctree-l3"><a class="reference internal" href="../design/trusted-board-boot.html#chain-of-trust">8.1. Chain of Trust</a></li> 922<li class="toctree-l3"><a class="reference internal" href="../design/trusted-board-boot.html#trusted-board-boot-sequence">8.2. Trusted Board Boot Sequence</a></li> 923<li class="toctree-l3"><a class="reference internal" href="../design/trusted-board-boot.html#authentication-framework">8.3. Authentication Framework</a></li> 924<li class="toctree-l3"><a class="reference internal" href="../design/trusted-board-boot.html#certificate-generation-tool">8.4. Certificate Generation Tool</a></li> 925<li class="toctree-l3"><a class="reference internal" href="../design/trusted-board-boot.html#authenticated-encryption-framework">8.5. Authenticated Encryption Framework</a></li> 926<li class="toctree-l3"><a class="reference internal" href="../design/trusted-board-boot.html#firmware-encryption-tool">8.6. Firmware Encryption Tool</a></li> 927</ul> 928</li> 929<li class="toctree-l2"><a class="reference internal" href="../design/trusted-board-boot-build.html">9. Building FIP images with support for Trusted Board Boot</a></li> 930</ul> 931</li> 932<li class="toctree-l1"><a class="reference internal" href="../plat/index.html">Platform Ports</a><ul> 933<li class="toctree-l2"><a class="reference internal" href="../plat/allwinner.html">1. Allwinner ARMv8 SoCs</a><ul> 934<li class="toctree-l3"><a class="reference internal" href="../plat/allwinner.html#building-tf-a">1.1. Building TF-A</a></li> 935<li class="toctree-l3"><a class="reference internal" href="../plat/allwinner.html#installation">1.2. Installation</a></li> 936<li class="toctree-l3"><a class="reference internal" href="../plat/allwinner.html#memory-layout">1.3. Memory layout</a><ul> 937<li class="toctree-l4"><a class="reference internal" href="../plat/allwinner.html#a64-h5-and-h6-socs">1.3.1. A64, H5 and H6 SoCs</a></li> 938<li class="toctree-l4"><a class="reference internal" href="../plat/allwinner.html#h616-soc">1.3.2. H616 SoC</a></li> 939</ul> 940</li> 941<li class="toctree-l3"><a class="reference internal" href="../plat/allwinner.html#trusted-os-dispatcher">1.4. Trusted OS dispatcher</a></li> 942</ul> 943</li> 944<li class="toctree-l2"><a class="reference internal" href="../plat/arm/index.html">2. Arm Development Platforms</a><ul> 945<li class="toctree-l3"><a class="reference internal" href="../plat/arm/juno/index.html">2.1. Arm Juno Development Platform</a><ul> 946<li class="toctree-l4"><a class="reference internal" href="../plat/arm/juno/index.html#platform-specific-build-options">2.1.1. Platform-specific build options</a></li> 947<li class="toctree-l4"><a class="reference internal" href="../plat/arm/juno/index.html#running-software-on-juno">2.1.2. Running software on Juno</a></li> 948<li class="toctree-l4"><a class="reference internal" href="../plat/arm/juno/index.html#preparing-tf-a-images">2.1.3. Preparing TF-A images</a></li> 949<li class="toctree-l4"><a class="reference internal" href="../plat/arm/juno/index.html#booting-firmware-update-images">2.1.4. Booting Firmware Update images</a></li> 950<li class="toctree-l4"><a class="reference internal" href="../plat/arm/juno/index.html#booting-an-el3-payload">2.1.5. Booting an EL3 payload</a></li> 951<li class="toctree-l4"><a class="reference internal" href="../plat/arm/juno/index.html#booting-a-preloaded-kernel-image">2.1.6. Booting a preloaded kernel image</a></li> 952<li class="toctree-l4"><a class="reference internal" href="../plat/arm/juno/index.html#testing-system-suspend">2.1.7. Testing System Suspend</a></li> 953<li class="toctree-l4"><a class="reference internal" href="../plat/arm/juno/index.html#additional-resources">2.1.8. Additional Resources</a></li> 954</ul> 955</li> 956<li class="toctree-l3"><a class="reference internal" href="../plat/arm/fvp/index.html">2.2. Arm Fixed Virtual Platforms (FVP)</a><ul> 957<li class="toctree-l4"><a class="reference internal" href="../plat/arm/fvp/index.html#fixed-virtual-platform-fvp-support">2.2.1. Fixed Virtual Platform (FVP) Support</a></li> 958<li class="toctree-l4"><a class="reference internal" href="../plat/arm/fvp/index.html#arm-fvp-platform-specific-build-options">2.2.2. Arm FVP Platform Specific Build Options</a></li> 959<li class="toctree-l4"><a class="reference internal" href="../plat/arm/fvp/index.html#booting-firmware-update-images">2.2.3. Booting Firmware Update images</a></li> 960<li class="toctree-l4"><a class="reference internal" href="../plat/arm/fvp/index.html#booting-an-el3-payload">2.2.4. Booting an EL3 payload</a></li> 961<li class="toctree-l4"><a class="reference internal" href="../plat/arm/fvp/index.html#booting-a-preloaded-kernel-image-base-fvp">2.2.5. Booting a preloaded kernel image (Base FVP)</a></li> 962</ul> 963</li> 964<li class="toctree-l3"><a class="reference internal" href="../plat/arm/fvp_r/index.html">2.3. ARM V8-R64 Fixed Virtual Platform (FVP)</a><ul> 965<li class="toctree-l4"><a class="reference internal" href="../plat/arm/fvp_r/index.html#boot-sequence">2.3.1. Boot Sequence</a></li> 966</ul> 967</li> 968<li class="toctree-l3"><a class="reference internal" href="../plat/arm/fvp-ve/index.html">2.4. Arm Versatile Express</a><ul> 969<li class="toctree-l4"><a class="reference internal" href="../plat/arm/fvp-ve/index.html#boot-sequence">2.4.1. Boot Sequence</a></li> 970<li class="toctree-l4"><a class="reference internal" href="../plat/arm/fvp-ve/index.html#how-to-build">2.4.2. How to build</a></li> 971</ul> 972</li> 973<li class="toctree-l3"><a class="reference internal" href="../plat/arm/tc/index.html">2.5. TC Total Compute Platform</a><ul> 974<li class="toctree-l4"><a class="reference internal" href="../plat/arm/tc/index.html#boot-sequence">2.5.1. Boot Sequence</a></li> 975</ul> 976</li> 977<li class="toctree-l3"><a class="reference internal" href="../plat/arm/arm_fpga/index.html">2.6. Arm FPGA Platform</a><ul> 978<li class="toctree-l4"><a class="reference internal" href="../plat/arm/arm_fpga/index.html#platform-specific-build-options">2.6.1. Platform-specific build options</a></li> 979<li class="toctree-l4"><a class="reference internal" href="../plat/arm/arm_fpga/index.html#building-the-tf-a-image">2.6.2. Building the TF-A image</a></li> 980<li class="toctree-l4"><a class="reference internal" href="../plat/arm/arm_fpga/index.html#running-the-tf-a-image">2.6.3. Running the TF-A image</a></li> 981</ul> 982</li> 983<li class="toctree-l3"><a class="reference internal" href="../plat/arm/arm-build-options.html">2.7. Arm Development Platform Build Options</a><ul> 984<li class="toctree-l4"><a class="reference internal" href="../plat/arm/arm-build-options.html#arm-platform-build-options">2.7.1. Arm Platform Build Options</a></li> 985<li class="toctree-l4"><a class="reference internal" href="../plat/arm/arm-build-options.html#arm-css-platform-specific-build-options">2.7.2. Arm CSS Platform-Specific Build Options</a></li> 986</ul> 987</li> 988<li class="toctree-l3"><a class="reference internal" href="../plat/arm/morello/index.html">2.8. Morello Platform</a><ul> 989<li class="toctree-l4"><a class="reference internal" href="../plat/arm/morello/index.html#boot-sequence">2.8.1. Boot Sequence</a></li> 990</ul> 991</li> 992<li class="toctree-l3"><a class="reference internal" href="../plat/arm/diphda/index.html">2.9. Diphda Platform</a><ul> 993<li class="toctree-l4"><a class="reference internal" href="../plat/arm/diphda/index.html#boot-sequence">2.9.1. Boot Sequence</a></li> 994</ul> 995</li> 996</ul> 997</li> 998<li class="toctree-l2"><a class="reference internal" href="../plat/deprecated.html">3. Deprecated platforms</a><ul> 999<li class="toctree-l3"><a class="reference internal" href="../plat/deprecated.html#process-of-deprecating-a-platform">3.1. Process of deprecating a platform</a></li> 1000<li class="toctree-l3"><a class="reference internal" href="../plat/deprecated.html#list-of-deprecated-platforms">3.2. List of deprecated platforms</a></li> 1001</ul> 1002</li> 1003<li class="toctree-l2"><a class="reference internal" href="../plat/meson-axg.html">4. Amlogic Meson A113D (AXG)</a></li> 1004<li class="toctree-l2"><a class="reference internal" href="../plat/meson-gxbb.html">5. Amlogic Meson S905 (GXBB)</a></li> 1005<li class="toctree-l2"><a class="reference internal" href="../plat/meson-gxl.html">6. Amlogic Meson S905x (GXL)</a></li> 1006<li class="toctree-l2"><a class="reference internal" href="../plat/meson-g12a.html">7. Amlogic Meson S905X2 (G12A)</a></li> 1007<li class="toctree-l2"><a class="reference internal" href="../plat/hikey.html">8. HiKey</a><ul> 1008<li class="toctree-l3"><a class="reference internal" href="../plat/hikey.html#how-to-build">8.1. How to build</a><ul> 1009<li class="toctree-l4"><a class="reference internal" href="../plat/hikey.html#code-locations">8.1.1. Code Locations</a></li> 1010<li class="toctree-l4"><a class="reference internal" href="../plat/hikey.html#build-procedure">8.1.2. Build Procedure</a></li> 1011</ul> 1012</li> 1013<li class="toctree-l3"><a class="reference internal" href="../plat/hikey.html#setup-console">8.2. Setup Console</a></li> 1014<li class="toctree-l3"><a class="reference internal" href="../plat/hikey.html#flash-images-in-recovery-mode">8.3. Flash images in recovery mode</a></li> 1015<li class="toctree-l3"><a class="reference internal" href="../plat/hikey.html#boot-uefi-in-normal-mode">8.4. Boot UEFI in normal mode</a></li> 1016</ul> 1017</li> 1018<li class="toctree-l2"><a class="reference internal" href="../plat/hikey960.html">9. HiKey960</a><ul> 1019<li class="toctree-l3"><a class="reference internal" href="../plat/hikey960.html#how-to-build">9.1. How to build</a><ul> 1020<li class="toctree-l4"><a class="reference internal" href="../plat/hikey960.html#code-locations">9.1.1. Code Locations</a></li> 1021<li class="toctree-l4"><a class="reference internal" href="../plat/hikey960.html#build-procedure">9.1.2. Build Procedure</a></li> 1022</ul> 1023</li> 1024<li class="toctree-l3"><a class="reference internal" href="../plat/hikey960.html#setup-console">9.2. Setup Console</a></li> 1025<li class="toctree-l3"><a class="reference internal" href="../plat/hikey960.html#boot-uefi-in-recovery-mode">9.3. Boot UEFI in recovery mode</a></li> 1026<li class="toctree-l3"><a class="reference internal" href="../plat/hikey960.html#boot-uefi-in-normal-mode">9.4. Boot UEFI in normal mode</a></li> 1027</ul> 1028</li> 1029<li class="toctree-l2"><a class="reference internal" href="../plat/intel-agilex.html">10. Intel Agilex SoCFPGA</a><ul> 1030<li class="toctree-l3"><a class="reference internal" href="../plat/intel-agilex.html#how-to-build">10.1. How to build</a><ul> 1031<li class="toctree-l4"><a class="reference internal" href="../plat/intel-agilex.html#code-locations">10.1.1. Code Locations</a></li> 1032<li class="toctree-l4"><a class="reference internal" href="../plat/intel-agilex.html#build-procedure">10.1.2. Build Procedure</a></li> 1033<li class="toctree-l4"><a class="reference internal" href="../plat/intel-agilex.html#install-procedure">10.1.3. Install Procedure</a></li> 1034</ul> 1035</li> 1036<li class="toctree-l3"><a class="reference internal" href="../plat/intel-agilex.html#boot-trace">10.2. Boot trace</a></li> 1037</ul> 1038</li> 1039<li class="toctree-l2"><a class="reference internal" href="../plat/intel-stratix10.html">11. Intel Stratix 10 SoCFPGA</a><ul> 1040<li class="toctree-l3"><a class="reference internal" href="../plat/intel-stratix10.html#how-to-build">11.1. How to build</a><ul> 1041<li class="toctree-l4"><a class="reference internal" href="../plat/intel-stratix10.html#code-locations">11.1.1. Code Locations</a></li> 1042<li class="toctree-l4"><a class="reference internal" href="../plat/intel-stratix10.html#build-procedure">11.1.2. Build Procedure</a></li> 1043<li class="toctree-l4"><a class="reference internal" href="../plat/intel-stratix10.html#install-procedure">11.1.3. Install Procedure</a></li> 1044</ul> 1045</li> 1046<li class="toctree-l3"><a class="reference internal" href="../plat/intel-stratix10.html#boot-trace">11.2. Boot trace</a></li> 1047</ul> 1048</li> 1049<li class="toctree-l2"><a class="reference internal" href="../plat/marvell/index.html">12. Marvell</a><ul> 1050<li class="toctree-l3"><a class="reference internal" href="../plat/marvell/armada/build.html">12.1. TF-A Build Instructions for Marvell Platforms</a><ul> 1051<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/build.html#build-instructions">12.1.1. Build Instructions</a></li> 1052<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/build.html#special-build-flags">12.1.2. Special Build Flags</a></li> 1053<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/build.html#build-output">12.1.3. Build output</a></li> 1054<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/build.html#tools-and-external-components-installation">12.1.4. Tools and external components installation</a></li> 1055</ul> 1056</li> 1057<li class="toctree-l3"><a class="reference internal" href="../plat/marvell/armada/porting.html">12.2. TF-A Porting Guide for Marvell Platforms</a><ul> 1058<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/porting.html#source-code-structure">12.2.1. Source Code Structure</a></li> 1059<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/porting.html#armada-70x0-armada-80x0-porting">12.2.2. Armada-70x0/Armada-80x0 Porting</a></li> 1060</ul> 1061</li> 1062<li class="toctree-l3"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-a8k-addr-map.html">12.3. Address decoding flow and address translation units of Marvell Armada 8K SoC family</a></li> 1063<li class="toctree-l3"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-amb.html">12.4. AMB - AXI MBUS address decoding</a><ul> 1064<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-amb.html#mandatory-functions">12.4.1. Mandatory functions</a></li> 1065<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-amb.html#mandatory-structures">12.4.2. Mandatory structures</a></li> 1066<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-amb.html#examples">12.4.3. Examples</a></li> 1067</ul> 1068</li> 1069<li class="toctree-l3"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-ccu.html">12.5. Marvell CCU address decoding bindings</a><ul> 1070<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-ccu.html#mandatory-functions">12.5.1. Mandatory functions</a></li> 1071<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-ccu.html#mandatory-structures">12.5.2. Mandatory structures</a></li> 1072<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-ccu.html#example">12.5.3. Example</a></li> 1073</ul> 1074</li> 1075<li class="toctree-l3"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-io-win.html">12.6. Marvell IO WIN address decoding bindings</a><ul> 1076<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-io-win.html#mandatory-functions">12.6.1. Mandatory functions</a></li> 1077<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-io-win.html#mandatory-structures">12.6.2. Mandatory structures</a></li> 1078<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-io-win.html#example">12.6.3. Example</a></li> 1079</ul> 1080</li> 1081<li class="toctree-l3"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-iob.html">12.7. Marvell IOB address decoding bindings</a><ul> 1082<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-iob.html#mandatory-functions">12.7.1. Mandatory functions</a></li> 1083<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-iob.html#mandatory-structures">12.7.2. Mandatory structures</a></li> 1084<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-iob.html#target-id-options">12.7.3. Target ID options</a></li> 1085<li class="toctree-l4"><a class="reference internal" href="../plat/marvell/armada/misc/mvebu-iob.html#example">12.7.4. Example</a></li> 1086</ul> 1087</li> 1088</ul> 1089</li> 1090<li class="toctree-l2"><a class="reference internal" href="../plat/mt8183.html">13. MediaTek 8183</a><ul> 1091<li class="toctree-l3"><a class="reference internal" href="../plat/mt8183.html#boot-sequence">13.1. Boot Sequence</a></li> 1092<li class="toctree-l3"><a class="reference internal" href="../plat/mt8183.html#how-to-build">13.2. How to Build</a></li> 1093</ul> 1094</li> 1095<li class="toctree-l2"><a class="reference internal" href="../plat/mt8192.html">14. MediaTek 8192</a><ul> 1096<li class="toctree-l3"><a class="reference internal" href="../plat/mt8192.html#boot-sequence">14.1. Boot Sequence</a></li> 1097<li class="toctree-l3"><a class="reference internal" href="../plat/mt8192.html#how-to-build">14.2. How to Build</a></li> 1098</ul> 1099</li> 1100<li class="toctree-l2"><a class="reference internal" href="../plat/mt8195.html">15. MediaTek 8195</a><ul> 1101<li class="toctree-l3"><a class="reference internal" href="../plat/mt8195.html#boot-sequence">15.1. Boot Sequence</a></li> 1102<li class="toctree-l3"><a class="reference internal" href="../plat/mt8195.html#how-to-build">15.2. How to Build</a></li> 1103</ul> 1104</li> 1105<li class="toctree-l2"><a class="reference internal" href="../plat/nvidia-tegra.html">16. NVIDIA Tegra</a><ul> 1106<li class="toctree-l3"><a class="reference internal" href="../plat/nvidia-tegra.html#directory-structure">16.1. Directory structure</a></li> 1107<li class="toctree-l3"><a class="reference internal" href="../plat/nvidia-tegra.html#trusted-os-dispatcher">16.2. Trusted OS dispatcher</a></li> 1108<li class="toctree-l3"><a class="reference internal" href="../plat/nvidia-tegra.html#scatter-files">16.3. Scatter files</a></li> 1109<li class="toctree-l3"><a class="reference internal" href="../plat/nvidia-tegra.html#preparing-the-bl31-image-to-run-on-tegra-socs">16.4. Preparing the BL31 image to run on Tegra SoCs</a></li> 1110<li class="toctree-l3"><a class="reference internal" href="../plat/nvidia-tegra.html#power-management">16.5. Power Management</a></li> 1111<li class="toctree-l3"><a class="reference internal" href="../plat/nvidia-tegra.html#tegra-configs">16.6. Tegra configs</a></li> 1112</ul> 1113</li> 1114<li class="toctree-l2"><a class="reference internal" href="../plat/warp7.html">17. NXP i.MX7 WaRP7</a><ul> 1115<li class="toctree-l3"><a class="reference internal" href="../plat/warp7.html#boot-flow">17.1. Boot Flow</a></li> 1116<li class="toctree-l3"><a class="reference internal" href="../plat/warp7.html#build-instructions">17.2. Build Instructions</a><ul> 1117<li class="toctree-l4"><a class="reference internal" href="../plat/warp7.html#u-boot">17.2.1. U-Boot</a></li> 1118<li class="toctree-l4"><a class="reference internal" href="../plat/warp7.html#op-tee">17.2.2. OP-TEE</a></li> 1119<li class="toctree-l4"><a class="reference internal" href="../plat/warp7.html#tf-a">17.2.3. TF-A</a></li> 1120<li class="toctree-l4"><a class="reference internal" href="../plat/warp7.html#fip">17.2.4. FIP</a></li> 1121</ul> 1122</li> 1123<li class="toctree-l3"><a class="reference internal" href="../plat/warp7.html#deploy-images">17.3. Deploy Images</a></li> 1124<li class="toctree-l3"><a class="reference internal" href="../plat/warp7.html#signing-bl2">17.4. Signing BL2</a></li> 1125</ul> 1126</li> 1127<li class="toctree-l2"><a class="reference internal" href="../plat/imx8.html">18. NXP i.MX 8 Series</a><ul> 1128<li class="toctree-l3"><a class="reference internal" href="../plat/imx8.html#boot-sequence">18.1. Boot Sequence</a></li> 1129<li class="toctree-l3"><a class="reference internal" href="../plat/imx8.html#how-to-build">18.2. How to build</a><ul> 1130<li class="toctree-l4"><a class="reference internal" href="../plat/imx8.html#build-procedure">18.2.1. Build Procedure</a></li> 1131<li class="toctree-l4"><a class="reference internal" href="../plat/imx8.html#deploy-tf-a-images">18.2.2. Deploy TF-A Images</a></li> 1132</ul> 1133</li> 1134</ul> 1135</li> 1136<li class="toctree-l2"><a class="reference internal" href="../plat/imx8m.html">19. NXP i.MX 8M Series</a><ul> 1137<li class="toctree-l3"><a class="reference internal" href="../plat/imx8m.html#boot-sequence">19.1. Boot Sequence</a></li> 1138<li class="toctree-l3"><a class="reference internal" href="../plat/imx8m.html#how-to-build">19.2. How to build</a><ul> 1139<li class="toctree-l4"><a class="reference internal" href="../plat/imx8m.html#build-procedure">19.2.1. Build Procedure</a></li> 1140<li class="toctree-l4"><a class="reference internal" href="../plat/imx8m.html#deploy-tf-a-images">19.2.2. Deploy TF-A Images</a></li> 1141</ul> 1142</li> 1143<li class="toctree-l3"><a class="reference internal" href="../plat/imx8m.html#tbbr-boot-sequence">19.3. TBBR Boot Sequence</a></li> 1144</ul> 1145</li> 1146<li class="toctree-l2"><a class="reference internal" href="../plat/ls1043a.html">20. NXP QorIQ® LS1043A</a><ul> 1147<li class="toctree-l3"><a class="reference internal" href="../plat/ls1043a.html#ls1043ardb-specification">20.1. LS1043ARDB Specification:</a></li> 1148<li class="toctree-l3"><a class="reference internal" href="../plat/ls1043a.html#boot-sequence">20.2. Boot Sequence</a></li> 1149<li class="toctree-l3"><a class="reference internal" href="../plat/ls1043a.html#how-to-build">20.3. How to build</a><ul> 1150<li class="toctree-l4"><a class="reference internal" href="../plat/ls1043a.html#build-procedure">20.3.1. Build Procedure</a></li> 1151<li class="toctree-l4"><a class="reference internal" href="../plat/ls1043a.html#deploy-tf-a-images">20.3.2. Deploy TF-A Images</a></li> 1152</ul> 1153</li> 1154</ul> 1155</li> 1156<li class="toctree-l2"><a class="reference internal" href="../plat/nxp/index.html">21. NXP Reference Development Platforms</a><ul> 1157<li class="toctree-l3"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html">21.1. <span class="sectnum">1.</span> NXP SoCs - Overview</a><ul> 1158<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html#table-of-supported-boot-modes-by-each-platform-platform-that-needs-fip-ddr">21.1.1. <span class="sectnum">1.1.</span> Table of supported boot-modes by each platform & platform that needs FIP-DDR:</a></li> 1159<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html#boot-sequence">21.1.2. <span class="sectnum">1.2.</span> Boot Sequence</a></li> 1160<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html#boot-sequence-with-fip-ddr">21.1.3. <span class="sectnum">1.3.</span> Boot Sequence with FIP-DDR</a></li> 1161<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html#ddr-memory-layout">21.1.4. <span class="sectnum">1.4.</span> DDR Memory Layout</a></li> 1162</ul> 1163</li> 1164<li class="toctree-l3"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html#how-to-build">21.2. <span class="sectnum">2.</span> How to build</a><ul> 1165<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html#code-locations">21.2.1. <span class="sectnum">2.1.</span> Code Locations</a></li> 1166<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html#build-procedure">21.2.2. <span class="sectnum">2.2.</span> Build Procedure</a></li> 1167</ul> 1168</li> 1169<li class="toctree-l3"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html#deploy-atf-images">21.3. <span class="sectnum">3.</span> Deploy ATF Images</a></li> 1170<li class="toctree-l3"><a class="reference internal" href="../plat/nxp/nxp-layerscape.html#trusted-board-boot">21.4. <span class="sectnum">4.</span> Trusted Board Boot:</a></li> 1171<li class="toctree-l3"><a class="reference internal" href="../plat/nxp/nxp-ls-fuse-prov.html">21.5. Steps to blow fuses on NXP LS SoC:</a></li> 1172<li class="toctree-l3"><a class="reference internal" href="../plat/nxp/nxp-ls-fuse-prov.html#second-method-to-do-the-fuse-provsioning">21.6. Second method to do the fuse provsioning:</a></li> 1173<li class="toctree-l3"><a class="reference internal" href="../plat/nxp/nxp-ls-tbbr.html">21.7. NXP Platforms:</a><ul> 1174<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-ls-tbbr.html#bare-minimum-preparation-to-run-tbbr-on-nxp-platforms">21.7.1. Bare-Minimum Preparation to run TBBR on NXP Platforms:</a></li> 1175<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-ls-tbbr.html#two-options-are-provided-for-trusted-board-boot">21.7.2. Two options are provided for TRUSTED_BOARD_BOOT:</a></li> 1176</ul> 1177</li> 1178<li class="toctree-l3"><a class="reference internal" href="../plat/nxp/nxp-ls-tbbr.html#option-1-cot-using-x-509-certificates">21.8. Option 1: CoT using X 509 certificates</a></li> 1179<li class="toctree-l3"><a class="reference internal" href="../plat/nxp/nxp-ls-tbbr.html#option-2-cot-using-nxp-csf-headers">21.9. Option 2: CoT using NXP CSF headers.</a><ul> 1180<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-ls-tbbr.html#deploy-atf-images">21.9.1. Deploy ATF Images</a></li> 1181<li class="toctree-l4"><a class="reference internal" href="../plat/nxp/nxp-ls-tbbr.html#verification-to-check-if-secure-state-is-achieved">21.9.2. Verification to check if Secure state is achieved:</a></li> 1182</ul> 1183</li> 1184</ul> 1185</li> 1186<li class="toctree-l2"><a class="reference internal" href="../plat/poplar.html">22. Poplar</a><ul> 1187<li class="toctree-l3"><a class="reference internal" href="../plat/poplar.html#how-to-build">22.1. How to build</a><ul> 1188<li class="toctree-l4"><a class="reference internal" href="../plat/poplar.html#code-locations">22.1.1. Code Locations</a></li> 1189<li class="toctree-l4"><a class="reference internal" href="../plat/poplar.html#build-procedure">22.1.2. Build Procedure</a></li> 1190</ul> 1191</li> 1192<li class="toctree-l3"><a class="reference internal" href="../plat/poplar.html#install-procedure">22.2. Install Procedure</a></li> 1193<li class="toctree-l3"><a class="reference internal" href="../plat/poplar.html#boot-trace">22.3. Boot trace</a></li> 1194</ul> 1195</li> 1196<li class="toctree-l2"><a class="reference internal" href="../plat/qemu.html">23. QEMU virt Armv8-A</a><ul> 1197<li class="toctree-l3"><a class="reference internal" href="../plat/qemu.html#getting-non-tf-images">23.1. Getting non-TF images</a></li> 1198<li class="toctree-l3"><a class="reference internal" href="../plat/qemu.html#booting-via-semi-hosting-option">23.2. Booting via semi-hosting option</a></li> 1199<li class="toctree-l3"><a class="reference internal" href="../plat/qemu.html#booting-via-flash-based-firmwares">23.3. Booting via flash based firmwares</a></li> 1200</ul> 1201</li> 1202<li class="toctree-l2"><a class="reference internal" href="../plat/qemu-sbsa.html">24. QEMU SBSA Target</a></li> 1203<li class="toctree-l2"><a class="reference internal" href="../plat/qti.html">25. Qualcomm Technologies, Inc.</a><ul> 1204<li class="toctree-l3"><a class="reference internal" href="../plat/qti.html#boot-trace">25.1. Boot Trace</a></li> 1205<li class="toctree-l3"><a class="reference internal" href="../plat/qti.html#how-to-build">25.2. How to build</a><ul> 1206<li class="toctree-l4"><a class="reference internal" href="../plat/qti.html#code-locations">25.2.1. Code Locations</a></li> 1207<li class="toctree-l4"><a class="reference internal" href="../plat/qti.html#build-procedure">25.2.2. Build Procedure</a></li> 1208</ul> 1209</li> 1210</ul> 1211</li> 1212<li class="toctree-l2"><a class="reference internal" href="../plat/rpi3.html">26. Raspberry Pi 3</a><ul> 1213<li class="toctree-l3"><a class="reference internal" href="../plat/rpi3.html#design">26.1. Design</a><ul> 1214<li class="toctree-l4"><a class="reference internal" href="../plat/rpi3.html#placement-of-images">26.1.1. Placement of images</a></li> 1215<li class="toctree-l4"><a class="reference internal" href="../plat/rpi3.html#boot-sequence">26.1.2. Boot sequence</a></li> 1216<li class="toctree-l4"><a class="reference internal" href="../plat/rpi3.html#secondary-cores">26.1.3. Secondary cores</a></li> 1217</ul> 1218</li> 1219<li class="toctree-l3"><a class="reference internal" href="../plat/rpi3.html#build-instructions">26.2. Build Instructions</a><ul> 1220<li class="toctree-l4"><a class="reference internal" href="../plat/rpi3.html#building-the-firmware-for-kernels-that-don-t-support-psci">26.2.1. Building the firmware for kernels that don’t support PSCI</a></li> 1221<li class="toctree-l4"><a class="reference internal" href="../plat/rpi3.html#building-the-firmware-for-kernels-that-support-psci">26.2.2. Building the firmware for kernels that support PSCI</a></li> 1222</ul> 1223</li> 1224<li class="toctree-l3"><a class="reference internal" href="../plat/rpi3.html#aarch64-kernel-build-instructions">26.3. AArch64 kernel build instructions</a></li> 1225<li class="toctree-l3"><a class="reference internal" href="../plat/rpi3.html#setup-sd-card">26.4. Setup SD card</a></li> 1226</ul> 1227</li> 1228<li class="toctree-l2"><a class="reference internal" href="../plat/rpi4.html">27. Raspberry Pi 4</a><ul> 1229<li class="toctree-l3"><a class="reference internal" href="../plat/rpi4.html#build-instructions">27.1. Build Instructions</a></li> 1230<li class="toctree-l3"><a class="reference internal" href="../plat/rpi4.html#tf-a-port-design">27.2. TF-A port design</a></li> 1231</ul> 1232</li> 1233<li class="toctree-l2"><a class="reference internal" href="../plat/rcar-gen3.html">28. Renesas R-Car</a><ul> 1234<li class="toctree-l3"><a class="reference internal" href="../plat/rcar-gen3.html#renesas-r-car-gen3-evaluation-boards">28.1. Renesas R-Car Gen3 evaluation boards:</a></li> 1235<li class="toctree-l3"><a class="reference internal" href="../plat/rcar-gen3.html#overview">28.2. Overview</a></li> 1236<li class="toctree-l3"><a class="reference internal" href="../plat/rcar-gen3.html#how-to-build">28.3. How to build</a><ul> 1237<li class="toctree-l4"><a class="reference internal" href="../plat/rcar-gen3.html#build-tested">28.3.1. Build Tested:</a></li> 1238<li class="toctree-l4"><a class="reference internal" href="../plat/rcar-gen3.html#system-tested">28.3.2. System Tested:</a></li> 1239<li class="toctree-l4"><a class="reference internal" href="../plat/rcar-gen3.html#tf-a-build-procedure">28.3.3. TF-A Build Procedure</a></li> 1240<li class="toctree-l4"><a class="reference internal" href="../plat/rcar-gen3.html#install-procedure">28.3.4. Install Procedure</a></li> 1241</ul> 1242</li> 1243<li class="toctree-l3"><a class="reference internal" href="../plat/rcar-gen3.html#boot-trace">28.4. Boot trace</a></li> 1244</ul> 1245</li> 1246<li class="toctree-l2"><a class="reference internal" href="../plat/rz-g2.html">29. Renesas RZ/G</a><ul> 1247<li class="toctree-l3"><a class="reference internal" href="../plat/rz-g2.html#renesas-rz-g2-reference-platforms">29.1. Renesas RZ/G2 reference platforms:</a></li> 1248<li class="toctree-l3"><a class="reference internal" href="../plat/rz-g2.html#overview">29.2. Overview</a></li> 1249<li class="toctree-l3"><a class="reference internal" href="../plat/rz-g2.html#how-to-build">29.3. How to build</a><ul> 1250<li class="toctree-l4"><a class="reference internal" href="../plat/rz-g2.html#build-tested">29.3.1. Build Tested:</a></li> 1251<li class="toctree-l4"><a class="reference internal" href="../plat/rz-g2.html#system-tested">29.3.2. System Tested:</a></li> 1252<li class="toctree-l4"><a class="reference internal" href="../plat/rz-g2.html#tf-a-build-procedure">29.3.3. TF-A Build Procedure</a></li> 1253<li class="toctree-l4"><a class="reference internal" href="../plat/rz-g2.html#install-procedure">29.3.4. Install Procedure</a></li> 1254</ul> 1255</li> 1256<li class="toctree-l3"><a class="reference internal" href="../plat/rz-g2.html#boot-trace">29.4. Boot trace</a></li> 1257</ul> 1258</li> 1259<li class="toctree-l2"><a class="reference internal" href="../plat/rockchip.html">30. Rockchip SoCs</a><ul> 1260<li class="toctree-l3"><a class="reference internal" href="../plat/rockchip.html#boot-sequence">30.1. Boot Sequence</a></li> 1261<li class="toctree-l3"><a class="reference internal" href="../plat/rockchip.html#how-to-build">30.2. How to build</a></li> 1262<li class="toctree-l3"><a class="reference internal" href="../plat/rockchip.html#how-to-deploy">30.3. How to deploy</a></li> 1263</ul> 1264</li> 1265<li class="toctree-l2"><a class="reference internal" href="../plat/socionext-uniphier.html">31. Socionext UniPhier</a><ul> 1266<li class="toctree-l3"><a class="reference internal" href="../plat/socionext-uniphier.html#boot-flow">31.1. Boot Flow</a></li> 1267<li class="toctree-l3"><a class="reference internal" href="../plat/socionext-uniphier.html#basic-build">31.2. Basic Build</a></li> 1268<li class="toctree-l3"><a class="reference internal" href="../plat/socionext-uniphier.html#optional-features">31.3. Optional features</a></li> 1269</ul> 1270</li> 1271<li class="toctree-l2"><a class="reference internal" href="../plat/synquacer.html">32. Socionext Synquacer</a><ul> 1272<li class="toctree-l3"><a class="reference internal" href="../plat/synquacer.html#how-to-build">32.1. How to build</a><ul> 1273<li class="toctree-l4"><a class="reference internal" href="../plat/synquacer.html#code-locations">32.1.1. Code Locations</a></li> 1274<li class="toctree-l4"><a class="reference internal" href="../plat/synquacer.html#boot-flow">32.1.2. Boot Flow</a></li> 1275<li class="toctree-l4"><a class="reference internal" href="../plat/synquacer.html#build-procedure">32.1.3. Build Procedure</a></li> 1276<li class="toctree-l4"><a class="reference internal" href="../plat/synquacer.html#install-the-system-firmware">32.1.4. Install the System Firmware</a></li> 1277</ul> 1278</li> 1279</ul> 1280</li> 1281<li class="toctree-l2"><a class="reference internal" href="../plat/stm32mp1.html">33. STMicroelectronics STM32MP1</a><ul> 1282<li class="toctree-l3"><a class="reference internal" href="../plat/stm32mp1.html#stm32mp1-versions">33.1. STM32MP1 Versions</a></li> 1283<li class="toctree-l3"><a class="reference internal" href="../plat/stm32mp1.html#design">33.2. Design</a><ul> 1284<li class="toctree-l4"><a class="reference internal" href="../plat/stm32mp1.html#boot-with-fip">33.2.1. Boot with FIP</a></li> 1285<li class="toctree-l4"><a class="reference internal" href="../plat/stm32mp1.html#stm32image-bootchain">33.2.2. STM32IMAGE bootchain</a></li> 1286<li class="toctree-l4"><a class="reference internal" href="../plat/stm32mp1.html#memory-mapping">33.2.3. Memory mapping</a></li> 1287<li class="toctree-l4"><a class="reference internal" href="../plat/stm32mp1.html#boot-sequence">33.2.4. Boot sequence</a></li> 1288</ul> 1289</li> 1290<li class="toctree-l3"><a class="reference internal" href="../plat/stm32mp1.html#build-instructions">33.3. Build Instructions</a><ul> 1291<li class="toctree-l4"><a class="reference internal" href="../plat/stm32mp1.html#id1">33.3.1. Boot with FIP</a></li> 1292<li class="toctree-l4"><a class="reference internal" href="../plat/stm32mp1.html#id2">33.3.2. STM32IMAGE bootchain</a></li> 1293</ul> 1294</li> 1295<li class="toctree-l3"><a class="reference internal" href="../plat/stm32mp1.html#populate-sd-card">33.4. Populate SD-card</a><ul> 1296<li class="toctree-l4"><a class="reference internal" href="../plat/stm32mp1.html#id3">33.4.1. Boot with FIP</a></li> 1297<li class="toctree-l4"><a class="reference internal" href="../plat/stm32mp1.html#id4">33.4.2. STM32IMAGE bootchain</a></li> 1298</ul> 1299</li> 1300</ul> 1301</li> 1302<li class="toctree-l2"><a class="reference internal" href="../plat/ti-k3.html">34. Texas Instruments K3</a><ul> 1303<li class="toctree-l3"><a class="reference internal" href="../plat/ti-k3.html#boot-flow">34.1. Boot Flow</a></li> 1304<li class="toctree-l3"><a class="reference internal" href="../plat/ti-k3.html#build-instructions">34.2. Build Instructions</a></li> 1305<li class="toctree-l3"><a class="reference internal" href="../plat/ti-k3.html#deploy-images">34.3. Deploy Images</a></li> 1306</ul> 1307</li> 1308<li class="toctree-l2"><a class="reference internal" href="../plat/xilinx-versal.html">35. Xilinx Versal</a><ul> 1309<li class="toctree-l3"><a class="reference internal" href="../plat/xilinx-versal.html#xilinx-versal-platform-specific-build-options">35.1. Xilinx Versal platform specific build options</a></li> 1310<li class="toctree-l3"><a class="reference internal" href="../plat/xilinx-versal.html#plm-tf-a-parameter-passing">35.2. # PLM->TF-A Parameter Passing</a></li> 1311</ul> 1312</li> 1313<li class="toctree-l2"><a class="reference internal" href="../plat/xilinx-zynqmp.html">36. Xilinx Zynq UltraScale+ MPSoC</a><ul> 1314<li class="toctree-l3"><a class="reference internal" href="../plat/xilinx-zynqmp.html#zynqmp-platform-specific-build-options">36.1. ZynqMP platform specific build options</a></li> 1315<li class="toctree-l3"><a class="reference internal" href="../plat/xilinx-zynqmp.html#fsbl-tf-a-parameter-passing">36.2. FSBL->TF-A Parameter Passing</a></li> 1316<li class="toctree-l3"><a class="reference internal" href="../plat/xilinx-zynqmp.html#power-domain-tree">36.3. Power Domain Tree</a></li> 1317</ul> 1318</li> 1319<li class="toctree-l2"><a class="reference internal" href="../plat/brcm-stingray.html">37. Broadcom Stingray</a><ul> 1320<li class="toctree-l3"><a class="reference internal" href="../plat/brcm-stingray.html#description">37.1. Description</a></li> 1321<li class="toctree-l3"><a class="reference internal" href="../plat/brcm-stingray.html#boot-sequence">37.2. Boot Sequence</a><ul> 1322<li class="toctree-l4"><a class="reference internal" href="../plat/brcm-stingray.html#code-locations">37.2.1. Code Locations</a></li> 1323</ul> 1324</li> 1325<li class="toctree-l3"><a class="reference internal" href="../plat/brcm-stingray.html#how-to-build">37.3. How to build</a><ul> 1326<li class="toctree-l4"><a class="reference internal" href="../plat/brcm-stingray.html#build-procedure">37.3.1. Build Procedure</a></li> 1327<li class="toctree-l4"><a class="reference internal" href="../plat/brcm-stingray.html#deploy-tf-a-images">37.3.2. Deploy TF-A Images</a></li> 1328</ul> 1329</li> 1330</ul> 1331</li> 1332</ul> 1333</li> 1334<li class="toctree-l1"><a class="reference internal" href="../perf/index.html">Performance & Testing</a><ul> 1335<li class="toctree-l2"><a class="reference internal" href="../perf/psci-performance-juno.html">1. PSCI Performance Measurements on Arm Juno Development Platform</a><ul> 1336<li class="toctree-l3"><a class="reference internal" href="../perf/psci-performance-juno.html#method">1.1. Method</a></li> 1337<li class="toctree-l3"><a class="reference internal" href="../perf/psci-performance-juno.html#results-and-commentary">1.2. Results and Commentary</a><ul> 1338<li class="toctree-l4"><a class="reference internal" href="../perf/psci-performance-juno.html#cpu-suspend-to-deepest-power-level-on-all-cpus-in-parallel">1.2.1. <code class="docutils literal notranslate"><span class="pre">CPU_SUSPEND</span></code> to deepest power level on all CPUs in parallel</a></li> 1339<li class="toctree-l4"><a class="reference internal" href="../perf/psci-performance-juno.html#cpu-suspend-to-power-level-0-on-all-cpus-in-parallel">1.2.2. <code class="docutils literal notranslate"><span class="pre">CPU_SUSPEND</span></code> to power level 0 on all CPUs in parallel</a></li> 1340<li class="toctree-l4"><a class="reference internal" href="../perf/psci-performance-juno.html#cpu-suspend-to-deepest-power-level-on-all-cpus-in-sequence">1.2.3. <code class="docutils literal notranslate"><span class="pre">CPU_SUSPEND</span></code> to deepest power level on all CPUs in sequence</a></li> 1341<li class="toctree-l4"><a class="reference internal" href="../perf/psci-performance-juno.html#cpu-suspend-to-power-level-0-on-all-cpus-in-sequence">1.2.4. <code class="docutils literal notranslate"><span class="pre">CPU_SUSPEND</span></code> to power level 0 on all CPUs in sequence</a></li> 1342<li class="toctree-l4"><a class="reference internal" href="../perf/psci-performance-juno.html#cpu-off-on-all-non-lead-cpus-in-sequence-then-cpu-suspend-on-lead-cpu-to-deepest-power-level">1.2.5. <code class="docutils literal notranslate"><span class="pre">CPU_OFF</span></code> on all non-lead CPUs in sequence then <code class="docutils literal notranslate"><span class="pre">CPU_SUSPEND</span></code> on lead CPU to deepest power level</a></li> 1343<li class="toctree-l4"><a class="reference internal" href="../perf/psci-performance-juno.html#psci-version-on-all-cpus-in-parallel">1.2.6. <code class="docutils literal notranslate"><span class="pre">PSCI_VERSION</span></code> on all CPUs in parallel</a></li> 1344</ul> 1345</li> 1346</ul> 1347</li> 1348<li class="toctree-l2"><a class="reference internal" href="../perf/tsp.html">2. Test Secure Payload (TSP) and Dispatcher (TSPD)</a><ul> 1349<li class="toctree-l3"><a class="reference internal" href="../perf/tsp.html#building-the-test-secure-payload">2.1. Building the Test Secure Payload</a></li> 1350</ul> 1351</li> 1352<li class="toctree-l2"><a class="reference internal" href="../perf/performance-monitoring-unit.html">3. Performance Monitoring Unit</a><ul> 1353<li class="toctree-l3"><a class="reference internal" href="../perf/performance-monitoring-unit.html#pmu-counters">3.1. PMU Counters</a><ul> 1354<li class="toctree-l4"><a class="reference internal" href="../perf/performance-monitoring-unit.html#architectural-mappings">3.1.1. Architectural mappings</a></li> 1355</ul> 1356</li> 1357<li class="toctree-l3"><a class="reference internal" href="../perf/performance-monitoring-unit.html#configuring-the-pmu-for-counting-events">3.2. Configuring the PMU for counting events</a><ul> 1358<li class="toctree-l4"><a class="reference internal" href="../perf/performance-monitoring-unit.html#id1">3.2.1. Architectural mappings</a></li> 1359<li class="toctree-l4"><a class="reference internal" href="../perf/performance-monitoring-unit.html#relevant-register-fields">3.2.2. Relevant register fields</a></li> 1360</ul> 1361</li> 1362</ul> 1363</li> 1364</ul> 1365</li> 1366<li class="toctree-l1"><a class="reference internal" href="../security_advisories/index.html">Security Advisories</a><ul> 1367<li class="toctree-l2"><a class="reference internal" href="../security_advisories/security-advisory-tfv-1.html">1. Advisory TFV-1 (CVE-2016-10319)</a></li> 1368<li class="toctree-l2"><a class="reference internal" href="../security_advisories/security-advisory-tfv-2.html">2. Advisory TFV-2 (CVE-2017-7564)</a></li> 1369<li class="toctree-l2"><a class="reference internal" href="../security_advisories/security-advisory-tfv-3.html">3. Advisory TFV-3 (CVE-2017-7563)</a></li> 1370<li class="toctree-l2"><a class="reference internal" href="../security_advisories/security-advisory-tfv-4.html">4. Advisory TFV-4 (CVE-2017-9607)</a></li> 1371<li class="toctree-l2"><a class="reference internal" href="../security_advisories/security-advisory-tfv-5.html">5. Advisory TFV-5 (CVE-2017-15031)</a></li> 1372<li class="toctree-l2"><a class="reference internal" href="../security_advisories/security-advisory-tfv-6.html">6. Advisory TFV-6 (CVE-2017-5753, CVE-2017-5715, CVE-2017-5754)</a><ul> 1373<li class="toctree-l3"><a class="reference internal" href="../security_advisories/security-advisory-tfv-6.html#variant-1-cve-2017-5753">6.1. Variant 1 (CVE-2017-5753)</a></li> 1374<li class="toctree-l3"><a class="reference internal" href="../security_advisories/security-advisory-tfv-6.html#variant-2-cve-2017-5715">6.2. Variant 2 (CVE-2017-5715)</a></li> 1375<li class="toctree-l3"><a class="reference internal" href="../security_advisories/security-advisory-tfv-6.html#variant-3-cve-2017-5754">6.3. Variant 3 (CVE-2017-5754)</a></li> 1376</ul> 1377</li> 1378<li class="toctree-l2"><a class="reference internal" href="../security_advisories/security-advisory-tfv-7.html">7. Advisory TFV-7 (CVE-2018-3639)</a><ul> 1379<li class="toctree-l3"><a class="reference internal" href="../security_advisories/security-advisory-tfv-7.html#static-mitigation">7.1. Static mitigation</a></li> 1380<li class="toctree-l3"><a class="reference internal" href="../security_advisories/security-advisory-tfv-7.html#dynamic-mitigation">7.2. Dynamic mitigation</a></li> 1381</ul> 1382</li> 1383<li class="toctree-l2"><a class="reference internal" href="../security_advisories/security-advisory-tfv-8.html">8. Advisory TFV-8 (CVE-2018-19440)</a></li> 1384</ul> 1385</li> 1386<li class="toctree-l1"><a class="reference internal" href="../design_documents/index.html">Design Documents</a><ul> 1387<li class="toctree-l2"><a class="reference internal" href="../design_documents/cmake_framework.html">1. TF-A CMake buildsystem</a><ul> 1388<li class="toctree-l3"><a class="reference internal" href="../design_documents/cmake_framework.html#abstract">1.1. Abstract</a></li> 1389<li class="toctree-l3"><a class="reference internal" href="../design_documents/cmake_framework.html#introduction">1.2. Introduction</a></li> 1390<li class="toctree-l3"><a class="reference internal" href="../design_documents/cmake_framework.html#main-features">1.3. Main features</a><ul> 1391<li class="toctree-l4"><a class="reference internal" href="../design_documents/cmake_framework.html#structured-configuration-description">1.3.1. Structured configuration description</a></li> 1392<li class="toctree-l4"><a class="reference internal" href="../design_documents/cmake_framework.html#target-description">1.3.2. Target description</a></li> 1393<li class="toctree-l4"><a class="reference internal" href="../design_documents/cmake_framework.html#compiler-abstraction">1.3.3. Compiler abstraction</a></li> 1394<li class="toctree-l4"><a class="reference internal" href="../design_documents/cmake_framework.html#external-tools">1.3.4. External tools</a></li> 1395</ul> 1396</li> 1397<li class="toctree-l3"><a class="reference internal" href="../design_documents/cmake_framework.html#workflow">1.4. Workflow</a></li> 1398<li class="toctree-l3"><a class="reference internal" href="../design_documents/cmake_framework.html#example">1.5. Example</a></li> 1399</ul> 1400</li> 1401<li class="toctree-l2"><a class="reference internal" href="../design_documents/measured_boot_poc.html">2. Interaction between Measured Boot and an fTPM (PoC)</a><ul> 1402<li class="toctree-l3"><a class="reference internal" href="../design_documents/measured_boot_poc.html#components">2.1. Components</a></li> 1403<li class="toctree-l3"><a class="reference internal" href="../design_documents/measured_boot_poc.html#building-the-poc-for-the-arm-fvp-platform">2.2. Building the PoC for the Arm FVP platform</a></li> 1404<li class="toctree-l3"><a class="reference internal" href="../design_documents/measured_boot_poc.html#running-and-using-the-poc-on-the-armv8-a-foundation-aem-fvp">2.3. Running and using the PoC on the Armv8-A Foundation AEM FVP</a></li> 1405<li class="toctree-l3"><a class="reference internal" href="../design_documents/measured_boot_poc.html#fine-tuning-the-ftpm-ta">2.4. Fine-tuning the fTPM TA</a></li> 1406</ul> 1407</li> 1408</ul> 1409</li> 1410<li class="toctree-l1"><a class="reference internal" href="../threat_model/index.html">Threat Model</a><ul> 1411<li class="toctree-l2"><a class="reference internal" href="../threat_model/threat_model.html">1. Generic threat model</a><ul> 1412<li class="toctree-l3"><a class="reference internal" href="../threat_model/threat_model.html#introduction">1.1. Introduction</a></li> 1413<li class="toctree-l3"><a class="reference internal" href="../threat_model/threat_model.html#target-of-evaluation">1.2. Target of Evaluation</a><ul> 1414<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model.html#data-flow-diagram">1.2.1. Data Flow Diagram</a></li> 1415</ul> 1416</li> 1417<li class="toctree-l3"><a class="reference internal" href="../threat_model/threat_model.html#threat-analysis">1.3. Threat Analysis</a><ul> 1418<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model.html#assets">1.3.1. Assets</a></li> 1419<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model.html#threat-agents">1.3.2. Threat Agents</a></li> 1420<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model.html#threat-types">1.3.3. Threat Types</a></li> 1421<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model.html#threat-risk-ratings">1.3.4. Threat Risk Ratings</a></li> 1422<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model.html#threat-assessment">1.3.5. Threat Assessment</a></li> 1423</ul> 1424</li> 1425</ul> 1426</li> 1427<li class="toctree-l2"><a class="reference internal" href="../threat_model/threat_model_spm.html">2. SPMC threat model</a><ul> 1428<li class="toctree-l3"><a class="reference internal" href="../threat_model/threat_model_spm.html#introduction">2.1. Introduction</a></li> 1429<li class="toctree-l3"><a class="reference internal" href="../threat_model/threat_model_spm.html#target-of-evaluation">2.2. Target of Evaluation</a><ul> 1430<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model_spm.html#data-flow-diagram">2.2.1. Data Flow Diagram</a></li> 1431</ul> 1432</li> 1433<li class="toctree-l3"><a class="reference internal" href="../threat_model/threat_model_spm.html#threat-analysis">2.3. Threat Analysis</a><ul> 1434<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model_spm.html#trust-boundaries">2.3.1. Trust boundaries</a></li> 1435<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model_spm.html#assets">2.3.2. Assets</a></li> 1436<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model_spm.html#threat-agents">2.3.3. Threat Agents</a></li> 1437<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model_spm.html#threat-types">2.3.4. Threat types</a></li> 1438<li class="toctree-l4"><a class="reference internal" href="../threat_model/threat_model_spm.html#threat-assessment">2.3.5. Threat Assessment</a></li> 1439</ul> 1440</li> 1441</ul> 1442</li> 1443</ul> 1444</li> 1445<li class="toctree-l1"><a class="reference internal" href="../change-log.html">Change Log & Release Notes</a><ul> 1446<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id1">2.6 (2021-11-22)</a><ul> 1447<li class="toctree-l3"><a class="reference internal" href="../change-log.html#breaking-changes">⚠ BREAKING CHANGES</a></li> 1448<li class="toctree-l3"><a class="reference internal" href="../change-log.html#new-features">New Features</a></li> 1449<li class="toctree-l3"><a class="reference internal" href="../change-log.html#resolved-issues">Resolved Issues</a></li> 1450</ul> 1451</li> 1452<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id2">2.5.0 (2021-05-17)</a><ul> 1453<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id3">New Features</a></li> 1454<li class="toctree-l3"><a class="reference internal" href="../change-log.html#changed">Changed</a></li> 1455<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id4">Resolved Issues</a></li> 1456</ul> 1457</li> 1458<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id5">2.4.0 (2020-11-17)</a><ul> 1459<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id6">New Features</a></li> 1460<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id7">Changed</a></li> 1461<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id8">Resolved Issues</a></li> 1462<li class="toctree-l3"><a class="reference internal" href="../change-log.html#known-issues">Known Issues</a></li> 1463</ul> 1464</li> 1465<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id9">2.3 (2020-04-20)</a><ul> 1466<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id10">New Features</a></li> 1467<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id11">Changed</a></li> 1468<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id12">Resolved Issues</a></li> 1469<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id13">Known Issues</a></li> 1470</ul> 1471</li> 1472<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id14">2.2 (2019-10-22)</a><ul> 1473<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id15">New Features</a></li> 1474<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id16">Changed</a></li> 1475<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id17">Resolved Issues</a></li> 1476<li class="toctree-l3"><a class="reference internal" href="../change-log.html#deprecations">Deprecations</a></li> 1477<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id18">Known Issues</a></li> 1478</ul> 1479</li> 1480<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id19">2.1 (2019-03-29)</a><ul> 1481<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id20">New Features</a></li> 1482<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id21">Changed</a></li> 1483<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id22">Resolved Issues</a></li> 1484<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id23">Deprecations</a></li> 1485<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id24">Known Issues</a></li> 1486</ul> 1487</li> 1488<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id25">2.0 (2018-10-02)</a><ul> 1489<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id26">New Features</a></li> 1490<li class="toctree-l3"><a class="reference internal" href="../change-log.html#issues-resolved-since-last-release">Issues resolved since last release</a></li> 1491<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id27">Known Issues</a></li> 1492</ul> 1493</li> 1494<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id28">1.6 (2018-09-21)</a><ul> 1495<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id29">New Features</a></li> 1496<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id30">Issues resolved since last release</a></li> 1497<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id31">Known Issues</a></li> 1498</ul> 1499</li> 1500<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id32">1.5 (2018-03-20)</a><ul> 1501<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id33">New features</a></li> 1502<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id34">Issues resolved since last release</a></li> 1503<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id35">Known Issues</a></li> 1504</ul> 1505</li> 1506<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id36">1.4 (2017-07-07)</a><ul> 1507<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id37">New features</a></li> 1508<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id38">Issues resolved since last release</a></li> 1509<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id39">Known Issues</a></li> 1510</ul> 1511</li> 1512<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id40">1.3 (2016-10-13)</a><ul> 1513<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id41">New features</a></li> 1514<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id42">Issues resolved since last release</a></li> 1515<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id43">Known issues</a></li> 1516</ul> 1517</li> 1518<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id44">1.2 (2015-12-22)</a><ul> 1519<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id45">New features</a></li> 1520<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id46">Issues resolved since last release</a></li> 1521<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id47">Known issues</a></li> 1522</ul> 1523</li> 1524<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id48">1.1 (2015-02-04)</a><ul> 1525<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id49">New features</a></li> 1526<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id50">Issues resolved since last release</a></li> 1527<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id51">Known issues</a></li> 1528</ul> 1529</li> 1530<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id52">1.0 (2014-08-28)</a><ul> 1531<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id53">New features</a></li> 1532<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id54">Issues resolved since last release</a></li> 1533<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id55">Known issues</a></li> 1534</ul> 1535</li> 1536<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id56">0.4 (2014-06-03)</a><ul> 1537<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id57">New features</a></li> 1538<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id58">Issues resolved since last release</a></li> 1539<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id59">Known issues</a></li> 1540</ul> 1541</li> 1542<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id60">0.3 (2014-02-28)</a><ul> 1543<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id61">New features</a></li> 1544<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id62">Issues resolved since last release</a></li> 1545<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id63">Known issues</a></li> 1546</ul> 1547</li> 1548<li class="toctree-l2"><a class="reference internal" href="../change-log.html#id64">0.2 (2013-10-25)</a><ul> 1549<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id65">New features</a></li> 1550<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id66">Issues resolved since last release</a></li> 1551<li class="toctree-l3"><a class="reference internal" href="../change-log.html#id67">Known issues</a></li> 1552</ul> 1553</li> 1554</ul> 1555</li> 1556<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li> 1557<li class="toctree-l1"><a class="reference internal" href="../license.html">License</a><ul> 1558<li class="toctree-l2"><a class="reference internal" href="../license.html#spdx-identifiers">SPDX Identifiers</a></li> 1559<li class="toctree-l2"><a class="reference internal" href="../license.html#other-projects">Other Projects</a></li> 1560</ul> 1561</li> 1562</ul> 1563 1564 </div> 1565 </div> 1566 </nav> 1567 1568 <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > 1569 <i data-toggle="wy-nav-top" class="fa fa-bars"></i> 1570 <a href="../index.html">Trusted Firmware-A</a> 1571 </nav> 1572 1573 <div class="wy-nav-content"> 1574 <div class="rst-content style-external-links"> 1575 <div role="navigation" aria-label="Page navigation"> 1576 <ul class="wy-breadcrumbs"> 1577 <li><a href="../index.html" class="icon icon-home"></a> »</li> 1578 <li><a href="index.html">Processes & Policies</a> »</li> 1579 <li><span class="section-number">5. </span>Coding Guidelines</li> 1580 <li class="wy-breadcrumbs-aside"> 1581 <a href="../_sources/process/coding-guidelines.rst.txt" rel="nofollow"> View page source</a> 1582 </li> 1583 </ul><div class="rst-breadcrumbs-buttons" role="navigation" aria-label="Sequential page navigation"> 1584 <a href="coding-style.html" class="btn btn-neutral float-left" title="4. Coding Style" accesskey="p"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> 1585 <a href="contributing.html" class="btn btn-neutral float-right" title="6. Contributor’s Guide" accesskey="n">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> 1586 </div> 1587 <hr/> 1588</div> 1589 <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> 1590 <div itemprop="articleBody"> 1591 1592 <div class="section" id="coding-guidelines"> 1593<h1><span class="section-number">5. </span>Coding Guidelines<a class="headerlink" href="#coding-guidelines" title="Permalink to this headline"></a></h1> 1594<p>This document provides some additional guidelines to consider when writing 1595<a class="reference internal" href="../glossary.html#term-TF-A"><span class="xref std std-term">TF-A</span></a> code. These are not intended to be strictly-enforced rules like the 1596contents of the <a class="reference internal" href="coding-style.html#coding-style"><span class="std std-ref">Coding Style</span></a>.</p> 1597<div class="section" id="automatic-editor-configuration"> 1598<h2><span class="section-number">5.1. </span>Automatic Editor Configuration<a class="headerlink" href="#automatic-editor-configuration" title="Permalink to this headline"></a></h2> 1599<p>Many of the rules given below (such as indentation size, use of tabs, and 1600newlines) can be set automatically using the <a class="reference external" href="http://editorconfig.org/">EditorConfig</a> configuration file 1601in the root of the repository: <code class="docutils literal notranslate"><span class="pre">.editorconfig</span></code>. With a supported editor, the 1602rules set out in this file can be automatically applied when you are editing 1603files in the <a class="reference internal" href="../glossary.html#term-TF-A"><span class="xref std std-term">TF-A</span></a> repository.</p> 1604<p>Several editors include built-in support for EditorConfig files, and many others 1605support its functionality through plugins.</p> 1606<p>Use of the EditorConfig file is suggested but is not required.</p> 1607</div> 1608<div class="section" id="automatic-compliance-checking"> 1609<span id="id1"></span><h2><span class="section-number">5.2. </span>Automatic Compliance Checking<a class="headerlink" href="#automatic-compliance-checking" title="Permalink to this headline"></a></h2> 1610<p>To assist with coding style compliance, the project Makefile contains two 1611targets which both utilise the <cite>checkpatch.pl</cite> script that ships with the Linux 1612source tree. The project also defines certain <em>checkpatch</em> options in the 1613<code class="docutils literal notranslate"><span class="pre">.checkpatch.conf</span></code> file in the top-level directory.</p> 1614<div class="admonition note"> 1615<p class="admonition-title">Note</p> 1616<p>Checkpatch errors will gate upstream merging of pull requests. 1617Checkpatch warnings will not gate merging but should be reviewed and fixed if 1618possible.</p> 1619</div> 1620<p>To check the entire source tree, you must first download copies of 1621<code class="docutils literal notranslate"><span class="pre">checkpatch.pl</span></code>, <code class="docutils literal notranslate"><span class="pre">spelling.txt</span></code> and <code class="docutils literal notranslate"><span class="pre">const_structs.checkpatch</span></code> available 1622in the <a class="reference external" href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/">Linux master tree</a> <em>scripts</em> directory, then set the <code class="docutils literal notranslate"><span class="pre">CHECKPATCH</span></code> 1623environment variable to point to <code class="docutils literal notranslate"><span class="pre">checkpatch.pl</span></code> (with the other 2 files in 1624the same directory) and build the <cite>checkcodebase</cite> target:</p> 1625<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>make <span class="nv">CHECKPATCH</span><span class="o">=</span><path-to-linux>/linux/scripts/checkpatch.pl checkcodebase 1626</pre></div> 1627</div> 1628<p>To just check the style on the files that differ between your local branch and 1629the remote master, use:</p> 1630<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>make <span class="nv">CHECKPATCH</span><span class="o">=</span><path-to-linux>/linux/scripts/checkpatch.pl checkpatch 1631</pre></div> 1632</div> 1633<p>If you wish to check your patch against something other than the remote master, 1634set the <code class="docutils literal notranslate"><span class="pre">BASE_COMMIT</span></code> variable to your desired branch. By default, 1635<code class="docutils literal notranslate"><span class="pre">BASE_COMMIT</span></code> is set to <code class="docutils literal notranslate"><span class="pre">origin/master</span></code>.</p> 1636<div class="section" id="ignored-checkpatch-warnings"> 1637<h3><span class="section-number">5.2.1. </span>Ignored Checkpatch Warnings<a class="headerlink" href="#ignored-checkpatch-warnings" title="Permalink to this headline"></a></h3> 1638<p>Some checkpatch warnings in the TF codebase are deliberately ignored. These 1639include:</p> 1640<ul class="simple"> 1641<li><p><code class="docutils literal notranslate"><span class="pre">**WARNING:</span> <span class="pre">line</span> <span class="pre">over</span> <span class="pre">80</span> <span class="pre">characters**</span></code>: Although the codebase should 1642generally conform to the 80 character limit this is overly restrictive in some 1643cases.</p></li> 1644<li><p><code class="docutils literal notranslate"><span class="pre">**WARNING:</span> <span class="pre">Use</span> <span class="pre">of</span> <span class="pre">volatile</span> <span class="pre">is</span> <span class="pre">usually</span> <span class="pre">wrong</span></code>: see 1645<a class="reference external" href="https://www.kernel.org/doc/html/latest/process/volatile-considered-harmful.html">Why the “volatile” type class should not be used</a> . Although this document 1646contains some very useful information, there are several legimate uses of the 1647volatile keyword within the TF codebase.</p></li> 1648</ul> 1649</div> 1650</div> 1651<div class="section" id="performance-considerations"> 1652<h2><span class="section-number">5.3. </span>Performance considerations<a class="headerlink" href="#performance-considerations" title="Permalink to this headline"></a></h2> 1653<div class="section" id="avoid-printf-and-use-logging-macros"> 1654<h3><span class="section-number">5.3.1. </span>Avoid printf and use logging macros<a class="headerlink" href="#avoid-printf-and-use-logging-macros" title="Permalink to this headline"></a></h3> 1655<p><code class="docutils literal notranslate"><span class="pre">debug.h</span></code> provides logging macros (for example, <code class="docutils literal notranslate"><span class="pre">WARN</span></code> and <code class="docutils literal notranslate"><span class="pre">ERROR</span></code>) 1656which wrap <code class="docutils literal notranslate"><span class="pre">tf_log</span></code> and which allow the logging call to be compiled-out 1657depending on the <code class="docutils literal notranslate"><span class="pre">make</span></code> command. Use these macros to avoid print statements 1658being compiled unconditionally into the binary.</p> 1659<p>Each logging macro has a numerical log level:</p> 1660<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define LOG_LEVEL_NONE 0</span> 1661<span class="cp">#define LOG_LEVEL_ERROR 10</span> 1662<span class="cp">#define LOG_LEVEL_NOTICE 20</span> 1663<span class="cp">#define LOG_LEVEL_WARNING 30</span> 1664<span class="cp">#define LOG_LEVEL_INFO 40</span> 1665<span class="cp">#define LOG_LEVEL_VERBOSE 50</span> 1666</pre></div> 1667</div> 1668<p>By default, all logging statements with a log level <code class="docutils literal notranslate"><span class="pre"><=</span> <span class="pre">LOG_LEVEL_INFO</span></code> will 1669be compiled into debug builds and all statements with a log level 1670<code class="docutils literal notranslate"><span class="pre"><=</span> <span class="pre">LOG_LEVEL_NOTICE</span></code> will be compiled into release builds. This can be 1671overridden from the command line or by the platform makefile (although it may be 1672necessary to clean the build directory first).</p> 1673<p>For example, to enable <code class="docutils literal notranslate"><span class="pre">VERBOSE</span></code> logging on FVP:</p> 1674<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>make <span class="nv">PLAT</span><span class="o">=</span>fvp <span class="nv">LOG_LEVEL</span><span class="o">=</span><span class="m">50</span> all 1675</pre></div> 1676</div> 1677</div> 1678<div class="section" id="use-const-data-where-possible"> 1679<h3><span class="section-number">5.3.2. </span>Use const data where possible<a class="headerlink" href="#use-const-data-where-possible" title="Permalink to this headline"></a></h3> 1680<p>For example, the following code:</p> 1681<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">my_struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span> 1682<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">arg1</span><span class="p">;</span><span class="w"></span> 1683<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">arg2</span><span class="p">;</span><span class="w"></span> 1684<span class="p">};</span><span class="w"></span> 1685 1686<span class="kt">void</span><span class="w"> </span><span class="nf">init</span><span class="p">(</span><span class="k">struct</span> <span class="nc">my_struct</span><span class="w"> </span><span class="o">*</span><span class="n">ptr</span><span class="p">);</span><span class="w"></span> 1687 1688<span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"></span> 1689<span class="p">{</span><span class="w"></span> 1690<span class="w"> </span><span class="k">struct</span> <span class="nc">my_struct</span><span class="w"> </span><span class="n">x</span><span class="p">;</span><span class="w"></span> 1691<span class="w"> </span><span class="n">x</span><span class="p">.</span><span class="n">arg1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"></span> 1692<span class="w"> </span><span class="n">x</span><span class="p">.</span><span class="n">arg2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"></span> 1693<span class="w"> </span><span class="n">init</span><span class="p">(</span><span class="o">&</span><span class="n">x</span><span class="p">);</span><span class="w"></span> 1694<span class="p">}</span><span class="w"></span> 1695</pre></div> 1696</div> 1697<p>is better written as:</p> 1698<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">my_struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span> 1699<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">arg1</span><span class="p">;</span><span class="w"></span> 1700<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">arg2</span><span class="p">;</span><span class="w"></span> 1701<span class="p">};</span><span class="w"></span> 1702 1703<span class="kt">void</span><span class="w"> </span><span class="nf">init</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">struct</span> <span class="nc">my_struct</span><span class="w"> </span><span class="o">*</span><span class="n">ptr</span><span class="p">);</span><span class="w"></span> 1704 1705<span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"></span> 1706<span class="p">{</span><span class="w"></span> 1707<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span> <span class="nc">my_struct</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="p">};</span><span class="w"></span> 1708<span class="w"> </span><span class="n">init</span><span class="p">(</span><span class="o">&</span><span class="n">x</span><span class="p">);</span><span class="w"></span> 1709<span class="p">}</span><span class="w"></span> 1710</pre></div> 1711</div> 1712<p>This allows the linker to put the data in a read-only data section instead of a 1713writeable data section, which may result in a smaller and faster binary. Note 1714that this may require dependent functions (<code class="docutils literal notranslate"><span class="pre">init()</span></code> in the above example) to 1715have <code class="docutils literal notranslate"><span class="pre">const</span></code> arguments, assuming they don’t need to modify the data.</p> 1716</div> 1717</div> 1718<div class="section" id="libc-functions-that-are-banned-or-to-be-used-with-caution"> 1719<h2><span class="section-number">5.4. </span>Libc functions that are banned or to be used with caution<a class="headerlink" href="#libc-functions-that-are-banned-or-to-be-used-with-caution" title="Permalink to this headline"></a></h2> 1720<p>Below is a list of functions that present security risks and either must not be 1721used (Banned) or are discouraged from use and must be used with care (Caution).</p> 1722<table class="docutils align-default"> 1723<colgroup> 1724<col style="width: 33%" /> 1725<col style="width: 15%" /> 1726<col style="width: 52%" /> 1727</colgroup> 1728<thead> 1729<tr class="row-odd"><th class="head"><p>libc function</p></th> 1730<th class="head"><p>Status</p></th> 1731<th class="head"><p>Comments</p></th> 1732</tr> 1733</thead> 1734<tbody> 1735<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">strcpy,</span> <span class="pre">wcscpy</span></code>, 1736<code class="docutils literal notranslate"><span class="pre">strncpy</span></code></p></td> 1737<td><p>Banned</p></td> 1738<td><p>use strlcpy instead</p></td> 1739</tr> 1740<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">strcat,</span> <span class="pre">wcscat</span></code>, 1741<code class="docutils literal notranslate"><span class="pre">strncat</span></code></p></td> 1742<td><p>Banned</p></td> 1743<td><p>use strlcat instead</p></td> 1744</tr> 1745<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">sprintf,</span> <span class="pre">vsprintf</span></code></p></td> 1746<td><p>Banned</p></td> 1747<td><p>use snprintf, vsnprintf 1748instead</p></td> 1749</tr> 1750<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">snprintf</span></code></p></td> 1751<td><p>Caution</p></td> 1752<td><p>ensure result fits in buffer 1753i.e : snprintf(buf,size…) < size</p></td> 1754</tr> 1755<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">vsnprintf</span></code></p></td> 1756<td><p>Caution</p></td> 1757<td><p>inspect va_list match types 1758specified in format string</p></td> 1759</tr> 1760<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">strtok</span></code></p></td> 1761<td><p>Banned</p></td> 1762<td><p>use strtok_r or strsep instead</p></td> 1763</tr> 1764<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">strtok_r,</span> <span class="pre">strsep</span></code></p></td> 1765<td><p>Caution</p></td> 1766<td><p>inspect for terminated input buffer</p></td> 1767</tr> 1768<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">ato*</span></code></p></td> 1769<td><p>Banned</p></td> 1770<td><p>use equivalent strto* functions</p></td> 1771</tr> 1772<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">*toa</span></code></p></td> 1773<td><p>Banned</p></td> 1774<td><p>Use snprintf instead</p></td> 1775</tr> 1776</tbody> 1777</table> 1778<p>The <cite>libc</cite> component in the codebase will not add support for the banned APIs.</p> 1779</div> 1780<div class="section" id="error-handling-and-robustness"> 1781<h2><span class="section-number">5.5. </span>Error handling and robustness<a class="headerlink" href="#error-handling-and-robustness" title="Permalink to this headline"></a></h2> 1782<div class="section" id="using-cassert-to-check-for-compile-time-data-errors"> 1783<h3><span class="section-number">5.5.1. </span>Using CASSERT to check for compile time data errors<a class="headerlink" href="#using-cassert-to-check-for-compile-time-data-errors" title="Permalink to this headline"></a></h3> 1784<p>Where possible, use the <code class="docutils literal notranslate"><span class="pre">CASSERT</span></code> macro to check the validity of data known at 1785compile time instead of checking validity at runtime, to avoid unnecessary 1786runtime code.</p> 1787<p>For example, this can be used to check that the assembler’s and compiler’s views 1788of the size of an array is the same.</p> 1789<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><cassert.h></span><span class="cp"></span> 1790 1791<span class="n">define</span><span class="w"> </span><span class="n">MY_STRUCT_SIZE</span><span class="w"> </span><span class="mi">8</span><span class="w"> </span><span class="cm">/* Used by assembler source files */</span><span class="w"></span> 1792 1793<span class="k">struct</span> <span class="nc">my_struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span> 1794<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">arg1</span><span class="p">;</span><span class="w"></span> 1795<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">arg2</span><span class="p">;</span><span class="w"></span> 1796<span class="p">};</span><span class="w"></span> 1797 1798<span class="n">CASSERT</span><span class="p">(</span><span class="n">MY_STRUCT_SIZE</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="k">struct</span> <span class="nc">my_struct</span><span class="p">),</span><span class="w"> </span><span class="n">assert_my_struct_size_mismatch</span><span class="p">);</span><span class="w"></span> 1799</pre></div> 1800</div> 1801<p>If <code class="docutils literal notranslate"><span class="pre">MY_STRUCT_SIZE</span></code> in the above example were wrong then the compiler would 1802emit an error like this:</p> 1803<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>my_struct.h:10:1: error: size of array ‘assert_my_struct_size_mismatch’ is negative 1804</pre></div> 1805</div> 1806</div> 1807<div class="section" id="using-assert-to-check-for-programming-errors"> 1808<h3><span class="section-number">5.5.2. </span>Using assert() to check for programming errors<a class="headerlink" href="#using-assert-to-check-for-programming-errors" title="Permalink to this headline"></a></h3> 1809<p>In general, each secure world TF image (BL1, BL2, BL31 and BL32) should be 1810treated as a tightly integrated package; the image builder should be aware of 1811and responsible for all functionality within the image, even if code within that 1812image is provided by multiple entities. This allows us to be more aggressive in 1813interpreting invalid state or bad function arguments as programming errors using 1814<code class="docutils literal notranslate"><span class="pre">assert()</span></code>, including arguments passed across platform porting interfaces. 1815This is in contrast to code in a Linux environment, which is less tightly 1816integrated and may attempt to be more defensive by passing the error back up the 1817call stack.</p> 1818<p>Where possible, badly written TF code should fail early using <code class="docutils literal notranslate"><span class="pre">assert()</span></code>. This 1819helps reduce the amount of untested conditional code. By default these 1820statements are not compiled into release builds, although this can be overridden 1821using the <code class="docutils literal notranslate"><span class="pre">ENABLE_ASSERTIONS</span></code> build flag.</p> 1822<p>Examples:</p> 1823<ul class="simple"> 1824<li><p>Bad argument supplied to library function</p></li> 1825<li><p>Bad argument provided by platform porting function</p></li> 1826<li><p>Internal secure world image state is inconsistent</p></li> 1827</ul> 1828</div> 1829<div class="section" id="handling-integration-errors"> 1830<h3><span class="section-number">5.5.3. </span>Handling integration errors<a class="headerlink" href="#handling-integration-errors" title="Permalink to this headline"></a></h3> 1831<p>Each secure world image may be provided by a different entity (for example, a 1832Trusted Boot vendor may provide the BL2 image, a TEE vendor may provide the BL32 1833image and the OEM/SoC vendor may provide the other images).</p> 1834<p>An image may contain bugs that are only visible when the images are integrated. 1835The system integrator may not even have access to the debug variants of all the 1836images in order to check if asserts are firing. For example, the release variant 1837of BL1 may have already been burnt into the SoC. Therefore, TF code that detects 1838an integration error should _not_ consider this a programming error, and should 1839always take action, even in release builds.</p> 1840<p>If an integration error is considered non-critical it should be treated as a 1841recoverable error. If the error is considered critical it should be treated as 1842an unexpected unrecoverable error.</p> 1843</div> 1844<div class="section" id="handling-recoverable-errors"> 1845<h3><span class="section-number">5.5.4. </span>Handling recoverable errors<a class="headerlink" href="#handling-recoverable-errors" title="Permalink to this headline"></a></h3> 1846<p>The secure world <strong>must not</strong> crash when supplied with bad data from an external 1847source. For example, data from the normal world or a hardware device. Similarly, 1848the secure world <strong>must not</strong> crash if it detects a non-critical problem within 1849itself or the system. It must make every effort to recover from the problem by 1850emitting a <code class="docutils literal notranslate"><span class="pre">WARN</span></code> message, performing any necessary error handling and 1851continuing.</p> 1852<p>Examples:</p> 1853<ul class="simple"> 1854<li><p>Secure world receives SMC from normal world with bad arguments.</p></li> 1855<li><p>Secure world receives SMC from normal world at an unexpected time.</p></li> 1856<li><p>BL31 receives SMC from BL32 with bad arguments.</p></li> 1857<li><p>BL31 receives SMC from BL32 at unexpected time.</p></li> 1858<li><p>Secure world receives recoverable error from hardware device. Retrying the 1859operation may help here.</p></li> 1860<li><p>Non-critical secure world service is not functioning correctly.</p></li> 1861<li><p>BL31 SPD discovers minor configuration problem with corresponding SP.</p></li> 1862</ul> 1863</div> 1864<div class="section" id="handling-unrecoverable-errors"> 1865<h3><span class="section-number">5.5.5. </span>Handling unrecoverable errors<a class="headerlink" href="#handling-unrecoverable-errors" title="Permalink to this headline"></a></h3> 1866<p>In some cases it may not be possible for the secure world to recover from an 1867error. This situation should be handled in one of the following ways:</p> 1868<ol class="arabic simple"> 1869<li><p>If the unrecoverable error is unexpected then emit an <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> message and 1870call <code class="docutils literal notranslate"><span class="pre">panic()</span></code>. This will end up calling the platform-specific function 1871<code class="docutils literal notranslate"><span class="pre">plat_panic_handler()</span></code>.</p></li> 1872<li><p>If the unrecoverable error is expected to occur in certain circumstances, 1873then emit an <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> message and call the platform-specific function 1874<code class="docutils literal notranslate"><span class="pre">plat_error_handler()</span></code>.</p></li> 1875</ol> 1876<p>Cases 1 and 2 are subtly different. A platform may implement 1877<code class="docutils literal notranslate"><span class="pre">plat_panic_handler</span></code> and <code class="docutils literal notranslate"><span class="pre">plat_error_handler</span></code> in the same way (for example, 1878by waiting for a secure watchdog to time-out or by invoking an interface on the 1879platform’s power controller to reset the platform). However, 1880<code class="docutils literal notranslate"><span class="pre">plat_error_handler</span></code> may take additional action for some errors (for example, 1881it may set a flag so the platform resets into a different mode). Also, 1882<code class="docutils literal notranslate"><span class="pre">plat_panic_handler()</span></code> may implement additional debug functionality (for 1883example, invoking a hardware breakpoint).</p> 1884<p>Examples of unexpected unrecoverable errors:</p> 1885<ul class="simple"> 1886<li><p>BL32 receives an unexpected SMC response from BL31 that it is unable to 1887recover from.</p></li> 1888<li><p>BL31 Trusted OS SPD code discovers that BL2 has not loaded the corresponding 1889Trusted OS, which is critical for platform operation.</p></li> 1890<li><p>Secure world discovers that a critical hardware device is an unexpected and 1891unrecoverable state.</p></li> 1892<li><p>Secure world receives an unexpected and unrecoverable error from a critical 1893hardware device.</p></li> 1894<li><p>Secure world discovers that it is running on unsupported hardware.</p></li> 1895</ul> 1896<p>Examples of expected unrecoverable errors:</p> 1897<ul class="simple"> 1898<li><p>BL1/BL2 fails to load the next image due to missing/corrupt firmware on disk.</p></li> 1899<li><p>BL1/BL2 fails to authenticate the next image due to an invalid certificate.</p></li> 1900<li><p>Secure world continuously receives recoverable errors from a hardware device 1901but is unable to proceed without a valid response.</p></li> 1902</ul> 1903</div> 1904<div class="section" id="handling-critical-unresponsiveness"> 1905<h3><span class="section-number">5.5.6. </span>Handling critical unresponsiveness<a class="headerlink" href="#handling-critical-unresponsiveness" title="Permalink to this headline"></a></h3> 1906<p>If the secure world is waiting for a response from an external source (for 1907example, the normal world or a hardware device) which is critical for continued 1908operation, it must not wait indefinitely. It must have a mechanism (for example, 1909a secure watchdog) for resetting itself and/or the external source to prevent 1910the system from executing in this state indefinitely.</p> 1911<p>Examples:</p> 1912<ul class="simple"> 1913<li><p>BL1 is waiting for the normal world to raise an SMC to proceed to the next 1914stage of the secure firmware update process.</p></li> 1915<li><p>A Trusted OS is waiting for a response from a proxy in the normal world that 1916is critical for continued operation.</p></li> 1917<li><p>Secure world is waiting for a hardware response that is critical for continued 1918operation.</p></li> 1919</ul> 1920</div> 1921</div> 1922<div class="section" id="use-of-built-in-c-and-libc-data-types"> 1923<h2><span class="section-number">5.6. </span>Use of built-in <em>C</em> and <em>libc</em> data types<a class="headerlink" href="#use-of-built-in-c-and-libc-data-types" title="Permalink to this headline"></a></h2> 1924<p>The <a class="reference internal" href="../glossary.html#term-TF-A"><span class="xref std std-term">TF-A</span></a> codebase should be kept as portable as possible, especially since 1925both 64-bit and 32-bit platforms are supported. To help with this, the following 1926data type usage guidelines should be followed:</p> 1927<ul class="simple"> 1928<li><p>Where possible, use the built-in <em>C</em> data types for variable storage (for 1929example, <code class="docutils literal notranslate"><span class="pre">char</span></code>, <code class="docutils literal notranslate"><span class="pre">int</span></code>, <code class="docutils literal notranslate"><span class="pre">long</span> <span class="pre">long</span></code>, etc) instead of the standard <em>C99</em> 1930types. Most code is typically only concerned with the minimum size of the 1931data stored, which the built-in <em>C</em> types guarantee.</p></li> 1932<li><p>Avoid using the exact-size standard <em>C99</em> types in general (for example, 1933<code class="docutils literal notranslate"><span class="pre">uint16_t</span></code>, <code class="docutils literal notranslate"><span class="pre">uint32_t</span></code>, <code class="docutils literal notranslate"><span class="pre">uint64_t</span></code>, etc) since they can prevent the 1934compiler from making optimizations. There are legitimate uses for them, 1935for example to represent data of a known structure. When using them in struct 1936definitions, consider how padding in the struct will work across architectures. 1937For example, extra padding may be introduced in <a class="reference internal" href="../glossary.html#term-AArch32"><span class="xref std std-term">AArch32</span></a> systems if a struct 1938member crosses a 32-bit boundary.</p></li> 1939<li><p>Use <code class="docutils literal notranslate"><span class="pre">int</span></code> as the default integer type - it’s likely to be the fastest on all 1940systems. Also this can be assumed to be 32-bit as a consequence of the 1941<a class="reference external" href="https://developer.arm.com/docs/ihi0042/latest/">Procedure Call Standard for the Arm Architecture</a> and the <a class="reference external" href="https://developer.arm.com/docs/ihi0055/latest/">Procedure Call 1942Standard for the Arm 64-bit Architecture</a> .</p></li> 1943<li><p>Avoid use of <code class="docutils literal notranslate"><span class="pre">short</span></code> as this may end up being slower than <code class="docutils literal notranslate"><span class="pre">int</span></code> in some 1944systems. If a variable must be exactly 16-bit, use <code class="docutils literal notranslate"><span class="pre">int16_t</span></code> or 1945<code class="docutils literal notranslate"><span class="pre">uint16_t</span></code>.</p></li> 1946<li><p>Avoid use of <code class="docutils literal notranslate"><span class="pre">long</span></code>. This is guaranteed to be at least 32-bit but, given 1947that <cite>int</cite> is 32-bit on Arm platforms, there is no use for it. For integers of 1948at least 64-bit, use <code class="docutils literal notranslate"><span class="pre">long</span> <span class="pre">long</span></code>.</p></li> 1949<li><p>Use <code class="docutils literal notranslate"><span class="pre">char</span></code> for storing text. Use <code class="docutils literal notranslate"><span class="pre">uint8_t</span></code> for storing other 8-bit data.</p></li> 1950<li><p>Use <code class="docutils literal notranslate"><span class="pre">unsigned</span></code> for integers that can never be negative (counts, 1951indices, sizes, etc). TF intends to comply with MISRA “essential type” coding 1952rules (10.X), where signed and unsigned types are considered different 1953essential types. Choosing the correct type will aid this. MISRA static 1954analysers will pick up any implicit signed/unsigned conversions that may lead 1955to unexpected behaviour.</p></li> 1956<li><p>For pointer types:</p> 1957<ul> 1958<li><p>If an argument in a function declaration is pointing to a known type then 1959simply use a pointer to that type (for example: <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">my_struct</span> <span class="pre">*</span></code>).</p></li> 1960<li><p>If a variable (including an argument in a function declaration) is pointing 1961to a general, memory-mapped address, an array of pointers or another 1962structure that is likely to require pointer arithmetic then use 1963<code class="docutils literal notranslate"><span class="pre">uintptr_t</span></code>. This will reduce the amount of casting required in the code. 1964Avoid using <code class="docutils literal notranslate"><span class="pre">unsigned</span> <span class="pre">long</span></code> or <code class="docutils literal notranslate"><span class="pre">unsigned</span> <span class="pre">long</span> <span class="pre">long</span></code> for this purpose; it 1965may work but is less portable.</p></li> 1966<li><p>For other pointer arguments in a function declaration, use <code class="docutils literal notranslate"><span class="pre">void</span> <span class="pre">*</span></code>. This 1967includes pointers to types that are abstracted away from the known API and 1968pointers to arbitrary data. This allows the calling function to pass a 1969pointer argument to the function without any explicit casting (the cast to 1970<code class="docutils literal notranslate"><span class="pre">void</span> <span class="pre">*</span></code> is implicit). The function implementation can then do the 1971appropriate casting to a specific type.</p></li> 1972<li><p>Avoid pointer arithmetic generally (as this violates MISRA C 2012 rule 197318.4) and especially on void pointers (as this is only supported via 1974language extensions and is considered non-standard). In TF-A, setting the 1975<code class="docutils literal notranslate"><span class="pre">W</span></code> build flag to <code class="docutils literal notranslate"><span class="pre">W=3</span></code> enables the <em>-Wpointer-arith</em> compiler flag and 1976this will emit warnings where pointer arithmetic is used.</p></li> 1977<li><p>Use <code class="docutils literal notranslate"><span class="pre">ptrdiff_t</span></code> to compare the difference between 2 pointers.</p></li> 1978</ul> 1979</li> 1980<li><p>Use <code class="docutils literal notranslate"><span class="pre">size_t</span></code> when storing the <code class="docutils literal notranslate"><span class="pre">sizeof()</span></code> something.</p></li> 1981<li><p>Use <code class="docutils literal notranslate"><span class="pre">ssize_t</span></code> when returning the <code class="docutils literal notranslate"><span class="pre">sizeof()</span></code> something from a function that 1982can also return an error code; the signed type allows for a negative return 1983code in case of error. This practice should be used sparingly.</p></li> 1984<li><p>Use <code class="docutils literal notranslate"><span class="pre">u_register_t</span></code> when it’s important to store the contents of a register 1985in its native size (32-bit in <a class="reference internal" href="../glossary.html#term-AArch32"><span class="xref std std-term">AArch32</span></a> and 64-bit in <a class="reference internal" href="../glossary.html#term-AArch64"><span class="xref std std-term">AArch64</span></a>). This is not a 1986standard <em>C99</em> type but is widely available in libc implementations, 1987including the FreeBSD version included with the TF codebase. Where possible, 1988cast the variable to a more appropriate type before interpreting the data. For 1989example, the following struct in <code class="docutils literal notranslate"><span class="pre">ep_info.h</span></code> could use this type to minimize 1990the storage required for the set of registers:</p></li> 1991</ul> 1992<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span> <span class="nc">aapcs64_params</span><span class="w"> </span><span class="p">{</span><span class="w"></span> 1993<span class="w"> </span><span class="n">u_register_t</span><span class="w"> </span><span class="n">arg0</span><span class="p">;</span><span class="w"></span> 1994<span class="w"> </span><span class="n">u_register_t</span><span class="w"> </span><span class="n">arg1</span><span class="p">;</span><span class="w"></span> 1995<span class="w"> </span><span class="n">u_register_t</span><span class="w"> </span><span class="n">arg2</span><span class="p">;</span><span class="w"></span> 1996<span class="w"> </span><span class="n">u_register_t</span><span class="w"> </span><span class="n">arg3</span><span class="p">;</span><span class="w"></span> 1997<span class="w"> </span><span class="n">u_register_t</span><span class="w"> </span><span class="n">arg4</span><span class="p">;</span><span class="w"></span> 1998<span class="w"> </span><span class="n">u_register_t</span><span class="w"> </span><span class="n">arg5</span><span class="p">;</span><span class="w"></span> 1999<span class="w"> </span><span class="n">u_register_t</span><span class="w"> </span><span class="n">arg6</span><span class="p">;</span><span class="w"></span> 2000<span class="w"> </span><span class="n">u_register_t</span><span class="w"> </span><span class="n">arg7</span><span class="p">;</span><span class="w"></span> 2001<span class="p">}</span><span class="w"> </span><span class="n">aapcs64_params_t</span><span class="p">;</span><span class="w"></span> 2002</pre></div> 2003</div> 2004<p>If some code wants to operate on <code class="docutils literal notranslate"><span class="pre">arg0</span></code> and knows that it represents a 32-bit 2005unsigned integer on all systems, cast it to <code class="docutils literal notranslate"><span class="pre">unsigned</span> <span class="pre">int</span></code>.</p> 2006<p>These guidelines should be updated if additional types are needed.</p> 2007</div> 2008<div class="section" id="favor-c-language-over-assembly-language"> 2009<h2><span class="section-number">5.7. </span>Favor C language over assembly language<a class="headerlink" href="#favor-c-language-over-assembly-language" title="Permalink to this headline"></a></h2> 2010<p>Generally, prefer code written in C over assembly. Assembly code is less 2011portable, harder to understand, maintain and audit security wise. Also, static 2012analysis tools generally don’t analyze assembly code.</p> 2013<p>There are, however, legitimate uses of assembly language. These include:</p> 2014<blockquote> 2015<div><ul class="simple"> 2016<li><p>Early boot code executed before the C runtime environment is setup.</p></li> 2017<li><p>Exception handling code.</p></li> 2018<li><p>Low-level code where the exact sequence of instructions executed on the CPU 2019matters, such as CPU reset sequences.</p></li> 2020<li><p>Low-level code where specific system-level instructions must be used, such 2021as cache maintenance operations.</p></li> 2022</ul> 2023</div></blockquote> 2024<hr class="docutils" /> 2025<p><em>Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.</em></p> 2026</div> 2027</div> 2028 2029 2030 </div> 2031 </div> 2032 <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> 2033 <a href="coding-style.html" class="btn btn-neutral float-left" title="4. Coding Style" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> 2034 <a href="contributing.html" class="btn btn-neutral float-right" title="6. Contributor’s Guide" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> 2035 </div> 2036 2037 <hr/> 2038 2039 <div role="contentinfo"> 2040 <p></p> 2041 </div> 2042 2043 2044 2045</footer> 2046 </div> 2047 </div> 2048 </section> 2049 </div> 2050 <script> 2051 jQuery(function () { 2052 SphinxRtdTheme.Navigation.enable(true); 2053 }); 2054 </script> 2055 2056</body> 2057</html>