blob: 3c6a338d2beffb2ea8113c9afcdee769bb5cb27d [file] [log] [blame]
Antonio Nino Diaz69068db2019-01-11 13:01:45 +00001/*
Manish V Badarkhe2c518e52021-07-08 16:36:57 +01002 * Copyright (c) 2019-2021, Arm Limited. All rights reserved.
Antonio Nino Diaz69068db2019-01-11 13:01:45 +00003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef ARCH_FEATURES_H
8#define ARCH_FEATURES_H
9
10#include <stdbool.h>
11
12#include <arch_helpers.h>
13
Antonio Nino Diazffdfd162019-02-11 15:34:32 +000014static inline bool is_armv7_gentimer_present(void)
15{
16 return ((read_id_pfr1() >> ID_PFR1_GENTIMER_SHIFT) &
17 ID_PFR1_GENTIMER_MASK) != 0U;
18}
19
Ambroise Vincentfae77722019-03-07 10:17:15 +000020static inline bool is_armv8_2_sve_present(void)
21{
22 /* SVE is not usable in aarch32 */
23 return false;
24}
25
Antonio Nino Diaz69068db2019-01-11 13:01:45 +000026static inline bool is_armv8_2_ttcnp_present(void)
27{
28 return ((read_id_mmfr4() >> ID_MMFR4_CNP_SHIFT) &
29 ID_MMFR4_CNP_MASK) != 0U;
30}
31
Petre-Ionut Tudorf1a45f72019-10-08 16:51:45 +010032static inline uint32_t arch_get_debug_version(void)
33{
34 return ((read_dbgdidr() & DBGDIDR_VERSION_BITS) >>
35 DBGDIDR_VERSION_SHIFT);
36}
37
Manish V Badarkhe2c518e52021-07-08 16:36:57 +010038static inline bool get_armv8_4_trf_support(void)
39{
40 return ((read_id_dfr0() >> ID_DFR0_TRACEFILT_SHIFT) &
41 ID_DFR0_TRACEFILT_MASK) ==
42 ID_DFR0_TRACEFILT_SUPPORTED;
43}
44
Daniel Boulby0e4629f2021-10-26 14:01:23 +010045static inline bool is_armv8_4_dit_present(void)
46{
47 return ((read_id_pfr0() >> ID_PFR0_DIT_SHIFT) &
48 ID_PFR0_DIT_MASK) != 0;
49}
50
Manish V Badarkhe6d0e1b62021-07-09 13:58:28 +010051static inline bool get_armv8_0_sys_reg_trace_support(void)
52{
53 return ((read_id_dfr0() >> ID_DFR0_COPTRC_SHIFT) &
54 ID_DFR0_COPTRC_MASK) ==
55 ID_DFR0_COPTRC_SUPPORTED;
56}
Mark Dykes0e9a8522021-10-27 14:03:57 -050057
58static inline unsigned int get_armv9_2_feat_rme_support(void)
59{
60 return 0;
61}
Antonio Nino Diaz69068db2019-01-11 13:01:45 +000062#endif /* ARCH_FEATURES_H */