Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
6 years ago
by
Antonio Niño Díaz
Committed by
GitHub
6 years ago
Browse files
Options
Download
Plain Diff
Merge pull request #1647 from antonio-nino-diaz-arm/an/setup-xlat
Improvements to setup page tables code
parents
31abc7c4
0916c38d
master
v2.5
v2.5-rc1
v2.5-rc0
v2.4
v2.4-rc2
v2.4-rc1
v2.4-rc0
v2.3
v2.3-rc2
v2.3-rc1
v2.3-rc0
v2.2
v2.2-rc2
v2.2-rc1
v2.2-rc0
v2.1
v2.1-rc1
v2.1-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
include/common/bl_common.h
+5
-0
include/common/bl_common.h
include/lib/xlat_tables/xlat_tables_compat.h
+11
-0
include/lib/xlat_tables/xlat_tables_compat.h
include/plat/arm/board/common/v2m_def.h
+1
-2
include/plat/arm/board/common/v2m_def.h
include/plat/arm/common/plat_arm.h
+1
-7
include/plat/arm/common/plat_arm.h
lib/xlat_tables_v2/xlat_tables.mk
+3
-0
lib/xlat_tables_v2/xlat_tables.mk
plat/arm/board/fvp/fvp_common.c
+4
-3
plat/arm/board/fvp/fvp_common.c
plat/arm/board/juno/juno_common.c
+2
-2
plat/arm/board/juno/juno_common.c
plat/arm/common/arm_bl1_setup.c
+3
-2
plat/arm/common/arm_bl1_setup.c
plat/arm/common/arm_bl2_el3_setup.c
+1
-1
plat/arm/common/arm_bl2_el3_setup.c
plat/arm/common/arm_bl2_setup.c
+1
-1
plat/arm/common/arm_bl2_setup.c
plat/arm/common/arm_bl2u_setup.c
+1
-1
plat/arm/common/arm_bl2u_setup.c
plat/arm/common/arm_bl31_setup.c
+2
-2
plat/arm/common/arm_bl31_setup.c
plat/arm/common/arm_common.c
+1
-37
plat/arm/common/arm_common.c
plat/arm/common/sp_min/arm_sp_min_setup.c
+1
-1
plat/arm/common/sp_min/arm_sp_min_setup.c
plat/arm/common/tsp/arm_tsp_setup.c
+1
-1
plat/arm/common/tsp/arm_tsp_setup.c
plat/common/plat_bl_common.c
+38
-0
plat/common/plat_bl_common.c
plat/qemu/platform.mk
+0
-12
plat/qemu/platform.mk
plat/qemu/qemu_common.c
+3
-2
plat/qemu/qemu_common.c
plat/ti/k3/common/k3_bl31_setup.c
+1
-1
plat/ti/k3/common/k3_bl31_setup.c
plat/xilinx/zynqmp/bl31_zynqmp_setup.c
+2
-2
plat/xilinx/zynqmp/bl31_zynqmp_setup.c
with
82 additions
and
77 deletions
+82
-77
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__ */
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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)
...
...
This diff is collapsed.
Click to expand it.
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))
...
...
This diff is collapsed.
Click to expand it.
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))
This diff is collapsed.
Click to expand it.
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()).
...
...
This diff is collapsed.
Click to expand it.
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
[]
=
{
...
...
This diff is collapsed.
Click to expand it.
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
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
...
...
This diff is collapsed.
Click to expand it.
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
);
}
This diff is collapsed.
Click to expand it.
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
);
}
This diff is collapsed.
Click to expand it.
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
();
}
This diff is collapsed.
Click to expand it.
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)
...
...
This diff is collapsed.
Click to expand it.
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, \
...
...
This diff is collapsed.
Click to expand it.
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
);
}
...
...
This diff is collapsed.
Click to expand it.
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
);
}
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help