aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSandrine Bailleux <sandrine.bailleux@arm.com>2014-05-29 17:32:40 +0100
committerSandrine Bailleux <sandrine.bailleux@arm.com>2014-06-05 17:39:40 +0100
commit494db58083dc2d0a2ca250a27eeb15bfcff35fa2 (patch)
tree3ea89a54fd7cf9714c2d2fd492aabbd84507a30f
parent4e13f1af9ea7917e7283f6d30cfed81e08dd6a46 (diff)
downloadarm-trusted-firmware-494db58083dc2d0a2ca250a27eeb15bfcff35fa2.tar.gz
juno: Use the enable_mmu_elX() functions from lib/aarch64/xlat_tables.c
Juno code can re-use the enable_mmu_elX() functions from lib/aarch64/xlat_tables.c. Because the Juno port now includes plat/common/aarch64/plat_common.c the juno specific 'plat_common.c' needs to be renamed to avoid name conflicts at build time. Change-Id: I1e9cc6484643fbf516dfac0236573e0474ccc0a2
-rw-r--r--bl32/tsp/tsp-juno.mk2
-rw-r--r--plat/juno/aarch64/juno_common.c (renamed from plat/juno/aarch64/plat_common.c)61
-rw-r--r--plat/juno/juno_private.h2
-rw-r--r--plat/juno/platform.mk7
4 files changed, 6 insertions, 66 deletions
diff --git a/bl32/tsp/tsp-juno.mk b/bl32/tsp/tsp-juno.mk
index 3c9fff8..89801f1 100644
--- a/bl32/tsp/tsp-juno.mk
+++ b/bl32/tsp/tsp-juno.mk
@@ -31,7 +31,7 @@
# TSP source files specific to Juno platform
BL32_SOURCES += drivers/arm/gic/gic_v2.c \
plat/common/aarch64/platform_mp_stack.S \
- plat/juno/aarch64/plat_common.c \
+ plat/juno/aarch64/juno_common.c \
plat/juno/aarch64/plat_helpers.S \
plat/juno/bl32_plat_setup.c \
plat/juno/plat_gic.c
diff --git a/plat/juno/aarch64/plat_common.c b/plat/juno/aarch64/juno_common.c
index b1078d8..60b8846 100644
--- a/plat/juno/aarch64/plat_common.c
+++ b/plat/juno/aarch64/juno_common.c
@@ -35,66 +35,7 @@
#include <platform.h>
#include <platform_def.h>
#include <xlat_tables.h>
-
-
-/*******************************************************************************
- * Macro generating the code for the function enabling the MMU in the given
- * exception level, assuming that the pagetables have already been created.
- *
- * _el: Exception level at which the function will run
- * _tcr_extra: Extra bits to set in the TCR register. This mask will
- * be OR'ed with the default TCR value.
- * _tlbi_fct: Function to invalidate the TLBs at the current
- * exception level
- ******************************************************************************/
-#define DEFINE_ENABLE_MMU_EL(_el, _tcr_extra, _tlbi_fct) \
- void enable_mmu_el##_el(void) \
- { \
- uint64_t mair, tcr, ttbr; \
- uint32_t sctlr; \
- \
- assert(IS_IN_EL(_el)); \
- assert((read_sctlr_el##_el() & SCTLR_M_BIT) == 0); \
- \
- /* Set attributes in the right indices of the MAIR */ \
- mair = MAIR_ATTR_SET(ATTR_DEVICE, ATTR_DEVICE_INDEX); \
- mair |= MAIR_ATTR_SET(ATTR_IWBWA_OWBWA_NTR, \
- ATTR_IWBWA_OWBWA_NTR_INDEX); \
- write_mair_el##_el(mair); \
- \
- /* Invalidate TLBs at the current exception level */ \
- _tlbi_fct(); \
- \
- /* Set TCR bits as well. */ \
- /* Inner & outer WBWA & shareable + T0SZ = 32 */ \
- tcr = TCR_SH_INNER_SHAREABLE | TCR_RGN_OUTER_WBA | \
- TCR_RGN_INNER_WBA | TCR_T0SZ_4GB; \
- tcr |= _tcr_extra; \
- write_tcr_el##_el(tcr); \
- \
- /* Set TTBR bits as well */ \
- ttbr = (uint64_t) l1_xlation_table; \
- write_ttbr0_el##_el(ttbr); \
- \
- /* Ensure all translation table writes have drained */ \
- /* into memory, the TLB invalidation is complete, */ \
- /* and translation register writes are committed */ \
- /* before enabling the MMU */ \
- dsb(); \
- isb(); \
- \
- sctlr = read_sctlr_el##_el(); \
- sctlr |= SCTLR_WXN_BIT | SCTLR_M_BIT | SCTLR_I_BIT; \
- sctlr |= SCTLR_A_BIT | SCTLR_C_BIT; \
- write_sctlr_el##_el(sctlr); \
- \
- /* Ensure the MMU enable takes effect immediately */ \
- isb(); \
- }
-
-/* Define EL1 and EL3 variants of the function enabling the MMU */
-DEFINE_ENABLE_MMU_EL(1, 0, tlbivmalle1)
-DEFINE_ENABLE_MMU_EL(3, TCR_EL3_RES1, tlbialle3)
+#include "../juno_def.h"
/*
* Table of regions to map using the MMU.
diff --git a/plat/juno/juno_private.h b/plat/juno/juno_private.h
index a37068b..924b679 100644
--- a/plat/juno/juno_private.h
+++ b/plat/juno/juno_private.h
@@ -67,8 +67,6 @@ void bl2_plat_arch_setup(void);
void bl31_plat_arch_setup(void);
int platform_setup_pm(const struct plat_pm_ops **plat_ops);
unsigned int platform_get_core_pos(unsigned long mpidr);
-void enable_mmu_el1(void);
-void enable_mmu_el3(void);
void configure_mmu_el1(unsigned long total_base,
unsigned long total_size,
unsigned long ro_start,
diff --git a/plat/juno/platform.mk b/plat/juno/platform.mk
index eafc1c0..14b62b3 100644
--- a/plat/juno/platform.mk
+++ b/plat/juno/platform.mk
@@ -37,6 +37,7 @@ PLAT_BL_COMMON_SOURCES := drivers/arm/pl011/pl011_console.c \
lib/mmio.c \
lib/aarch64/xlat_tables.c \
lib/aarch64/sysreg_helpers.S \
+ plat/common/aarch64/plat_common.c \
plat/juno/plat_io_storage.c
BL1_SOURCES += drivers/arm/cci400/cci400.c \
@@ -44,14 +45,14 @@ BL1_SOURCES += drivers/arm/cci400/cci400.c \
plat/juno/bl1_plat_setup.c \
plat/juno/aarch64/bl1_plat_helpers.S \
plat/juno/aarch64/plat_helpers.S \
- plat/juno/aarch64/plat_common.c
+ plat/juno/aarch64/juno_common.c
BL2_SOURCES += lib/locks/bakery/bakery_lock.c \
plat/common/aarch64/platform_up_stack.S \
plat/juno/bl2_plat_setup.c \
plat/juno/mhu.c \
plat/juno/aarch64/plat_helpers.S \
- plat/juno/aarch64/plat_common.c \
+ plat/juno/aarch64/juno_common.c \
plat/juno/scp_bootloader.c \
plat/juno/scpi.c
@@ -61,7 +62,7 @@ BL31_SOURCES += drivers/arm/cci400/cci400.c \
plat/juno/bl31_plat_setup.c \
plat/juno/mhu.c \
plat/juno/aarch64/plat_helpers.S \
- plat/juno/aarch64/plat_common.c \
+ plat/juno/aarch64/juno_common.c \
plat/juno/plat_pm.c \
plat/juno/plat_topology.c \
plat/juno/plat_gic.c \