diff --git a/components/messaging/ffa/libsp/aarch64/ffa_syscalls_a64.S b/components/messaging/ffa/libsp/aarch64/ffa_syscalls_a64.S
new file mode 100644
index 0000000..6ffeb0b
--- /dev/null
+++ b/components/messaging/ffa/libsp/aarch64/ffa_syscalls_a64.S
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#include <asm.S>
+
+	.section .text
+
+	/*
+	 * The C function prototype is defined in ffa_internal_api.h
+	 *
+	 * void ffa_svc(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3,
+	 *		uint64_t a4, uint64_t a5, uint64_t a6, uint64_t a7,
+	 *		struct ffa_params *result);
+	 */
+
+	FUNC ffa_svc , :
+	svc #0
+	/* Store ERET args to struct ffa_params ptr */
+	ldr x8, [sp]
+	stp	x0, x1, [x8, #0]
+	stp	x2, x3, [x8, #16]
+	stp	x4, x5, [x8, #32]
+	stp	x6, x7, [x8, #48]
+	ret
+	END_FUNC ffa_svc
diff --git a/components/messaging/ffa/libsp/component.cmake b/components/messaging/ffa/libsp/component.cmake
new file mode 100644
index 0000000..c20f899
--- /dev/null
+++ b/components/messaging/ffa/libsp/component.cmake
@@ -0,0 +1,32 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+if (NOT DEFINED TGT)
+	message(FATAL_ERROR "mandatory parameter TGT is not defined.")
+endif()
+
+target_sources(${TGT} PRIVATE
+	"${CMAKE_CURRENT_LIST_DIR}/aarch64/ffa_syscalls_a64.S"
+	"${CMAKE_CURRENT_LIST_DIR}/ffa.c"
+	"${CMAKE_CURRENT_LIST_DIR}/ffa_interrupt_handler.c"
+	)
+
+set_property(TARGET ${TGT} PROPERTY PUBLIC_HEADER
+	${CMAKE_CURRENT_LIST_DIR}/include/ffa_api_defines.h
+	${CMAKE_CURRENT_LIST_DIR}/include/ffa_api_types.h
+	${CMAKE_CURRENT_LIST_DIR}/include/ffa_api.h
+	${CMAKE_CURRENT_LIST_DIR}/include/ffa_internal_api.h
+	${CMAKE_CURRENT_LIST_DIR}/include/sp_api_defines.h
+	${CMAKE_CURRENT_LIST_DIR}/include/sp_api_types.h
+	${CMAKE_CURRENT_LIST_DIR}/include/sp_api.h
+	)
+
+
+target_include_directories(${TGT}
+	 PUBLIC
+		"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
+		"$<INSTALL_INTERFACE:include>"
+	)
diff --git a/components/messaging/ffa/libsp/ffa.c b/components/messaging/ffa/libsp/ffa.c
new file mode 100644
index 0000000..011d941
--- /dev/null
+++ b/components/messaging/ffa/libsp/ffa.c
@@ -0,0 +1,278 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#include <assert.h>            // for assert
+#include <stddef.h>            // for size_t
+#include <stdint.h>            // for uint32_t, uint16_t, uintptr_t, U
+#include "ffa_api.h"           // for FFA_OK, ffa_interrupt_handler, ffa_fea...
+#include "ffa_api_defines.h"   // for FFA_PARAM_MBZ, FFA_OK, FFA_ERROR, FFA_...
+#include "ffa_api_types.h"     // for ffa_result, ffa_direct_msg, ffa_uuid
+#include "ffa_internal_api.h"  // for ffa_params, ffa_svc
+#include "util.h"              // for GENMASK_32, SHIFT_U32, BIT
+
+/*
+ * Unpacks the error code from the FFA_ERROR message. It is a signed 32 bit
+ * value in an unsigned 64 bit field so proper casting must be used to avoid
+ * compiler dependent behavior.
+ */
+static inline ffa_result ffa_get_errorcode(struct ffa_params *result)
+{
+	uint32_t raw_value = result->a2;
+
+	return *(ffa_result *)(&raw_value);
+}
+
+/*
+ * Unpacks the content of the SVC result into an ffa_direct_msg structure.
+ */
+static inline void ffa_unpack_direct_msg(struct ffa_params *svc_result,
+					 struct ffa_direct_msg *msg)
+{
+	msg->function_id = svc_result->a0;
+	msg->source_id = (svc_result->a1 >> 16);
+	msg->destination_id = svc_result->a1;
+	msg->args[0] = svc_result->a3;
+	msg->args[1] = svc_result->a4;
+	msg->args[2] = svc_result->a5;
+	msg->args[3] = svc_result->a6;
+	msg->args[4] = svc_result->a7;
+}
+
+/*
+ * The end of the interrupt handler is indicated by an FFA_MSG_WAIT call.
+ */
+static inline void ffa_return_from_interrupt(struct ffa_params *result)
+{
+	ffa_svc(FFA_MSG_WAIT, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		result);
+}
+
+static inline void ffa_uuid_to_abi_format(const struct ffa_uuid *uuid,
+					  uint32_t *result)
+{
+	size_t i = 0;
+
+	for (i = 0; i < 4; i++) {
+		result[i] = uuid->uuid[4 * i];
+		result[i] |= SHIFT_U32(uuid->uuid[4 * i + 1], 8);
+		result[i] |= SHIFT_U32(uuid->uuid[4 * i + 2], 16);
+		result[i] |= SHIFT_U32(uuid->uuid[4 * i + 3], 24);
+	}
+}
+
+ffa_result ffa_version(uint32_t *version)
+{
+	struct ffa_params result = {0};
+	uint32_t self_version = 0;
+
+	self_version = (FFA_VERSION_MAJOR << FFA_VERSION_MAJOR_SHIFT) |
+		       (FFA_VERSION_MINOR << FFA_VERSION_MINOR);
+
+	ffa_svc(FFA_VERSION, self_version, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		&result);
+
+	if (result.a0 & BIT(31)) {
+		uint32_t raw_error = result.a0;
+
+		*version = 0;
+
+		return *(ffa_result *)(&raw_error);
+	}
+
+	*version = result.a0;
+	return FFA_OK;
+}
+
+ffa_result ffa_features(uint32_t ffa_function_id,
+			struct ffa_interface_properties *interface_properties)
+{
+	struct ffa_params result = {0};
+
+	ffa_svc(FFA_FEATURES, ffa_function_id, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		&result);
+
+	if (result.a0 == FFA_ERROR) {
+		interface_properties->interface_properties[0] = 0;
+		interface_properties->interface_properties[1] = 0;
+		return ffa_get_errorcode(&result);
+	}
+
+	assert(result.a0 == FFA_SUCCESS_32);
+	interface_properties->interface_properties[0] = result.a2;
+	interface_properties->interface_properties[1] = result.a3;
+	return FFA_OK;
+}
+
+ffa_result ffa_rx_release(void)
+{
+	struct ffa_params result = {0};
+
+	ffa_svc(FFA_RX_RELEASE, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		&result);
+
+	if (result.a0 == FFA_ERROR)
+		return ffa_get_errorcode(&result);
+
+	assert(result.a0 == FFA_SUCCESS_32);
+	return FFA_OK;
+}
+
+ffa_result ffa_rxtx_map(const void *tx_buffer, const void *rx_buffer,
+			uint32_t page_count)
+{
+	struct ffa_params result = {0};
+
+	assert(page_count <= FFA_RXTX_MAP_PAGE_COUNT_MAX);
+
+	page_count = SHIFT_U32(page_count & FFA_RXTX_MAP_PAGE_COUNT_MASK,
+			       FFA_RXTX_MAP_PAGE_COUNT_SHIFT);
+
+	ffa_svc(FFA_RXTX_MAP_32, (uintptr_t)tx_buffer, (uintptr_t)rx_buffer,
+		page_count, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		FFA_PARAM_MBZ, &result);
+
+	if (result.a0 == FFA_ERROR)
+		return ffa_get_errorcode(&result);
+
+	assert(result.a0 == FFA_SUCCESS_32);
+	return FFA_OK;
+}
+
+ffa_result ffa_rxtx_unmap(uint16_t id)
+{
+	struct ffa_params result = {0};
+
+	ffa_svc(FFA_RXTX_UNMAP, SHIFT_U32(id, FFA_RXTX_UNMAP_ID_SHIFT),
+		FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		FFA_PARAM_MBZ, FFA_PARAM_MBZ, &result);
+
+	if (result.a0 == FFA_ERROR)
+		return ffa_get_errorcode(&result);
+
+	assert(result.a0 == FFA_SUCCESS_32);
+	return FFA_OK;
+}
+
+ffa_result ffa_partition_info_get(const struct ffa_uuid *uuid, uint32_t *count)
+{
+	struct ffa_params result = {0};
+	uint32_t abi_uuid[4] = {0};
+
+	ffa_uuid_to_abi_format(uuid, abi_uuid);
+
+	ffa_svc(FFA_PARTITION_INFO_GET, abi_uuid[0], abi_uuid[1], abi_uuid[2],
+		abi_uuid[3], FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		&result);
+
+	if (result.a0 == FFA_ERROR) {
+		*count = UINT32_C(0);
+		return ffa_get_errorcode(&result);
+	}
+
+	assert(result.a0 == FFA_SUCCESS_32);
+	*count = result.a2;
+	return FFA_OK;
+}
+
+ffa_result ffa_id_get(uint16_t *id)
+{
+	struct ffa_params result = {0};
+
+	ffa_svc(FFA_ID_GET, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		&result);
+
+	if (result.a0 == FFA_ERROR) {
+		*id = FFA_ID_GET_ID_MASK;
+		return ffa_get_errorcode(&result);
+	}
+
+	assert(result.a0 == FFA_SUCCESS_32);
+	*id = (result.a2 >> FFA_ID_GET_ID_SHIFT) & FFA_ID_GET_ID_MASK;
+	return FFA_OK;
+}
+
+ffa_result ffa_msg_wait(struct ffa_direct_msg *msg)
+{
+	struct ffa_params result = {0};
+
+	ffa_svc(FFA_MSG_WAIT, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ, FFA_PARAM_MBZ,
+		&result);
+
+	while (result.a0 == FFA_INTERRUPT) {
+		ffa_interrupt_handler(result.a2);
+		ffa_return_from_interrupt(&result);
+	}
+
+	if (result.a0 == FFA_ERROR) {
+		return ffa_get_errorcode(&result);
+	} else if (result.a0 == FFA_MSG_SEND_DIRECT_REQ_32) {
+		ffa_unpack_direct_msg(&result, msg);
+	} else {
+		assert(result.a0 == FFA_SUCCESS_32);
+		*msg = (struct ffa_direct_msg){.function_id = result.a0};
+	}
+
+	return FFA_OK;
+}
+
+ffa_result ffa_msg_send_direct_req(uint16_t source, uint16_t dest, uint32_t a0,
+				   uint32_t a1, uint32_t a2, uint32_t a3,
+				   uint32_t a4, struct ffa_direct_msg *msg)
+{
+	struct ffa_params result = {0};
+
+	ffa_svc(FFA_MSG_SEND_DIRECT_REQ_32,
+		SHIFT_U32(source, FFA_MSG_SEND_DIRECT_REQ_SOURCE_ID_SHIFT) |
+		dest, FFA_PARAM_MBZ, a0, a1, a2, a3, a4, &result);
+
+	while (result.a0 == FFA_INTERRUPT) {
+		ffa_interrupt_handler(result.a2);
+		ffa_return_from_interrupt(&result);
+	}
+
+	if (result.a0 == FFA_ERROR) {
+		return ffa_get_errorcode(&result);
+	} else if (result.a0 == FFA_MSG_SEND_DIRECT_RESP_32) {
+		ffa_unpack_direct_msg(&result, msg);
+	} else {
+		assert(result.a0 == FFA_SUCCESS_32);
+		*msg = (struct ffa_direct_msg){.function_id = result.a0};
+	}
+
+	return FFA_OK;
+}
+
+ffa_result ffa_msg_send_direct_resp(uint16_t source, uint16_t dest, uint32_t a0,
+				    uint32_t a1, uint32_t a2, uint32_t a3,
+				    uint32_t a4, struct ffa_direct_msg *msg)
+{
+	struct ffa_params result = {0};
+
+	ffa_svc(FFA_MSG_SEND_DIRECT_RESP_32,
+		SHIFT_U32(source, FFA_MSG_SEND_DIRECT_RESP_SOURCE_ID_SHIFT) |
+		dest, FFA_PARAM_MBZ, a0, a1, a2, a3, a4, &result);
+
+	while (result.a0 == FFA_INTERRUPT) {
+		ffa_interrupt_handler(result.a2);
+		ffa_return_from_interrupt(&result);
+	}
+
+	if (result.a0 == FFA_ERROR) {
+		return ffa_get_errorcode(&result);
+	} else if (result.a0 == FFA_MSG_SEND_DIRECT_REQ_32) {
+		ffa_unpack_direct_msg(&result, msg);
+	} else {
+		assert(result.a0 == FFA_SUCCESS_32);
+		*msg = (struct ffa_direct_msg){.function_id = result.a0};
+	}
+
+	return FFA_OK;
+}
diff --git a/components/messaging/ffa/libsp/ffa_interrupt_handler.c b/components/messaging/ffa/libsp/ffa_interrupt_handler.c
new file mode 100644
index 0000000..a165cc4
--- /dev/null
+++ b/components/messaging/ffa/libsp/ffa_interrupt_handler.c
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#include <stdint.h>           // for uint32_t
+#include "ffa_api.h"          // for ffa_interrupt_handler
+#include "sp_api.h"           // for sp_interrupt_handler
+
+void ffa_interrupt_handler(uint32_t interrupt_id)
+{
+	sp_interrupt_handler(interrupt_id);
+}
diff --git a/components/messaging/ffa/libsp/include/ffa_api.h b/components/messaging/ffa/libsp/include/ffa_api.h
new file mode 100644
index 0000000..ac7a7b3
--- /dev/null
+++ b/components/messaging/ffa/libsp/include/ffa_api.h
@@ -0,0 +1,174 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#ifndef LIBSP_INCLUDE_FFA_API_H_
+#define LIBSP_INCLUDE_FFA_API_H_
+
+/**
+ * @file  ffa_api.h
+ * @brief The file contains wrapper functions around the FF-A interfaces
+ *        described in sections 7-11 of the specification.
+ */
+
+#include "ffa_api_types.h"
+#include "ffa_api_defines.h"
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Setup and discovery interfaces
+ */
+
+/**
+ * @brief      Queries the version of the Firmware Framework implementation at
+ *             the FF-A instance.
+ *
+ * @param[out] version  Version number of the FF-A implementation
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_version(uint32_t *version);
+
+/**
+ * @brief      Queries whether the FF-A interface is implemented of the
+ *             component at the higher EL and if it implements any optional
+ *             features. The meaning of the interface_properties structure
+ *             depends on the queried FF-A function and it is described in
+ *             section 8.2 of the FF-A standard (v1.0).
+ *
+ * @param[in]  ffa_function_id       The function id of the queried FF-A
+ *                                   function
+ * @param[out] interface_properties  Used to encode any optional features
+ *                                   implemented or any implementation details
+ *                                   exported by the queried interface
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_features(uint32_t ffa_function_id,
+			struct ffa_interface_properties *interface_properties);
+
+/**
+ * @brief      Relinquishes the ownership of the RX buffer after reading a
+ *             message from it.
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_rx_release(void);
+
+/**
+ * @brief      Maps the RX/TX buffer pair in the callee's translation regime.
+ *
+ * @param[in]  tx_buffer   Base address of the TX buffer
+ * @param[in]  rx_buffer   Base address of the RX buffer
+ * @param[in]  page_count  Number of contiguous 4K pages allocated for each
+ *                         buffer
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_rxtx_map(const void *tx_buffer, const void *rx_buffer,
+			uint32_t page_count);
+
+/**
+ * @brief      Unmaps the RX/TX buffer pair in the callee's translation regime.
+ *
+ * @param[in]  id     ID of FF-A component that allocated the RX/TX buffer
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_rxtx_unmap(uint16_t id);
+
+/**
+ * @brief      Requests the SPM to return information about the partition of
+ *             the system. Nil UUID can be used to return information about all
+ *             the SPs of the system. The information is returned in the RX
+ *             buffer of the caller as an array of ffa_partition_information
+ *             structures.
+ *
+ * @param[in]  uuid   The uuid
+ * @param[out] count  Count of partition information descriptors populated in
+ *                    RX buffer of caller
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_partition_info_get(const struct ffa_uuid *uuid, uint32_t *count);
+
+/**
+ * @brief      Returns the 16 bit ID of the calling FF-A component
+ *
+ * @param      id    ID of the caller
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_id_get(uint16_t *id);
+
+/**
+ * CPU cycle management interfaces
+ */
+
+/**
+ * @brief      Blocks the caller until a message is available or until an
+ *             interrupt happens. It is also used to indicate the completion of
+ *             the boot phase and the end of the interrupt handling.
+ * @note       The ffa_interrupt_handler function can be called during the
+ *             execution of this function.
+ *
+ * @param[out] msg   The incoming message
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_msg_wait(struct ffa_direct_msg *msg);
+
+/** Messaging interfaces */
+
+/**
+ * @brief      Sends a partition message in parameter registers as a request and
+ *             blocks until the response is available.
+ * @note       The ffa_interrupt_handler function can be called during the
+ *             execution of this function
+ *
+ * @param[in]  source            Source endpoint ID
+ * @param[in]  dest              Destination endpoint ID
+ * @param[in]  a0,a1,a2,a3,a4    Implementation defined message values
+ * @param[out] msg               The response message
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_msg_send_direct_req(uint16_t source, uint16_t dest, uint32_t a0,
+				   uint32_t a1, uint32_t a2, uint32_t a3,
+				   uint32_t a4, struct ffa_direct_msg *msg);
+
+/**
+ * @brief      Sends a partition message in parameter registers as a response
+ *             and blocks until the response is available.
+ * @note       The ffa_interrupt_handler function can be called during the
+ *             execution of this function
+ *
+ * @param[in]  source            Source endpoint ID
+ * @param[in]  dest              Destination endpoint ID
+ * @param[in]  a0,a1,a2,a3,a4    Implementation defined message values
+ * @param[out] msg               The response message
+ *
+ * @return     The FF-A error status code
+ */
+ffa_result ffa_msg_send_direct_resp(uint16_t source, uint16_t dest, uint32_t a0,
+				    uint32_t a1, uint32_t a2, uint32_t a3,
+				    uint32_t a4, struct ffa_direct_msg *msg);
+
+/**
+ * @brief      Interrupt handler prototype. Must be implemented by another
+ *             component.
+ *
+ * @param[in]  interrupt_id  The interrupt identifier
+ */
+void ffa_interrupt_handler(uint32_t interrupt_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBSP_INCLUDE_FFA_API_H_ */
diff --git a/components/messaging/ffa/libsp/include/ffa_api_defines.h b/components/messaging/ffa/libsp/include/ffa_api_defines.h
new file mode 100644
index 0000000..5a7f8f4
--- /dev/null
+++ b/components/messaging/ffa/libsp/include/ffa_api_defines.h
@@ -0,0 +1,123 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#ifndef LIBSP_INCLUDE_FFA_API_DEFINES_H_
+#define LIBSP_INCLUDE_FFA_API_DEFINES_H_
+
+#include <stdint.h>
+#include "util.h"
+
+/* Status codes */
+#define FFA_OK				(0)
+#define FFA_NOT_SUPPORTED		(-1)
+#define FFA_INVALID_PARAMETERS		(-2)
+#define FFA_NO_MEMORY			(-3)
+#define FFA_BUSY			(-4)
+#define FFA_INTERRUPTED			(-5)
+#define FFA_DENIED			(-6)
+#define FFA_RETRY			(-7)
+#define FFA_ABORTED			(-8)
+
+/* Function IDs */
+#define FFA_ERROR			UINT32_C(0x84000060)
+#define FFA_SUCCESS_32			UINT32_C(0x84000061)
+#define FFA_SUCCESS_64			UINT32_C(0xC4000061)
+#define FFA_INTERRUPT			UINT32_C(0x84000062)
+#define FFA_VERSION			UINT32_C(0x84000063)
+#define FFA_FEATURES			UINT32_C(0x84000064)
+#define FFA_RX_RELEASE			UINT32_C(0x84000065)
+#define FFA_RXTX_MAP_32			UINT32_C(0x84000066)
+#define FFA_RXTX_MAP_64			UINT32_C(0xC4000066)
+#define FFA_RXTX_UNMAP			UINT32_C(0x84000067)
+#define FFA_PARTITION_INFO_GET		UINT32_C(0x84000068)
+#define FFA_ID_GET			UINT32_C(0x84000069)
+#define FFA_MSG_WAIT			UINT32_C(0x8400006B)
+#define FFA_MSG_YIELD			UINT32_C(0x8400006C)
+#define FFA_MSG_RUN			UINT32_C(0x8400006D)
+#define FFA_MSG_SEND			UINT32_C(0x8400006E)
+#define FFA_MSG_SEND_DIRECT_REQ_32	UINT32_C(0x8400006F)
+#define FFA_MSG_SEND_DIRECT_REQ_64	UINT32_C(0xC400006F)
+#define FFA_MSG_SEND_DIRECT_RESP_32	UINT32_C(0x84000070)
+#define FFA_MSG_SEND_DIRECT_RESP_64	UINT32_C(0xC4000070)
+#define FFA_MSG_POLL			UINT32_C(0x8400006A)
+#define FFA_MEM_DONATE_32		UINT32_C(0x84000071)
+#define FFA_MEM_DONATE_64		UINT32_C(0xC4000071)
+#define FFA_MEM_LEND_32			UINT32_C(0x84000072)
+#define FFA_MEM_LEND_64			UINT32_C(0xC4000072)
+#define FFA_MEM_SHARE_32		UINT32_C(0x84000073)
+#define FFA_MEM_SHARE_64		UINT32_C(0xC4000073)
+#define FFA_MEM_RETRIEVE_REQ_32		UINT32_C(0x84000074)
+#define FFA_MEM_RETRIEVE_REQ_64		UINT32_C(0xC4000074)
+#define FFA_MEM_RETRIEVE_RESP		UINT32_C(0x84000075)
+#define FFA_MEM_RELINQUISH		UINT32_C(0x84000076)
+#define FFA_MEM_RECLAIM			UINT32_C(0x84000077)
+#define FFA_MEM_FRAG_RX			UINT32_C(0x8400007A)
+#define FFA_MEM_FRAG_TX			UINT32_C(0x8400007B)
+
+/* Special value for MBZ parameters */
+#define FFA_PARAM_MBZ			UINT32_C(0x0)
+
+/* FFA_VERSION */
+#define FFA_VERSION_MAJOR		UINT32_C(1)
+#define FFA_VERSION_MAJOR_SHIFT		UINT32_C(16)
+#define FFA_VERSION_MAJOR_MASK		GENMASK_32(14, 0)
+#define FFA_VERSION_MINOR		UINT32_C(0)
+#define FFA_VERSION_MINOR_SHIFT		UINT32_C(0)
+#define FFA_VERSION_MINOR_MASK		GENMASK_32(15, 0)
+
+/* FFA_FEATURES */
+
+/* Features of FFA_RXTX_MAP */
+#define FFA_FEATURES_RXTX_MAP_GRANULARITY_INDEX		UINT32_C(0)
+#define FFA_FEATURES_RXTX_MAP_GRANULARITY_SHIFT		UINT32_C(0)
+#define FFA_FEATURES_RXTX_MAP_GRANULARITY_MASK		GENMASK_32(1, 0)
+
+#define FFA_FEATURES_RXTX_MAP_GRANULARITY_4K		UINT32_C(0x00)
+#define FFA_FEATURES_RXTX_MAP_GRANULARITY_64K		UINT32_C(0x01)
+#define FFA_FEATURES_RXTX_MAP_GRANULARITY_16K		UINT32_C(0x02)
+
+/* Features of FFA_MEM_DONATE, FFA_MEM_LEND, FFA_MEM_SHARE */
+#define FFA_FEATURES_MEM_DYNAMIC_BUFFER_SUPPORT_INDEX	UINT32_C(0)
+#define FFA_FEATURES_MEM_DYNAMIC_BUFFER_SUPPORT		BIT32(0)
+
+/* Features of FFA_MEM_RETRIEVE_REQ */
+#define FFA_FEATURES_MEM_RETRIEVE_REQ_RETRIEVALS_INDEX	UINT32_C(0)
+#define FFA_FEATURES_MEM_RETRIEVE_REQ_RETRIEVALS_SHIFT	UINT32_C(0)
+#define FFA_FEATURES_MEM_RETRIEVE_REQ_RETRIEVALS_MASK	GENMASK_32(7, 0)
+
+/* FFA_RXTX_MAP */
+#define FFA_RXTX_MAP_PAGE_COUNT_SHIFT		UINT32_C(0)
+#define FFA_RXTX_MAP_PAGE_COUNT_MASK		GENMASK_32(5, 0)
+#define FFA_RXTX_MAP_PAGE_COUNT_MAX		FFA_RXTX_MAP_PAGE_COUNT_MASK
+#define FFA_RXTX_MAP_PAGE_SIZE			UINT32_C(4096)
+
+/* FFA_RXTX_UNMAP */
+#define FFA_RXTX_UNMAP_ID_SHIFT				UINT32_C(16)
+#define FFA_RXTX_UNMAP_ID_MASK				GENMASK_32(15, 0)
+
+/* FFA_PARTITION_INFO_GET */
+#define FFA_PARTITION_SUPPORTS_DIRECT_REQUESTS		BIT32(0)
+#define FFA_PARTITION_CAN_SEND_DIRECT_REQUESTS		BIT32(1)
+#define FFA_PARTITION_SUPPORTS_INDIRECT_REQUESTS	BIT32(2)
+
+/* FFA_ID_GET */
+#define FFA_ID_GET_ID_SHIFT				UINT32_C(0)
+#define FFA_ID_GET_ID_MASK				GENMASK_32(15, 0)
+
+/* FFA_MSG_SEND_DIRECT_REQ */
+#define FFA_MSG_SEND_DIRECT_REQ_SOURCE_ID_MASK		GENMASK_32(15, 0)
+#define FFA_MSG_SEND_DIRECT_REQ_SOURCE_ID_SHIFT		UINT32_C(16)
+
+#define FFA_MSG_SEND_DIRECT_REQ_DEST_ID_MASK		GENMASK_32(15, 0)
+#define FFA_MSG_SEND_DIRECT_REQ_DEST_ID_SHIFT		UINT32_C(0)
+
+/* FFA_MSG_SEND_DIRECT_RESP */
+#define FFA_MSG_SEND_DIRECT_RESP_SOURCE_ID_MASK		GENMASK_32(15, 0)
+#define FFA_MSG_SEND_DIRECT_RESP_SOURCE_ID_SHIFT	UINT32_C(16)
+
+#define FFA_MSG_SEND_DIRECT_RESP_DEST_ID_MASK		GENMASK_32(15, 0)
+#define FFA_MSG_SEND_DIRECT_RESP_DEST_ID_SHIFT		UINT32_C(0)
+
+#endif /* LIBSP_INCLUDE_FFA_API_DEFINES_H_ */
diff --git a/components/messaging/ffa/libsp/include/ffa_api_types.h b/components/messaging/ffa/libsp/include/ffa_api_types.h
new file mode 100644
index 0000000..94845ae
--- /dev/null
+++ b/components/messaging/ffa/libsp/include/ffa_api_types.h
@@ -0,0 +1,86 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#ifndef LIBSP_INCLUDE_FFA_API_TYPES_H_
+#define LIBSP_INCLUDE_FFA_API_TYPES_H_
+
+#include "compiler.h"
+#include <stddef.h>
+#include <stdint.h>
+
+/**
+ * Init info
+ */
+
+/**
+ * @brief Boot protocol name-value pairs
+ */
+struct ffa_name_value_pair {
+	uint32_t name[4]; /**< Name of the item */
+	uintptr_t value; /**< Value of the item */
+	size_t size; /**< Size of the referenced value */
+};
+
+/**
+ * @brief Structure for passing boot protocol data
+ */
+struct ffa_init_info {
+	uint32_t magic; /**< FF-A */
+	uint32_t count; /**< Count of name value size pairs */
+	struct ffa_name_value_pair nvp[]; /**< Array of name value size pairs */
+};
+
+/**
+ * @brief FF-A error status code type
+ */
+typedef int32_t ffa_result;
+
+/**
+ * FF-A features types
+ */
+
+/**
+ * @brief Used to encode any optional features implemented or any implementation
+ *        details exported by the queried interface.
+ */
+struct ffa_interface_properties {
+	uint32_t interface_properties[2];
+};
+
+/**
+ * Partition information types
+ */
+
+/**
+ * @brief UUID descriptor structure
+ */
+struct ffa_uuid {
+	uint8_t uuid[16];
+};
+
+/**
+ * @brief Table 8.25: Partition information descriptor
+ */
+struct ffa_partition_information {
+	uint16_t partition_id;
+	uint16_t execution_context_count;
+	uint32_t partition_properties;
+} __packed;
+
+/**
+ * Direct message type
+ */
+
+/**
+ * @brief Direct message type
+ */
+struct ffa_direct_msg {
+	uint32_t function_id;
+	uint16_t source_id;
+	uint16_t destination_id;
+	uint32_t args[5];
+};
+
+#endif /* LIBSP_INCLUDE_FFA_API_TYPES_H_ */
diff --git a/components/messaging/ffa/libsp/include/ffa_internal_api.h b/components/messaging/ffa/libsp/include/ffa_internal_api.h
new file mode 100644
index 0000000..bfd4415
--- /dev/null
+++ b/components/messaging/ffa/libsp/include/ffa_internal_api.h
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#ifndef LIBSP_INCLUDE_FFA_INTERNAL_API_H_
+#define LIBSP_INCLUDE_FFA_INTERNAL_API_H_
+
+/**
+ * @file  ffa_internal_api.h
+ * @brief The file contains the definition of the bottom layer of the SEL-0 FF-A
+ *        implementation which SVC caller function.
+ */
+
+#include <stdint.h>
+
+#ifdef ARM32
+struct ffa_params {
+	uint32_t a0;	/**< Function ID */
+	uint32_t a1;	/**< Parameter */
+	uint32_t a2;	/**< Parameter */
+	uint32_t a3;	/**< Parameter */
+	uint32_t a4;	/**< Parameter */
+	uint32_t a5;	/**< Parameter */
+	uint32_t a6;	/**< Parameter */
+	uint32_t a7;	/**< Parameter */
+};
+#endif /* ARM32 */
+
+#ifdef ARM64
+struct ffa_params {
+	uint64_t a0;	/**< Function ID */
+	uint64_t a1;	/**< Parameter */
+	uint64_t a2;	/**< Parameter */
+	uint64_t a3;	/**< Parameter */
+	uint64_t a4;	/**< Parameter */
+	uint64_t a5;	/**< Parameter */
+	uint64_t a6;	/**< Parameter */
+	uint64_t a7;	/**< Parameter */
+};
+#endif /* ARM64 */
+
+/**
+ * @brief      SVC conduit caller function
+ * @param[in]  a0, a1, a2, a3, a4, a5, a6, a7 Register values of the request
+ * @param[out] result                         Register values of the response
+ */
+#ifdef ARM64
+void ffa_svc(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4,
+	     uint64_t a5, uint64_t a6, uint64_t a7, struct ffa_params *result);
+#endif /* ARM64 */
+
+#endif /* LIBSP_INCLUDE_FFA_INTERNAL_API_H_ */
diff --git a/components/messaging/ffa/libsp/include/sp_api.h b/components/messaging/ffa/libsp/include/sp_api.h
new file mode 100644
index 0000000..e188560
--- /dev/null
+++ b/components/messaging/ffa/libsp/include/sp_api.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#ifndef LIBSP_INCLUDE_SP_API_H_
+#define LIBSP_INCLUDE_SP_API_H_
+
+#include <stdint.h>    // for uint32_t
+#include "compiler.h"  // for __noreturn
+#include "ffa_api.h"
+
+/**
+ * Interface for the SP implementation
+ */
+
+/**
+ * @brief      Interrupt handler of the SP. It is called by the implementation
+ *             of ffa_interrupt_handler. SPs must implement this function.
+ *
+ * @param[in]  interrupt_id  The interrupt identifier
+ */
+void sp_interrupt_handler(uint32_t interrupt_id);
+
+/**
+ * @brief      Entry point of the SP's application code. SPs must implement this
+ *             function.
+ *
+ * @param      init_info  The boot info
+ */
+void __noreturn sp_main(struct ffa_init_info *init_info);
+
+#endif /* LIBSP_INCLUDE_SP_API_H_ */
diff --git a/components/messaging/ffa/libsp/include/sp_api_defines.h b/components/messaging/ffa/libsp/include/sp_api_defines.h
new file mode 100644
index 0000000..c1426ee
--- /dev/null
+++ b/components/messaging/ffa/libsp/include/sp_api_defines.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#ifndef LIBSP_INCLUDE_SP_API_DEFINES_H_
+#define LIBSP_INCLUDE_SP_API_DEFINES_H_
+
+/**
+ * SP result values are integers where the zero value indicates success and
+ * negative values are error codes. The first part of the error code range is
+ * mapped directly to the FF-A error code range so the SP result type is able
+ * to propagate FF-A error codes. The second part of the range is for SP layer
+ * specific error codes. This ranges starts immediately after the value of the
+ * last (lowest value) FF-A error code.
+ */
+
+#define SP_RESULT_OFFSET	(FFA_ABORTED)
+#define SP_RESULT_CREATE(x)	(SP_RESULT_OFFSET + (x))
+
+/** SP API call result codes */
+#define SP_RESULT_OK			(0)
+#define SP_RESULT_FFA(res)		(res)
+
+#endif /* LIBSP_INCLUDE_SP_API_DEFINES_H_ */
diff --git a/components/messaging/ffa/libsp/include/sp_api_types.h b/components/messaging/ffa/libsp/include/sp_api_types.h
new file mode 100644
index 0000000..10ab293
--- /dev/null
+++ b/components/messaging/ffa/libsp/include/sp_api_types.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+ */
+
+#ifndef LIBSP_INCLUDE_SP_API_TYPES_H_
+#define LIBSP_INCLUDE_SP_API_TYPES_H_
+
+#include <stdint.h>
+
+/**
+ * SP API call result
+ */
+typedef int32_t sp_result;
+
+#endif /* LIBSP_INCLUDE_SP_API_TYPES_H_ */
