summaryrefslogtreecommitdiff
path: root/bl2
AgeCommit message (Collapse)Author
2026-08-20refactor(build): remove redundant `eval` callsChris Kay
Execute expressions directly without `eval` when they do not expand to Make syntax (i.e. where `eval` is provably pointless). Additionally, remove the obsolete `eval` feature check - we mandate at least GNU Make 4.3, which always supports it. Change-Id: I26f1723f084d0428a2cbe336e76f0765a9818a5a Signed-off-by: Chris Kay <chris.kay@arm.com>
2026-04-08feat(gpt): move gpt support under ENABLE_FEAT_RMEArunachalam Ganapathy
Granule Protection Tables (GPT) library support is enabled only when ENABLE_RMM is set (previously this build option was ENABLE_RME). Since RME related support is now enabled using feature detection option ENABLE_FEAT_RME, this patch moves GPT support under ENABLE_FEAT_RME. This change brings in below benefits: - single TF-A build that works for RME and non-RME systems, when build with ENABLE_FEAT_RME=2 (FEAT_STATE_CHECK) - RMM loading is optional on RME systems - SiP calls that leverages RME features to change the PAS of a memory range from non-secure to secure is supported without need to enable Realm PAS or RMM. - FIRME Granule Management Interface (GMI) ABIs that handles FEAT_RME_GPC2/FEAT_RME_GDI can be enabled without need to enable RMM Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> Change-Id: I88d9d4e0491af2b4ae0307c018f2d4a71ee6693f
2026-04-08feat(rmmd): replace ENABLE_RME with ENABLE_RMMArunachalam Ganapathy
RME architectural requirements are now handled under the feature detection option ENABLE_FEAT_RME. However, the existing ENABLE_RME build option performs RMM-specific tasks such as GPT setup, loading the RMM, and enabling RMMD support. Since ENABLE_RME now only controls RMM-related functionality, rename it to ENABLE_RMM to better reflect its purpose and avoid confusion with ENABLE_FEAT_RME. For backward compatibility, setting the legacy ENABLE_RME=1 (until it is deprecated) will automatically enable both ENABLE_FEAT_RME and ENABLE_RMM. Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> Change-Id: Iac945bdffe5002161bf1161b81a5aa7abec68192
2026-02-20fix(bl2): pie fixup size calculationArunachalam Ganapathy
Calculating pie_fixup_size shouldn't be dependent on ENABLE_RME build flag. Enabling ENABLE_PIE, RESET_TO_BL2 along with ENABLE_RME results in the wrong pie offset that causes bl2 boot failure. PIE for BL2 image is supported only in case of RESET_TO_BL2=1 and BL2_IN_XIP_MEM=0. This removes the need for macro ENABLE_RME in the condition check. Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> Change-Id: I6167c214710efe40adf3ba56aef9e55afe9c2cc1
2026-02-02fix(bl2): disable FP traps early when crypto feature is enabledManish V Badarkhe
Move disable_fpregs_traps_el3() earlier in bl2_main() (BL2 at EL3) when FEAT_CRYPTO is supported, so FP/SIMD traps are cleared before subsequent boot setup and image loading. Change-Id: I7d1a8b42116875b5868f910af2754fe07c8c1037 Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
2026-01-28feat(crypto): enable the runtime instrumentation for crypto extensionXialin Liu
Add runtime instrumentation for the authentication process in BL1 and BL2, to measure the speedup of the authentication after enabling the crypto extension. Change-Id: Ieea927e7e8bd0d109525f28b06510acf0ab62e5c Signed-off-by: Xialin Liu <xialin.liu@arm.com>
2026-01-28feat(crypto): enable access to SIMD crypto in BL1 and BL2Xialin Liu
Disable the floating point register traps in image auth and loading in BL1 and BL2 to allow the access to SIMD crypto extension during the booting process. Change-Id: I9c20715d54f5d2988aa706e91e1a657dcd06dfc2 Signed-off-by: Xialin Liu <xialin.liu@arm.com>
2026-01-27feat(bl2): support RESET_TO_BL2 and ENABLE_RMEArunachalam Ganapathy
When RSE is used as the root of trust along with CPU that supports RME there is a need to enable both RESET_TO_BL2 and ENABLE_RME. In current bl2_main there are two different code paths for RESET_BL2, one handles BL2 running in EL1 and other for BL2 running in EL3. When RME is enabled, BL2 always runs at EL3 but the current flow calls bl2_early_platform_setup2, bl2_plat_arch_setup instead of bl2_el3_early_platform_setup, bl2_el3_plat_arch_setup. Adding RME, TRANSFER_LIST, ROMLIB support in bl2_el3_* helpers makes arm_bl2_el3_setup.c almost identical to arm_bl2_setup.c. This patch removes bl2_el3_plat helpers and related files. Now different combinations of RESET_TO_BL2, ENABLE_RME are handled in common bl2_setup routines in arm_bl2_setup.c. This helps to have common place to support new features and build flags for BL2 irrespective of which EL the BL2 runs. BREAKING-CHANGE: This patch also changes all existing platform files and functions that use format bl2_el3_* to bl2_plat helpers. If any platform or out-of-tree platforms that need to support running BL2 in EL1 or EL3 must now handle it in bl2_early_platform_setup2 and bl2_plat_arch_setup. Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> Change-Id: I8d332dbe2de1db3b69319496c8d04626cdcf4140
2026-01-27fix(fvp): increase resident text size of BL2Arunachalam Ganapathy
Enabling new CPU library code like Venom requires to set build flags HW_ASSISTED_COHERENCY=1 USE_COHERENT_MEM=0. When build along with RESET_TO_BL=1 (BL2 in EL3 case) causes increase in resident text size of BL2. This is applicable in case of PLAT=fvp as it includes a lot of CPU_LIBS and might not be the case of other platforms as it includes only specific CPU libs. Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> Change-Id: I2fd7eecebd9a2bdcbdc9fbbf4cecc2d659740931
2025-12-12feat(cpufeat): enable USE_SPINLOCK_CAS to FEAT_STATE_CHECKEDBoyan Karatotev
The FEAT_LSE enablement predates the FEAT_STATE framework and has never been converted. Since the introduction of USE_SPINLOCK_CAS we've gained lots of quality of life features that allow for better feature enablement. This patch converts USE_SPINLOCK_CAS to tri-state and adds it to FEATURE_DETECTION to align with all other features. Instead of introducing the assembly checking for tri-state, this patch translates all locking routines to C inline assembly and uses the standard C helpers. The main benefit is that this gives greater visibility to the compiler about what the functions are doing and lets it optimise better. Namely, it is able to allocate registers itself and inline the functions when LTO is enabled. An unsuccessful attempt was made to use the instructions directly and have even flow control in C. This, however, made code very complicated and less efficient in the tight loops of the spinlock. The last use of ARM_ARCH_AT_LEAST goes away with this change and so this macro is removed. It has now been fully superseded by the FEAT_STATE framework. This change exposes a limitation - RME_GPT_BITLOCK_BLOCK requires USE_SPINLOCK_CAS. This patch does not address this in any way but makes the relationship explicit. Change-Id: I580081549aceded2dca3e0f4564ee7510a7e56ae Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
2025-12-01feat(crypto): enable SIMD crypto extensions for S-EL1Xialin Liu
Enable the SIMD in arch setup to enable SIMD crypto extension for S-EL1 for BL2 Change-Id: I5573b5f214ca5d520ee45b380375df4c2344acf1 Signed-off-by: Xialin Liu <xialin.liu@arm.com>
2025-10-21feat(build): setting CRYPTO_LIB via CRYPTO_SUPPORTLauren Wehrmeister
Setting CRYPTO_LIB based on CRYPTO_SUPPORT via the CRYPTO_SUPPORT macro to be called by component-specific makefiles. Signed-off-by: Lauren Wehrmeister <lauren.wehrmeister@arm.com> Change-Id: Ib400e4668c60c24bb4399de6a320b5c16205affb
2025-10-21feat(build): set CRYPTO_SUPPORT macro per BLLauren Wehrmeister
Moving the setting of CRYPTO_SUPPORT from the main Makefile to individual component makefiles using the new build macro make_defines for each BL-specific CPPFLAGS. Rework romlib build command to use CRYPTO_LIB to determine mbedtls need instead of CRYPTO_SUPPORT. If CRYPTO_SUPPORT is set for any component, then CRYPTO_LIB will be filled, romlib can use this instead. Add a convenience makefile macro for setting CRYPTO_SUPPORT from component specific makefiles, have components call the macro based on whether authenication verification (NEED_AUTH) and/or hash calculation (NEED_HASH) is required for the specific boot stage. Signed-off-by: Lauren Wehrmeister <lauren.wehrmeister@arm.com> Change-Id: I7e81fede74fb9c04694b022e8eebed460616565c
2025-10-08refactor(build): make sorting of sections genericBoyan Karatotev
All BLs define essentially the same sequence for sorting of sections. Make that generic so it applies more easily. Change-Id: I81f5f6635232bd43d999c8054e290a6437c26c71 Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
2025-09-12refactor: unify blx_setup() and blx_main()Boyan Karatotev
All BLs have a bl_setup() for things that need to happen early, a fall back into assembly and then bl_main() for the main functionality. This was necessary in order to fiddle with PAuth related things that tend to break C calls. Since then PAuth's enablement has seen a lot of refactoring and this is now worked around cleanly so the distinction can be removed. The only tradeoff is that this requires pauth to not be used for the top-level main function. There are two main benefits to doing this: First, code is easier to understand as it's all together and the entrypoint is smaller. Second, the compiler gets to see more of the code and apply optimisations (importantly LTO). Change-Id: Iddb93551115a2048988017547eb7b8db441dbd37 Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
2025-09-10fix(bl2): unify the BL2 EL3 and RME entrypointsBoyan Karatotev
BL2 has 3(!) entrypoints: 1) the regular EL1 entrypoint (once per AArch) 2) an EL3 entrypoint 3) an EL3 entrypoint with RME The EL1 and EL3 entrypoints are quite distinct so it's useful to keep them separate. But the EL3 and RME entrypoints are conceptually identical just configured differently and having slightly different assumptions (eg whether we can rely on BL1). So put them together with only the configuration as a difference. This has a few benefits: * makes the naming consistent - BL2 always runs at EL1, BL2_EL3 always runs at EL3. This is most important for the linker script. * paves the way for ENABLE_RME and RESET_TO_BL2 to coexist. * allows for more general refactors Currently, ENABLE_RME and RESET_TO_BL2 are mutually exclusive (from a makefile constraint) so the checks are simplified to one or the other as there is no danger of their simultaneous use. Change-Id: Iecffab2ff3a0bd7823f8277d9f66e22e4f42cc8c Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
2025-05-05feat(bl): adding psa crypto - crypto_mod_finish()Lauren Wehrmeister
Adding call to crypto_mod_finish() at the end of crypto usage in the bl mains. This is currently used for psa crytpo to destroy the psa_key_ids in the psa key store, but could be expanded if required later. Signed-off-by: Lauren Wehrmeister <lauren.wehrmeister@arm.com> Change-Id: I3dba9fe87b6bb64b629dda9d6c4653b116e7ee62
2025-04-16feat(cpufeat): enable FEAT_PAuth to FEAT_STATE_CHECKEDBoyan Karatotev
FEAT_PAuth is the second to last feature to be a boolean choice - it's either unconditionally compiled in and must be present in hardware or it's not compiled in. FEAT_PAuth is architected to be backwards compatible - a subset of the branch guarding instructions (pacia/autia) execute as NOPs when PAuth is not present. That subset is used with `-mbranch-protection=standard` and -march pre-8.3. This patch adds the necessary logic to also check accesses of the non-backward compatible registers and allow a fully checked implementation. Note that a checked support requires -march to be pre 8.3, as otherwise the compiler will include branch protection instructions that are not NOPs without PAuth (eg retaa) which cannot be checked. Change-Id: Id942c20cae9d15d25b3d72b8161333642574ddaa Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
2025-04-14chore(cpufeat): remove PAuth presence checksBoyan Karatotev
TF-A operates a policy that features must be correctly configured per each platform. There is a tool to assist in making sure that this is the case - FEATURE_DETECTION. So performing these checks in common code is not the right place for this. Remove them and rely on FEATURE_DETECTION. Change-Id: If3c25dcd7bc880f1f085bc6bb5270d8d1c4caf43 Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
2025-04-14feat(cpufeat): enable FEAT_BTI to FEAT_STATE_CHECKEDBoyan Karatotev
Introduce the is_feat_bti_{supported, present}() helpers and replace checks for ENABLE_BTI with it. Also factor out the setting of SCTLR_EL3.BT out of the PAuth enablement and place it in the respective entrypoints where we initialise SCTLR_EL3. This makes PAuth self-contained and SCTLR_EL3 initialisation centralised. Change-Id: I0c0657ff1e78a9652cd2cf1603478283dc01f17b Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
2025-03-17fix(aarch32): avoid using r12 to store boot paramsHarrison Mutai
The current implementation uses the `r12` register as temporary storage for r4. However, `r12` is a call-clobbered register, meaning its contents are not preserved across function calls. This becomes problematic when we later call the `zeromem` function, as any information stored in `r12` will be lost. To address this issue, we should avoid using `r12` to store boot parameters. Change-Id: If94b7fc3a01bc617ceadaaa704d5aa5e5accfd3f Signed-off-by: Harrison Mutai <harrison.mutai@arm.com>
2025-02-20refactor(cpus): register DSU errata with the errata framework's wrappersBoyan Karatotev
The existing DSU errata workarounds hijack the errata framework's inner workings to register with it. However, that is undesirable as any change to the framework may end up missing these workarounds. So convert the checks and workarounds to macros and have them included with the standard wrappers. The only problem with this is the is_scu_present_in_dsu weak function. Fortunately, it is only needed for 2 of the errata and only on 3 cores. So drop it, assuming the default behaviour and have the callers handle the exception. Change-Id: Iefa36325804ea093e938f867b9a6f49a6984b8ae Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
2024-05-08Merge changes from topic "early_console" into integrationManish Pandey
* changes: feat(stm32mp2): use early traces feat(st-bsec): use early traces refactor(st): replace STM32MP_EARLY_CONSOLE with EARLY_CONSOLE feat(console): introduce EARLY_CONSOLE feat(bl32): create an sp_min_setup function
2024-04-29build: remove `MAKE_BUILD_STRINGS` functionChris Kay
This function causes the build message to be generated and compiled in two different ways, with one way done inside `build_macros.mk` and the other done inside `windows.mk`, mostly because it's done by generating the C file on the command line. We can instead replace this whole build message generation sequence with a simple standard C compilation command and a normal C file. Change-Id: I8bc136380c9585ddeec9a11154ee39ef70526f81 Signed-off-by: Chris Kay <chris.kay@arm.com>
2024-04-24feat(console): introduce EARLY_CONSOLEYann Gautier
This is a generic porting of what was done on ST platforms with flag STM32MP_EARLY_CONSOLE. It creates the flag and the prototype for plat_setup_early_console(). This function depends on platform implementation. This function call is added at the beginning of each BL image early setup function. The patch also introduce an extra log macro: EARLY_ERROR. This can replace ERROR macro in code that will only be executed before the default console is enabled, and will do nothing when the EARLY_CONSOLE is not enabled. This can then save some space in memory. Signed-off-by: Yann Gautier <yann.gautier@st.com> Change-Id: I77bf0a0c4289b4c7df94e4bfb783a938e05bf023
2024-02-06build: use toolchain identifiers in conditionsChris Kay
The toolchain refactor change introduces the `${toolchain}-${tool}-id` variables, which provide identifiers for all of the toolchain tools used by the build system. This change replaces the various conditions that are in use to identify these tools based on the path with a standard set of comparisons against these new identifier variables. Change-Id: Ib60e592359fa6e415c19a012e68d660f87436ca7 Signed-off-by: Chris Kay <chris.kay@arm.com>
2024-02-06build: use new toolchain variables for toolsChris Kay
This change migrates the values of `CC`, `CPP`, `AS` and other toolchain variables to the new `$(toolchain)-$(tool)` variables, which were introduced by the toolchain refactor patch. These variables should be equivalent to the values that they're replacing. Change-Id: I644fe4ce82ef1894bed129ddb4b6ab94fb04985d Signed-off-by: Chris Kay <chris.kay@arm.com>
2023-11-06feat(build): check that .text section starts at page boundaryAndrey Skvortsov
Linker may decide to put new unspecified sections before .text section. That will cause non-working image, because entry point isn't at __BLXX_START__. Device just not booted with such image. This happened for example with .note.gnu.build-id section generated for LTO build in some cases. Now linker will report this situation as an error. ``` /usr/lib/gcc-cross/aarch64-linux-gnu/13/../../../../aarch64-linux-gnu/bin/ld: .text is not aligned on a page boundary. collect2: error: ld returned 1 exit status ``` Signed-off-by: Andrey Skvortsov <andrej.skvortzov@gmail.com> Change-Id: I5ae46ddd1e6e431e1df1715d1d301f6dd7181cc7
2023-09-07feat(fvp): capture timestamps in bl stagesthagon01-arm
When ENABLE_RUNTIME_INSTRUMENTATION flag is set timestamps are captured and output to the fvp console at various boot stages using the PMF library (which are based on aarch timers). Timestamps are captured at entry and exit points for Bl1, Bl2 and, Bl3 respectively. Change-Id: I7c0c502e5dbf73d711700b2fe0085ca3eb9346d2 Signed-off-by: Thaddeus Serna <Thaddeus.Gonzalez-Serna@arm.com>
2023-06-29refactor(pmu): convert FEAT_MTPMU to C and move to persistent register initBoyan Karatotev
The FEAT_MTPMU feature disable runs very early after reset. This means, it needs to be written in assembly, since the C runtime has not been initialised yet. However, there is no need for it to be initialised so soon. The PMU state is only relevant after TF-A has relinquished control. The code to do this is also very verbose and difficult to read. Delaying the initialisation allows for it to happen with the rest of the PMU. Align with FEAT_STATE in the process. BREAKING CHANGE: This patch explicitly breaks the EL2 entry path. It is currently unsupported. Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: I2aa659d026fbdb75152469f6d19812ece3488c6f
2023-06-12chore(bl): add UNALIGNED symbols for TEXT/RODATAMichal Simek
Add symbols to mark end of TEXT/RODATA before page alignment. Similar change was done by commit 8d69a03f6a7d ("Various improvements/cleanups on the linker scripts") for RO_END/COHERENT_RAM. These symbols help to know how much free space is in the final binary because of page alignment. Also show all *UNALIGNED__ symbols via poetry. For example: poetry run memory -p zynqmp -b debug Change-Id: I322beba37dad76be9f4e88ca7e5b3eff2df7d96e Signed-off-by: Michal Simek <michal.simek@amd.com>
2023-06-07Merge changes from topic "bk/clearups" into integrationOlivier Deprez
* changes: chore(rme): add make rule for SPD=spmd chore(bl1): remove redundant bl1_arch_next_el_setup chore(docs): remove control register setup section chore(pauth): remove redundant pauth_disable_el3() call
2023-06-01Merge changes from topic "hm/memmap-feat" into integrationSandrine Bailleux
* changes: build(bl32): add symbols for memory layout build(bl31): add symbols for memory layout build(bl2): add symbols for memory layout build(bl1): add symbols for memory layout refactor: improve readability of symbol table
2023-05-30refactor(cpus): convert print_errata_status to CBoyan Karatotev
The function is called in a fully initialised C environment and calls into other C functions. The Aarch differences are minimal and are hidden by the pre-existing headers. Converting it results into cleaner code that is the same across both Aarch64 and Aarch32. To avoid having to do very ugly pointer arithmetic, define a C struct for the cpu_ops for both Aarch64 and Aarch32. Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: Idc07c4064e03143c88a4a0e2d10ceda70ba19a50
2023-05-12build(bl2): add symbols for memory layoutHarrison Mutai
Add symbols for mapping the physical memory layout of BL2. There are symbols that partially satisfy this requirement, however, the naming of these is inconsistent. Signed-off-by: Harrison Mutai <harrison.mutai@arm.com> Change-Id: I83ce5e3f5c45b71022279649f823ed0cb33a145d
2023-04-28chore(pauth): remove redundant pauth_disable_el3() callBoyan Karatotev
Both bl2_main and bl2_run_next_image call pauth_disable_el3. However, bl2_main is the only caller of bl2_run_next_image so it doesn't need to call it Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: I91769b2994ad643d2259c211936dbac4ef010d25
2023-04-17build(bl2): sort sections by alignment by defaultChris Kay
This change forces LD to sort all input sections by alignment when allocating them within an output section. This is done in some places explicitly in the linker scripts today, but this makes sure we don't miss any easy targets. Change-Id: Id70be2a5399c4c75fcf2a736cab0991d20a6b863 Signed-off-by: Chris Kay <chris.kay@arm.com>
2023-03-15refactor(build): distinguish BL2 as TF-A entry point and BL2 running at EL3Arvind Ram Prakash
BL2_AT_EL3 is an overloaded macro which has two uses: 1. When BL2 is entry point into TF-A(no BL1) 2. When BL2 is running at EL3 exception level These two scenarios are not exactly same even though first implicitly means second to be true. To distinguish between these two use cases we introduce new macros. BL2_AT_EL3 is renamed to RESET_TO_BL2 to better convey both 1. and 2. Additional macro BL2_RUNS_AT_EL3 is added to cover all scenarious where BL2 runs at EL3 (including four world systems). BREAKING CHANGE: BL2_AT_EL3 renamed to RESET_TO_BL2 across the repository. Change-Id: I477e1d0f843b44b799c216670e028fcb3509fb72 Signed-off-by: Arvind Ram Prakash <arvind.ramprakash@arm.com> Signed-off-by: Maksims Svecovs <maksims.svecovs@arm.com>
2023-02-20build: always prefix section names with `.`Chris Kay
Some of our specialized sections are not prefixed with the conventional period. The compiler uses input section names to derive certain other section names (e.g. `.rela.text`, `.relacpu_ops`), and these can be difficult to select in linker scripts when there is a lack of a delimiter. This change introduces the period prefix to all specialized section names. BREAKING-CHANGE: All input and output linker section names have been prefixed with the period character, e.g. `cpu_ops` -> `.cpu_ops`. Change-Id: I51c13c5266d5975fbd944ef4961328e72f82fc1c Signed-off-by: Chris Kay <chris.kay@arm.com>
2023-02-10build: clarify linker script generationChris Kay
The following build system variables have been renamed: - `LINKERFILE` -> `DEFAULT_LINKER_SCRIPT` - `BL_LINKERFILE` -> `DEFAULT_LINKER_SCRIPT_SOURCE` - `<IMAGE>_LINKERFILE` -> `<IMAGE>_DEFAULT_LINKER_SCRIPT_SOURCE` These new names better reflect how each variable is used: 1. the default linker script is passed via `-dT` instead of `-T` 2. linker script source files are first preprocessed Additionally, linker scripts are now placed in the build directory relative to where they exist in the source directory. For example, the `bl32/sp_min/sp_min.ld.S` would now preprocess to `sp_min/sp_min.ld` instead of just `bl32.ld` BREAKING-CHANGE: The `LINKERFILE`, `BL_LINKERFILE` and `<IMAGE_LINKERFILE>` build system variables have been renamed. See the commit message for more information. Change-Id: If8cef65dcb8820e8993736702c8741e97a66e6cc Signed-off-by: Chris Kay <chris.kay@arm.com>
2023-02-10style: normalize linker script code styleChris Kay
There are a variety of code styles used by the various linker scripts around the code-base. This change brings them in line with one another and attempts to make the scripts more friendly for skim-readers. Change-Id: Ibee2afad0d543129c9ba5a8a22e3ec17d77e36ea Signed-off-by: Chris Kay <chris.kay@arm.com>
2022-10-20style(linker_script): fix indentationJorge Troncoso
Use four spaces for indentation to maintain a consistent style. This attempts to make the linker scripts more friendly for readers. Signed-off-by: Jorge Troncoso <jatron@google.com> Change-Id: Iaf26d3c8bd7053fd9605a64ebccdae0792a90b9e
2022-10-03feat(debug): add helpers for aborts on AARCH32Yann Gautier
New helper functions are created to handle data & prefetch aborts in AARCH32. They call platform functions, just like what report_exception is doing. As extended MSR/MRS instructions (to access lr_abt in monitor mode) are only available if CPU (Armv7) has virtualization extension, the functions branch to original report_exception handlers if this is not the case. Those new helpers are created mainly to distinguish data and prefetch aborts, as they both share the same mode. This adds 40 bytes of code. Change-Id: I5dd31930344ad4e3a658f8a9d366a87a300aeb67 Signed-off-by: Yann Gautier <yann.gautier@st.com>
2022-03-31fix(bl2): define RAM_NOLOAD for XIPYann Gautier
If BL2_IN_XIP_MEM is enabled, BL2 fails to compile because RAM_NOLOAD symbol is not defined. As we could have a no-load region even if BL2_IN_XIP_MEM is enabled, just put its definition outside the #if/#else for this flag. Signed-off-by: Yann Gautier <yann.gautier@st.com> Change-Id: I9169ea799635f8a72790280f3f148d1cba4cd408
2022-03-27feat(bl2): add support to separate no-loadable sectionsJiafei Pan
Add new options SEPARATE_BL2_NOLOAD_REGION to separate no-loadable sections (.bss, stack, page tables) to a ram region specified by BL2_NOLOAD_START and BL2_NOLOAD_LIMIT. Signed-off-by: Jiafei Pan <Jiafei.Pan@nxp.com> Change-Id: I844ee0fc405474af0aff978d292c826fbe0a82fd
2022-02-15fix(bl2): correct messages with image_idYann Gautier
As image_id is unsigned, we have to use %u and not %d. This avoids warning when -Wformat-signedness is enabled. Change-Id: I3f868f3d14c9f19349f0daa8a754179f887339c0 Signed-off-by: Yann Gautier <yann.gautier@st.com>
2022-01-11refactor(measured-boot): avoid Measured-Boot dependency on Trusted-BootManish V Badarkhe
Measured-Boot and Trusted-Boot are orthogonal to each other and hence removed dependency of Trusted-Boot on Measured-Boot by making below changes - 1. BL1 and BL2 main functions are used for initializing Crypto module instead of the authentication module 2. Updated Crypto module registration macro for MEASURED_BOOT with only necessary callbacks for calculating image hashes 3. The 'load_auth_image' function is now used for the image measurement during Trusted or Non-Trusted Boot flow Change-Id: I3570e80bae8ce8f5b58d84bd955aa43e925d9fff Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
2021-10-12feat(measured boot): move init and teardown functions to platform layerManish V Badarkhe
Right now, the measured boot driver is strongly coupled with the TCG event log driver. It would not be possible to push the measurements somewhere else, for instance to a physical TPM. To enable this latter use case, turn the driver's init and teardown functions into platform hooks. Call them bl2_plat_mboot_init()/finish(). This allows each platform to implement them appropriately, depending on the type of measured boot backend they use. For example, on a platform with a physical TPM, the plat_mboot_init() hook would startup the TPM and setup it underlying bus (e.g. SPI). Move the current implementation of the init and teardown function to the FVP platform layer. Finally move the conditional compilation logic (#if MEASURED_BOOT) out of bl2_main() to improve its readability. Provide a dummy implementation in the case measured boot is not included in the build. Change-Id: Ib6474cb5a9c1e3d4a30c7f228431b22d1a6e85e3 Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com> Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
2021-10-05refactor(gpt): productize and refactor GPT libraryjohpow01
This patch updates and refactors the GPT library and fixes bugs. - Support all combinations of PGS, PPS, and L0GPTSZ parameters. - PPS and PGS are set at runtime, L0GPTSZ is read from GPCCR_EL3. - Use compiler definitions to simplify code. - Renaming functions to better suit intended uses. - MMU enabled before GPT APIs called. - Add comments to make function usage more clear in GPT library. - Added _rme suffix to file names to differentiate better from the GPT file system code. - Renamed gpt_defs.h to gpt_rme_private.h to better separate private and public code. - Renamed gpt_core.c to gpt_rme.c to better conform to TF-A precedent. Signed-off-by: John Powell <john.powell@arm.com> Change-Id: I4cbb23b0f81e697baa9fb23ba458aa3f7d1ed919
2021-10-05feat(rme): add GPT LibraryZelalem Aweke
This patch introduces the Granule Protection Table (GPT) library code. This implementation will be updated later to be more flexible, as the current implementation is very rigid. Signed-off-by: Zelalem Aweke <zelalem.aweke@arm.com> Change-Id: I3af824a28c6e9a5d36459c0c51d2d9bebfba1505