123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /*
- * Copyright (c) 2021-2024, Arm Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #include <assert.h>
- #include <stdbool.h>
- #include <stdint.h>
- #include "../xlat_mpu_private.h"
- #include <arch.h>
- #include <arch_features.h>
- #include <lib/cassert.h>
- #include <lib/utils_def.h>
- #include <lib/xlat_tables/xlat_tables_v2.h>
- #include <fvp_r_arch_helpers.h>
- #warning "xlat_mpu library is currently experimental and its API may change in future."
- #if ENABLE_ASSERTIONS
- /*
- * Return minimum virtual address space size supported by the architecture
- */
- uintptr_t xlat_get_min_virt_addr_space_size(void)
- {
- uintptr_t ret;
- if (is_feat_ttst_present()) {
- ret = MIN_VIRT_ADDR_SPACE_SIZE_TTST;
- } else {
- ret = MIN_VIRT_ADDR_SPACE_SIZE;
- }
- return ret;
- }
- #endif /* ENABLE_ASSERTIONS*/
- bool is_mpu_enabled_ctx(const xlat_ctx_t *ctx)
- {
- if (ctx->xlat_regime == EL1_EL0_REGIME) {
- assert(xlat_arch_current_el() >= 1U);
- return (read_sctlr_el1() & SCTLR_M_BIT) != 0U;
- } else {
- assert(xlat_arch_current_el() >= 2U);
- return (read_sctlr_el2() & SCTLR_M_BIT) != 0U;
- }
- }
- bool is_dcache_enabled(void)
- {
- unsigned int el = get_current_el();
- if (el == 1U) {
- return (read_sctlr_el1() & SCTLR_C_BIT) != 0U;
- } else { /* must be EL2 */
- return (read_sctlr_el2() & SCTLR_C_BIT) != 0U;
- }
- }
- unsigned int xlat_arch_current_el(void)
- {
- unsigned int el = (unsigned int)GET_EL(read_CurrentEl());
- assert(el > 0U);
- return el;
- }
|