Commit 79b1ebda authored by Achin Gupta's avatar Achin Gupta
Browse files

Merge pull request #317 from vwadekar/run-bl32-on-tegra-v3

Run bl32 on tegra v3
parents 056904cb c2dfe2e0
...@@ -15,7 +15,16 @@ Directory structure ...@@ -15,7 +15,16 @@ Directory structure
* plat/nvidia/tegra/common - Common code for all Tegra SoCs * plat/nvidia/tegra/common - Common code for all Tegra SoCs
* plat/nvidia/tegra/soc/txxx - Chip specific code * 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 Preparing the BL31 image to run on Tegra SoCs
=================================================== ===================================================
CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-none-elf- make PLAT=tegra \ 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
...@@ -10,10 +10,11 @@ In order to compile TLK-D, we need a BL32 image to be present. Since, TLKD ...@@ -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 just needs to compile, any BL32 image would do. To use TLK as the BL32, please
refer to the "Build TLK" section. 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 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) Trusted Little Kernel (TLK)
=========================== ===========================
......
...@@ -82,7 +82,7 @@ extern uint64_t tegra_bl31_phys_base; ...@@ -82,7 +82,7 @@ extern uint64_t tegra_bl31_phys_base;
#define BL31_COHERENT_RAM_LIMIT (unsigned long)(&__COHERENT_RAM_END__) #define BL31_COHERENT_RAM_LIMIT (unsigned long)(&__COHERENT_RAM_END__)
#endif #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 = { static plat_params_from_bl2_t plat_bl31_params_from_bl2 = {
(uint64_t)TZDRAM_SIZE, (uintptr_t)NULL (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) ...@@ -102,6 +102,9 @@ entry_point_info_t *bl31_plat_get_next_image_ep_info(uint32_t type)
if (type == NON_SECURE) if (type == NON_SECURE)
return &bl33_image_ep_info; return &bl33_image_ep_info;
if (type == SECURE)
return &bl32_image_ep_info;
return NULL; return NULL;
} }
...@@ -134,10 +137,11 @@ void bl31_early_platform_setup(bl31_params_t *from_bl2, ...@@ -134,10 +137,11 @@ void bl31_early_platform_setup(bl31_params_t *from_bl2,
plat_crash_console_init(); 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. * They are stored in Secure RAM, in BL2's address space.
*/ */
bl33_image_ep_info = *from_bl2->bl33_ep_info; 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 * Parse platform specific parameters - TZDRAM aperture size and
......
...@@ -69,8 +69,11 @@ ...@@ -69,8 +69,11 @@
/******************************************************************************* /*******************************************************************************
* BL31 specific defines. * BL31 specific defines.
******************************************************************************/ ******************************************************************************/
#define BL31_SIZE 0x20000
#define BL31_BASE TZDRAM_BASE #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 * Platform specific page table and MMU setup constants
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment