Merge pull request #1797 from antonio-nino-diaz-arm/an/remove-smccc-v2
Remove support for the SMC Calling Convention 2.0
This commit is contained in:
commit
766ff011ca
12
Makefile
12
Makefile
|
@ -432,16 +432,6 @@ ifeq ($(BL2_AT_EL3)-$(BL2_IN_XIP_MEM),0-1)
|
||||||
$(error "BL2_IN_XIP_MEM is only supported when BL2_AT_EL3 is enabled")
|
$(error "BL2_IN_XIP_MEM is only supported when BL2_AT_EL3 is enabled")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# SMC Calling Convention checks
|
|
||||||
ifneq (${SMCCC_MAJOR_VERSION},1)
|
|
||||||
ifneq (${SPD},none)
|
|
||||||
$(error "SMC Calling Convention 1.X must be used with SPDs")
|
|
||||||
endif
|
|
||||||
ifeq (${ARCH},aarch32)
|
|
||||||
$(error "Only SMCCC 1.X is supported in AArch32 mode.")
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# For RAS_EXTENSION, require that EAs are handled in EL3 first
|
# For RAS_EXTENSION, require that EAs are handled in EL3 first
|
||||||
ifeq ($(RAS_EXTENSION),1)
|
ifeq ($(RAS_EXTENSION),1)
|
||||||
ifneq ($(HANDLE_EA_EL3_FIRST),1)
|
ifneq ($(HANDLE_EA_EL3_FIRST),1)
|
||||||
|
@ -624,7 +614,6 @@ $(eval $(call assert_boolean,BL2_IN_XIP_MEM))
|
||||||
|
|
||||||
$(eval $(call assert_numeric,ARM_ARCH_MAJOR))
|
$(eval $(call assert_numeric,ARM_ARCH_MAJOR))
|
||||||
$(eval $(call assert_numeric,ARM_ARCH_MINOR))
|
$(eval $(call assert_numeric,ARM_ARCH_MINOR))
|
||||||
$(eval $(call assert_numeric,SMCCC_MAJOR_VERSION))
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Add definitions to the cpp preprocessor based on the current build options.
|
# Add definitions to the cpp preprocessor based on the current build options.
|
||||||
|
@ -664,7 +653,6 @@ $(eval $(call add_define,RAS_EXTENSION))
|
||||||
$(eval $(call add_define,RESET_TO_BL31))
|
$(eval $(call add_define,RESET_TO_BL31))
|
||||||
$(eval $(call add_define,SEPARATE_CODE_AND_RODATA))
|
$(eval $(call add_define,SEPARATE_CODE_AND_RODATA))
|
||||||
$(eval $(call add_define,RECLAIM_INIT_CODE))
|
$(eval $(call add_define,RECLAIM_INIT_CODE))
|
||||||
$(eval $(call add_define,SMCCC_MAJOR_VERSION))
|
|
||||||
$(eval $(call add_define,SPD_${SPD}))
|
$(eval $(call add_define,SPD_${SPD}))
|
||||||
$(eval $(call add_define,SPIN_ON_BL1_EXIT))
|
$(eval $(call add_define,SPIN_ON_BL1_EXIT))
|
||||||
$(eval $(call add_define,SPM_MM))
|
$(eval $(call add_define,SPM_MM))
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -303,38 +303,6 @@ vector_entry serror_aarch32
|
||||||
b enter_lower_el_async_ea
|
b enter_lower_el_async_ea
|
||||||
end_vector_entry serror_aarch32
|
end_vector_entry serror_aarch32
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------
|
|
||||||
* This macro takes an argument in x16 that is the index in the
|
|
||||||
* 'rt_svc_descs_indices' array, checks that the value in the array is
|
|
||||||
* valid, and loads in x15 the pointer to the handler of that service.
|
|
||||||
* ---------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
.macro load_rt_svc_desc_pointer
|
|
||||||
/* Load descriptor index from array of indices */
|
|
||||||
adr x14, rt_svc_descs_indices
|
|
||||||
ldrb w15, [x14, x16]
|
|
||||||
|
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
|
||||||
/* Any index greater than 127 is invalid. Check bit 7. */
|
|
||||||
tbnz w15, 7, smc_unknown
|
|
||||||
#elif SMCCC_MAJOR_VERSION == 2
|
|
||||||
/* Verify that the top 3 bits of the loaded index are 0 (w15 <= 31) */
|
|
||||||
cmp w15, #31
|
|
||||||
b.hi smc_unknown
|
|
||||||
#endif /* SMCCC_MAJOR_VERSION */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the descriptor using the index
|
|
||||||
* x11 = (base + off), w15 = index
|
|
||||||
*
|
|
||||||
* handler = (base + off) + (index << log2(size))
|
|
||||||
*/
|
|
||||||
adr x11, (__RT_SVC_DESCS_START__ + RT_SVC_DESC_HANDLE)
|
|
||||||
lsl w10, w15, #RT_SVC_SIZE_LOG2
|
|
||||||
ldr x15, [x11, w10, uxtw]
|
|
||||||
.endm
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------
|
/* ---------------------------------------------------------------------
|
||||||
* The following code handles secure monitor calls.
|
* The following code handles secure monitor calls.
|
||||||
* Depending upon the execution state from where the SMC has been
|
* Depending upon the execution state from where the SMC has been
|
||||||
|
@ -363,56 +331,27 @@ smc_handler64:
|
||||||
mov x5, xzr
|
mov x5, xzr
|
||||||
mov x6, sp
|
mov x6, sp
|
||||||
|
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
|
||||||
|
|
||||||
/* Get the unique owning entity number */
|
/* Get the unique owning entity number */
|
||||||
ubfx x16, x0, #FUNCID_OEN_SHIFT, #FUNCID_OEN_WIDTH
|
ubfx x16, x0, #FUNCID_OEN_SHIFT, #FUNCID_OEN_WIDTH
|
||||||
ubfx x15, x0, #FUNCID_TYPE_SHIFT, #FUNCID_TYPE_WIDTH
|
ubfx x15, x0, #FUNCID_TYPE_SHIFT, #FUNCID_TYPE_WIDTH
|
||||||
orr x16, x16, x15, lsl #FUNCID_OEN_WIDTH
|
orr x16, x16, x15, lsl #FUNCID_OEN_WIDTH
|
||||||
|
|
||||||
load_rt_svc_desc_pointer
|
/* Load descriptor index from array of indices */
|
||||||
|
adr x14, rt_svc_descs_indices
|
||||||
|
ldrb w15, [x14, x16]
|
||||||
|
|
||||||
#elif SMCCC_MAJOR_VERSION == 2
|
/* Any index greater than 127 is invalid. Check bit 7. */
|
||||||
|
tbnz w15, 7, smc_unknown
|
||||||
/* Bit 31 must be set */
|
|
||||||
tbz x0, #FUNCID_TYPE_SHIFT, smc_unknown
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check MSB of namespace to decide between compatibility/vendor and
|
* Get the descriptor using the index
|
||||||
* SPCI/SPRT
|
* x11 = (base + off), w15 = index
|
||||||
*/
|
|
||||||
tbz x0, #(FUNCID_NAMESPACE_SHIFT + 1), compat_or_vendor
|
|
||||||
|
|
||||||
/* Namespace is b'10 (SPRT) or b'11 (SPCI) */
|
|
||||||
#if ENABLE_SPM
|
|
||||||
tst x0, #(1 << FUNCID_NAMESPACE_SHIFT)
|
|
||||||
adr x15, spci_smc_handler
|
|
||||||
adr x16, sprt_smc_handler
|
|
||||||
csel x15, x15, x16, ne
|
|
||||||
b prepare_enter_handler
|
|
||||||
#else
|
|
||||||
b smc_unknown
|
|
||||||
#endif
|
|
||||||
|
|
||||||
compat_or_vendor:
|
|
||||||
|
|
||||||
/* Namespace is b'00 (compatibility) or b'01 (vendor) */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add the LSB of the namespace (bit [28]) to the OEN [27:24] to create
|
|
||||||
* a 5-bit index into the rt_svc_descs_indices array.
|
|
||||||
*
|
*
|
||||||
* The low 16 entries of the rt_svc_descs_indices array correspond to
|
* handler = (base + off) + (index << log2(size))
|
||||||
* OENs of the compatibility namespace and the top 16 entries of the
|
|
||||||
* array are assigned to the vendor namespace descriptor.
|
|
||||||
*/
|
*/
|
||||||
ubfx x16, x0, #FUNCID_OEN_SHIFT, #(FUNCID_OEN_WIDTH + 1)
|
adr x11, (__RT_SVC_DESCS_START__ + RT_SVC_DESC_HANDLE)
|
||||||
|
lsl w10, w15, #RT_SVC_SIZE_LOG2
|
||||||
load_rt_svc_desc_pointer
|
ldr x15, [x11, w10, uxtw]
|
||||||
|
|
||||||
prepare_enter_handler:
|
|
||||||
|
|
||||||
#endif /* SMCCC_MAJOR_VERSION */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Restore the saved C runtime stack value which will become the new
|
* Restore the saved C runtime stack value which will become the new
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -29,7 +29,6 @@ uint8_t rt_svc_descs_indices[MAX_RT_SVCS];
|
||||||
* Function to invoke the registered `handle` corresponding to the smc_fid in
|
* Function to invoke the registered `handle` corresponding to the smc_fid in
|
||||||
* AArch32 mode.
|
* AArch32 mode.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
|
||||||
uintptr_t handle_runtime_svc(uint32_t smc_fid,
|
uintptr_t handle_runtime_svc(uint32_t smc_fid,
|
||||||
void *cookie,
|
void *cookie,
|
||||||
void *handle,
|
void *handle,
|
||||||
|
@ -55,7 +54,6 @@ uintptr_t handle_runtime_svc(uint32_t smc_fid,
|
||||||
return rt_svc_descs[index].handle(smc_fid, x1, x2, x3, x4, cookie,
|
return rt_svc_descs[index].handle(smc_fid, x1, x2, x3, x4, cookie,
|
||||||
handle, flags);
|
handle, flags);
|
||||||
}
|
}
|
||||||
#endif /* SMCCC_MAJOR_VERSION */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Simple routine to sanity check a runtime service descriptor before using it
|
* Simple routine to sanity check a runtime service descriptor before using it
|
||||||
|
@ -71,14 +69,9 @@ static int32_t validate_rt_svc_desc(const rt_svc_desc_t *desc)
|
||||||
if (desc->end_oen >= OEN_LIMIT)
|
if (desc->end_oen >= OEN_LIMIT)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
|
||||||
if ((desc->call_type != SMC_TYPE_FAST) &&
|
if ((desc->call_type != SMC_TYPE_FAST) &&
|
||||||
(desc->call_type != SMC_TYPE_YIELD))
|
(desc->call_type != SMC_TYPE_YIELD))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
#elif SMCCC_MAJOR_VERSION == 2
|
|
||||||
if (desc->is_vendor > 1U)
|
|
||||||
return -EINVAL;
|
|
||||||
#endif /* SMCCC_MAJOR_VERSION */
|
|
||||||
|
|
||||||
/* A runtime service having no init or handle function doesn't make sense */
|
/* A runtime service having no init or handle function doesn't make sense */
|
||||||
if ((desc->init == NULL) && (desc->handle == NULL))
|
if ((desc->init == NULL) && (desc->handle == NULL))
|
||||||
|
@ -149,17 +142,10 @@ void __init runtime_svc_init(void)
|
||||||
* descriptor which will handle the SMCs for this owning
|
* descriptor which will handle the SMCs for this owning
|
||||||
* entity range.
|
* entity range.
|
||||||
*/
|
*/
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
|
||||||
start_idx = (uint8_t)get_unique_oen(service->start_oen,
|
start_idx = (uint8_t)get_unique_oen(service->start_oen,
|
||||||
service->call_type);
|
service->call_type);
|
||||||
end_idx = (uint8_t)get_unique_oen(service->end_oen,
|
end_idx = (uint8_t)get_unique_oen(service->end_oen,
|
||||||
service->call_type);
|
service->call_type);
|
||||||
#elif SMCCC_MAJOR_VERSION == 2
|
|
||||||
start_idx = (uint8_t)get_rt_desc_idx(service->start_oen,
|
|
||||||
service->is_vendor);
|
|
||||||
end_idx = (uint8_t)get_rt_desc_idx(service->end_oen,
|
|
||||||
service->is_vendor);
|
|
||||||
#endif
|
|
||||||
assert(start_idx <= end_idx);
|
assert(start_idx <= end_idx);
|
||||||
assert(end_idx < MAX_RT_SVCS);
|
assert(end_idx < MAX_RT_SVCS);
|
||||||
for (; start_idx <= end_idx; start_idx++)
|
for (; start_idx <= end_idx; start_idx++)
|
||||||
|
|
|
@ -668,11 +668,6 @@ Common build options
|
||||||
pages" section in `Firmware Design`_. This flag is disabled by default and
|
pages" section in `Firmware Design`_. This flag is disabled by default and
|
||||||
affects all BL images.
|
affects all BL images.
|
||||||
|
|
||||||
- ``SMCCC_MAJOR_VERSION``: Numeric value that indicates the major version of
|
|
||||||
the SMC Calling Convention that the Trusted Firmware supports. The only two
|
|
||||||
allowed values are 1 and 2, and it defaults to 1. The minor version is
|
|
||||||
determined using this value.
|
|
||||||
|
|
||||||
- ``SPD``: Choose a Secure Payload Dispatcher component to be built into TF-A.
|
- ``SPD``: Choose a Secure Payload Dispatcher component to be built into TF-A.
|
||||||
This build option is only valid if ``ARCH=aarch64``. The value should be
|
This build option is only valid if ``ARCH=aarch64``. The value should be
|
||||||
the path to the directory containing the SPD source, relative to
|
the path to the directory containing the SPD source, relative to
|
||||||
|
@ -2057,7 +2052,7 @@ wakeup interrupt from RTC.
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
*Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.*
|
*Copyright (c) 2013-2019, Arm Limited and Contributors. All rights reserved.*
|
||||||
|
|
||||||
.. _Linaro: `Linaro Release Notes`_
|
.. _Linaro: `Linaro Release Notes`_
|
||||||
.. _Linaro Release: `Linaro Release Notes`_
|
.. _Linaro Release: `Linaro Release Notes`_
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -36,17 +36,8 @@
|
||||||
* In SMCCC 1.X, the function identifier has 6 bits for the owning entity number
|
* In SMCCC 1.X, the function identifier has 6 bits for the owning entity number
|
||||||
* and a single bit for the type of smc call. When taken together, those values
|
* and a single bit for the type of smc call. When taken together, those values
|
||||||
* limit the maximum number of runtime services to 128.
|
* limit the maximum number of runtime services to 128.
|
||||||
*
|
|
||||||
* In SMCCC 2.X the type bit is always 1 and there are only 4 OEN bits in the
|
|
||||||
* compatibility namespace, so the total number of services is 16. The LSB of
|
|
||||||
* namespace is also added to these 4 bits to make space for the vendor service
|
|
||||||
* handler and so the total number of runtime services is 32.
|
|
||||||
*/
|
*/
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
|
||||||
#define MAX_RT_SVCS U(128)
|
#define MAX_RT_SVCS U(128)
|
||||||
#elif SMCCC_MAJOR_VERSION == 2
|
|
||||||
#define MAX_RT_SVCS U(32)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
@ -70,11 +61,7 @@ typedef uintptr_t (*rt_svc_handle_t)(uint32_t smc_fid,
|
||||||
typedef struct rt_svc_desc {
|
typedef struct rt_svc_desc {
|
||||||
uint8_t start_oen;
|
uint8_t start_oen;
|
||||||
uint8_t end_oen;
|
uint8_t end_oen;
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
|
||||||
uint8_t call_type;
|
uint8_t call_type;
|
||||||
#elif SMCCC_MAJOR_VERSION == 2
|
|
||||||
uint8_t is_vendor;
|
|
||||||
#endif
|
|
||||||
const char *name;
|
const char *name;
|
||||||
rt_svc_init_t init;
|
rt_svc_init_t init;
|
||||||
rt_svc_handle_t handle;
|
rt_svc_handle_t handle;
|
||||||
|
@ -83,8 +70,6 @@ typedef struct rt_svc_desc {
|
||||||
/*
|
/*
|
||||||
* Convenience macros to declare a service descriptor
|
* Convenience macros to declare a service descriptor
|
||||||
*/
|
*/
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
|
||||||
|
|
||||||
#define DECLARE_RT_SVC(_name, _start, _end, _type, _setup, _smch) \
|
#define DECLARE_RT_SVC(_name, _start, _end, _type, _setup, _smch) \
|
||||||
static const rt_svc_desc_t __svc_desc_ ## _name \
|
static const rt_svc_desc_t __svc_desc_ ## _name \
|
||||||
__section("rt_svc_descs") __used = { \
|
__section("rt_svc_descs") __used = { \
|
||||||
|
@ -96,37 +81,6 @@ typedef struct rt_svc_desc {
|
||||||
.handle = (_smch) \
|
.handle = (_smch) \
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif SMCCC_MAJOR_VERSION == 2
|
|
||||||
|
|
||||||
#define DECLARE_RT_SVC(_name, _start, _end, _type, _setup, _smch) \
|
|
||||||
static const rt_svc_desc_t __svc_desc_ ## _name \
|
|
||||||
__section("rt_svc_descs") __used = { \
|
|
||||||
.start_oen = (_start), \
|
|
||||||
.end_oen = (_end), \
|
|
||||||
.is_vendor = 0, \
|
|
||||||
.name = #_name, \
|
|
||||||
.init = (_setup), \
|
|
||||||
.handle = (_smch), \
|
|
||||||
}; \
|
|
||||||
CASSERT((_type) == SMC_TYPE_FAST, rt_svc_type_check_ ## _name)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The higher 16 entries of the runtime services are used for the vendor
|
|
||||||
* specific descriptor.
|
|
||||||
*/
|
|
||||||
#define DECLARE_RT_SVC_VENDOR(_setup, _smch) \
|
|
||||||
static const rt_svc_desc_t __svc_desc_vendor \
|
|
||||||
__section("rt_svc_descs") __used = { \
|
|
||||||
.start_oen = 0, \
|
|
||||||
.end_oen = 15, \
|
|
||||||
.is_vendor = 1, \
|
|
||||||
.name = "vendor_rt_svc", \
|
|
||||||
.init = _setup, \
|
|
||||||
.handle = _smch, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* SMCCC_MAJOR_VERSION */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compile time assertions related to the 'rt_svc_desc' structure to:
|
* Compile time assertions related to the 'rt_svc_desc' structure to:
|
||||||
* 1. ensure that the assembler and the compiler view of the size
|
* 1. ensure that the assembler and the compiler view of the size
|
||||||
|
@ -144,7 +98,6 @@ CASSERT(RT_SVC_DESC_HANDLE == __builtin_offsetof(rt_svc_desc_t, handle), \
|
||||||
assert_rt_svc_desc_handle_offset_mismatch);
|
assert_rt_svc_desc_handle_offset_mismatch);
|
||||||
|
|
||||||
|
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
|
||||||
/*
|
/*
|
||||||
* This function combines the call type and the owning entity number
|
* This function combines the call type and the owning entity number
|
||||||
* corresponding to a runtime service to generate a unique owning entity number.
|
* corresponding to a runtime service to generate a unique owning entity number.
|
||||||
|
@ -169,22 +122,6 @@ static inline uint32_t get_unique_oen_from_smc_fid(uint32_t fid)
|
||||||
return get_unique_oen(GET_SMC_OEN(fid), GET_SMC_TYPE(fid));
|
return get_unique_oen(GET_SMC_OEN(fid), GET_SMC_TYPE(fid));
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif SMCCC_MAJOR_VERSION == 2
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function combines the owning entity number corresponding to a runtime
|
|
||||||
* service with one extra bit for the vendor namespace to generate an index into
|
|
||||||
* the 'rt_svc_descs_indices' array. The entry contains the index of the service
|
|
||||||
* descriptor in the 'rt_svc_descs' array.
|
|
||||||
*/
|
|
||||||
static inline uint32_t get_rt_desc_idx(uint32_t oen, uint32_t is_vendor)
|
|
||||||
{
|
|
||||||
return ((is_vendor & 1U) << FUNCID_OEN_WIDTH) |
|
|
||||||
(oen & FUNCID_OEN_MASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Function & variable prototypes
|
* Function & variable prototypes
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -19,15 +19,69 @@
|
||||||
| (((uint32_t)(_minor) & SMCCC_VERSION_MINOR_MASK) << \
|
| (((uint32_t)(_minor) & SMCCC_VERSION_MINOR_MASK) << \
|
||||||
SMCCC_VERSION_MINOR_SHIFT))
|
SMCCC_VERSION_MINOR_SHIFT))
|
||||||
|
|
||||||
#if SMCCC_MAJOR_VERSION == 1
|
#define SMCCC_MAJOR_VERSION U(1)
|
||||||
#define SMCCC_MINOR_VERSION U(1)
|
#define SMCCC_MINOR_VERSION U(1)
|
||||||
# include <lib/smccc_v1.h>
|
|
||||||
#elif SMCCC_MAJOR_VERSION == 2
|
/*******************************************************************************
|
||||||
# define SMCCC_MINOR_VERSION U(0)
|
* Bit definitions inside the function id as per the SMC calling convention
|
||||||
# include <lib/smccc_v2.h>
|
******************************************************************************/
|
||||||
#else
|
#define FUNCID_TYPE_SHIFT U(31)
|
||||||
# error "Unsupported version of SMCCC."
|
#define FUNCID_TYPE_MASK U(0x1)
|
||||||
#endif
|
#define FUNCID_TYPE_WIDTH U(1)
|
||||||
|
|
||||||
|
#define FUNCID_CC_SHIFT U(30)
|
||||||
|
#define FUNCID_CC_MASK U(0x1)
|
||||||
|
#define FUNCID_CC_WIDTH U(1)
|
||||||
|
|
||||||
|
#define FUNCID_OEN_SHIFT U(24)
|
||||||
|
#define FUNCID_OEN_MASK U(0x3f)
|
||||||
|
#define FUNCID_OEN_WIDTH U(6)
|
||||||
|
|
||||||
|
#define FUNCID_NUM_SHIFT U(0)
|
||||||
|
#define FUNCID_NUM_MASK U(0xffff)
|
||||||
|
#define FUNCID_NUM_WIDTH U(16)
|
||||||
|
|
||||||
|
#define GET_SMC_TYPE(id) (((id) >> FUNCID_TYPE_SHIFT) & \
|
||||||
|
FUNCID_TYPE_MASK)
|
||||||
|
#define GET_SMC_CC(id) (((id) >> FUNCID_CC_SHIFT) & \
|
||||||
|
FUNCID_CC_MASK)
|
||||||
|
#define GET_SMC_OEN(id) (((id) >> FUNCID_OEN_SHIFT) & \
|
||||||
|
FUNCID_OEN_MASK)
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Owning entity number definitions inside the function id as per the SMC
|
||||||
|
* calling convention
|
||||||
|
******************************************************************************/
|
||||||
|
#define OEN_ARM_START U(0)
|
||||||
|
#define OEN_ARM_END U(0)
|
||||||
|
#define OEN_CPU_START U(1)
|
||||||
|
#define OEN_CPU_END U(1)
|
||||||
|
#define OEN_SIP_START U(2)
|
||||||
|
#define OEN_SIP_END U(2)
|
||||||
|
#define OEN_OEM_START U(3)
|
||||||
|
#define OEN_OEM_END U(3)
|
||||||
|
#define OEN_STD_START U(4) /* Standard Service Calls */
|
||||||
|
#define OEN_STD_END U(4)
|
||||||
|
#define OEN_STD_HYP_START U(5) /* Standard Hypervisor Service calls */
|
||||||
|
#define OEN_STD_HYP_END U(5)
|
||||||
|
#define OEN_VEN_HYP_START U(6) /* Vendor Hypervisor Service calls */
|
||||||
|
#define OEN_VEN_HYP_END U(6)
|
||||||
|
#define OEN_TAP_START U(48) /* Trusted Applications */
|
||||||
|
#define OEN_TAP_END U(49)
|
||||||
|
#define OEN_TOS_START U(50) /* Trusted OS */
|
||||||
|
#define OEN_TOS_END U(63)
|
||||||
|
#define OEN_LIMIT U(64)
|
||||||
|
|
||||||
|
/* Flags and error codes */
|
||||||
|
#define SMC_64 U(1)
|
||||||
|
#define SMC_32 U(0)
|
||||||
|
|
||||||
|
#define SMC_TYPE_FAST ULL(1)
|
||||||
|
#define SMC_TYPE_YIELD ULL(0)
|
||||||
|
|
||||||
|
#define SMC_OK ULL(0)
|
||||||
|
#define SMC_UNK -1
|
||||||
|
#define SMC_PREEMPTED -2 /* Not defined by the SMCCC */
|
||||||
|
|
||||||
/* Various flags passed to SMC handlers */
|
/* Various flags passed to SMC handlers */
|
||||||
#define SMC_FROM_SECURE (U(0) << 0)
|
#define SMC_FROM_SECURE (U(0) << 0)
|
||||||
|
|
|
@ -1,75 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef SMCCC_V1_H
|
|
||||||
#define SMCCC_V1_H
|
|
||||||
|
|
||||||
#ifndef SMCCC_H
|
|
||||||
#error "This file must only be included from smccc.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Bit definitions inside the function id as per the SMC calling convention
|
|
||||||
******************************************************************************/
|
|
||||||
#define FUNCID_TYPE_SHIFT U(31)
|
|
||||||
#define FUNCID_TYPE_MASK U(0x1)
|
|
||||||
#define FUNCID_TYPE_WIDTH U(1)
|
|
||||||
|
|
||||||
#define FUNCID_CC_SHIFT U(30)
|
|
||||||
#define FUNCID_CC_MASK U(0x1)
|
|
||||||
#define FUNCID_CC_WIDTH U(1)
|
|
||||||
|
|
||||||
#define FUNCID_OEN_SHIFT U(24)
|
|
||||||
#define FUNCID_OEN_MASK U(0x3f)
|
|
||||||
#define FUNCID_OEN_WIDTH U(6)
|
|
||||||
|
|
||||||
#define FUNCID_NUM_SHIFT U(0)
|
|
||||||
#define FUNCID_NUM_MASK U(0xffff)
|
|
||||||
#define FUNCID_NUM_WIDTH U(16)
|
|
||||||
|
|
||||||
#define GET_SMC_TYPE(id) (((id) >> FUNCID_TYPE_SHIFT) & \
|
|
||||||
FUNCID_TYPE_MASK)
|
|
||||||
#define GET_SMC_CC(id) (((id) >> FUNCID_CC_SHIFT) & \
|
|
||||||
FUNCID_CC_MASK)
|
|
||||||
#define GET_SMC_OEN(id) (((id) >> FUNCID_OEN_SHIFT) & \
|
|
||||||
FUNCID_OEN_MASK)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Owning entity number definitions inside the function id as per the SMC
|
|
||||||
* calling convention
|
|
||||||
******************************************************************************/
|
|
||||||
#define OEN_ARM_START U(0)
|
|
||||||
#define OEN_ARM_END U(0)
|
|
||||||
#define OEN_CPU_START U(1)
|
|
||||||
#define OEN_CPU_END U(1)
|
|
||||||
#define OEN_SIP_START U(2)
|
|
||||||
#define OEN_SIP_END U(2)
|
|
||||||
#define OEN_OEM_START U(3)
|
|
||||||
#define OEN_OEM_END U(3)
|
|
||||||
#define OEN_STD_START U(4) /* Standard Service Calls */
|
|
||||||
#define OEN_STD_END U(4)
|
|
||||||
#define OEN_STD_HYP_START U(5) /* Standard Hypervisor Service calls */
|
|
||||||
#define OEN_STD_HYP_END U(5)
|
|
||||||
#define OEN_VEN_HYP_START U(6) /* Vendor Hypervisor Service calls */
|
|
||||||
#define OEN_VEN_HYP_END U(6)
|
|
||||||
#define OEN_TAP_START U(48) /* Trusted Applications */
|
|
||||||
#define OEN_TAP_END U(49)
|
|
||||||
#define OEN_TOS_START U(50) /* Trusted OS */
|
|
||||||
#define OEN_TOS_END U(63)
|
|
||||||
#define OEN_LIMIT U(64)
|
|
||||||
|
|
||||||
/* Flags and error codes */
|
|
||||||
#define SMC_64 U(1)
|
|
||||||
#define SMC_32 U(0)
|
|
||||||
|
|
||||||
#define SMC_TYPE_FAST ULL(1)
|
|
||||||
#define SMC_TYPE_YIELD ULL(0)
|
|
||||||
|
|
||||||
#define SMC_OK ULL(0)
|
|
||||||
#define SMC_UNK -1
|
|
||||||
#define SMC_PREEMPTED -2 /* Not defined by the SMCCC */
|
|
||||||
|
|
||||||
#endif /* SMCCC_V1_H */
|
|
|
@ -1,85 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef SMCCC_V2_H
|
|
||||||
#define SMCCC_V2_H
|
|
||||||
|
|
||||||
#ifndef SMCCC_H
|
|
||||||
#error "This file must only be included from smccc.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Bit definitions inside the function id as per the SMC calling convention
|
|
||||||
******************************************************************************/
|
|
||||||
#define FUNCID_TYPE_SHIFT U(31)
|
|
||||||
#define FUNCID_TYPE_MASK U(0x1)
|
|
||||||
#define FUNCID_TYPE_WIDTH U(1)
|
|
||||||
|
|
||||||
#define FUNCID_CC_SHIFT U(30)
|
|
||||||
#define FUNCID_CC_MASK U(0x1)
|
|
||||||
#define FUNCID_CC_WIDTH U(1)
|
|
||||||
|
|
||||||
#define FUNCID_NAMESPACE_SHIFT U(28)
|
|
||||||
#define FUNCID_NAMESPACE_MASK U(0x3)
|
|
||||||
#define FUNCID_NAMESPACE_WIDTH U(2)
|
|
||||||
|
|
||||||
#define FUNCID_OEN_SHIFT U(24)
|
|
||||||
#define FUNCID_OEN_MASK U(0xf)
|
|
||||||
#define FUNCID_OEN_WIDTH U(4)
|
|
||||||
|
|
||||||
#define FUNCID_NUM_SHIFT U(0)
|
|
||||||
#define FUNCID_NUM_MASK U(0xffff)
|
|
||||||
#define FUNCID_NUM_WIDTH U(16)
|
|
||||||
|
|
||||||
#define GET_SMC_TYPE(id) (((id) >> FUNCID_TYPE_SHIFT) & \
|
|
||||||
FUNCID_TYPE_MASK)
|
|
||||||
#define GET_SMC_CC(id) (((id) >> FUNCID_CC_SHIFT) & \
|
|
||||||
FUNCID_CC_MASK)
|
|
||||||
#define GET_SMC_NAMESPACE(id) (((id) >> FUNCID_NAMESPACE_SHIFT) & \
|
|
||||||
FUNCID_NAMESPACE_MASK)
|
|
||||||
#define GET_SMC_OEN(id) (((id) >> FUNCID_OEN_SHIFT) & \
|
|
||||||
FUNCID_OEN_MASK)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Owning entity number definitions inside the function id as per the SMC
|
|
||||||
* calling convention
|
|
||||||
******************************************************************************/
|
|
||||||
#define OEN_ARM_START U(0)
|
|
||||||
#define OEN_ARM_END U(0)
|
|
||||||
#define OEN_CPU_START U(1)
|
|
||||||
#define OEN_CPU_END U(1)
|
|
||||||
#define OEN_SIP_START U(2)
|
|
||||||
#define OEN_SIP_END U(2)
|
|
||||||
#define OEN_OEM_START U(3)
|
|
||||||
#define OEN_OEM_END U(3)
|
|
||||||
#define OEN_STD_START U(4) /* Standard Service Calls */
|
|
||||||
#define OEN_STD_END U(4)
|
|
||||||
#define OEN_STD_HYP_START U(5) /* Standard Hypervisor Service calls */
|
|
||||||
#define OEN_STD_HYP_END U(5)
|
|
||||||
#define OEN_VEN_HYP_START U(6) /* Vendor Hypervisor Service calls */
|
|
||||||
#define OEN_VEN_HYP_END U(6)
|
|
||||||
#define OEN_LIMIT U(16)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Service namespaces as per the SMC Calling Convention v2.X
|
|
||||||
******************************************************************************/
|
|
||||||
#define FUNCID_NAMESPACE_START U(0)
|
|
||||||
#define FUNCID_NAMESPACE_COMPAT U(0)
|
|
||||||
#define FUNCID_NAMESPACE_VENDOR U(1)
|
|
||||||
#define FUNCID_NAMESPACE_SPRT U(2)
|
|
||||||
#define FUNCID_NAMESPACE_SPCI U(3)
|
|
||||||
#define FUNCID_NAMESPACE_LIMIT U(4)
|
|
||||||
|
|
||||||
/* Flags and error codes */
|
|
||||||
#define SMC_64 U(1)
|
|
||||||
#define SMC_32 U(0)
|
|
||||||
|
|
||||||
#define SMC_TYPE_FAST ULL(1)
|
|
||||||
|
|
||||||
#define SMC_OK ULL(0)
|
|
||||||
#define SMC_UNK -1
|
|
||||||
|
|
||||||
#endif /* SMCCC_V2_H */
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Arm Limited. All rights reserved.
|
* Copyright (c) 2018-2019, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -34,7 +34,10 @@
|
||||||
#define SPCI_FID_TUN_SHIFT U(24)
|
#define SPCI_FID_TUN_SHIFT U(24)
|
||||||
#define SPCI_FID_TUN_MASK U(0x7)
|
#define SPCI_FID_TUN_MASK U(0x7)
|
||||||
|
|
||||||
#define SPCI_SMC(spci_fid) ((FUNCID_NAMESPACE_SPCI << FUNCID_NAMESPACE_SHIFT) | \
|
#define OEN_SPCI_START U(0x30)
|
||||||
|
#define OEN_SPCI_END U(0x3F)
|
||||||
|
|
||||||
|
#define SPCI_SMC(spci_fid) ((OEN_SPCI_START << FUNCID_OEN_SHIFT) | \
|
||||||
(U(1) << 31) | (spci_fid))
|
(U(1) << 31) | (spci_fid))
|
||||||
#define SPCI_MISC_32(misc_fid) ((SMC_32 << FUNCID_CC_SHIFT) | \
|
#define SPCI_MISC_32(misc_fid) ((SMC_32 << FUNCID_CC_SHIFT) | \
|
||||||
SPCI_FID_MISC_FLAG | \
|
SPCI_FID_MISC_FLAG | \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Arm Limited. All rights reserved.
|
* Copyright (c) 2018-2019, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -37,10 +37,13 @@
|
||||||
|
|
||||||
/* Definitions to build the complete SMC ID */
|
/* Definitions to build the complete SMC ID */
|
||||||
|
|
||||||
#define SPRT_SMC_64(sprt_fid) ((FUNCID_NAMESPACE_SPRT << FUNCID_NAMESPACE_SHIFT) | \
|
#define OEN_SPRT_START U(0x20)
|
||||||
|
#define OEN_SPRT_END U(0x2F)
|
||||||
|
|
||||||
|
#define SPRT_SMC_64(sprt_fid) ((OEN_SPRT_START << FUNCID_OEN_SHIFT) | \
|
||||||
(U(1) << 31) | ((sprt_fid) & SPRT_FID_MASK) | \
|
(U(1) << 31) | ((sprt_fid) & SPRT_FID_MASK) | \
|
||||||
(SMC_64 << FUNCID_CC_SHIFT))
|
(SMC_64 << FUNCID_CC_SHIFT))
|
||||||
#define SPRT_SMC_32(sprt_fid) ((FUNCID_NAMESPACE_SPRT << FUNCID_NAMESPACE_SHIFT) | \
|
#define SPRT_SMC_32(sprt_fid) ((OEN_SPRT_START << FUNCID_OEN_SHIFT) | \
|
||||||
(U(1) << 31) | ((sprt_fid) & SPRT_FID_MASK) | \
|
(U(1) << 31) | ((sprt_fid) & SPRT_FID_MASK) | \
|
||||||
(SMC_32 << FUNCID_CC_SHIFT))
|
(SMC_32 << FUNCID_CC_SHIFT))
|
||||||
|
|
||||||
|
|
|
@ -153,9 +153,6 @@ SEPARATE_CODE_AND_RODATA := 0
|
||||||
# cores stack
|
# cores stack
|
||||||
RECLAIM_INIT_CODE := 0
|
RECLAIM_INIT_CODE := 0
|
||||||
|
|
||||||
# Default to SMCCC Version 1.X
|
|
||||||
SMCCC_MAJOR_VERSION := 1
|
|
||||||
|
|
||||||
# SPD choice
|
# SPD choice
|
||||||
SPD := none
|
SPD := none
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Arm Limited. All rights reserved.
|
* Copyright (c) 2018-2019, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -9,6 +9,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <common/debug.h>
|
#include <common/debug.h>
|
||||||
|
#include <common/runtime_svc.h>
|
||||||
#include <lib/el3_runtime/context_mgmt.h>
|
#include <lib/el3_runtime/context_mgmt.h>
|
||||||
#include <lib/smccc.h>
|
#include <lib/smccc.h>
|
||||||
#include <lib/spinlock.h>
|
#include <lib/spinlock.h>
|
||||||
|
@ -679,9 +680,10 @@ static uint64_t spci_service_get_response(void *handle, u_register_t x1,
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* This function handles all SMCs in the range reserved for SPCI.
|
* This function handles all SMCs in the range reserved for SPCI.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
uint64_t spci_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
|
static uintptr_t spci_smc_handler(uint32_t smc_fid, u_register_t x1,
|
||||||
uint64_t x3, uint64_t x4, void *cookie, void *handle,
|
u_register_t x2, u_register_t x3,
|
||||||
uint64_t flags)
|
u_register_t x4, void *cookie, void *handle,
|
||||||
|
u_register_t flags)
|
||||||
{
|
{
|
||||||
uint32_t spci_fid;
|
uint32_t spci_fid;
|
||||||
|
|
||||||
|
@ -773,3 +775,12 @@ uint64_t spci_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
|
||||||
WARN("SPCI: Unsupported call 0x%08x\n", smc_fid);
|
WARN("SPCI: Unsupported call 0x%08x\n", smc_fid);
|
||||||
SMC_RET1(handle, SPCI_NOT_SUPPORTED);
|
SMC_RET1(handle, SPCI_NOT_SUPPORTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DECLARE_RT_SVC(
|
||||||
|
spci_handler,
|
||||||
|
OEN_SPCI_START,
|
||||||
|
OEN_SPCI_END,
|
||||||
|
SMC_TYPE_FAST,
|
||||||
|
NULL,
|
||||||
|
spci_smc_handler
|
||||||
|
);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
|
# Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
#
|
#
|
||||||
|
@ -26,8 +26,5 @@ SPM_SOURCES := $(addprefix services/std_svc/spm/, \
|
||||||
|
|
||||||
INCLUDES += ${SPRT_LIB_INCLUDES}
|
INCLUDES += ${SPRT_LIB_INCLUDES}
|
||||||
|
|
||||||
# Force SMC Calling Convention 2 when using SPM
|
|
||||||
SMCCC_MAJOR_VERSION := 2
|
|
||||||
|
|
||||||
# Let the top-level Makefile know that we intend to include a BL32 image
|
# Let the top-level Makefile know that we intend to include a BL32 image
|
||||||
NEED_BL32 := yes
|
NEED_BL32 := yes
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Arm Limited. All rights reserved.
|
* Copyright (c) 2018-2019, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include <arch_helpers.h>
|
#include <arch_helpers.h>
|
||||||
#include <common/debug.h>
|
#include <common/debug.h>
|
||||||
|
#include <common/runtime_svc.h>
|
||||||
#include <lib/el3_runtime/context_mgmt.h>
|
#include <lib/el3_runtime/context_mgmt.h>
|
||||||
#include <lib/smccc.h>
|
#include <lib/smccc.h>
|
||||||
#include <lib/utils.h>
|
#include <lib/utils.h>
|
||||||
|
@ -154,9 +155,10 @@ static int32_t sprt_memory_perm_attr_set(sp_context_t *sp_ctx,
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* This function handles all SMCs in the range reserved for SPRT.
|
* This function handles all SMCs in the range reserved for SPRT.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
uint64_t sprt_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
|
static uintptr_t sprt_smc_handler(uint32_t smc_fid, u_register_t x1,
|
||||||
uint64_t x3, uint64_t x4, void *cookie, void *handle,
|
u_register_t x2, u_register_t x3,
|
||||||
uint64_t flags)
|
u_register_t x4, void *cookie, void *handle,
|
||||||
|
u_register_t flags)
|
||||||
{
|
{
|
||||||
/* SPRT only supported from the Secure world */
|
/* SPRT only supported from the Secure world */
|
||||||
if (is_caller_non_secure(flags) == SMC_FROM_NON_SECURE) {
|
if (is_caller_non_secure(flags) == SMC_FROM_NON_SECURE) {
|
||||||
|
@ -214,3 +216,12 @@ uint64_t sprt_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
|
||||||
WARN("SPRT: Unsupported call 0x%08x\n", smc_fid);
|
WARN("SPRT: Unsupported call 0x%08x\n", smc_fid);
|
||||||
SMC_RET1(handle, SPRT_NOT_SUPPORTED);
|
SMC_RET1(handle, SPRT_NOT_SUPPORTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DECLARE_RT_SVC(
|
||||||
|
sprt_handler,
|
||||||
|
OEN_SPRT_START,
|
||||||
|
OEN_SPRT_END,
|
||||||
|
SMC_TYPE_FAST,
|
||||||
|
NULL,
|
||||||
|
sprt_smc_handler
|
||||||
|
);
|
||||||
|
|
Loading…
Reference in New Issue