Boot Trusted OS' on Tegra SoCs
authorVarun Wadekar <vwadekar@nvidia.com>
Fri, 5 Jun 2015 07:27:27 +0000 (12:57 +0530)
committerVarun Wadekar <vwadekar@nvidia.com>
Thu, 11 Jun 2015 09:16:32 +0000 (14:46 +0530)
This patch adds support to run a Trusted OS during boot time. The
previous stage bootloader passes the entry point information in
the 'bl32_ep_info' structure, which is passed over to the SPD.

The build system expects the dispatcher to be passed as an input
parameter using the 'SPD=<dispatcher>' option. The Tegra docs have
also been updated with this information.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
docs/plat/nvidia-tegra.md
docs/tlk-dispatcher.md
plat/nvidia/tegra/common/tegra_bl31_setup.c
plat/nvidia/tegra/include/platform_def.h

index 242e8db6f171318c8ed8d66aedf701d0bf1b6cc7..e4f9a05e9155bb3eef1f79dbd4cd21951b299b1f 100644 (file)
@@ -15,7 +15,16 @@ Directory structure
 * plat/nvidia/tegra/common - Common code for all Tegra SoCs
 * plat/nvidia/tegra/soc/txxx - Chip specific code
 
+Trusted OS dispatcher
+=====================
+Tegra supports multiple Trusted OS', Trusted Little Kernel (TLK) being one of
+them. In order to include the 'tlkd' dispatcher in the image, pass 'SPD=tlkd'
+on the command line while preparing a bl31 image. This allows other Trusted OS
+vendors to use the upstream code and include their dispatchers in the image
+without changing any makefiles.
+
 Preparing the BL31 image to run on Tegra SoCs
 ===================================================
 CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-none-elf- make PLAT=tegra \
-TARGET_SOC=<target-soc e.g. t210> all
+TARGET_SOC=<target-soc e.g. t210> BL32=<path-to-trusted-os-binary> \
+SPD=<dispatcher e.g. tlkd> all
index a2212b52b70a999bbc2726a88501051c485c252f..890b35e7b4e33592fda842bc7580af8763560fb2 100644 (file)
@@ -10,10 +10,11 @@ In order to compile TLK-D, we need a BL32 image to be present. Since, TLKD
 just needs to compile, any BL32 image would do. To use TLK as the BL32, please
 refer to the "Build TLK" section.
 
-Once a BL32 is ready, TLKD can be compiled using the following command:
+Once a BL32 is ready, TLKD can be included in the image using the following
+command:
 
 CROSS_COMPILE=<path_to_linaro_chain>/bin/aarch64-none-elf- make NEED_BL1=0
-NEED_BL2=0 BL32=<path_to_BL32_image> PLAT=<platform> all
+NEED_BL2=0 BL32=<path_to_BL32_image> PLAT=<platform> SPD=tlkd all
 _
 Trusted Little Kernel (TLK)
 ===========================
index 628dc2ac80320b0316e14672396c5188c9cbf231..759290339215e18bdf155a4d10c5da4c76a2e80c 100644 (file)
@@ -82,7 +82,7 @@ extern uint64_t tegra_bl31_phys_base;
 #define BL31_COHERENT_RAM_LIMIT (unsigned long)(&__COHERENT_RAM_END__)
 #endif
 
-static entry_point_info_t bl33_image_ep_info;
+static entry_point_info_t bl33_image_ep_info, bl32_image_ep_info;
 static plat_params_from_bl2_t plat_bl31_params_from_bl2 = {
        (uint64_t)TZDRAM_SIZE, (uintptr_t)NULL
 };
@@ -102,6 +102,9 @@ entry_point_info_t *bl31_plat_get_next_image_ep_info(uint32_t type)
        if (type == NON_SECURE)
                return &bl33_image_ep_info;
 
+       if (type == SECURE)
+               return &bl32_image_ep_info;
+
        return NULL;
 }
 
@@ -134,10 +137,11 @@ void bl31_early_platform_setup(bl31_params_t *from_bl2,
        plat_crash_console_init();
 
        /*
-        * Copy BL3-3 entry point information.
+        * Copy BL3-3, BL3-2 entry point information.
         * They are stored in Secure RAM, in BL2's address space.
         */
        bl33_image_ep_info = *from_bl2->bl33_ep_info;
+       bl32_image_ep_info = *from_bl2->bl32_ep_info;
 
        /*
         * Parse platform specific parameters - TZDRAM aperture size and
index 6be777ecaac4eb6950d7ba4519ec1441a4fa202a..d4b0ce20b629c33abc6907f2bef26cf6164f9584 100644 (file)
 /*******************************************************************************
  * BL31 specific defines.
  ******************************************************************************/
+#define BL31_SIZE                      0x20000
 #define BL31_BASE                      TZDRAM_BASE
-#define BL31_LIMIT                     (TZDRAM_BASE + 0x11FFF)
+#define BL31_LIMIT                     (TZDRAM_BASE + BL31_SIZE - 1)
+#define BL32_BASE                      (TZDRAM_BASE + BL31_SIZE)
+#define BL32_LIMIT                     TZDRAM_END
 
 /*******************************************************************************
  * Platform specific page table and MMU setup constants