Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
9aabd11a
Unverified
Commit
9aabd11a
authored
Oct 26, 2018
by
Antonio Niño Díaz
Committed by
GitHub
Oct 26, 2018
Browse files
Merge pull request #1647 from antonio-nino-diaz-arm/an/setup-xlat
Improvements to setup page tables code
parents
31abc7c4
0916c38d
Changes
22
Hide whitespace changes
Inline
Side-by-side
include/common/bl_common.h
View file @
9aabd11a
...
...
@@ -193,6 +193,11 @@ extern const char version_string[];
void
print_entry_point_info
(
const
entry_point_info_t
*
ep_info
);
uintptr_t
page_align
(
uintptr_t
value
,
unsigned
dir
);
struct
mmap_region
;
void
setup_page_tables
(
const
struct
mmap_region
*
bl_regions
,
const
struct
mmap_region
*
plat_regions
);
#endif
/*__ASSEMBLY__*/
#endif
/* __BL_COMMON_H__ */
include/
plat/arm/common/arm_
xlat_tables.h
→
include/
lib/xlat_tables/
xlat_tables
_compat
.h
View file @
9aabd11a
/*
* Copyright (c) 201
7
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 201
8
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#if ARM_XLAT_TABLES_LIB_V1
#include <xlat_tables.h>
#else
#if XLAT_TABLES_LIB_V2
#include <xlat_tables_v2.h>
#endif
/* ARM_XLAT_TABLES_LIB_V1 */
#else
#include <xlat_tables.h>
#endif
include/plat/arm/board/common/v2m_def.h
View file @
9aabd11a
...
...
@@ -6,8 +6,7 @@
#ifndef V2M_DEF_H
#define V2M_DEF_H
#include <arm_xlat_tables.h>
#include <xlat_tables_compat.h>
/* V2M motherboard system registers & offsets */
#define V2M_SYSREGS_BASE UL(0x1c010000)
...
...
include/plat/arm/common/plat_arm.h
View file @
9aabd11a
...
...
@@ -6,7 +6,6 @@
#ifndef __PLAT_ARM_H__
#define __PLAT_ARM_H__
#include <arm_xlat_tables.h>
#include <bakery_lock.h>
#include <cassert.h>
#include <cpu_data.h>
...
...
@@ -14,6 +13,7 @@
#include <spinlock.h>
#include <tzc_common.h>
#include <utils_def.h>
#include <xlat_tables_compat.h>
/*******************************************************************************
* Forward declarations
...
...
@@ -66,12 +66,6 @@ typedef struct arm_tzc_regions_info {
<= MAX_MMAP_REGIONS, \
assert_max_mmap_regions);
/*
* Utility functions common to ARM standard platforms
*/
void
arm_setup_page_tables
(
const
mmap_region_t
bl_regions
[],
const
mmap_region_t
plat_regions
[]);
void
arm_setup_romlib
(
void
);
#if defined(IMAGE_BL31) || (defined(AARCH32) && defined(IMAGE_BL32))
...
...
lib/xlat_tables_v2/xlat_tables.mk
View file @
9aabd11a
...
...
@@ -10,3 +10,6 @@ XLAT_TABLES_LIB_SRCS := $(addprefix lib/xlat_tables_v2/, \
xlat_tables_context.c
\
xlat_tables_core.c
\
xlat_tables_utils.c
)
XLAT_TABLES_LIB_V2
:=
1
$(eval
$(call
add_define,XLAT_TABLES_LIB_V2))
plat/arm/board/fvp/fvp_common.c
View file @
9aabd11a
...
...
@@ -7,7 +7,6 @@
#include <arm_config.h>
#include <arm_def.h>
#include <arm_spm_def.h>
#include <arm_xlat_tables.h>
#include <assert.h>
#include <cci.h>
#include <ccn.h>
...
...
@@ -18,6 +17,8 @@
#include <platform.h>
#include <secure_partition.h>
#include <v2m_def.h>
#include <xlat_tables_compat.h>
#include "../fvp_def.h"
#include "fvp_private.h"
...
...
@@ -52,8 +53,8 @@ arm_config_t arm_config;
/*
* Table of memory regions for various BL stages to map using the MMU.
* This doesn't include Trusted SRAM as
arm_
setup_page_tables() already
*
takes care
of mapping it.
* This doesn't include Trusted SRAM as setup_page_tables() already
takes care
* of mapping it.
*
* The flash needs to be mapped as writable in order to erase the FIP's Table of
* Contents in case of unrecoverable error (see plat_error_handler()).
...
...
plat/arm/board/juno/juno_common.c
View file @
9aabd11a
...
...
@@ -8,8 +8,8 @@
/*
* Table of memory regions for different BL stages to map using the MMU.
* This doesn't include Trusted SRAM as
arm_
setup_page_tables() already
*
takes care
of mapping it.
* This doesn't include Trusted SRAM as setup_page_tables() already
takes care
* of mapping it.
*/
#ifdef IMAGE_BL1
const
mmap_region_t
plat_arm_mmap
[]
=
{
...
...
plat/arm/common/arm_bl1_setup.c
View file @
9aabd11a
...
...
@@ -6,7 +6,6 @@
#include <arch.h>
#include <arm_def.h>
#include <arm_xlat_tables.h>
#include <assert.h>
#include <bl1.h>
#include <bl_common.h>
...
...
@@ -15,6 +14,8 @@
#include <platform_def.h>
#include <sp805.h>
#include <utils.h>
#include <xlat_tables_compat.h>
#include "../../../bl1/bl1_private.h"
/* Weak definitions may be overridden in specific ARM standard platform */
...
...
@@ -122,7 +123,7 @@ void arm_bl1_plat_arch_setup(void)
{
0
}
};
arm_
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
#ifdef AARCH32
enable_mmu_svc_mon
(
0
);
#else
...
...
plat/arm/common/arm_bl2_el3_setup.c
View file @
9aabd11a
...
...
@@ -79,7 +79,7 @@ void arm_bl2_el3_plat_arch_setup(void)
{
0
}
};
arm_
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
#ifdef AARCH32
enable_mmu_svc_mon
(
0
);
...
...
plat/arm/common/arm_bl2_setup.c
View file @
9aabd11a
...
...
@@ -125,7 +125,7 @@ void arm_bl2_plat_arch_setup(void)
{
0
}
};
arm_
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
#ifdef AARCH32
enable_mmu_svc_mon
(
0
);
...
...
plat/arm/common/arm_bl2u_setup.c
View file @
9aabd11a
...
...
@@ -80,7 +80,7 @@ void arm_bl2u_plat_arch_setup(void)
{
0
}
};
arm_
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
#ifdef AARCH32
enable_mmu_svc_mon
(
0
);
...
...
plat/arm/common/arm_bl31_setup.c
View file @
9aabd11a
...
...
@@ -16,7 +16,7 @@
#include <platform.h>
#include <ras.h>
#include <utils.h>
#include <
arm_
xlat_tables.h>
#include <xlat_tables
_compat
.h>
/*
* Placeholder variables for copying the arguments that have been passed to
...
...
@@ -302,7 +302,7 @@ void __init arm_bl31_plat_arch_setup(void)
{
0
}
};
arm_
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
enable_mmu_el3
(
0
);
...
...
plat/arm/common/arm_common.c
View file @
9aabd11a
...
...
@@ -5,7 +5,6 @@
*/
#include <arch.h>
#include <arch_helpers.h>
#include <arm_xlat_tables.h>
#include <assert.h>
#include <debug.h>
#include <mmio.h>
...
...
@@ -14,6 +13,7 @@
#include <platform_def.h>
#include <romlib.h>
#include <secure_partition.h>
#include <xlat_tables_compat.h>
/* Weak definitions may be overridden in specific ARM standard platform */
#pragma weak plat_get_ns_image_entrypoint
...
...
@@ -32,42 +32,6 @@ void arm_setup_romlib(void)
#endif
}
/*
* Set up the page tables for the generic and platform-specific memory regions.
* The size of the Trusted SRAM seen by the BL image must be specified as well
* as an array specifying the generic memory regions which can be;
* - Code section;
* - Read-only data section;
* - Init code section, if applicable
* - Coherent memory region, if applicable.
*/
void
__init
arm_setup_page_tables
(
const
mmap_region_t
bl_regions
[],
const
mmap_region_t
plat_regions
[])
{
#if LOG_LEVEL >= LOG_LEVEL_VERBOSE
const
mmap_region_t
*
regions
=
bl_regions
;
while
(
regions
->
size
!=
0U
)
{
VERBOSE
(
"Region: 0x%lx - 0x%lx has attributes 0x%x
\n
"
,
regions
->
base_va
,
(
regions
->
base_va
+
regions
->
size
),
regions
->
attr
);
regions
++
;
}
#endif
/*
* Map the Trusted SRAM with appropriate memory attributes.
* Subsequent mappings will adjust the attributes for specific regions.
*/
mmap_add
(
bl_regions
);
/* Now (re-)map the platform-specific memory regions */
mmap_add
(
plat_regions
);
/* Create the page tables to reflect the above mappings */
init_xlat_tables
();
}
uintptr_t
plat_get_ns_image_entrypoint
(
void
)
{
#ifdef PRELOADED_BL33_BASE
...
...
plat/arm/common/sp_min/arm_sp_min_setup.c
View file @
9aabd11a
...
...
@@ -208,7 +208,7 @@ void sp_min_plat_arch_setup(void)
{
0
}
};
arm_
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
enable_mmu_svc_mon
(
0
);
}
plat/arm/common/tsp/arm_tsp_setup.c
View file @
9aabd11a
...
...
@@ -85,6 +85,6 @@ void tsp_plat_arch_setup(void)
{
0
}
};
arm_
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
enable_mmu_el1
(
0
);
}
plat/common/plat_bl_common.c
View file @
9aabd11a
...
...
@@ -13,6 +13,7 @@
#include <mbedtls_config.h>
#endif
#include <platform.h>
#include <xlat_tables_compat.h>
/*
* The following platform functions are weakly defined. The Platforms
...
...
@@ -72,3 +73,40 @@ int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
return
0
;
}
#endif
/* TRUSTED_BOARD_BOOT */
/*
* Set up the page tables for the generic and platform-specific memory regions.
* The size of the Trusted SRAM seen by the BL image must be specified as well
* as an array specifying the generic memory regions which can be;
* - Code section;
* - Read-only data section;
* - Init code section, if applicable
* - Coherent memory region, if applicable.
*/
void
__init
setup_page_tables
(
const
mmap_region_t
*
bl_regions
,
const
mmap_region_t
*
plat_regions
)
{
#if LOG_LEVEL >= LOG_LEVEL_VERBOSE
const
mmap_region_t
*
regions
=
bl_regions
;
while
(
regions
->
size
!=
0U
)
{
VERBOSE
(
"Region: 0x%lx - 0x%lx has attributes 0x%x
\n
"
,
regions
->
base_va
,
regions
->
base_va
+
regions
->
size
,
regions
->
attr
);
regions
++
;
}
#endif
/*
* Map the Trusted SRAM with appropriate memory attributes.
* Subsequent mappings will adjust the attributes for specific regions.
*/
mmap_add
(
bl_regions
);
/* Now (re-)map the platform-specific memory regions */
mmap_add
(
plat_regions
);
/* Create the page tables to reflect the above mappings */
init_xlat_tables
();
}
plat/qemu/platform.mk
View file @
9aabd11a
...
...
@@ -38,24 +38,12 @@ ifeq (${ARM_ARCH_MAJOR},8)
PLAT_INCLUDES
+=
-Iinclude
/plat/arm/common/
${ARCH}
endif
# Use translation tables library v2 by default
ARM_XLAT_TABLES_LIB_V1
:=
0
$(eval
$(call
assert_boolean,ARM_XLAT_TABLES_LIB_V1))
$(eval
$(call
add_define,ARM_XLAT_TABLES_LIB_V1))
PLAT_BL_COMMON_SOURCES
:=
plat/qemu/qemu_common.c
\
plat/qemu/qemu_console.c
\
drivers/arm/pl011/
${ARCH}
/pl011_console.S
\
ifeq
(${ARM_XLAT_TABLES_LIB_V1}, 1)
PLAT_BL_COMMON_SOURCES
+=
lib/xlat_tables/xlat_tables_common.c
\
lib/xlat_tables/
${ARCH}
/xlat_tables.c
else
include
lib/xlat_tables_v2/xlat_tables.mk
PLAT_BL_COMMON_SOURCES
+=
${XLAT_TABLES_LIB_SRCS}
endif
ifneq
(${TRUSTED_BOARD_BOOT},0)
...
...
plat/qemu/qemu_common.c
View file @
9aabd11a
/*
* Copyright (c) 2015-201
6
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015-201
8
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -7,7 +7,8 @@
#include <arch_helpers.h>
#include <bl_common.h>
#include <platform_def.h>
#include <arm_xlat_tables.h>
#include <xlat_tables_v2.h>
#include "qemu_private.h"
#define MAP_DEVICE0 MAP_REGION_FLAT(DEVICE0_BASE, \
...
...
plat/ti/k3/common/k3_bl31_setup.c
View file @
9aabd11a
...
...
@@ -108,7 +108,7 @@ void bl31_plat_arch_setup(void)
{
0
}
};
arm_
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
enable_mmu_el3
(
0
);
}
...
...
plat/xilinx/zynqmp/bl31_zynqmp_setup.c
View file @
9aabd11a
/*
* Copyright (c) 2013-201
6
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-201
8
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -193,6 +193,6 @@ void bl31_plat_arch_setup(void)
{
0
}
};
arm_
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
setup_page_tables
(
bl_regions
,
plat_arm_get_mmap
());
enable_mmu_el3
(
0
);
}
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment