[U-Boot] [U-Boot, v3, 07/11] spl: add support to booting with OP-TEE
Dr. Philipp Tomsich
philipp.tomsich at theobroma-systems.com
Thu Jan 4 10:48:04 UTC 2018
> On 4 Jan 2018, at 04:51, Kever Yang <kever.yang at rock-chips.com> wrote:
>
>
>
> On 01/03/2018 01:20 AM, Philipp Tomsich wrote:
>>
>>
>> On Tue, 19 Dec 2017, Kever Yang wrote:
>>
>>> 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
>>>
>>> Signed-off-by: Kever Yang <kever.yang at rock-chips.com>
>>
>> Reviewed-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
>>
>> See below for requested changed.
>>
>>> ---
>>>
>>> Changes in v3: None
>>> Changes in v2:
>>> - Using new image type for op-tee
>>>
>>> common/spl/Kconfig | 7 +++++++
>>> common/spl/Makefile | 1 +
>>> common/spl/spl.c | 8 ++++++++
>>> common/spl/spl_optee.S | 13 +++++++++++++
>>> include/spl.h | 9 +++++++++
>>> 5 files changed, 38 insertions(+)
>>> create mode 100644 common/spl/spl_optee.S
>>>
>>> diff --git a/common/spl/Kconfig b/common/spl/Kconfig
>>> index aef0034..c9a1ebb 100644
>>> --- a/common/spl/Kconfig
>>> +++ b/common/spl/Kconfig
>>> @@ -725,6 +725,13 @@ config SPL_ATF
>>> is loaded by SPL(which is considered as BL2 in ATF terminology).
>>> More detail at: https://github.com/ARM-software/arm-trusted-firmware
>>>
>>> +config SPL_OPTEE
>>> + 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
>>> bool
>>> depends on SUPPORT_TPL
>>> diff --git a/common/spl/Makefile b/common/spl/Makefile
>>> index 9bf8a2d..9918a2e 100644
>>> --- a/common/spl/Makefile
>>> +++ b/common/spl/Makefile
>>> @@ -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_)MMC_SUPPORT) += spl_mmc.o
>>> obj-$(CONFIG_$(SPL_TPL_)ATF) += spl_atf.o
>>> +obj-$(CONFIG_$(SPL_TPL_)OPTEE) += spl_optee.o
>>> obj-$(CONFIG_$(SPL_TPL_)USB_SUPPORT) += spl_usb.o
>>> obj-$(CONFIG_$(SPL_TPL_)FAT_SUPPORT) += spl_fat.o
>>> obj-$(CONFIG_$(SPL_TPL_)EXT_SUPPORT) += spl_ext.o
>>> diff --git a/common/spl/spl.c b/common/spl/spl.c
>>> index 76c1963..2c8942b 100644
>>> --- a/common/spl/spl.c
>>> +++ b/common/spl/spl.c
>>> @@ -436,6 +436,12 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
>>> spl_invoke_atf(&spl_image);
>>> break;
>>> #endif
>>> +#if CONFIG_IS_ENABLED(OPTEE)
>>> + case IH_OS_OP_TEE:
>>> + debug("Jumping to U-Boot via OP-TEE\n");
>>> + spl_optee_entry(0, 0, 0, (void *)spl_image.entry_point);
>>
>> Why are you passing '0' for "arg2, device tree address"? This should
>> be the device-tree pointer from the spl_image...
>
> I will add dt pointer for entry next version.
>>
>> Also: 0 is not the same as NULL ... the arguments are all defined to
>> have void* type, so 0 is not the correct type.
>>
>>> + break;
>>> +#endif
>>> #ifdef CONFIG_SPL_OS_BOOT
>>> case IH_OS_LINUX:
>>> debug("Jumping to Linux\n");
>>> @@ -450,6 +456,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
>>> debug("SPL malloc() used %#lx bytes (%ld KB)\n", gd->malloc_ptr,
>>> gd->malloc_ptr / 1024);
>>> #endif
>>> +
>>> + debug("loaded - jumping to U-Boot...\n");
>>> #ifdef CONFIG_BOOTSTAGE_STASH
>>> int ret;
>>>
>>> diff --git a/common/spl/spl_optee.S b/common/spl/spl_optee.S
>>> new file mode 100644
>>> index 0000000..4f7f8ba
>>> --- /dev/null
>>> +++ b/common/spl/spl_optee.S
>>> @@ -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)
>>> diff --git a/include/spl.h b/include/spl.h
>>> index c14448b..551ce43 100644
>>> --- a/include/spl.h
>>> +++ b/include/spl.h
>>> @@ -288,6 +288,15 @@ int spl_mmc_load_image(struct spl_image_info *spl_image,
>>> void spl_invoke_atf(struct spl_image_info *spl_image);
>>>
>>> /**
>>> + * 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);
>>
>> This doesn't look like a documentation comment for a U-Boot function.
>> Also: the purpose of arg0 and arg1 are not clear from this comment.
>
> This is a copy from OP-TEE project, we only use the entry address now.
> https://github.com/OP-TEE/optee_os/blob/master/core/arch/arm/kernel/generic_entry_a32.S#L208 <https://github.com/OP-TEE/optee_os/blob/master/core/arch/arm/kernel/generic_entry_a32.S#L208>
You can add a back-reference to the original source (i.e. the link into the OP-TEE
GIT) as well, which may be a good idea so people know what this links up with.
However, you should reformat the comment here anyway:
(a) U-Boot documentation should be consistent (automated tools may harvest
the comments documenting our exposed functions)
(b) The meaning of the arguments should be understandable to anyone reading
the U-Boot source-code without referring to the source of OP-TEE.
Regards,
Philipp.
>>> +
>>> +/**
>>> * board_return_to_bootrom - allow for boards to continue with the boot ROM
>>> *
>>> * If a board (e.g. the Rockchip RK3368 boards) provide some
More information about the U-Boot
mailing list