aboutsummaryrefslogtreecommitdiff
path: root/drivers/firmware/arm-ffa/ffa-emul-uclass.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firmware/arm-ffa/ffa-emul-uclass.c')
-rw-r--r--drivers/firmware/arm-ffa/ffa-emul-uclass.c720
1 files changed, 0 insertions, 720 deletions
diff --git a/drivers/firmware/arm-ffa/ffa-emul-uclass.c b/drivers/firmware/arm-ffa/ffa-emul-uclass.c
deleted file mode 100644
index 5562bbaac3..0000000000
--- a/drivers/firmware/arm-ffa/ffa-emul-uclass.c
+++ /dev/null
@@ -1,720 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
- *
- * Authors:
- * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
- */
-#include <common.h>
-#include <dm.h>
-#include <mapmem.h>
-#include <string.h>
-#include <asm/global_data.h>
-#include <asm/sandbox_arm_ffa.h>
-#include <asm/sandbox_arm_ffa_priv.h>
-#include <dm/device-internal.h>
-#include <dm/lists.h>
-#include <dm/root.h>
-#include <linux/errno.h>
-#include <linux/sizes.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/* The partitions (SPs) table */
-static struct ffa_partition_desc sandbox_partitions[SANDBOX_PARTITIONS_CNT] = {
- {
- .info = { .id = SANDBOX_SP1_ID, .exec_ctxt = 0x5687, .properties = 0x89325621 },
- .sp_uuid = {
- .a1 = SANDBOX_SERVICE1_UUID_A1,
- .a2 = SANDBOX_SERVICE1_UUID_A2,
- .a3 = SANDBOX_SERVICE1_UUID_A3,
- .a4 = SANDBOX_SERVICE1_UUID_A4,
- }
- },
- {
- .info = { .id = SANDBOX_SP3_ID, .exec_ctxt = 0x7687, .properties = 0x23325621 },
- .sp_uuid = {
- .a1 = SANDBOX_SERVICE2_UUID_A1,
- .a2 = SANDBOX_SERVICE2_UUID_A2,
- .a3 = SANDBOX_SERVICE2_UUID_A3,
- .a4 = SANDBOX_SERVICE2_UUID_A4,
- }
- },
- {
- .info = { .id = SANDBOX_SP2_ID, .exec_ctxt = 0x9587, .properties = 0x45325621 },
- .sp_uuid = {
- .a1 = SANDBOX_SERVICE1_UUID_A1,
- .a2 = SANDBOX_SERVICE1_UUID_A2,
- .a3 = SANDBOX_SERVICE1_UUID_A3,
- .a4 = SANDBOX_SERVICE1_UUID_A4,
- }
- },
- {
- .info = { .id = SANDBOX_SP4_ID, .exec_ctxt = 0x1487, .properties = 0x70325621 },
- .sp_uuid = {
- .a1 = SANDBOX_SERVICE2_UUID_A1,
- .a2 = SANDBOX_SERVICE2_UUID_A2,
- .a3 = SANDBOX_SERVICE2_UUID_A3,
- .a4 = SANDBOX_SERVICE2_UUID_A4,
- }
- }
-
-};
-
-/* The emulator functions */
-
-/**
- * sandbox_ffa_version() - Emulated FFA_VERSION handler function
- * @emul: The sandbox FF-A emulator device
- * @pargs: The SMC call input arguments a0-a7
- * @res: The SMC return data
- *
- * Emulate FFA_VERSION FF-A function.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-
-static int sandbox_ffa_version(struct udevice *emul, ffa_value_t *pargs, ffa_value_t *res)
-{
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- priv->fwk_version = FFA_VERSION_1_0;
- res->a0 = priv->fwk_version;
-
- /* x1-x7 MBZ */
- memset(FFA_X1X7_MBZ_REG_START, 0, FFA_X1X7_MBZ_CNT * sizeof(ulong));
-
- return 0;
-}
-
-/**
- * sandbox_ffa_id_get() - Emulated FFA_ID_GET handler function
- * @emul: The sandbox FF-A emulator device
- * @pargs: The SMC call input arguments a0-a7
- * @res: The SMC return data
- *
- * Emulate FFA_ID_GET FF-A function.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_id_get(struct udevice *emul, ffa_value_t *pargs, ffa_value_t *res)
-{
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- res->a0 = FFA_SMC_32(FFA_SUCCESS);
- res->a1 = 0;
-
- priv->id = NS_PHYS_ENDPOINT_ID;
- res->a2 = priv->id;
-
- /* x3-x7 MBZ */
- memset(FFA_X3_MBZ_REG_START, 0, FFA_X3X7_MBZ_CNT * sizeof(ulong));
-
- return 0;
-}
-
-/**
- * sandbox_ffa_features() - Emulated FFA_FEATURES handler function
- * @pargs: The SMC call input arguments a0-a7
- * @res: The SMC return data
- *
- * Emulate FFA_FEATURES FF-A function.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_features(ffa_value_t *pargs, ffa_value_t *res)
-{
- res->a1 = 0;
-
- if (pargs->a1 == FFA_SMC_64(FFA_RXTX_MAP)) {
- res->a0 = FFA_SMC_32(FFA_SUCCESS);
- res->a2 = RXTX_BUFFERS_MIN_SIZE;
- res->a3 = 0;
- /* x4-x7 MBZ */
- memset(FFA_X4X7_MBZ_REG_START, 0, FFA_X4X7_MBZ_CNT * sizeof(ulong));
- return 0;
- }
-
- res->a0 = FFA_SMC_32(FFA_ERROR);
- res->a2 = -NOT_SUPPORTED;
- /* x3-x7 MBZ */
- memset(FFA_X3_MBZ_REG_START, 0, FFA_X3X7_MBZ_CNT * sizeof(ulong));
- log_err("FF-A interface %lx not implemented\n", pargs->a1);
-
- return ffa_to_std_errmap[NOT_SUPPORTED];
-}
-
-/**
- * sandbox_ffa_partition_info_get() - Emulated FFA_PARTITION_INFO_GET handler
- * @emul: The sandbox FF-A emulator device
- * @pargs: The SMC call input arguments a0-a7
- * @res: The SMC return data
- *
- * Emulate FFA_PARTITION_INFO_GET FF-A function.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_partition_info_get(struct udevice *emul, ffa_value_t *pargs,
- ffa_value_t *res)
-{
- struct ffa_partition_info *rxbuf_desc_info = NULL;
- u32 descs_cnt;
- u32 descs_size_bytes;
- int ret;
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- res->a0 = FFA_SMC_32(FFA_ERROR);
-
- if (!priv->pair.rxbuf) {
- res->a2 = -DENIED;
- ret = ffa_to_std_errmap[DENIED];
- goto cleanup;
- }
-
- if (priv->pair_info.rxbuf_owned) {
- res->a2 = -BUSY;
- ret = ffa_to_std_errmap[BUSY];
- goto cleanup;
- }
-
- if (!priv->partitions.descs) {
- priv->partitions.descs = sandbox_partitions;
- priv->partitions.count = SANDBOX_PARTITIONS_CNT;
- }
-
- descs_size_bytes = SANDBOX_PARTITIONS_CNT *
- sizeof(struct ffa_partition_desc);
-
- /* Abort if the RX buffer size is smaller than the descs buffer size */
- if ((priv->pair_info.rxtx_buf_size * SZ_4K) < descs_size_bytes) {
- res->a2 = -NO_MEMORY;
- ret = ffa_to_std_errmap[NO_MEMORY];
- goto cleanup;
- }
-
- rxbuf_desc_info = priv->pair.rxbuf;
-
- /* No UUID specified. Return the information of all partitions */
- if (!pargs->a1 && !pargs->a2 && !pargs->a3 && !pargs->a4) {
- for (descs_cnt = 0; descs_cnt < SANDBOX_PARTITIONS_CNT; descs_cnt++)
- *(rxbuf_desc_info++) = priv->partitions.descs[descs_cnt].info;
-
- res->a0 = FFA_SMC_32(FFA_SUCCESS);
- res->a2 = SANDBOX_PARTITIONS_CNT;
- /* Transfer ownership to the consumer: the non secure world */
- priv->pair_info.rxbuf_owned = 1;
- ret = 0;
-
- goto cleanup;
- }
-
- /* A UUID specified. Return the info of all SPs matching the UUID */
-
- for (descs_cnt = 0 ; descs_cnt < SANDBOX_PARTITIONS_CNT ; descs_cnt++)
- if (pargs->a1 == priv->partitions.descs[descs_cnt].sp_uuid.a1 &&
- pargs->a2 == priv->partitions.descs[descs_cnt].sp_uuid.a2 &&
- pargs->a3 == priv->partitions.descs[descs_cnt].sp_uuid.a3 &&
- pargs->a4 == priv->partitions.descs[descs_cnt].sp_uuid.a4) {
- *(rxbuf_desc_info++) = priv->partitions.descs[descs_cnt].info;
- }
-
- if (rxbuf_desc_info != priv->pair.rxbuf) {
- res->a0 = FFA_SMC_32(FFA_SUCCESS);
- /* Store the partitions count */
- res->a2 = (ulong)
- (rxbuf_desc_info - (struct ffa_partition_info *)
- priv->pair.rxbuf);
- ret = 0;
-
- /* Transfer ownership to the consumer: the non secure world */
- priv->pair_info.rxbuf_owned = 1;
- } else {
- /* Unrecognized UUID */
- res->a2 = -INVALID_PARAMETERS;
- ret = ffa_to_std_errmap[INVALID_PARAMETERS];
- }
-
-cleanup:
-
- log_err("FFA_PARTITION_INFO_GET (%ld)\n", res->a2);
-
- res->a1 = 0;
-
- /* x3-x7 MBZ */
- memset(FFA_X3_MBZ_REG_START, 0, FFA_X3X7_MBZ_CNT * sizeof(ulong));
-
- return ret;
-}
-
-/**
- * sandbox_ffa_rxtx_map() - Emulated FFA_RXTX_MAP handler
- * @emul: The sandbox FF-A emulator device
- * @pargs: The SMC call input arguments a0-a7
- * @res: The SMC return data
- *
- * Emulate FFA_RXTX_MAP FF-A function.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_rxtx_map(struct udevice *emul, ffa_value_t *pargs, ffa_value_t *res)
-{
- int ret;
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- res->a0 = FFA_SMC_32(FFA_ERROR);
-
- if (priv->pair.txbuf && priv->pair.rxbuf) {
- res->a2 = -DENIED;
- ret = ffa_to_std_errmap[DENIED];
- goto feedback;
- }
-
- if (pargs->a3 >= RXTX_BUFFERS_MIN_PAGES && pargs->a1 && pargs->a2) {
- priv->pair.txbuf = map_sysmem(pargs->a1, 0);
- priv->pair.rxbuf = map_sysmem(pargs->a2, 0);
- priv->pair_info.rxtx_buf_size = pargs->a3;
- priv->pair_info.rxbuf_mapped = 1;
- res->a0 = FFA_SMC_32(FFA_SUCCESS);
- res->a2 = 0;
- ret = 0;
- goto feedback;
- }
-
- if (!pargs->a1 || !pargs->a2) {
- res->a2 = -INVALID_PARAMETERS;
- ret = ffa_to_std_errmap[INVALID_PARAMETERS];
- } else {
- res->a2 = -NO_MEMORY;
- ret = ffa_to_std_errmap[NO_MEMORY];
- }
-
- log_err("Error in FFA_RXTX_MAP arguments (%d)\n",
- (int)res->a2);
-
-feedback:
-
- res->a1 = 0;
-
- /* x3-x7 MBZ */
- memset(FFA_X3_MBZ_REG_START, 0, FFA_X3X7_MBZ_CNT * sizeof(ulong));
-
- return ret;
-}
-
-/**
- * sandbox_ffa_rxtx_unmap() - Emulated FFA_RXTX_UNMAP handler
- * @emul: The sandbox FF-A emulator device
- * @pargs: The SMC call input arguments a0-a7
- * @res: The SMC return data
- *
- * Emulate FFA_RXTX_UNMAP FF-A function.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_rxtx_unmap(struct udevice *emul, ffa_value_t *pargs, ffa_value_t *res)
-{
- int ret;
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- res->a0 = FFA_SMC_32(FFA_ERROR);
- res->a2 = -INVALID_PARAMETERS;
- ret = ffa_to_std_errmap[INVALID_PARAMETERS];
-
- if (GET_NS_PHYS_ENDPOINT_ID(pargs->a1) != priv->id)
- goto feedback;
-
- if (priv->pair.txbuf && priv->pair.rxbuf) {
- priv->pair.txbuf = 0;
- priv->pair.rxbuf = 0;
- priv->pair_info.rxtx_buf_size = 0;
- priv->pair_info.rxbuf_mapped = 0;
- res->a0 = FFA_SMC_32(FFA_SUCCESS);
- res->a2 = 0;
- ret = 0;
- goto feedback;
- }
-
- log_err("No buffer pair registered on behalf of the caller\n");
-
-feedback:
-
- res->a1 = 0;
-
- /* x3-x7 MBZ */
- memset(FFA_X3_MBZ_REG_START, 0, FFA_X3X7_MBZ_CNT * sizeof(ulong));
-
- return ret;
-}
-
-/**
- * sandbox_ffa_rx_release() - Emulated FFA_RX_RELEASE handler
- * @emul: The sandbox FF-A emulator device
- * @pargs: The SMC call input arguments a0-a7
- * @res: The SMC return data
- *
- * Emulate FFA_RX_RELEASE FF-A function.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_rx_release(struct udevice *emul, ffa_value_t *pargs, ffa_value_t *res)
-{
- int ret;
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- if (!priv->pair_info.rxbuf_owned) {
- res->a0 = FFA_SMC_32(FFA_ERROR);
- res->a2 = -DENIED;
- ret = ffa_to_std_errmap[DENIED];
- } else {
- priv->pair_info.rxbuf_owned = 0;
- res->a0 = FFA_SMC_32(FFA_SUCCESS);
- res->a2 = 0;
- ret = 0;
- }
-
- res->a1 = 0;
-
- /* x3-x7 MBZ */
- memset(FFA_X3_MBZ_REG_START, 0, FFA_X3X7_MBZ_CNT * sizeof(ulong));
-
- return ret;
-}
-
-/**
- * sandbox_ffa_sp_valid() - Check SP validity
- * @emul: The sandbox FF-A emulator device
- * @part_id: partition ID to check
- *
- * Search the input ID in the descriptors table.
- *
- * Return:
- *
- * 1 on success (Partition found). Otherwise, failure
- */
-static int sandbox_ffa_sp_valid(struct udevice *emul, u16 part_id)
-{
- u32 descs_cnt;
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- for (descs_cnt = 0 ; descs_cnt < SANDBOX_PARTITIONS_CNT ; descs_cnt++)
- if (priv->partitions.descs[descs_cnt].info.id == part_id)
- return 1;
-
- return 0;
-}
-
-/**
- * sandbox_ffa_msg_send_direct_req() - Emulated FFA_MSG_SEND_DIRECT_{REQ,RESP} handler
- * @emul: The sandbox FF-A emulator device
- * @pargs: The SMC call input arguments a0-a7
- * @res: The SMC return data
- *
- * Emulate FFA_MSG_SEND_DIRECT_{REQ,RESP} FF-A ABIs.
- * Only SMC 64-bit is supported in Sandbox.
- *
- * Emulating interrupts is not supported. So, FFA_RUN and FFA_INTERRUPT are not
- * supported. In case of success FFA_MSG_SEND_DIRECT_RESP is returned with
- * default pattern data (0xff).
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_msg_send_direct_req(struct udevice *emul,
- ffa_value_t *pargs, ffa_value_t *res)
-{
- u16 part_id;
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- part_id = GET_DST_SP_ID(pargs->a1);
-
- if (GET_NS_PHYS_ENDPOINT_ID(pargs->a1) != priv->id ||
- !sandbox_ffa_sp_valid(emul, part_id) || pargs->a2) {
- res->a0 = FFA_SMC_32(FFA_ERROR);
- res->a1 = 0;
- res->a2 = -INVALID_PARAMETERS;
-
- /* x3-x7 MBZ */
- memset(FFA_X3_MBZ_REG_START, 0, FFA_X3X7_MBZ_CNT * sizeof(ulong));
-
- return ffa_to_std_errmap[INVALID_PARAMETERS];
- }
-
- res->a0 = FFA_SMC_64(FFA_MSG_SEND_DIRECT_RESP);
-
- res->a1 = PREP_SRC_SP_ID(part_id) |
- PREP_NS_PHYS_ENDPOINT_ID(priv->id);
-
- res->a2 = 0;
-
- /* Return 0xff bytes as a response */
- res->a3 = -1UL;
- res->a4 = -1UL;
- res->a5 = -1UL;
- res->a6 = -1UL;
- res->a7 = -1UL;
-
- return 0;
-}
-
-/**
- * sandbox_ffa_get_rxbuf_flags() - Read the mapping/ownership flags
- * @emul: The sandbox FF-A emulator device
- * @queried_func_id: The FF-A function to be queried
- * @func_data: Pointer to the FF-A function arguments container structure
- *
- * Query the status flags of the following emulated
- * ABIs: FFA_RXTX_MAP, FFA_RXTX_UNMAP, FFA_RX_RELEASE.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_get_rxbuf_flags(struct udevice *emul, u32 queried_func_id,
- struct ffa_sandbox_data *func_data)
-{
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- if (!func_data)
- return -EINVAL;
-
- if (!func_data->data0 || func_data->data0_size != sizeof(u8))
- return -EINVAL;
-
- switch (queried_func_id) {
- case FFA_RXTX_MAP:
- case FFA_RXTX_UNMAP:
- *((u8 *)func_data->data0) = priv->pair_info.rxbuf_mapped;
- return 0;
- case FFA_RX_RELEASE:
- *((u8 *)func_data->data0) = priv->pair_info.rxbuf_owned;
- return 0;
- default:
- log_err("The querried FF-A interface flag (%d) undefined\n",
- queried_func_id);
- return -EINVAL;
- }
-}
-
-/**
- * sandbox_ffa_get_fwk_version() - Return the FFA framework version
- * @emul: The sandbox FF-A emulator device
- * @func_data: Pointer to the FF-A function arguments container structure
- *
- * Return the FFA framework version read from the FF-A emulator data.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_get_fwk_version(struct udevice *emul, struct ffa_sandbox_data *func_data)
-{
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- if (!func_data)
- return -EINVAL;
-
- if (!func_data->data0 ||
- func_data->data0_size != sizeof(priv->fwk_version))
- return -EINVAL;
-
- *((u32 *)func_data->data0) = priv->fwk_version;
-
- return 0;
-}
-
-/**
- * sandbox_ffa_get_parts() - Return the address of partitions data
- * @emul: The sandbox FF-A emulator device
- * @func_data: Pointer to the FF-A function arguments container structure
- *
- * Return the address of partitions data read from the FF-A emulator data.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-static int sandbox_ffa_get_parts(struct udevice *emul, struct ffa_sandbox_data *func_data)
-{
- struct sandbox_ffa_emul *priv = dev_get_priv(emul);
-
- if (!func_data)
- return -EINVAL;
-
- if (!func_data->data0 ||
- func_data->data0_size != sizeof(struct ffa_partitions *))
- return -EINVAL;
-
- *((struct ffa_partitions **)func_data->data0) = &priv->partitions;
-
- return 0;
-}
-
-/**
- * sandbox_query_ffa_emul_state() - Inspect the FF-A ABIs
- * @queried_func_id: The FF-A function to be queried
- * @func_data: Pointer to the FF-A function arguments container structure
- *
- * Query the status of FF-A ABI specified in the input argument.
- *
- * Return:
- *
- * 0 on success. Otherwise, failure
- */
-int sandbox_query_ffa_emul_state(u32 queried_func_id,
- struct ffa_sandbox_data *func_data)
-{
- struct udevice *emul;
- int ret;
-
- ret = uclass_first_device_err(UCLASS_FFA_EMUL, &emul);
- if (ret) {
- log_err("Cannot find FF-A emulator during querying state\n");
- return ret;
- }
-
- switch (queried_func_id) {
- case FFA_RXTX_MAP:
- case FFA_RXTX_UNMAP:
- case FFA_RX_RELEASE:
- return sandbox_ffa_get_rxbuf_flags(emul, queried_func_id, func_data);
- case FFA_VERSION:
- return sandbox_ffa_get_fwk_version(emul, func_data);
- case FFA_PARTITION_INFO_GET:
- return sandbox_ffa_get_parts(emul, func_data);
- default:
- log_err("Undefined FF-A interface (%d)\n",
- queried_func_id);
- return -EINVAL;
- }
-}
-
-/**
- * sandbox_arm_ffa_smccc_smc() - FF-A SMC call emulation
- * @args: the SMC call arguments
- * @res: the SMC call returned data
- *
- * Emulate the FF-A ABIs SMC call.
- * The emulated FF-A ABI is identified and invoked.
- * FF-A emulation is based on the FF-A specification 1.0
- *
- * Return:
- *
- * 0 on success. Otherwise, failure.
- * FF-A protocol error codes are returned using the registers arguments as
- * described by the specification
- */
-void sandbox_arm_ffa_smccc_smc(ffa_value_t *args, ffa_value_t *res)
-{
- int ret = 0;
- struct udevice *emul;
-
- ret = uclass_first_device_err(UCLASS_FFA_EMUL, &emul);
- if (ret) {
- log_err("Cannot find FF-A emulator during SMC emulation\n");
- return;
- }
-
- switch (args->a0) {
- case FFA_SMC_32(FFA_VERSION):
- ret = sandbox_ffa_version(emul, args, res);
- break;
- case FFA_SMC_32(FFA_PARTITION_INFO_GET):
- ret = sandbox_ffa_partition_info_get(emul, args, res);
- break;
- case FFA_SMC_32(FFA_RXTX_UNMAP):
- ret = sandbox_ffa_rxtx_unmap(emul, args, res);
- break;
- case FFA_SMC_64(FFA_MSG_SEND_DIRECT_REQ):
- ret = sandbox_ffa_msg_send_direct_req(emul, args, res);
- break;
- case FFA_SMC_32(FFA_ID_GET):
- ret = sandbox_ffa_id_get(emul, args, res);
- break;
- case FFA_SMC_32(FFA_FEATURES):
- ret = sandbox_ffa_features(args, res);
- break;
- case FFA_SMC_64(FFA_RXTX_MAP):
- ret = sandbox_ffa_rxtx_map(emul, args, res);
- break;
- case FFA_SMC_32(FFA_RX_RELEASE):
- ret = sandbox_ffa_rx_release(emul, args, res);
- break;
- default:
- log_err("Undefined FF-A interface (%lx)\n",
- args->a0);
- }
-
- if (ret != 0)
- log_err("FF-A ABI internal failure (%d)\n", ret);
-}
-
-/**
- * invoke_ffa_fn() - SMC wrapper
- * @args: FF-A ABI arguments to be copied to Xn registers
- * @res: FF-A ABI return data to be copied from Xn registers
- *
- * Calls the emulated SMC call.
- */
-void invoke_ffa_fn(ffa_value_t args, ffa_value_t *res)
-{
- sandbox_arm_ffa_smccc_smc(&args, res);
-}
-
-/**
- * ffa_emul_find() - Find the FF-A emulator
- * @dev: the sandbox FF-A device (sandbox-arm-ffa)
- * @emulp: the FF-A emulator device (sandbox-ffa-emul)
- *
- * Search for the FF-A emulator and returns its device pointer.
- *
- * Return:
- * 0 on success. Otherwise, failure
- */
-int ffa_emul_find(struct udevice *dev, struct udevice **emulp)
-{
- int ret;
-
- ret = uclass_first_device_err(UCLASS_FFA_EMUL, emulp);
- if (ret) {
- log_err("Cannot find FF-A emulator\n");
- return ret;
- }
-
- log_info("FF-A emulator ready to use\n");
-
- return 0;
-}
-
-UCLASS_DRIVER(ffa_emul) = {
- .name = "ffa_emul",
- .id = UCLASS_FFA_EMUL,
- .post_bind = dm_scan_fdt_dev,
-};
-
-static const struct udevice_id sandbox_ffa_emul_ids[] = {
- { .compatible = "sandbox,arm-ffa-emul" },
- { }
-};
-
-/* Declaring the sandbox FF-A emulator under UCLASS_FFA_EMUL */
-U_BOOT_DRIVER(sandbox_ffa_emul) = {
- .name = "sandbox_ffa_emul",
- .id = UCLASS_FFA_EMUL,
- .of_match = sandbox_ffa_emul_ids,
- .priv_auto = sizeof(struct sandbox_ffa_emul),
-};