diff options
author | Manish Pandey <manish.pandey2@arm.com> | 2018-11-02 13:28:25 +0000 |
---|---|---|
committer | Manish Pandey <manish.pandey2@arm.com> | 2018-11-05 17:11:03 +0000 |
commit | ed2c4f4a44c8a84e25fc924ba807a14fd60caae6 (patch) | |
tree | 65b05c0265c15d78cb2ac811113ad9a1cac4f2b3 /plat | |
parent | dd756c98953fa76ff000e97c6207111015c1c8c6 (diff) | |
download | platform_external_arm-trusted-firmware-ed2c4f4a44c8a84e25fc924ba807a14fd60caae6.tar.gz platform_external_arm-trusted-firmware-ed2c4f4a44c8a84e25fc924ba807a14fd60caae6.tar.bz2 platform_external_arm-trusted-firmware-ed2c4f4a44c8a84e25fc924ba807a14fd60caae6.zip |
plat/arm: Support direct Linux kernel boot in AArch32
This option allows the Trusted Firmware to directly jump to Linux
kernel for aarch32 without the need of an intermediate loader such
as U-Boot.
Similar to AArch64 ARM_LINUX_KERNEL_AS_BL33 only available with
RESET_TO_SP_MIN=1 as well as BL33 and DTB are preloaded in memory.
Change-Id: I908bc1633696be1caad0ce2f099c34215c8e0633
Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
Diffstat (limited to 'plat')
-rw-r--r-- | plat/arm/common/arm_common.mk | 13 | ||||
-rw-r--r-- | plat/arm/common/sp_min/arm_sp_min_setup.c | 13 |
2 files changed, 21 insertions, 5 deletions
diff --git a/plat/arm/common/arm_common.mk b/plat/arm/common/arm_common.mk index 23777fb7b..cb969b20b 100644 --- a/plat/arm/common/arm_common.mk +++ b/plat/arm/common/arm_common.mk @@ -86,11 +86,14 @@ $(eval $(call assert_boolean,ARM_LINUX_KERNEL_AS_BL33)) $(eval $(call add_define,ARM_LINUX_KERNEL_AS_BL33)) ifeq (${ARM_LINUX_KERNEL_AS_BL33},1) - ifneq (${ARCH},aarch64) - $(error "ARM_LINUX_KERNEL_AS_BL33 is only available in AArch64.") - endif - ifneq (${RESET_TO_BL31},1) - $(error "ARM_LINUX_KERNEL_AS_BL33 is only available if RESET_TO_BL31=1.") + ifeq (${ARCH},aarch64) + ifneq (${RESET_TO_BL31},1) + $(error "ARM_LINUX_KERNEL_AS_BL33 is only available if RESET_TO_BL31=1.") + endif + else + ifneq (${RESET_TO_SP_MIN},1) + $(error "ARM_LINUX_KERNEL_AS_BL33 is only available if RESET_TO_SP_MIN=1.") + endif endif ifndef PRELOADED_BL33_BASE $(error "PRELOADED_BL33_BASE must be set if ARM_LINUX_KERNEL_AS_BL33 is used.") diff --git a/plat/arm/common/sp_min/arm_sp_min_setup.c b/plat/arm/common/sp_min/arm_sp_min_setup.c index e151073f7..ca427d58a 100644 --- a/plat/arm/common/sp_min/arm_sp_min_setup.c +++ b/plat/arm/common/sp_min/arm_sp_min_setup.c @@ -82,6 +82,19 @@ void arm_sp_min_early_platform_setup(void *from_bl2, uintptr_t tos_fw_config, bl33_image_ep_info.spsr = arm_get_spsr_for_bl33_entry(); SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE); +# if ARM_LINUX_KERNEL_AS_BL33 + /* + * According to the file ``Documentation/arm/Booting`` of the Linux + * kernel tree, Linux expects: + * r0 = 0 + * r1 = machine type number, optional in DT-only platforms (~0 if so) + * r2 = Physical address of the device tree blob + */ + bl33_image_ep_info.args.arg0 = 0U; + bl33_image_ep_info.args.arg1 = ~0U; + bl33_image_ep_info.args.arg2 = (u_register_t)ARM_PRELOADED_DTB_BASE; +# endif + #else /* RESET_TO_SP_MIN */ /* |