johpow01 | 50ccb55 | 2020-11-10 19:22:13 -0600 | [diff] [blame] | 1 | /* |
Jayanth Dodderi Chidanand | 95d5d27 | 2023-01-16 17:58:47 +0000 | [diff] [blame] | 2 | * Copyright (c) 2021-2023, Arm Limited. All rights reserved. |
johpow01 | 50ccb55 | 2020-11-10 19:22:13 -0600 | [diff] [blame] | 3 | * |
| 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | */ |
| 6 | |
Olivier Deprez | 1920238 | 2022-08-17 14:18:51 +0200 | [diff] [blame] | 7 | #ifndef SME_H |
| 8 | #define SME_H |
johpow01 | 50ccb55 | 2020-11-10 19:22:13 -0600 | [diff] [blame] | 9 | |
Arunachalam Ganapathy | 5b68e20 | 2023-06-06 16:31:19 +0100 | [diff] [blame] | 10 | #include <stdlib.h> /* for rand() */ |
| 11 | |
Jayanth Dodderi Chidanand | b3ffd3c | 2023-02-13 12:15:11 +0000 | [diff] [blame] | 12 | #define MAX_VL (512) |
| 13 | #define MAX_VL_B (MAX_VL / 8) |
Arunachalam Ganapathy | 5b68e20 | 2023-06-06 16:31:19 +0100 | [diff] [blame] | 14 | #define SME_SVQ_ARCH_MAX (MASK(SMCR_ELX_LEN) >> SMCR_ELX_LEN_SHIFT) |
| 15 | |
| 16 | /* get a random Streaming SVE VQ b/w 0 to SME_SVQ_ARCH_MAX */ |
| 17 | #define SME_GET_RANDOM_SVQ (rand() % (SME_SVQ_ARCH_MAX + 1)) |
johpow01 | 50ccb55 | 2020-11-10 19:22:13 -0600 | [diff] [blame] | 18 | |
Jayanth Dodderi Chidanand | b3ffd3c | 2023-02-13 12:15:11 +0000 | [diff] [blame] | 19 | typedef enum { |
| 20 | SMSTART, /* enters streaming sve mode and enables SME ZA array */ |
| 21 | SMSTART_SM, /* enters streaming sve mode only */ |
| 22 | SMSTART_ZA, /* enables SME ZA array storage only */ |
| 23 | } smestart_instruction_type_t; |
johpow01 | 50ccb55 | 2020-11-10 19:22:13 -0600 | [diff] [blame] | 24 | |
Jayanth Dodderi Chidanand | b3ffd3c | 2023-02-13 12:15:11 +0000 | [diff] [blame] | 25 | typedef enum { |
| 26 | SMSTOP, /* exits streaming sve mode, & disables SME ZA array */ |
| 27 | SMSTOP_SM, /* exits streaming sve mode only */ |
| 28 | SMSTOP_ZA, /* disables SME ZA array storage only */ |
| 29 | } smestop_instruction_type_t; |
| 30 | |
| 31 | /* SME feature related prototypes. */ |
Jayanth Dodderi Chidanand | b3ffd3c | 2023-02-13 12:15:11 +0000 | [diff] [blame] | 32 | void sme_smstart(smestart_instruction_type_t smstart_type); |
| 33 | void sme_smstop(smestop_instruction_type_t smstop_type); |
| 34 | |
| 35 | /* Assembly function prototypes. */ |
Arunachalam Ganapathy | 47b702c | 2023-06-06 13:31:46 +0100 | [diff] [blame] | 36 | uint64_t sme_rdsvl_1(void); |
johpow01 | 50ccb55 | 2020-11-10 19:22:13 -0600 | [diff] [blame] | 37 | void sme_try_illegal_instruction(void); |
Jayanth Dodderi Chidanand | b3ffd3c | 2023-02-13 12:15:11 +0000 | [diff] [blame] | 38 | void sme_vector_to_ZA(const uint64_t *input_vector); |
| 39 | void sme_ZA_to_vector(const uint64_t *output_vector); |
Jayanth Dodderi Chidanand | 95d5d27 | 2023-01-16 17:58:47 +0000 | [diff] [blame] | 40 | void sme2_load_zt0_instruction(const uint64_t *inputbuf); |
| 41 | void sme2_store_zt0_instruction(const uint64_t *outputbuf); |
Arunachalam Ganapathy | 5b68e20 | 2023-06-06 16:31:19 +0100 | [diff] [blame] | 42 | void sme_config_svq(uint32_t svq); |
| 43 | void sme_enable_fa64(void); |
| 44 | void sme_disable_fa64(void); |
| 45 | bool sme_smstat_sm(void); |
| 46 | bool sme_feat_fa64_enabled(void); |
johpow01 | 50ccb55 | 2020-11-10 19:22:13 -0600 | [diff] [blame] | 47 | |
Olivier Deprez | 1920238 | 2022-08-17 14:18:51 +0200 | [diff] [blame] | 48 | #endif /* SME_H */ |