xref: /rk3399_ARM-atf/include/arch/aarch32/arch_features.h (revision fc8d2d3980352f92cf378155c1f4449b4a0ab4c0)
12559b2c8SAntonio Nino Diaz /*
2fd1dd4cbSAndre Przywara  * Copyright (c) 2019-2023, Arm Limited. All rights reserved.
32559b2c8SAntonio Nino Diaz  *
42559b2c8SAntonio Nino Diaz  * SPDX-License-Identifier: BSD-3-Clause
52559b2c8SAntonio Nino Diaz  */
62559b2c8SAntonio Nino Diaz 
72559b2c8SAntonio Nino Diaz #ifndef ARCH_FEATURES_H
82559b2c8SAntonio Nino Diaz #define ARCH_FEATURES_H
92559b2c8SAntonio Nino Diaz 
102559b2c8SAntonio Nino Diaz #include <stdbool.h>
112559b2c8SAntonio Nino Diaz 
122559b2c8SAntonio Nino Diaz #include <arch_helpers.h>
13*fc8d2d39SAndre Przywara #include <common/feat_detect.h>
142559b2c8SAntonio Nino Diaz 
15fd1dd4cbSAndre Przywara #define ISOLATE_FIELD(reg, feat)					\
16fd1dd4cbSAndre Przywara 	((unsigned int)(((reg) >> (feat ## _SHIFT)) & (feat ## _MASK)))
17fd1dd4cbSAndre Przywara 
1829a24134SAntonio Nino Diaz static inline bool is_armv7_gentimer_present(void)
1929a24134SAntonio Nino Diaz {
20fd1dd4cbSAndre Przywara 	return ISOLATE_FIELD(read_id_pfr1(), ID_PFR1_GENTIMER) != 0U;
2129a24134SAntonio Nino Diaz }
2229a24134SAntonio Nino Diaz 
232559b2c8SAntonio Nino Diaz static inline bool is_armv8_2_ttcnp_present(void)
242559b2c8SAntonio Nino Diaz {
25fd1dd4cbSAndre Przywara 	return ISOLATE_FIELD(read_id_mmfr4(), ID_MMFR4_CNP) != 0U;
262559b2c8SAntonio Nino Diaz }
272559b2c8SAntonio Nino Diaz 
28*fc8d2d39SAndre Przywara static inline unsigned int read_feat_trf_id_field(void)
29*fc8d2d39SAndre Przywara {
30*fc8d2d39SAndre Przywara 	return ISOLATE_FIELD(read_id_dfr0(), ID_DFR0_TRACEFILT);
31*fc8d2d39SAndre Przywara }
32*fc8d2d39SAndre Przywara 
33*fc8d2d39SAndre Przywara static inline bool is_feat_trf_supported(void)
34*fc8d2d39SAndre Przywara {
35*fc8d2d39SAndre Przywara 	if (ENABLE_TRF_FOR_NS == FEAT_STATE_DISABLED) {
36*fc8d2d39SAndre Przywara 		return false;
37*fc8d2d39SAndre Przywara 	}
38*fc8d2d39SAndre Przywara 
39*fc8d2d39SAndre Przywara 	if (ENABLE_TRF_FOR_NS == FEAT_STATE_ALWAYS) {
40*fc8d2d39SAndre Przywara 		return true;
41*fc8d2d39SAndre Przywara 	}
42*fc8d2d39SAndre Przywara 
43*fc8d2d39SAndre Przywara 	return read_feat_trf_id_field() != 0U;
44*fc8d2d39SAndre Przywara }
45*fc8d2d39SAndre Przywara 
462559b2c8SAntonio Nino Diaz #endif /* ARCH_FEATURES_H */
47