blob: 3d8a62168f412ca444be122ca93cc8bd89c42284 [file] [log] [blame]
Patrick Williams8dd68482022-10-04 07:57:18 -05001From 3bb5826af8e3891617d41a30419de0ce089f9fc3 Mon Sep 17 00:00:00 2001
Brad Bishopbec4ebc2022-08-03 09:55:16 -04002From: Vishnu Banavath <vishnu.banavath@arm.com>
3Date: Fri, 10 Dec 2021 20:03:35 +0000
Patrick Williams8dd68482022-10-04 07:57:18 -05004Subject: [PATCH 19/26] efi_capsule: corstone1000: pass interface id and buffer
Brad Bishopbec4ebc2022-08-03 09:55:16 -04005 event id using register w4
6
7Initially the interface/event IDs are passed to the SP using register
8w3 and w5.
9
10Now the SE proxy SP requires this arguments to be in register w4.
11
12This change is to pass interface ID(31:16) and event ID(15:0)
13to SE proxy SP to trigger an event to secure enclave about
14firmware update.
15
16Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
17Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
18Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Patrick Williams8dd68482022-10-04 07:57:18 -050019Upstream-Status: Pending [Not submitted to upstream yet]
Brad Bishopbec4ebc2022-08-03 09:55:16 -040020---
21 include/configs/corstone1000.h | 6 ++++++
22 lib/efi_loader/efi_capsule.c | 11 +++++++----
23 2 files changed, 13 insertions(+), 4 deletions(-)
24
25diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
Patrick Williams8dd68482022-10-04 07:57:18 -050026index 2d89a8966e..4637dd5d5d 100644
Brad Bishopbec4ebc2022-08-03 09:55:16 -040027--- a/include/configs/corstone1000.h
28+++ b/include/configs/corstone1000.h
29@@ -24,6 +24,12 @@
30 #define CORSTONE1000_BUFFER_READY_EVT (0x1)
31 #define CORSTONE1000_KERNEL_STARTED_EVT (0x2)
32
33+#define PREP_SEPROXY_SVC_ID_MASK GENMASK(31, 16)
34+#define PREP_SEPROXY_SVC_ID(x) (FIELD_PREP(PREP_SEPROXY_SVC_ID_MASK, (x)))
35+
36+#define PREP_SEPROXY_EVT_MASK GENMASK(15, 0)
37+#define PREP_SEPROXY_EVT(x) (FIELD_PREP(PREP_SEPROXY_EVT_MASK, (x)))
38+
39 /* Size in 4KB pages of the EFI capsule buffer */
40 #define CORSTONE1000_CAPSULE_BUFFER_SIZE (8192) /* 32 MB */
41
42diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
Patrick Williams8dd68482022-10-04 07:57:18 -050043index c0f3427a60..bf8bd68256 100644
Brad Bishopbec4ebc2022-08-03 09:55:16 -040044--- a/lib/efi_loader/efi_capsule.c
45+++ b/lib/efi_loader/efi_capsule.c
Patrick Williams92b42cb2022-09-03 06:53:57 -050046@@ -28,6 +28,8 @@
Brad Bishopbec4ebc2022-08-03 09:55:16 -040047 #ifdef CONFIG_TARGET_CORSTONE1000
Patrick Williams8dd68482022-10-04 07:57:18 -050048 #include <arm_ffa.h>
Brad Bishopbec4ebc2022-08-03 09:55:16 -040049 #include <cpu_func.h>
50+#include <linux/bitfield.h>
51+#include <linux/bitops.h>
52
53 void *__efi_runtime_data corstone1000_capsule_buf; /* capsule shared buffer virtual address */
54 efi_guid_t corstone1000_capsule_guid = EFI_CORSTONE1000_CAPSULE_ID_GUID;
Patrick Williams8dd68482022-10-04 07:57:18 -050055@@ -582,11 +584,12 @@ static int __efi_runtime efi_corstone1000_buffer_ready_event(u32 capsule_image_s
56 log_debug("[%s]\n", __func__);
Brad Bishopbec4ebc2022-08-03 09:55:16 -040057
58 /*
59- * setting the buffer ready event arguments
60+ * setting the buffer ready event arguments in register w4:
61+ * - capsule update interface ID (31:16)
62+ * - the buffer ready event ID (15:0)
63 */
Patrick Williams8dd68482022-10-04 07:57:18 -050064- msg.data0 = CORSTONE1000_SEPROXY_UPDATE_SVC_ID; /* x3 */
65- msg.data1 = capsule_image_size; /* x4 */
66- msg.data2 = CORSTONE1000_BUFFER_READY_EVT; /* x5 */
67+ msg.data1 = PREP_SEPROXY_SVC_ID(CORSTONE1000_SEPROXY_UPDATE_SVC_ID) |
68+ PREP_SEPROXY_EVT(CORSTONE1000_BUFFER_READY_EVT); /* w4 */
Brad Bishopbec4ebc2022-08-03 09:55:16 -040069
Patrick Williams8dd68482022-10-04 07:57:18 -050070 return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg);
71 }
Brad Bishopbec4ebc2022-08-03 09:55:16 -040072--
Patrick Williams8dd68482022-10-04 07:57:18 -0500732.17.1
Brad Bishopbec4ebc2022-08-03 09:55:16 -040074