1From b5b31064959665f4cc616733be3d989ae4356636 Mon Sep 17 00:00:00 2001
2From: Emekcan Aras <emekcan.aras@arm.com>
3Date: Sun, 18 Jun 2023 16:05:27 +0100
4Subject: [PATCH] plat: corstone1000: Initialize capsule update provider
5
6Initializes the capsule update service provider in se-proxy-sp.c deployment
7for corstone1000.
8
9Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
10Upstream-Status: Inappropriate [Design is to revisted]
11
12---
13 deployments/se-proxy/env/commonsp/se_proxy_sp.c |  3 +++
14 .../infra/corstone1000/service_proxy_factory.c  | 17 +++++++++++++++++
15 .../se-proxy/infra/service_proxy_factory.h      |  1 +
16 3 files changed, 21 insertions(+)
17
18diff --git a/deployments/se-proxy/env/commonsp/se_proxy_sp.c b/deployments/se-proxy/env/commonsp/se_proxy_sp.c
19index 45fcb385..dc2a9d49 100644
20--- a/deployments/se-proxy/env/commonsp/se_proxy_sp.c
21+++ b/deployments/se-proxy/env/commonsp/se_proxy_sp.c
22@@ -77,6 +77,9 @@ void __noreturn sp_main(struct ffa_init_info *init_info)
23 	}
24 	rpc_demux_attach(&rpc_demux, SE_PROXY_INTERFACE_ID_ATTEST, rpc_iface);
25
26+	rpc_iface = capsule_update_proxy_create();
27+	rpc_demux_attach(&rpc_demux, SE_PROXY_INTERFACE_ID_CAPSULE_UPDATE, rpc_iface);
28+
29 	/* End of boot phase */
30 	result = sp_msg_wait(&req_msg);
31 	if (result != SP_RESULT_OK) {
32diff --git a/deployments/se-proxy/infra/corstone1000/service_proxy_factory.c b/deployments/se-proxy/infra/corstone1000/service_proxy_factory.c
33index bacab1de..32d88c97 100644
34--- a/deployments/se-proxy/infra/corstone1000/service_proxy_factory.c
35+++ b/deployments/se-proxy/infra/corstone1000/service_proxy_factory.c
36@@ -14,6 +14,7 @@
37 #include <service/crypto/factory/crypto_provider_factory.h>
38 #include <service/secure_storage/frontend/secure_storage_provider/secure_storage_provider.h>
39 #include <trace.h>
40+#include <service/capsule_update/provider/capsule_update_provider.h>
41
42 /* backends */
43 #include <service/crypto/backend/psa_ipc/crypto_ipc_backend.h>
44@@ -94,3 +95,19 @@ struct rpc_interface *its_proxy_create(void)
45
46 	return secure_storage_provider_init(&its_provider, backend);
47 }
48+
49+struct rpc_interface *capsule_update_proxy_create(void)
50+{
51+	static struct capsule_update_provider capsule_update_provider;
52+	static struct rpc_caller *capsule_update_caller;
53+
54+	capsule_update_caller = psa_ipc_caller_init(&psa_ipc);
55+
56+	if (!capsule_update_caller)
57+	return NULL;
58+
59+	capsule_update_provider.client.caller = capsule_update_caller;
60+
61+	return capsule_update_provider_init(&capsule_update_provider);
62+}
63+
64diff --git a/deployments/se-proxy/infra/service_proxy_factory.h b/deployments/se-proxy/infra/service_proxy_factory.h
65index 298d407a..02aa7fe2 100644
66--- a/deployments/se-proxy/infra/service_proxy_factory.h
67+++ b/deployments/se-proxy/infra/service_proxy_factory.h
68@@ -17,6 +17,7 @@ struct rpc_interface *attest_proxy_create(void);
69 struct rpc_interface *crypto_proxy_create(void);
70 struct rpc_interface *ps_proxy_create(void);
71 struct rpc_interface *its_proxy_create(void);
72+struct rpc_interface *capsule_update_proxy_create(void);
73
74 #ifdef __cplusplus
75 }
76--
772.17.1
78
79