diff options
author | Dimitris Papastamos <dimitris.papastamos@arm.com> | 2018-06-27 12:59:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-27 12:59:47 +0100 |
commit | d48f193d11b4d4dca2675646ad76147f2d4765f2 (patch) | |
tree | fa244bab3de716b1895dbfdca539db263bc2c39b /include | |
parent | 86e07ae6eca000a17575ff1e5013effbf4a1d5b2 (diff) | |
parent | bb00ea5b00b2f17cfb16684ecee3a9094457450a (diff) | |
download | platform_external_arm-trusted-firmware-d48f193d11b4d4dca2675646ad76147f2d4765f2.tar.gz platform_external_arm-trusted-firmware-d48f193d11b4d4dca2675646ad76147f2d4765f2.tar.bz2 platform_external_arm-trusted-firmware-d48f193d11b4d4dca2675646ad76147f2d4765f2.zip |
Merge pull request #1429 from jeenu-arm/mmu-direct
Enable MMU without stack for xlat v2/DynamIQ
Diffstat (limited to 'include')
-rw-r--r-- | include/common/aarch32/asm_macros.S | 16 | ||||
-rw-r--r-- | include/common/aarch64/asm_macros.S | 14 | ||||
-rw-r--r-- | include/lib/aarch32/arch.h | 2 | ||||
-rw-r--r-- | include/lib/utils_def.h | 4 | ||||
-rw-r--r-- | include/lib/xlat_tables/xlat_mmu_helpers.h | 5 | ||||
-rw-r--r-- | include/lib/xlat_tables/xlat_tables_v2.h | 4 | ||||
-rw-r--r-- | include/lib/xlat_tables/xlat_tables_v2_helpers.h | 16 |
7 files changed, 52 insertions, 9 deletions
diff --git a/include/common/aarch32/asm_macros.S b/include/common/aarch32/asm_macros.S index 74322228e..f7d0595e1 100644 --- a/include/common/aarch32/asm_macros.S +++ b/include/common/aarch32/asm_macros.S @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -10,6 +10,20 @@ #include <asm_macros_common.S> #include <spinlock.h> +/* + * TLBI instruction with type specifier that implements the workaround for + * errata 813419 of Cortex-A57. + */ +#if ERRATA_A57_813419 +#define TLB_INVALIDATE(_reg, _coproc) \ + stcopr _reg, _coproc; \ + dsb ish; \ + stcopr _reg, _coproc +#else +#define TLB_INVALIDATE(_reg, _coproc) \ + stcopr _reg, _coproc +#endif + #define WORD_SIZE 4 /* diff --git a/include/common/aarch64/asm_macros.S b/include/common/aarch64/asm_macros.S index 7c8e643d1..5b050455c 100644 --- a/include/common/aarch64/asm_macros.S +++ b/include/common/aarch64/asm_macros.S @@ -10,6 +10,20 @@ #include <asm_macros_common.S> #include <spinlock.h> +/* + * TLBI instruction with type specifier that implements the workaround for + * errata 813419 of Cortex-A57. + */ +#if ERRATA_A57_813419 +#define TLB_INVALIDATE(_type) \ + tlbi _type; \ + dsb ish; \ + tlbi _type +#else +#define TLB_INVALIDATE(_type) \ + tlbi _type +#endif + .macro func_prologue stp x29, x30, [sp, #-0x10]! diff --git a/include/lib/aarch32/arch.h b/include/lib/aarch32/arch.h index 910341a72..a940b63b5 100644 --- a/include/lib/aarch32/arch.h +++ b/include/lib/aarch32/arch.h @@ -340,7 +340,7 @@ /* * TTBR definitions */ -#define TTBR_CNP_BIT 0x1 +#define TTBR_CNP_BIT U(0x1) /* * CTR definitions diff --git a/include/lib/utils_def.h b/include/lib/utils_def.h index 7335103b1..1bdf3c4b0 100644 --- a/include/lib/utils_def.h +++ b/include/lib/utils_def.h @@ -127,8 +127,8 @@ * expected. */ #define ARM_ARCH_AT_LEAST(_maj, _min) \ - ((ARM_ARCH_MAJOR > _maj) || \ - ((ARM_ARCH_MAJOR == _maj) && (ARM_ARCH_MINOR >= _min))) + ((ARM_ARCH_MAJOR > (_maj)) || \ + ((ARM_ARCH_MAJOR == (_maj)) && (ARM_ARCH_MINOR >= (_min)))) /* * Import an assembly or linker symbol as a C expression with the specified diff --git a/include/lib/xlat_tables/xlat_mmu_helpers.h b/include/lib/xlat_tables/xlat_mmu_helpers.h index 779531770..b6c53e267 100644 --- a/include/lib/xlat_tables/xlat_mmu_helpers.h +++ b/include/lib/xlat_tables/xlat_mmu_helpers.h @@ -48,10 +48,15 @@ #ifdef AARCH32 /* AArch32 specific translation table API */ void enable_mmu_secure(unsigned int flags); + +void enable_mmu_direct(unsigned int flags); #else /* AArch64 specific translation table APIs */ void enable_mmu_el1(unsigned int flags); void enable_mmu_el3(unsigned int flags); + +void enable_mmu_direct_el1(unsigned int flags); +void enable_mmu_direct_el3(unsigned int flags); #endif /* AARCH32 */ int xlat_arch_is_granule_size_supported(size_t size); diff --git a/include/lib/xlat_tables/xlat_tables_v2.h b/include/lib/xlat_tables/xlat_tables_v2.h index 98f00d715..4dc2c5ec7 100644 --- a/include/lib/xlat_tables/xlat_tables_v2.h +++ b/include/lib/xlat_tables/xlat_tables_v2.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -8,12 +8,12 @@ #define __XLAT_TABLES_V2_H__ #include <xlat_tables_defs.h> +#include <xlat_tables_v2_helpers.h> #ifndef __ASSEMBLY__ #include <stddef.h> #include <stdint.h> #include <xlat_mmu_helpers.h> -#include <xlat_tables_v2_helpers.h> /* * Default granularity size for an mmap_region_t. diff --git a/include/lib/xlat_tables/xlat_tables_v2_helpers.h b/include/lib/xlat_tables/xlat_tables_v2_helpers.h index de1c2d4bf..e1ea2b64f 100644 --- a/include/lib/xlat_tables/xlat_tables_v2_helpers.h +++ b/include/lib/xlat_tables/xlat_tables_v2_helpers.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -16,6 +16,13 @@ #error "Do not include this header file directly. Include xlat_tables_v2.h instead." #endif +/* Offsets into mmu_cfg_params array. All parameters are 32 bits wide. */ +#define MMU_CFG_MAIR0 0 +#define MMU_CFG_TCR 1 +#define MMU_CFG_TTBR0_LO 2 +#define MMU_CFG_TTBR0_HI 3 +#define MMU_CFG_PARAM_MAX 4 + #ifndef __ASSEMBLY__ #include <cassert.h> @@ -24,6 +31,9 @@ #include <xlat_tables_arch.h> #include <xlat_tables_defs.h> +/* Parameters of register values required when enabling MMU */ +extern uint32_t mmu_cfg_params[MMU_CFG_PARAM_MAX]; + /* Forward declaration */ struct mmap_region; @@ -162,6 +172,8 @@ struct xlat_ctx { .initialized = 0, \ } +#endif /*__ASSEMBLY__*/ + #if AARCH64 /* @@ -187,6 +199,4 @@ struct xlat_ctx { #endif /* AARCH64 */ -#endif /*__ASSEMBLY__*/ - #endif /* __XLAT_TABLES_V2_HELPERS_H__ */ |