blob: bd7948e63a6370954965b7db30b15a6da5e4eeaa [file] [log] [blame]
johpow019baade32021-07-08 14:14:00 -05001/*
Jayanth Dodderi Chidanand605419a2023-03-06 23:56:14 +00002 * Copyright (c) 2021-2023, Arm Limited and Contributors. All rights reserved.
johpow019baade32021-07-08 14:14:00 -05003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef SME_H
8#define SME_H
9
10#include <stdbool.h>
johpow019baade32021-07-08 14:14:00 -050011#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
Jayanth Dodderi Chidanand605419a2023-03-06 23:56:14 +000023#if ENABLE_SME_FOR_NS
Boyan Karatotev6468d4a2023-02-16 15:12:45 +000024void sme_init_el3(void);
25void sme_init_el2_unused(void);
Elizabeth Ho4fc00d22023-07-18 14:10:25 +010026void sme_enable(cpu_context_t *context);
johpow019baade32021-07-08 14:14:00 -050027void sme_disable(cpu_context_t *context);
Elizabeth Ho4fc00d22023-07-18 14:10:25 +010028void sme_enable_per_world(per_world_context_t *per_world_ctx);
29void sme_disable_per_world(per_world_context_t *per_world_ctx);
Jayanth Dodderi Chidanand605419a2023-03-06 23:56:14 +000030#else
Boyan Karatotev6468d4a2023-02-16 15:12:45 +000031static inline void sme_init_el3(void)
32{
33}
34static inline void sme_init_el2_unused(void)
35{
36}
Elizabeth Ho4fc00d22023-07-18 14:10:25 +010037static inline void sme_enable(cpu_context_t *context)
38{
39}
Jayanth Dodderi Chidanand605419a2023-03-06 23:56:14 +000040static inline void sme_disable(cpu_context_t *context)
41{
42}
Elizabeth Ho4fc00d22023-07-18 14:10:25 +010043static inline void sme_enable_per_world(per_world_context_t *per_world_ctx)
44{
45}
46static inline void sme_disable_per_world(per_world_context_t *per_world_ctx)
47{
48}
Jayanth Dodderi Chidanand605419a2023-03-06 23:56:14 +000049#endif /* ENABLE_SME_FOR_NS */
johpow019baade32021-07-08 14:14:00 -050050
51#endif /* SME_H */