From 25844ff728e4a0e5430ba2032457aba7b780a701 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez-Ortiz Date: Fri, 15 Apr 2022 11:46:47 +0200 Subject: [PATCH] feat(bl31): aarch64: RESET_TO_BL31_WITH_PARAMS It is not always the case that RESET_TO_BL31 enabled platforms don't execute a bootloader before BL31. For those use cases, being able to receive arguments from that first loader (i.e: a DTB with TPM logs) might be necessary feature. This code has been validated on iMX8mm. Signed-off-by: Jorge Ramirez-Ortiz Change-Id: Ibf00c3867cb1d1012b8b376e64ccaeca1c9d2bff --- Makefile | 2 ++ bl31/aarch64/bl31_entrypoint.S | 4 +++- make_helpers/defaults.mk | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index da3e4931e..ebeb5ed4c 100644 --- a/Makefile +++ b/Makefile @@ -996,6 +996,7 @@ $(eval $(call assert_booleans,\ PROGRAMMABLE_RESET_ADDRESS \ PSCI_EXTENDED_STATE_ID \ RESET_TO_BL31 \ + RESET_TO_BL31_WITH_PARAMS \ SAVE_KEYS \ SEPARATE_CODE_AND_RODATA \ SEPARATE_BL2_NOLOAD_REGION \ @@ -1127,6 +1128,7 @@ $(eval $(call add_defines,\ PSCI_EXTENDED_STATE_ID \ RAS_EXTENSION \ RESET_TO_BL31 \ + RESET_TO_BL31_WITH_PARAMS \ SEPARATE_CODE_AND_RODATA \ SEPARATE_BL2_NOLOAD_REGION \ SEPARATE_NOBITS_REGION \ diff --git a/bl31/aarch64/bl31_entrypoint.S b/bl31/aarch64/bl31_entrypoint.S index ed058648f..b0c46dc7b 100644 --- a/bl31/aarch64/bl31_entrypoint.S +++ b/bl31/aarch64/bl31_entrypoint.S @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2021, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -67,6 +67,7 @@ func bl31_entrypoint _exception_vectors=runtime_exceptions \ _pie_fixup_size=BL31_LIMIT - BL31_BASE +#if !RESET_TO_BL31_WITH_PARAMS /* --------------------------------------------------------------------- * For RESET_TO_BL31 systems, BL31 is the first bootloader to run so * there's no argument to relay from a previous bootloader. Zero the @@ -77,6 +78,7 @@ func bl31_entrypoint mov x21, 0 mov x22, 0 mov x23, 0 +#endif /* RESET_TO_BL31_WITH_PARAMS */ #endif /* RESET_TO_BL31 */ /* -------------------------------------------------------------------- diff --git a/make_helpers/defaults.mk b/make_helpers/defaults.mk index 99f44a4ec..eb58b36a8 100644 --- a/make_helpers/defaults.mk +++ b/make_helpers/defaults.mk @@ -254,6 +254,9 @@ RAS_EXTENSION := 0 # By default, BL1 acts as the reset handler, not BL31 RESET_TO_BL31 := 0 +# By default, clear the input registers when RESET_TO_BL31 is enabled +RESET_TO_BL31_WITH_PARAMS := 0 + # For Chain of Trust SAVE_KEYS := 0