aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>2019-01-30 16:01:49 +0000
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>2019-01-30 16:01:49 +0000
commit0709055ed66330fe7709c77d2dfbcb87f0c94272 (patch)
tree31b5d3b7354ad9a8b1bb3e423762e5ea1235d05b /include
parent7e9b0c8eef2b90f51ed41bb8ddf15d7c47672ca9 (diff)
downloadtrusted-firmware-a-0709055ed66330fe7709c77d2dfbcb87f0c94272.tar.gz
Remove support for the SMC Calling Convention 2.0
This reverts commit 2f370465241c ("Add support for the SMC Calling Convention 2.0"). SMCCC v2.0 is no longer required for SPM, and won't be needed in the future. Removing it makes the SMC handling code less complicated. The SPM implementation based on SPCI and SPRT was using it, but it has been adapted to SMCCC v1.0. Change-Id: I36795b91857b2b9c00437cfbfed04b3c1627f578 Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
Diffstat (limited to 'include')
-rw-r--r--include/common/runtime_svc.h65
-rw-r--r--include/lib/smccc.h74
-rw-r--r--include/lib/smccc_v1.h75
-rw-r--r--include/lib/smccc_v2.h85
-rw-r--r--include/services/spci_svc.h7
-rw-r--r--include/services/sprt_svc.h9
6 files changed, 76 insertions, 239 deletions
diff --git a/include/common/runtime_svc.h b/include/common/runtime_svc.h
index 59bf158b43..e5e36c71ef 100644
--- a/include/common/runtime_svc.h
+++ b/include/common/runtime_svc.h
@@ -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
*/
@@ -36,17 +36,8 @@
* 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
* 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)
-#elif SMCCC_MAJOR_VERSION == 2
-#define MAX_RT_SVCS U(32)
-#endif
#ifndef __ASSEMBLY__
@@ -70,11 +61,7 @@ typedef uintptr_t (*rt_svc_handle_t)(uint32_t smc_fid,
typedef struct rt_svc_desc {
uint8_t start_oen;
uint8_t end_oen;
-#if SMCCC_MAJOR_VERSION == 1
uint8_t call_type;
-#elif SMCCC_MAJOR_VERSION == 2
- uint8_t is_vendor;
-#endif
const char *name;
rt_svc_init_t init;
rt_svc_handle_t handle;
@@ -83,8 +70,6 @@ typedef struct rt_svc_desc {
/*
* Convenience macros to declare a service descriptor
*/
-#if SMCCC_MAJOR_VERSION == 1
-
#define DECLARE_RT_SVC(_name, _start, _end, _type, _setup, _smch) \
static const rt_svc_desc_t __svc_desc_ ## _name \
__section("rt_svc_descs") __used = { \
@@ -96,37 +81,6 @@ typedef struct rt_svc_desc {
.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:
* 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);
-#if SMCCC_MAJOR_VERSION == 1
/*
* This function combines the call type and the 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));
}
-#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
******************************************************************************/
diff --git a/include/lib/smccc.h b/include/lib/smccc.h
index b10c52ce9c..94c39d2a6d 100644
--- a/include/lib/smccc.h
+++ b/include/lib/smccc.h
@@ -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
*/
@@ -19,15 +19,69 @@
| (((uint32_t)(_minor) & SMCCC_VERSION_MINOR_MASK) << \
SMCCC_VERSION_MINOR_SHIFT))
-#if SMCCC_MAJOR_VERSION == 1
-# define SMCCC_MINOR_VERSION U(1)
-# include <lib/smccc_v1.h>
-#elif SMCCC_MAJOR_VERSION == 2
-# define SMCCC_MINOR_VERSION U(0)
-# include <lib/smccc_v2.h>
-#else
-# error "Unsupported version of SMCCC."
-#endif
+#define SMCCC_MAJOR_VERSION U(1)
+#define SMCCC_MINOR_VERSION U(1)
+
+/*******************************************************************************
+ * 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 */
/* Various flags passed to SMC handlers */
#define SMC_FROM_SECURE (U(0) << 0)
diff --git a/include/lib/smccc_v1.h b/include/lib/smccc_v1.h
deleted file mode 100644
index 2b8bd8b3d4..0000000000
--- a/include/lib/smccc_v1.h
+++ /dev/null
@@ -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 */
diff --git a/include/lib/smccc_v2.h b/include/lib/smccc_v2.h
deleted file mode 100644
index 22bf458dc8..0000000000
--- a/include/lib/smccc_v2.h
+++ /dev/null
@@ -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 */
diff --git a/include/services/spci_svc.h b/include/services/spci_svc.h
index b82cf1e304..1d02bfa9cc 100644
--- a/include/services/spci_svc.h
+++ b/include/services/spci_svc.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
*/
@@ -34,7 +34,10 @@
#define SPCI_FID_TUN_SHIFT U(24)
#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))
#define SPCI_MISC_32(misc_fid) ((SMC_32 << FUNCID_CC_SHIFT) | \
SPCI_FID_MISC_FLAG | \
diff --git a/include/services/sprt_svc.h b/include/services/sprt_svc.h
index bd695e58aa..2421ea251a 100644
--- a/include/services/sprt_svc.h
+++ b/include/services/sprt_svc.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
*/
@@ -37,10 +37,13 @@
/* 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) | \
(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) | \
(SMC_32 << FUNCID_CC_SHIFT))