summaryrefslogtreecommitdiff
path: root/plat/hisilicon/hikey960/hikey960_el3_spmc_logical_sp.c
diff options
context:
space:
mode:
authorLukas Hanel <lukas.hanel@trustonic.com>2022-10-24 16:55:11 +0200
committerLukas Hanel <lukas.hanel@trustonic.com>2022-11-02 15:35:03 +0100
commit25a357f1932cf2b0d125dd98b82eeacad14005ea (patch)
tree59d114c98f526023a79c5003876b73646fc152ab /plat/hisilicon/hikey960/hikey960_el3_spmc_logical_sp.c
parent5f905a249839e9e20ebf44c22d95caaf3a2e5611 (diff)
downloadarm-trusted-firmware-25a357f1932cf2b0d125dd98b82eeacad14005ea.tar.gz
feat(hikey960): add a FF-A logical partition
Required to compile with SPMC_AT_EL3=1 Copied from FVP, sample code for platforms Change-Id: I7d8a4d8846a328b05cf45a5044802ea3e2f7fb67 Signed-off-by: Lukas Hanel <lukas.hanel@trustonic.com>
Diffstat (limited to 'plat/hisilicon/hikey960/hikey960_el3_spmc_logical_sp.c')
-rw-r--r--plat/hisilicon/hikey960/hikey960_el3_spmc_logical_sp.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/plat/hisilicon/hikey960/hikey960_el3_spmc_logical_sp.c b/plat/hisilicon/hikey960/hikey960_el3_spmc_logical_sp.c
new file mode 100644
index 000000000..b9e4f864c
--- /dev/null
+++ b/plat/hisilicon/hikey960/hikey960_el3_spmc_logical_sp.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2022, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <common/debug.h>
+#include <services/el3_spmc_logical_sp.h>
+#include <services/ffa_svc.h>
+#include <smccc_helpers.h>
+
+#define LP_PARTITION_ID 0xC001
+#define LP_UUID {0x47a3bf57, 0xe98e43ad, 0xb7db524f, 0x1588f4e3}
+
+/* Our Logical SP currently only supports receipt of direct messaging. */
+#define PARTITION_PROPERTIES FFA_PARTITION_DIRECT_REQ_RECV
+
+static int32_t sp_init(void)
+{
+ INFO("LSP: Init function called.\n");
+ return 0;
+}
+
+static uint64_t handle_ffa_direct_request(uint32_t smc_fid, bool secure_origin,
+ uint64_t x1, uint64_t x2, uint64_t x3,
+ uint64_t x4, void *cookie,
+ void *handle, uint64_t flags)
+{
+ uint64_t ret;
+
+ /* Determine if we have a 64 or 32 direct request. */
+ if (smc_fid == FFA_MSG_SEND_DIRECT_REQ_SMC32) {
+ ret = FFA_MSG_SEND_DIRECT_RESP_SMC32;
+ } else if (smc_fid == FFA_MSG_SEND_DIRECT_REQ_SMC64) {
+ ret = FFA_MSG_SEND_DIRECT_RESP_SMC64;
+ } else {
+ panic(); /* Unknown SMC. */
+ }
+ /*
+ * Handle the incoming request. For testing purposes we echo the
+ * incoming message.
+ */
+ INFO("Logical Partition: Received Direct Request from %s world!\n",
+ secure_origin ? "Secure" : "Normal");
+
+ /*
+ * Logical SP's must always send a direct response so we can populate
+ * our response directly.
+ */
+ SMC_RET8(handle, ret, 0, 0, x4, 0, 0, 0, 0);
+}
+
+/* Register logical partition */
+DECLARE_LOGICAL_PARTITION(
+ my_logical_partition,
+ sp_init, /* Init Function */
+ LP_PARTITION_ID, /* FF-A Partition ID */
+ LP_UUID, /* UUID */
+ PARTITION_PROPERTIES, /* Partition Properties. */
+ handle_ffa_direct_request /* Callback for direct requests. */
+);