From e769db3eb87df6139d68c2e997588ef247923135 Mon Sep 17 00:00:00 2001 From: Antonio Nino Diaz Date: Mon, 8 May 2017 16:43:53 +0100 Subject: [PATCH] Minor fixes to the xlat tables lib v2 - Fix some comments. - Remove duplicated definition. - Make xlat_arch_get_max_supported_pa() private in aarch64. Change-Id: I629237209cfb2ce7b0c4bd539d63dd81d45b2edd Signed-off-by: Antonio Nino Diaz --- include/lib/xlat_tables/xlat_tables_v2.h | 24 ++++++++++++------- lib/xlat_tables_v2/aarch64/xlat_tables_arch.c | 2 +- lib/xlat_tables_v2/xlat_tables_common.c | 2 -- lib/xlat_tables_v2/xlat_tables_private.h | 10 +++++++- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/include/lib/xlat_tables/xlat_tables_v2.h b/include/lib/xlat_tables/xlat_tables_v2.h index 2c27e3cd..e7ed2337 100644 --- a/include/lib/xlat_tables/xlat_tables_v2.h +++ b/include/lib/xlat_tables/xlat_tables_v2.h @@ -83,18 +83,25 @@ typedef struct mmap_region { } mmap_region_t; /* Generic translation table APIs */ + +/* + * Initialize translation tables from the current list of mmap regions. Calling + * this function marks the transition point after which static regions can no + * longer be added. + */ void init_xlat_tables(void); /* - * Add a region with defined base PA and base VA. This type of region can only - * be added before initializing the MMU and cannot be removed later. + * Add a static region with defined base PA and base VA. This function can only + * be used before initializing the translation tables. The region cannot be + * removed afterwards. */ void mmap_add_region(unsigned long long base_pa, uintptr_t base_va, size_t size, mmap_attr_t attr); /* - * Add a region with defined base PA and base VA. This type of region can be - * added and removed even if the MMU is enabled. + * Add a dynamic region with defined base PA and base VA. This type of region + * can be added and removed even after the translation tables are initialized. * * Returns: * 0: Success. @@ -107,15 +114,16 @@ int mmap_add_dynamic_region(unsigned long long base_pa, uintptr_t base_va, size_t size, mmap_attr_t attr); /* - * Add an array of static regions with defined base PA and base VA. This type - * of region can only be added before initializing the MMU and cannot be - * removed later. + * Add an array of static regions with defined base PA and base VA. This + * function can only be used before initializing the translation tables. The + * regions cannot be removed afterwards. */ void mmap_add(const mmap_region_t *mm); /* * Remove a region with the specified base VA and size. Only dynamic regions can - * be removed, and they can be removed even if the MMU is enabled. + * be removed, and they can be removed even if the translation tables are + * initialized. * * Returns: * 0: Success. diff --git a/lib/xlat_tables_v2/aarch64/xlat_tables_arch.c b/lib/xlat_tables_v2/aarch64/xlat_tables_arch.c index cc41fc3e..14f6cd6a 100644 --- a/lib/xlat_tables_v2/aarch64/xlat_tables_arch.c +++ b/lib/xlat_tables_v2/aarch64/xlat_tables_arch.c @@ -60,7 +60,7 @@ static const unsigned int pa_range_bits_arr[] = { PARANGE_0101 }; -unsigned long long xlat_arch_get_max_supported_pa(void) +static unsigned long long xlat_arch_get_max_supported_pa(void) { u_register_t pa_range = read_id_aa64mmfr0_el1() & ID_AA64MMFR0_EL1_PARANGE_MASK; diff --git a/lib/xlat_tables_v2/xlat_tables_common.c b/lib/xlat_tables_v2/xlat_tables_common.c index a6f3b7ce..f20bf93a 100644 --- a/lib/xlat_tables_v2/xlat_tables_common.c +++ b/lib/xlat_tables_v2/xlat_tables_common.c @@ -34,8 +34,6 @@ static uint64_t tf_xlat_tables[MAX_XLAT_TABLES][XLAT_TABLE_ENTRIES] static uint64_t tf_base_xlat_table[NUM_BASE_LEVEL_ENTRIES] __aligned(NUM_BASE_LEVEL_ENTRIES * sizeof(uint64_t)); -static mmap_region_t tf_mmap[MAX_MMAP_REGIONS + 1]; - #if PLAT_XLAT_TABLES_DYNAMIC static int xlat_tables_mapped_regions[MAX_XLAT_TABLES]; #endif /* PLAT_XLAT_TABLES_DYNAMIC */ diff --git a/lib/xlat_tables_v2/xlat_tables_private.h b/lib/xlat_tables_v2/xlat_tables_private.h index 07bf39f1..7b3e555e 100644 --- a/lib/xlat_tables_v2/xlat_tables_private.h +++ b/lib/xlat_tables_v2/xlat_tables_private.h @@ -47,8 +47,11 @@ typedef struct { * Array of all memory regions stored in order of ascending end address * and ascending size to simplify the code that allows overlapping * regions. The list is terminated by the first entry with size == 0. + * The max size of the list is stored in `mmap_num`. `mmap` points to an + * array of mmap_num + 1 elements, so that there is space for the final + * null entry. */ - mmap_region_t *mmap; /* mmap_num + 1 elements */ + mmap_region_t *mmap; int mmap_num; /* @@ -75,6 +78,11 @@ typedef struct { uint64_t *base_table; int base_table_entries; + /* + * Max Physical and Virtual addresses currently in use by the + * translation tables. These might get updated as we map/unmap memory + * regions but they will never go beyond pa/va_max_address. + */ unsigned long long max_pa; uintptr_t max_va; -- 2.30.2