xref: /rk3399_ARM-atf/include/lib/extensions/sme.h (revision 06f3c7058c42a9f1a9f7df75ea2de71a000855e8)
1 /*
2  * Copyright (c) 2021-2023, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef SME_H
8 #define SME_H
9 
10 #include <stdbool.h>
11 #include <context.h>
12 
13 /*
14  * Maximum value of LEN field in SMCR_ELx. This is different than the maximum
15  * supported value which is platform dependent. In the first version of SME the
16  * LEN field is limited to 4 bits but will be expanded in future iterations.
17  * To support different versions, the code that discovers the supported vector
18  * lengths will write the max value into SMCR_ELx then read it back to see how
19  * many bits are implemented.
20  */
21 #define SME_SMCR_LEN_MAX	U(0x1FF)
22 
23 #if ENABLE_SME_FOR_NS
24 void sme_init_el3(void);
25 void sme_init_el2_unused(void);
26 void sme_enable(cpu_context_t *context);
27 void sme_disable(cpu_context_t *context);
28 void sme_enable_per_world(per_world_context_t *per_world_ctx);
29 void sme_disable_per_world(per_world_context_t *per_world_ctx);
30 #else
31 static inline void sme_init_el3(void)
32 {
33 }
34 static inline void sme_init_el2_unused(void)
35 {
36 }
37 static inline void sme_enable(cpu_context_t *context)
38 {
39 }
40 static inline void sme_disable(cpu_context_t *context)
41 {
42 }
43 static inline void sme_enable_per_world(per_world_context_t *per_world_ctx)
44 {
45 }
46 static inline void sme_disable_per_world(per_world_context_t *per_world_ctx)
47 {
48 }
49 #endif /* ENABLE_SME_FOR_NS */
50 
51 #endif /* SME_H */
52