diff mbox series

[3/3] zynqmp: Pass bl32 entry to TF-A via xilinx handoff structure

Message ID 9dab51eb33a63ef892855b11a494283aa50b75c8.1622456084.git.michal.simek@xilinx.com
State Accepted
Commit 653736c2431317e07fce1e302f0a69d4d5b8b1a5
Delegated to: Michal Simek
Headers show
Series zynqmp: Add support for secure OS loading | expand

Commit Message

Michal Simek May 31, 2021, 10:14 a.m. UTC
There is need to pass entry about secure OS when bl32_entry is defined.
Currently only 64bit support is added but /fit-images node have been
extended to also record if this is 32bit or 64bit secure OS. When this is
tested the code will be update to support this configuration too.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 arch/arm/mach-zynqmp/handoff.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)
diff mbox series

Patch

diff --git a/arch/arm/mach-zynqmp/handoff.c b/arch/arm/mach-zynqmp/handoff.c
index 7d7ab9da6ec2..31346d9b2e21 100644
--- a/arch/arm/mach-zynqmp/handoff.c
+++ b/arch/arm/mach-zynqmp/handoff.c
@@ -71,6 +71,7 @@  struct bl31_params *bl2_plat_get_bl31_params(uintptr_t bl32_entry,
 					     uintptr_t fdt_addr)
 {
 	struct xfsbl_atf_handoff_params *atfhandoffparams;
+	u32 index = 0;
 
 	atfhandoffparams = (void *)CONFIG_SPL_TEXT_BASE;
 	atfhandoffparams->magic[0] = 'X';
@@ -78,14 +79,22 @@  struct bl31_params *bl2_plat_get_bl31_params(uintptr_t bl32_entry,
 	atfhandoffparams->magic[2] = 'N';
 	atfhandoffparams->magic[3] = 'X';
 
-	atfhandoffparams->num_entries = 0;
+	if (bl32_entry) {
+		atfhandoffparams->partition[index].entry_point = bl32_entry;
+		atfhandoffparams->partition[index].flags = FSBL_FLAGS_EL1 << FSBL_FLAGS_EL_SHIFT |
+							   FSBL_FLAGS_SECURE << FSBL_FLAGS_TZ_SHIFT;
+		index++;
+	}
+
 	if (bl33_entry) {
-		atfhandoffparams->partition[0].entry_point = bl33_entry;
-		atfhandoffparams->partition[0].flags = FSBL_FLAGS_EL2 <<
-						       FSBL_FLAGS_EL_SHIFT;
-		atfhandoffparams->num_entries++;
+		atfhandoffparams->partition[index].entry_point = bl33_entry;
+		atfhandoffparams->partition[index].flags = FSBL_FLAGS_EL2 <<
+							   FSBL_FLAGS_EL_SHIFT;
+		index++;
 	}
 
+	atfhandoffparams->num_entries = index;
+
 	writel(CONFIG_SPL_TEXT_BASE, &pmu_base->gen_storage6);
 
 	return NULL;