feat(runtime): for each CPU only map their own stack respectively
This commit changes the memory mapping of the stack area. Instead of
flat-mapping the whole stack area for each CPU, only map the stack
area for that particular CPU in the High region.
For this to work, the following changes are made:
- move the mapping of the high region out from the realm lib to the
xlat library
- move the build time config option RMM_NUM_PAGES_PER_STACK to the xlat
library.
- add a new mm region to the high VA space for the stack of that CPU.
- reorder segments in the linker script so that `.percpu` segment is
the last. Change flat-mapping configurations so that the `.percpu`
segment is not added.
Change-Id: I997c1b5ff2b972807d75692b5efc9075c5a29a30
Signed-off-by: Mate Toth-Pal <mate.toth-pal@arm.com>
diff --git a/plat/common/src/plat_common_init.c b/plat/common/src/plat_common_init.c
index 2a2afa1..2e51d7b 100644
--- a/plat/common/src/plat_common_init.c
+++ b/plat/common/src/plat_common_init.c
@@ -16,6 +16,7 @@
#include <stdint.h>
#include <string.h>
#include <xlat_contexts.h>
+#include <xlat_high_va.h>
#include <xlat_tables.h>
@@ -179,8 +180,7 @@
/* Read supported GIC virtualization features and init GIC variables */
gic_get_virt_features();
- /* Perform coold boot initialization of the slot buffer mechanism */
- return slot_buf_coldboot_init();
+ return 0;
}
/*
@@ -202,8 +202,13 @@
return ret;
}
- /* Setup the MMU cfg for the slot buffer context (high region) */
- slot_buf_setup_xlat();
+ /* Perform warm boot initialization of the high VA region */
+ ret = xlat_high_va_setup();
+ if (ret != 0) {
+ ERROR("%s (%u): Failed to setup high VA for CPU[%u]\n",
+ __func__, __LINE__, my_cpuid());
+ return ret;
+ }
VERBOSE("xlat tables configured for CPU[%u]\n", my_cpuid());
return 0;