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