| ece8f7d7 | 13-Feb-2023 |
Boyan Karatotev <boyan.karatotev@arm.com> |
refactor(cm): set MDCR_EL3/CPTR_EL3 bits in respective feat_init_el3() only
These bits (MDCR_EL3.{NSTB, NSTBE, TTRF, TPM}, CPTR_EL3.TTA) only affect EL2 (and lower) execution. Each feat_init_el3() i
refactor(cm): set MDCR_EL3/CPTR_EL3 bits in respective feat_init_el3() only
These bits (MDCR_EL3.{NSTB, NSTBE, TTRF, TPM}, CPTR_EL3.TTA) only affect EL2 (and lower) execution. Each feat_init_el3() is called long before any lower EL has had a chance to execute, so setting the bits at reset is redundant. Removing them from reset code also improves readability of the immutable EL3 state.
Preserve the original intention for the TTA bit of "enabled for NS and disabled everywhere else" (inferred from commit messages d4582d3088 and 2031d6166a and the comment). This is because CPTR_EL3 will be contexted and so everyone will eventually get whatever NS has anyway.
Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: I3d24b45d3ea80882c8e450b2d9db9d5531facec1
show more ...
|
| 99506fac | 13-Feb-2023 |
Boyan Karatotev <boyan.karatotev@arm.com> |
fix(cm): set MDCR_EL3.{NSPBE, STE} explicitly
With the introduction of FEAT_RME MDCR_EL3 bits NSPB and NSPBE depend on each other. The enable code relies on the register being initialised to zero an
fix(cm): set MDCR_EL3.{NSPBE, STE} explicitly
With the introduction of FEAT_RME MDCR_EL3 bits NSPB and NSPBE depend on each other. The enable code relies on the register being initialised to zero and omits to reset NSPBE. However, this is not obvious. Reset the bit explicitly to document this.
Similarly, reset the STE bit , since it's part of the feature enablement.
Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: I3714507bae10042cdccd2b7bc713b31d4cdeb02f
show more ...
|
| 4d0b6632 | 24-Mar-2023 |
Maksims Svecovs <maksims.svecovs@arm.com> |
feat(mte): adds feature detection for MTE_PERM
Adds feature detection for v8.9 feature FEAT_MTE_PERM. Adds respective ID_AA64PFR2_EL1 definitions and ENABLE_FEAT_MTE_PERM define.
Change-Id: If24b42
feat(mte): adds feature detection for MTE_PERM
Adds feature detection for v8.9 feature FEAT_MTE_PERM. Adds respective ID_AA64PFR2_EL1 definitions and ENABLE_FEAT_MTE_PERM define.
Change-Id: If24b42f1207154e639016b0b840b2d91c6ee13d4 Signed-off-by: Maksims Svecovs <maksims.svecovs@arm.com> Signed-off-by: Harrison Mutai <harrison.mutai@arm.com>
show more ...
|
| 83a4dae1 | 16-Feb-2023 |
Boyan Karatotev <boyan.karatotev@arm.com> |
refactor(pmu): convert FEAT_MTPMU to C and move to persistent register init
The FEAT_MTPMU feature disable runs very early after reset. This means, it needs to be written in assembly, since the C ru
refactor(pmu): convert FEAT_MTPMU to C and move to persistent register init
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
show more ...
|
| c73686a1 | 15-Feb-2023 |
Boyan Karatotev <boyan.karatotev@arm.com> |
feat(pmu): introduce pmuv3 lib/extensions folder
The enablement code for the PMU is scattered and difficult to track down. Factor out the feature into its own lib/extensions folder and consolidate t
feat(pmu): introduce pmuv3 lib/extensions folder
The enablement code for the PMU is scattered and difficult to track down. Factor out the feature into its own lib/extensions folder and consolidate the implementation. Treat it is as an architecturally mandatory feature as it is currently.
Additionally, do some cleanup on AArch64. Setting overflow bits in PMCR_EL0 is irrelevant for firmware so don't do it. Then delay the PMU initialisation until the context management stage which simplifies the early environment assembly. One side effect is that the PMU might count before this happens so reset all counters to 0 to prevent any leakage.
Finally, add an enable to manage_extensions_realm() as realm world uses the pmu. This introduces the HPMN fixup to realm world.
Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: Ie13a8625820ecc5fbfa467dc6ca18025bf6a9cd3
show more ...
|
| 33815eb7 | 15-Jun-2023 |
Boyan Karatotev <boyan.karatotev@arm.com> |
fix(pmu): make MDCR_EL3.MTPME=1 out of reset
Make the default value for MTPME always be 1 to preserve the reset behaviour on newer revisions and on older revisions where the bit is RES0 it doesn't m
fix(pmu): make MDCR_EL3.MTPME=1 out of reset
Make the default value for MTPME always be 1 to preserve the reset behaviour on newer revisions and on older revisions where the bit is RES0 it doesn't matter.
Before its introduction MDCR_EL3.MTPME was RES0. Upon its introduction the field resets to 1, making the MTPMU architecturally "enabled". As such, the logical action on TF-A's part is to "disable" it, which led to the introduction of DISABLE_MTPMU.
This hinges on the assumption that MDCR_EL3.MTPME will always be 1 unless the above flag is set. Unfortunately this is not the case, as the reset value is overwritten at reset with a macro that sets this bit to 0.
Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: Ie570774972f246b3aa41dc016ecbcc6fc2f581f6
show more ...
|
| c64681d0 | 08-Jun-2023 |
Manish V Badarkhe <manish.badarkhe@arm.com> |
Merge "feat(aarch64): add stack debug information to assembly routines" into integration |
| 6e1ae307 | 07-Jun-2023 |
Manish Pandey <manish.pandey2@arm.com> |
Merge "fix(qemu): fix 32-bit builds with stack protector" into integration |
| e1c0a472 | 06-Jun-2023 |
Manish Pandey <manish.pandey2@arm.com> |
Merge changes from topic "dummy_feat_aa32" into integration
* changes: feat(cpufeat): deny AArch64-only features when building for AArch32 feat(cpufeat): add AArch32 PAN detection support |
| f8328853 | 10-Mar-2023 |
Boyan Karatotev <boyan.karatotev@arm.com> |
feat(aarch64): add stack debug information to assembly routines
Debugging assembly is painful as it is, and having no useful stack trace does not help. Code must emit CFI directives whenever the sta
feat(aarch64): add stack debug information to assembly routines
Debugging assembly is painful as it is, and having no useful stack trace does not help. Code must emit CFI directives whenever the stack moves to enable stack traces. Otherwise, the layout of the stack frame is ambiguous, the debugger gives up, and shows nothing. The compiler does this automatically for C but not assembly.
Add this information to the (currently unused) func_prologue macro.
Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: Ief5fd672285df8d9d90fa6a2214b5c6e45eddd81
show more ...
|
| bff074dd | 03-May-2023 |
Javier Almansa Sobrino <javier.almansasobrino@arm.com> |
feat(xlat): detect 4KB and 16KB page support when FEAT_LPA2 is present
At the moment, TF-A does not need to access VAs or PAs larger than 48 bits, so this patch just enables proper detection of supp
feat(xlat): detect 4KB and 16KB page support when FEAT_LPA2 is present
At the moment, TF-A does not need to access VAs or PAs larger than 48 bits, so this patch just enables proper detection of support for 4KB and 16KB granularity with 52 bits address support.
Signed-off-by: Javier Almansa Sobrino <javier.almansasobrino@arm.com> Change-Id: Iccebbd5acc21f09dbb234ef21a802300e290ec18
show more ...
|
| 007433d8 | 25-Jan-2023 |
Boyan Karatotev <boyan.karatotev@arm.com> |
refactor(cpus): move cpu_ops field defines to a header
The cpu_macros.S file is loaded with lots of definitions for the cpu_ops structure. However, since they are defined as .equ directives they are
refactor(cpus): move cpu_ops field defines to a header
The cpu_macros.S file is loaded with lots of definitions for the cpu_ops structure. However, since they are defined as .equ directives they are inaccessible for C code. Convert them to #defines, put them into order, refactor them for readability, and extract them to a separate file to make this possible.
This has the benefit of removing some Aarch differences and a lot of duplicate code.
Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: I72861794b6c9131285a9297d5918822ed718b228
show more ...
|
| e57ca899 | 23-May-2023 |
Andre Przywara <andre.przywara@arm.com> |
fix(qemu): fix 32-bit builds with stack protector
When using the ENABLE_STACK_PROTECTOR=strong build option, the QEMU code will try to use the RNDR CPU instructions to initialise the stack canary. S
fix(qemu): fix 32-bit builds with stack protector
When using the ENABLE_STACK_PROTECTOR=strong build option, the QEMU code will try to use the RNDR CPU instructions to initialise the stack canary. Since the instructions are defined for AArch64 only, this will fail to build for AArch32.
And even though we now always return "false" when asked about the availability of the RNDR instruction, the compiler will still leave the reference to read_rdnr() in, if optimisations are turned off (-O0).
Avoid this by providing a dummy read_rndr() implementation, that makes the linker happy in any case.
This fixes the QEMU build for AArch32 with ENABLE_STACK_PROTECTOR=strong
Change-Id: Ibf450ba4a46167fdf3a14a527d338350ced8b5ba Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| 733d112f | 23-May-2023 |
Andre Przywara <andre.przywara@arm.com> |
feat(cpufeat): deny AArch64-only features when building for AArch32
Many newer architecture features are defined for AArch64 only, so cannot be used in an AArch32 build.
To avoid #ifdef-ing every s
feat(cpufeat): deny AArch64-only features when building for AArch32
Many newer architecture features are defined for AArch64 only, so cannot be used in an AArch32 build.
To avoid #ifdef-ing every single user, just provide trivial implementations of the feature check functions is_feat_xxx_supported(), which always return "false" in AArch32. The compiler will then optimise out the dependent code automatically.
Change-Id: I1e7d653fca0e676a11858efd953c2d623f2d5c9e Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| d156c522 | 23-May-2023 |
Andre Przywara <andre.przywara@arm.com> |
feat(cpufeat): add AArch32 PAN detection support
FEAT_PAN is implemented in AArch32 as well, provide the helper functions to query the feature availability at runtime.
Change-Id: I375e3eb7b05955ea2
feat(cpufeat): add AArch32 PAN detection support
FEAT_PAN is implemented in AArch32 as well, provide the helper functions to query the feature availability at runtime.
Change-Id: I375e3eb7b05955ea28a092ba99bb93302af48a0e Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| 4bd8c929 | 09-May-2023 |
Manish Pandey <manish.pandey2@arm.com> |
Merge changes I1bfa797e,I0ec7a70e into integration
* changes: fix(tree): correct some typos fix(rockchip): use semicolon instead of comma |
| 269f3dae | 09-May-2023 |
Manish Pandey <manish.pandey2@arm.com> |
Merge changes from topic "mp/feat_ras" into integration
* changes: refactor(cpufeat): enable FEAT_RAS for FEAT_STATE_CHECKED refactor(ras): replace RAS_EXTENSION with FEAT_RAS |
| 1b491eea | 13-Feb-2023 |
Elyes Haouas <ehaouas@noos.fr> |
fix(tree): correct some typos
found using codespell (https://github.com/codespell-project/codespell).
Signed-off-by: Elyes Haouas <ehaouas@noos.fr> Change-Id: I1bfa797e3460adddeefa916bb68e22beddaf6
fix(tree): correct some typos
found using codespell (https://github.com/codespell-project/codespell).
Signed-off-by: Elyes Haouas <ehaouas@noos.fr> Change-Id: I1bfa797e3460adddeefa916bb68e22beddaf6373
show more ...
|
| 6503ff29 | 27-Jan-2023 |
Andre Przywara <andre.przywara@arm.com> |
refactor(cpufeat): enable FEAT_RAS for FEAT_STATE_CHECKED
At the moment we only support FEAT_RAS to be either unconditionally compiled in, or to be not supported at all.
Add support for runtime det
refactor(cpufeat): enable FEAT_RAS for FEAT_STATE_CHECKED
At the moment we only support FEAT_RAS to be either unconditionally compiled in, or to be not supported at all.
Add support for runtime detection (FEAT_RAS=2), by splitting is_armv8_2_feat_ras_present() into an ID register reading function and a second function to report the support status. That function considers both build time settings and runtime information (if needed), and is used before we access RAS related registers.
Also move the context saving code from assembly to C, and use the new is_feat_ras_supported() function to guard its execution.
Change the FVP platform default to the now supported dynamic option (=2), so the right decision can be made by the code at runtime.
Change-Id: I30498f72fd80b136850856244687400456a03d0e Signed-off-by: Andre Przywara <andre.przywara@arm.com> Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
show more ...
|
| ffea3844 | 19-Nov-2022 |
Sona Mathew <SonaRebecca.Mathew@arm.com> |
feat(errata_abi): errata management firmware interface
This patch adds the errata management firmware interface for lower ELs to discover details about CPU erratum. Based on the CPU erratum identifi
feat(errata_abi): errata management firmware interface
This patch adds the errata management firmware interface for lower ELs to discover details about CPU erratum. Based on the CPU erratum identifier the interface enables the OS to find the mitigation of an erratum in EL3.
The ABI can only be present in a system that is compliant with SMCCCv1.1 or higher. This implements v1.0 of the errata ABI spec.
For details on all possible return values, refer the design documentation below:
ABI design documentation: https://developer.arm.com/documentation/den0100/1-0?lang=en
Signed-off-by: Sona Mathew <SonaRebecca.Mathew@arm.com> Change-Id: I70f0e2569cf92e6e02ad82e3e77874546232b89a
show more ...
|
| e31de867 | 28-Apr-2023 |
Manish V Badarkhe <manish.badarkhe@arm.com> |
Merge "fix(ras): do not put RAS check before esb macro" into integration |
| 03d3c0d7 | 08-Nov-2022 |
Jayanth Dodderi Chidanand <jayanthdodderi.chidanand@arm.com> |
feat(sme): enable SME2 functionality for NS world
FEAT_SME2 is an extension of FEAT_SME and an optional feature from v9.2. Its an extension of SME, wherein it not only processes matrix operations ef
feat(sme): enable SME2 functionality for NS world
FEAT_SME2 is an extension of FEAT_SME and an optional feature from v9.2. Its an extension of SME, wherein it not only processes matrix operations efficiently, but also provides outer-product instructions to accelerate matrix operations. It affords instructions for multi-vector operations. Further, it adds an 512 bit architectural register ZT0.
This patch implements all the changes introduced with FEAT_SME2 to ensure that the instructions are allowed to access ZT0 register from Non-secure lower exception levels.
Additionally, it adds support to ensure FEAT_SME2 is aligned with the existing FEATURE DETECTION mechanism, and documented.
Change-Id: Iee0f61943304a9cfc3db8f986047b1321d0a6463 Signed-off-by: Jayanth Dodderi Chidanand <jayanthdodderi.chidanand@arm.com>
show more ...
|
| 7d5036b8 | 27-Apr-2023 |
Manish Pandey <manish.pandey2@arm.com> |
fix(ras): do not put RAS check before esb macro
Macro esb used in TF-A executes the instruction "esb" and is kept under RAS_EXTENSION macro. RAS_EXTENSION, as it stands today, is only enabled for pl
fix(ras): do not put RAS check before esb macro
Macro esb used in TF-A executes the instruction "esb" and is kept under RAS_EXTENSION macro. RAS_EXTENSION, as it stands today, is only enabled for platforms which wants RAS errors to be handled in Firmware while esb instruction is available when RAS architecture feature is present irrespective of its handling. Currently TF-A does not have mechanism to detect whether RAS is present or not in HW, define this macro unconditionally.
Its harmless for non-RAS cores as this instruction executes as NOP.
Signed-off-by: Manish Pandey <manish.pandey2@arm.com> Change-Id: I556f2bcf5669c378bda05909525a0a4f96c7b336
show more ...
|
| 88727fc3 | 26-Jan-2023 |
Andre Przywara <andre.przywara@arm.com> |
refactor(cpufeat): enable FEAT_DIT for FEAT_STATE_CHECKED
At the moment we only support FEAT_DIT to be either unconditionally compiled in, or to be not supported at all.
Add support for runtime det
refactor(cpufeat): enable FEAT_DIT for FEAT_STATE_CHECKED
At the moment we only support FEAT_DIT to be either unconditionally compiled in, or to be not supported at all.
Add support for runtime detection (ENABLE_DIT=2), by splitting is_armv8_4_dit_present() into an ID register reading function and a second function to report the support status. That function considers both build time settings and runtime information (if needed).
We use ENABLE_DIT in two occassions in assembly code, where we just set the DIT bit in the DIT system register. Protect those two cases by reading the CPU ID register when ENABLE_DIT is set to 2.
Change the FVP platform default to the now supported dynamic option (=2), so the right decision can be made by the code at runtime.
Change-Id: I506d352f18e23c60db8cdf08edb449f60adbe098 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| 688ab57b | 14-Mar-2023 |
Mark Brown <broonie@kernel.org> |
feat(gcs): support guarded control stack
Arm v9.4 introduces support for Guarded Control Stack, providing mitigations against some forms of RPO attacks and an efficient mechanism for obtaining the c
feat(gcs): support guarded control stack
Arm v9.4 introduces support for Guarded Control Stack, providing mitigations against some forms of RPO attacks and an efficient mechanism for obtaining the current call stack without requiring a full stack unwind. Enable access to this feature for EL2 and below, context switching the newly added EL2 registers as appropriate.
Change the FVP platform to default to handling this as a dynamic option so the right decision can be made by the code at runtime.
Signed-off-by: Mark Brown <broonie@kernel.org> Change-Id: I691aa7c22e3547bb3abe98d96993baf18c5f0e7b
show more ...
|