spl: add support to booting with OP-TEE

OP-TEE is an open source trusted OS, in armv7, its loading and
running are like this:
loading:
- SPL load both OP-TEE and U-Boot
running:
- SPL run into OP-TEE in secure mode;
- OP-TEE run into U-Boot in non-secure mode;

More detail:
https://github.com/OP-TEE/optee_os
and search for 'boot arguments' for detail entry parameter in:
core/arch/arm/kernel/generic_entry_a32.S

Change-Id: I1344a35dd11bd69ca00e9b99909e1eb610648d86
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
Kever Yang 2017-09-06 09:22:42 +08:00
parent 4fe1bec3dc
commit 1bd2b131ff
5 changed files with 35 additions and 0 deletions

View File

@ -706,6 +706,13 @@ config SPL_ATF_TEXT_BASE
help help
This is the base address in memory for ATF BL31 text and entry point. This is the base address in memory for ATF BL31 text and entry point.
config SPL_OPTEE_SUPPORT
bool "Support OP-TEE Trusted OS"
depends on ARM
help
OP-TEE is an open source Trusted OS which is loaded by SPL.
More detail at: https://github.com/OP-TEE/optee_os
config TPL config TPL
bool bool
depends on SUPPORT_TPL depends on SUPPORT_TPL

View File

@ -23,6 +23,7 @@ obj-$(CONFIG_$(SPL_TPL_)UBI) += spl_ubi.o
obj-$(CONFIG_$(SPL_TPL_)NET_SUPPORT) += spl_net.o obj-$(CONFIG_$(SPL_TPL_)NET_SUPPORT) += spl_net.o
obj-$(CONFIG_$(SPL_TPL_)MMC_SUPPORT) += spl_mmc.o obj-$(CONFIG_$(SPL_TPL_)MMC_SUPPORT) += spl_mmc.o
obj-$(CONFIG_$(SPL_TPL_)ATF_SUPPORT) += spl_atf.o obj-$(CONFIG_$(SPL_TPL_)ATF_SUPPORT) += spl_atf.o
obj-$(CONFIG_$(SPL_TPL_)OPTEE_SUPPORT) += spl_optee.o
obj-$(CONFIG_$(SPL_TPL_)USB_SUPPORT) += spl_usb.o obj-$(CONFIG_$(SPL_TPL_)USB_SUPPORT) += spl_usb.o
obj-$(CONFIG_$(SPL_TPL_)FAT_SUPPORT) += spl_fat.o obj-$(CONFIG_$(SPL_TPL_)FAT_SUPPORT) += spl_fat.o
obj-$(CONFIG_$(SPL_TPL_)EXT_SUPPORT) += spl_ext.o obj-$(CONFIG_$(SPL_TPL_)EXT_SUPPORT) += spl_ext.o

View File

@ -430,6 +430,11 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
bl31_entry(); bl31_entry();
} }
if (CONFIG_IS_ENABLED(OPTEE_SUPPORT)) {
debug("loaded - jumping to U-Boot via OP-TEE.\n");
spl_optee_entry(0, 0, 0, (void *)spl_image.entry_point);
}
debug("loaded - jumping to U-Boot...\n"); debug("loaded - jumping to U-Boot...\n");
#ifdef CONFIG_BOOTSTAGE_STASH #ifdef CONFIG_BOOTSTAGE_STASH
int ret; int ret;

13
common/spl/spl_optee.S Normal file
View File

@ -0,0 +1,13 @@
/*
* Copyright (C) 2017 Rockchip Electronic Co.,Ltd
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <linux/linkage.h>
#include <asm/assembler.h>
ENTRY(spl_optee_entry)
ldr lr, =CONFIG_SYS_TEXT_BASE
mov pc, r3
ENDPROC(spl_optee_entry)

View File

@ -269,6 +269,15 @@ int spl_mmc_load_image(struct spl_image_info *spl_image,
void bl31_entry(void); void bl31_entry(void);
/**
* spl_optee_entry - entry function for optee
* entry arg0, pagestore
* entry arg1, (ARMv7 standard bootarg #1)
* entry arg2, device tree address, (ARMv7 standard bootarg #2)
* entry arg3, non-secure entry address (ARMv7 bootarg #0)
*/
void spl_optee_entry(void *arg0, void *arg1, void *arg2, void *arg3);
/** /**
* board_return_to_bootrom - allow for boards to continue with the boot ROM * board_return_to_bootrom - allow for boards to continue with the boot ROM
* *