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