mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 22:20:45 +00:00
arm: omap-common: add secure rom call API for secure devices
Adds a generic C-callable API for making secure ROM calls on OMAP and OMAP-compatible devices. This API provides the important function of flushing the ROM call arguments to memory from the cache, so that the secure world will have a coherent view of those arguments. Then is simply calls the omap_smc_sec routine. Signed-off-by: Daniel Allred <d-allred@ti.com> Signed-off-by: Andreas Dannenberg <dannenberg@ti.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
51d0638650
commit
d86f7afda4
3 changed files with 74 additions and 0 deletions
|
@ -36,3 +36,5 @@ obj-y += boot-common.o
|
|||
obj-y += lowlevel_init.o
|
||||
|
||||
obj-y += mem-common.o
|
||||
|
||||
obj-$(CONFIG_TI_SECURE_DEVICE) += sec-common.o
|
||||
|
|
51
arch/arm/cpu/armv7/omap-common/sec-common.c
Normal file
51
arch/arm/cpu/armv7/omap-common/sec-common.c
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
*
|
||||
* Common security related functions for OMAP devices
|
||||
*
|
||||
* (C) Copyright 2016
|
||||
* Texas Instruments, <www.ti.com>
|
||||
*
|
||||
* Daniel Allred <d-allred@ti.com>
|
||||
* Andreas Dannenberg <dannenberg@ti.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/omap_common.h>
|
||||
#include <asm/omap_sec_common.h>
|
||||
|
||||
static uint32_t secure_rom_call_args[5] __aligned(ARCH_DMA_MINALIGN);
|
||||
|
||||
u32 secure_rom_call(u32 service, u32 proc_id, u32 flag, ...)
|
||||
{
|
||||
int i;
|
||||
u32 num_args;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, flag);
|
||||
|
||||
num_args = va_arg(ap, u32);
|
||||
|
||||
if (num_args > 4)
|
||||
return 1;
|
||||
|
||||
/* Copy args to aligned args structure */
|
||||
for (i = 0; i < num_args; i++)
|
||||
secure_rom_call_args[i + 1] = va_arg(ap, u32);
|
||||
|
||||
secure_rom_call_args[0] = num_args;
|
||||
|
||||
va_end(ap);
|
||||
|
||||
/* if data cache is enabled, flush the aligned args structure */
|
||||
flush_dcache_range(
|
||||
(unsigned int)&secure_rom_call_args[0],
|
||||
(unsigned int)&secure_rom_call_args[0] +
|
||||
roundup(sizeof(secure_rom_call_args), ARCH_DMA_MINALIGN));
|
||||
|
||||
return omap_smc_sec(service, proc_id, flag, secure_rom_call_args);
|
||||
}
|
21
arch/arm/include/asm/omap_sec_common.h
Normal file
21
arch/arm/include/asm/omap_sec_common.h
Normal file
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* (C) Copyright 2016
|
||||
* Texas Instruments, <www.ti.com>
|
||||
*
|
||||
* Andreas Dannenberg <dannenberg@ti.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#ifndef _OMAP_SEC_COMMON_H_
|
||||
#define _OMAP_SEC_COMMON_H_
|
||||
|
||||
#include <common.h>
|
||||
|
||||
/*
|
||||
* Invoke secure ROM API on high-security (HS) device variants. It formats
|
||||
* the variable argument list into the format expected by the ROM code before
|
||||
* triggering the actual low-level smc entry.
|
||||
*/
|
||||
u32 secure_rom_call(u32 service, u32 proc_id, u32 flag, ...);
|
||||
|
||||
#endif /* _OMAP_SEC_COMMON_H_ */
|
Loading…
Reference in a new issue