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:
parent
4fe1bec3dc
commit
1bd2b131ff
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue