]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
zynqmp: Pass bl32 entry to TF-A via xilinx handoff structure
authorMichal Simek <michal.simek@xilinx.com>
Mon, 31 May 2021 09:06:59 +0000 (11:06 +0200)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 23 Jun 2021 07:48:35 +0000 (09:48 +0200)
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

index 7d7ab9da6ec249eed8f78ab1d5fc2be444e25fc2..31346d9b2e217ac3a7a1595e076ae5efb6a77d49 100644 (file)
@@ -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;