Merge pull request #1797 from antonio-nino-diaz-arm/an/remove-smccc-v2

Remove support for the SMC Calling Convention 2.0
diff --git a/Makefile b/Makefile
index 4e606a2..0169f3f 100644
--- a/Makefile
+++ b/Makefile
@@ -432,16 +432,6 @@
 $(error "BL2_IN_XIP_MEM is only supported when BL2_AT_EL3 is enabled")
 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
 ifeq ($(RAS_EXTENSION),1)
     ifneq ($(HANDLE_EA_EL3_FIRST),1)
@@ -624,7 +614,6 @@
 
 $(eval $(call assert_numeric,ARM_ARCH_MAJOR))
 $(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.
@@ -664,7 +653,6 @@
 $(eval $(call add_define,RESET_TO_BL31))
 $(eval $(call add_define,SEPARATE_CODE_AND_RODATA))
 $(eval $(call add_define,RECLAIM_INIT_CODE))
-$(eval $(call add_define,SMCCC_MAJOR_VERSION))
 $(eval $(call add_define,SPD_${SPD}))
 $(eval $(call add_define,SPIN_ON_BL1_EXIT))
 $(eval $(call add_define,SPM_MM))
diff --git a/bl31/aarch64/runtime_exceptions.S b/bl31/aarch64/runtime_exceptions.S
index e7abd50..4f53b8e 100644
--- a/bl31/aarch64/runtime_exceptions.S
+++ b/bl31/aarch64/runtime_exceptions.S
@@ -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
  */
@@ -303,38 +303,6 @@
 	b	enter_lower_el_async_ea
 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.
 	 * Depending upon the execution state from where the SMC has been
@@ -363,56 +331,27 @@
 	mov	x5, xzr
 	mov	x6, sp
 
-#if SMCCC_MAJOR_VERSION == 1
-
 	/* Get the unique owning entity number */
 	ubfx	x16, x0, #FUNCID_OEN_SHIFT, #FUNCID_OEN_WIDTH
 	ubfx	x15, x0, #FUNCID_TYPE_SHIFT, #FUNCID_TYPE_WIDTH
 	orr	x16, x16, x15, lsl #FUNCID_OEN_WIDTH
 
-	load_rt_svc_desc_pointer
-
-#elif SMCCC_MAJOR_VERSION == 2
-
-	/* Bit 31 must be set */
-	tbz	x0, #FUNCID_TYPE_SHIFT, smc_unknown
-
-	/*
-	 * Check MSB of namespace to decide between compatibility/vendor and
-	 * SPCI/SPRT
-	 */
-	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:
+	/* Load descriptor index from array of indices */
+	adr	x14, rt_svc_descs_indices
+	ldrb	w15, [x14, x16]
 
-	/* Namespace is b'00 (compatibility) or b'01 (vendor) */
+	/* Any index greater than 127 is invalid. Check bit 7. */
+	tbnz	w15, 7, smc_unknown
 
 	/*
-	 * 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.
+	 * Get the descriptor using the index
+	 * x11 = (base + off), w15 = index
 	 *
-	 * The low 16 entries of the rt_svc_descs_indices array correspond to
-	 * OENs of the compatibility namespace and the top 16 entries of the
-	 * array are assigned to the vendor namespace descriptor.
+	 * handler = (base + off) + (index << log2(size))
 	 */
-	ubfx	x16, x0, #FUNCID_OEN_SHIFT, #(FUNCID_OEN_WIDTH + 1)
-
-	load_rt_svc_desc_pointer
-
-prepare_enter_handler:
-
-#endif /* SMCCC_MAJOR_VERSION */
+	adr	x11, (__RT_SVC_DESCS_START__ + RT_SVC_DESC_HANDLE)
+	lsl	w10, w15, #RT_SVC_SIZE_LOG2
+	ldr	x15, [x11, w10, uxtw]
 
 	/*
 	 * Restore the saved C runtime stack value which will become the new
diff --git a/common/runtime_svc.c b/common/runtime_svc.c
index 09ce787..a2c0c09 100644
--- a/common/runtime_svc.c
+++ b/common/runtime_svc.c
@@ -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
  */
@@ -29,7 +29,6 @@
  * Function to invoke the registered `handle` corresponding to the smc_fid in
  * AArch32 mode.
  ******************************************************************************/
-#if SMCCC_MAJOR_VERSION == 1
 uintptr_t handle_runtime_svc(uint32_t smc_fid,
 			     void *cookie,
 			     void *handle,
@@ -55,7 +54,6 @@
 	return rt_svc_descs[index].handle(smc_fid, x1, x2, x3, x4, cookie,
 						handle, flags);
 }
-#endif /* SMCCC_MAJOR_VERSION */
 
 /*******************************************************************************
  * Simple routine to sanity check a runtime service descriptor before using it
@@ -71,14 +69,9 @@
 	if (desc->end_oen >= OEN_LIMIT)
 		return -EINVAL;
 
-#if SMCCC_MAJOR_VERSION == 1
 	if ((desc->call_type != SMC_TYPE_FAST) &&
 	    (desc->call_type != SMC_TYPE_YIELD))
 		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 */
 	if ((desc->init == NULL) && (desc->handle == NULL))
@@ -149,17 +142,10 @@
 		 * descriptor which will handle the SMCs for this owning
 		 * entity range.
 		 */
-#if SMCCC_MAJOR_VERSION == 1
 		start_idx = (uint8_t)get_unique_oen(service->start_oen,
 						    service->call_type);
 		end_idx = (uint8_t)get_unique_oen(service->end_oen,
 						  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(end_idx < MAX_RT_SVCS);
 		for (; start_idx <= end_idx; start_idx++)
diff --git a/docs/user-guide.rst b/docs/user-guide.rst
index e22733e..3828eaf 100644
--- a/docs/user-guide.rst
+++ b/docs/user-guide.rst
@@ -668,11 +668,6 @@
    pages" section in `Firmware Design`_. This flag is disabled by default and
    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.
    This build option is only valid if ``ARCH=aarch64``. The value should be
    the path to the directory containing the SPD source, relative to
@@ -2057,7 +2052,7 @@
 
 --------------
 
-*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 Release: `Linaro Release Notes`_
diff --git a/include/common/runtime_svc.h b/include/common/runtime_svc.h
index 59bf158..e5e36c7 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 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 @@
 /*
  * 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 @@
 			.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 @@
 	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 @@
 	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 b10c52c..94c39d2 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 2b8bd8b..0000000
--- 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 22bf458..0000000
--- 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 b82cf1e..1d02bfa 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 bd695e5..2421ea2 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))
 
diff --git a/make_helpers/defaults.mk b/make_helpers/defaults.mk
index 8ef1bb9..c1aa320 100644
--- a/make_helpers/defaults.mk
+++ b/make_helpers/defaults.mk
@@ -153,9 +153,6 @@
 # cores stack
 RECLAIM_INIT_CODE		:= 0
 
-# Default to SMCCC Version 1.X
-SMCCC_MAJOR_VERSION		:= 1
-
 # SPD choice
 SPD				:= none
 
diff --git a/services/std_svc/spm/spci.c b/services/std_svc/spm/spci.c
index 44a0acd..1ee986a 100644
--- a/services/std_svc/spm/spci.c
+++ b/services/std_svc/spm/spci.c
@@ -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
  */
@@ -9,6 +9,7 @@
 #include <string.h>
 
 #include <common/debug.h>
+#include <common/runtime_svc.h>
 #include <lib/el3_runtime/context_mgmt.h>
 #include <lib/smccc.h>
 #include <lib/spinlock.h>
@@ -679,9 +680,10 @@
 /*******************************************************************************
  * 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,
-			  uint64_t x3, uint64_t x4, void *cookie, void *handle,
-			  uint64_t flags)
+static uintptr_t spci_smc_handler(uint32_t smc_fid, u_register_t x1,
+				  u_register_t x2, u_register_t x3,
+				  u_register_t x4, void *cookie, void *handle,
+				  u_register_t flags)
 {
 	uint32_t spci_fid;
 
@@ -773,3 +775,12 @@
 	WARN("SPCI: Unsupported call 0x%08x\n", smc_fid);
 	SMC_RET1(handle, SPCI_NOT_SUPPORTED);
 }
+
+DECLARE_RT_SVC(
+	spci_handler,
+	OEN_SPCI_START,
+	OEN_SPCI_END,
+	SMC_TYPE_FAST,
+	NULL,
+	spci_smc_handler
+);
diff --git a/services/std_svc/spm/spm.mk b/services/std_svc/spm/spm.mk
index 4ba9feb..448aba4 100644
--- a/services/std_svc/spm/spm.mk
+++ b/services/std_svc/spm/spm.mk
@@ -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
 #
@@ -26,8 +26,5 @@
 
 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
 NEED_BL32		:=	yes
diff --git a/services/std_svc/spm/sprt.c b/services/std_svc/spm/sprt.c
index f6af49f..8aa2a88 100644
--- a/services/std_svc/spm/sprt.c
+++ b/services/std_svc/spm/sprt.c
@@ -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
  */
@@ -10,6 +10,7 @@
 
 #include <arch_helpers.h>
 #include <common/debug.h>
+#include <common/runtime_svc.h>
 #include <lib/el3_runtime/context_mgmt.h>
 #include <lib/smccc.h>
 #include <lib/utils.h>
@@ -154,9 +155,10 @@
 /*******************************************************************************
  * 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,
-			  uint64_t x3, uint64_t x4, void *cookie, void *handle,
-			  uint64_t flags)
+static uintptr_t sprt_smc_handler(uint32_t smc_fid, u_register_t x1,
+				  u_register_t x2, u_register_t x3,
+				  u_register_t x4, void *cookie, void *handle,
+				  u_register_t flags)
 {
 	/* SPRT only supported from the Secure world */
 	if (is_caller_non_secure(flags) == SMC_FROM_NON_SECURE) {
@@ -214,3 +216,12 @@
 	WARN("SPRT: Unsupported call 0x%08x\n", smc_fid);
 	SMC_RET1(handle, SPRT_NOT_SUPPORTED);
 }
+
+DECLARE_RT_SVC(
+	sprt_handler,
+	OEN_SPRT_START,
+	OEN_SPRT_END,
+	SMC_TYPE_FAST,
+	NULL,
+	sprt_smc_handler
+);