xref: /rk3399_ARM-atf/services/std_svc/rmmd/rmmd_private.h (revision 46aff6fc60a62ea9b27301f40a835c97c7c6e657)
177c27753SZelalem Aweke /*
22132c707SSona Mathew  * Copyright (c) 2021-2025, Arm Limited and Contributors. All rights reserved.
377c27753SZelalem Aweke  *
477c27753SZelalem Aweke  * SPDX-License-Identifier: BSD-3-Clause
577c27753SZelalem Aweke  */
677c27753SZelalem Aweke 
777c27753SZelalem Aweke #ifndef RMMD_PRIVATE_H
877c27753SZelalem Aweke #define RMMD_PRIVATE_H
977c27753SZelalem Aweke 
1077c27753SZelalem Aweke #include <context.h>
11*34a22a02SBoyan Karatotev #include <lib/psci/psci_lib.h>
122132c707SSona Mathew #include <services/rmmd_svc.h>
1377c27753SZelalem Aweke 
1477c27753SZelalem Aweke /*******************************************************************************
1577c27753SZelalem Aweke  * Constants that allow assembler code to preserve callee-saved registers of the
1677c27753SZelalem Aweke  * C runtime context while performing a security state switch.
1777c27753SZelalem Aweke  ******************************************************************************/
1877c27753SZelalem Aweke #define RMMD_C_RT_CTX_X19		0x0
1977c27753SZelalem Aweke #define RMMD_C_RT_CTX_X20		0x8
2077c27753SZelalem Aweke #define RMMD_C_RT_CTX_X21		0x10
2177c27753SZelalem Aweke #define RMMD_C_RT_CTX_X22		0x18
2277c27753SZelalem Aweke #define RMMD_C_RT_CTX_X23		0x20
2377c27753SZelalem Aweke #define RMMD_C_RT_CTX_X24		0x28
2477c27753SZelalem Aweke #define RMMD_C_RT_CTX_X25		0x30
2577c27753SZelalem Aweke #define RMMD_C_RT_CTX_X26		0x38
2677c27753SZelalem Aweke #define RMMD_C_RT_CTX_X27		0x40
2777c27753SZelalem Aweke #define RMMD_C_RT_CTX_X28		0x48
2877c27753SZelalem Aweke #define RMMD_C_RT_CTX_X29		0x50
2977c27753SZelalem Aweke #define RMMD_C_RT_CTX_X30		0x58
3077c27753SZelalem Aweke 
3177c27753SZelalem Aweke #define RMMD_C_RT_CTX_SIZE		0x60
3277c27753SZelalem Aweke #define RMMD_C_RT_CTX_ENTRIES		(RMMD_C_RT_CTX_SIZE >> DWORD_SHIFT)
3377c27753SZelalem Aweke 
3477c27753SZelalem Aweke #ifndef __ASSEMBLER__
3577c27753SZelalem Aweke #include <stdint.h>
3677c27753SZelalem Aweke 
3777c27753SZelalem Aweke /*
3877c27753SZelalem Aweke  * Data structure used by the RMM dispatcher (RMMD) in EL3 to track context of
3977c27753SZelalem Aweke  * the RMM at R-EL2.
4077c27753SZelalem Aweke  */
4177c27753SZelalem Aweke typedef struct rmmd_rmm_context {
4277c27753SZelalem Aweke 	uint64_t c_rt_ctx;
4389d979ceSAndre Przywara 	uint64_t activation_token;
4477c27753SZelalem Aweke 	cpu_context_t cpu_ctx;
4577c27753SZelalem Aweke } rmmd_rmm_context_t;
4677c27753SZelalem Aweke 
4777c27753SZelalem Aweke /* Functions used to enter/exit the RMM synchronously */
4877c27753SZelalem Aweke uint64_t rmmd_rmm_sync_entry(rmmd_rmm_context_t *ctx);
4977c27753SZelalem Aweke __dead2 void rmmd_rmm_sync_exit(uint64_t rc);
5077c27753SZelalem Aweke 
510f9159b7SSoby Mathew /* Functions implementing attestation utilities for RMM */
52dc65ae46SJavier Almansa Sobrino int rmmd_attest_get_platform_token(uint64_t buf_pa, uint64_t *buf_size,
5342cf6026SJuan Pablo Conde 				   uint64_t c_size,
5442cf6026SJuan Pablo Conde 				   uint64_t *remaining_len);
55dc65ae46SJavier Almansa Sobrino int rmmd_attest_get_signing_key(uint64_t buf_pa, uint64_t *buf_size,
56a0435105SSoby Mathew 				uint64_t ecc_curve);
576a88ec8bSRaghu Krishnamurthy uint64_t rmmd_el3_token_sign(void *handle, uint64_t x1, uint64_t x2,
586a88ec8bSRaghu Krishnamurthy 				    uint64_t x3, uint64_t x4);
590f9159b7SSoby Mathew 
602132c707SSona Mathew /* Functions implementing IDE KM programming */
612132c707SSona Mathew int rmmd_el3_ide_key_program(uint64_t ecam_address, uint64_t rp_id,
622132c707SSona Mathew 			     uint64_t ide_stream_info, rp_ide_key_info_t *ide_key_info_ptr,
632132c707SSona Mathew 			     uint64_t request_id, uint64_t cookie);
642132c707SSona Mathew int rmmd_el3_ide_key_set_go(uint64_t ecam_address, uint64_t rp_id, uint64_t ide_stream_info,
652132c707SSona Mathew 			    uint64_t request_id, uint64_t cookie);
662132c707SSona Mathew int rmmd_el3_ide_key_set_stop(uint64_t ecam_address, uint64_t rp_id, uint64_t ide_stream_info,
672132c707SSona Mathew 			      uint64_t request_id, uint64_t cookie);
682132c707SSona Mathew int rmmd_el3_ide_km_pull_response(uint64_t ecam_address, uint64_t rp_id, uint64_t *req_resp,
692132c707SSona Mathew 				  uint64_t *request_id, uint64_t *cookie_ptr);
702132c707SSona Mathew 
71745c129aSAndre Przywara /* Memory reservation for RMM */
72745c129aSAndre Przywara int rmmd_reserve_memory(size_t size, uint64_t *arg);
73745c129aSAndre Przywara 
7477c27753SZelalem Aweke /* Assembly helpers */
7577c27753SZelalem Aweke uint64_t rmmd_rmm_enter(uint64_t *c_rt_ctx);
7677c27753SZelalem Aweke void __dead2 rmmd_rmm_exit(uint64_t c_rt_ctx, uint64_t ret);
7777c27753SZelalem Aweke 
7877c27753SZelalem Aweke /* Reference to PM ops for the RMMD */
7977c27753SZelalem Aweke extern const spd_pm_ops_t rmmd_pm;
8077c27753SZelalem Aweke 
8177c27753SZelalem Aweke #endif /* __ASSEMBLER__ */
8277c27753SZelalem Aweke 
8377c27753SZelalem Aweke #endif /* RMMD_PRIVATE_H */
84