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
986f8330
Commit
986f8330
authored
Jan 13, 2021
by
Manish Pandey
Committed by
TrustedFirmware Code Review
Jan 13, 2021
Browse files
Merge "qemu/qemu_sbsa: enable secure variable storage" into integration
parents
031d479d
74c87a4b
Changes
4
Show whitespace changes
Inline
Side-by-side
plat/qemu/common/qemu_common.c
View file @
986f8330
...
@@ -94,6 +94,7 @@ static const mmap_region_t plat_qemu_mmap[] = {
...
@@ -94,6 +94,7 @@ static const mmap_region_t plat_qemu_mmap[] = {
MAP_DEVICE1
,
MAP_DEVICE1
,
#endif
#endif
#if SPM_MM
#if SPM_MM
MAP_NS_DRAM0
,
QEMU_SPM_BUF_EL3_MMAP
,
QEMU_SPM_BUF_EL3_MMAP
,
#else
#else
MAP_BL32_MEM
,
MAP_BL32_MEM
,
...
...
plat/qemu/common/qemu_spm.c
View file @
986f8330
...
@@ -3,7 +3,12 @@
...
@@ -3,7 +3,12 @@
* Copyright (c) 2020, Linaro Limited and Contributors. All rights reserved.
* Copyright (c) 2020, Linaro Limited and Contributors. All rights reserved.
*/
*/
#include <libfdt.h>
#include <bl31/ehf.h>
#include <bl31/ehf.h>
#include <common/debug.h>
#include <common/fdt_fixup.h>
#include <common/fdt_wrappers.h>
#include <lib/xlat_tables/xlat_tables_compat.h>
#include <lib/xlat_tables/xlat_tables_compat.h>
#include <services/spm_mm_partition.h>
#include <services/spm_mm_partition.h>
...
@@ -14,12 +19,13 @@
...
@@ -14,12 +19,13 @@
DEVICE1_SIZE, \
DEVICE1_SIZE, \
MT_DEVICE | MT_RW | MT_SECURE | MT_USER)
MT_DEVICE | MT_RW | MT_SECURE | MT_USER)
const
mmap_region_t
plat_qemu_secure_partition_mmap
[]
=
{
mmap_region_t
plat_qemu_secure_partition_mmap
[]
=
{
QEMU_SP_IMAGE_NS_BUF_MMAP
,
/* must be placed at first entry */
MAP_DEVICE1_EL0
,
/* for the UART */
MAP_DEVICE1_EL0
,
/* for the UART */
QEMU_SP_IMAGE_MMAP
,
QEMU_SP_IMAGE_MMAP
,
QEMU_SPM_BUF_EL0_MMAP
,
QEMU_SPM_BUF_EL0_MMAP
,
QEMU_SP_IMAGE_NS_BUF_MMAP
,
QEMU_SP_IMAGE_RW_MMAP
,
QEMU_SP_IMAGE_RW_MMAP
,
MAP_SECURE_VARSTORE
,
{
0
}
{
0
}
};
};
...
@@ -38,7 +44,7 @@ static spm_mm_mp_info_t sp_mp_info[] = {
...
@@ -38,7 +44,7 @@ static spm_mm_mp_info_t sp_mp_info[] = {
[
7
]
=
{
0x80000007
,
0
}
[
7
]
=
{
0x80000007
,
0
}
};
};
const
spm_mm_boot_info_t
plat_qemu_secure_partition_boot_info
=
{
spm_mm_boot_info_t
plat_qemu_secure_partition_boot_info
=
{
.
h
.
type
=
PARAM_SP_IMAGE_BOOT_INFO
,
.
h
.
type
=
PARAM_SP_IMAGE_BOOT_INFO
,
.
h
.
version
=
VERSION_1
,
.
h
.
version
=
VERSION_1
,
.
h
.
size
=
sizeof
(
spm_mm_boot_info_t
),
.
h
.
size
=
sizeof
(
spm_mm_boot_info_t
),
...
@@ -65,12 +71,63 @@ ehf_pri_desc_t qemu_exceptions[] = {
...
@@ -65,12 +71,63 @@ ehf_pri_desc_t qemu_exceptions[] = {
EHF_PRI_DESC
(
QEMU_PRI_BITS
,
PLAT_SP_PRI
)
EHF_PRI_DESC
(
QEMU_PRI_BITS
,
PLAT_SP_PRI
)
};
};
int
dt_add_ns_buf_node
(
uintptr_t
*
base
)
{
uintptr_t
addr
;
size_t
size
;
uintptr_t
ns_buf_addr
;
int
node
;
int
err
;
void
*
fdt
=
(
void
*
)
ARM_PRELOADED_DTB_BASE
;
err
=
fdt_open_into
(
fdt
,
fdt
,
PLAT_QEMU_DT_MAX_SIZE
);
if
(
err
<
0
)
{
ERROR
(
"Invalid Device Tree at %p: error %d
\n
"
,
fdt
,
err
);
return
err
;
}
/*
* reserved-memory for standaloneMM non-secure buffer
* is allocated at the top of the first system memory region.
*/
node
=
fdt_path_offset
(
fdt
,
"/memory"
);
err
=
fdt_get_reg_props_by_index
(
fdt
,
node
,
0
,
&
addr
,
&
size
);
if
(
err
<
0
)
{
ERROR
(
"Failed to get the memory node information
\n
"
);
return
err
;
}
INFO
(
"System RAM @ 0x%lx - 0x%lx
\n
"
,
addr
,
addr
+
size
-
1
);
ns_buf_addr
=
addr
+
(
size
-
PLAT_QEMU_SP_IMAGE_NS_BUF_SIZE
);
INFO
(
"reserved-memory for spm-mm @ 0x%lx - 0x%llx
\n
"
,
ns_buf_addr
,
ns_buf_addr
+
PLAT_QEMU_SP_IMAGE_NS_BUF_SIZE
-
1
);
err
=
fdt_add_reserved_memory
(
fdt
,
"ns-buf-spm-mm"
,
ns_buf_addr
,
PLAT_QEMU_SP_IMAGE_NS_BUF_SIZE
);
if
(
err
<
0
)
{
ERROR
(
"Failed to add the reserved-memory node
\n
"
);
return
err
;
}
*
base
=
ns_buf_addr
;
return
0
;
}
/* Plug in QEMU exceptions to Exception Handling Framework. */
/* Plug in QEMU exceptions to Exception Handling Framework. */
EHF_REGISTER_PRIORITIES
(
qemu_exceptions
,
ARRAY_SIZE
(
qemu_exceptions
),
EHF_REGISTER_PRIORITIES
(
qemu_exceptions
,
ARRAY_SIZE
(
qemu_exceptions
),
QEMU_PRI_BITS
);
QEMU_PRI_BITS
);
const
mmap_region_t
*
plat_get_secure_partition_mmap
(
void
*
cookie
)
const
mmap_region_t
*
plat_get_secure_partition_mmap
(
void
*
cookie
)
{
{
uintptr_t
ns_buf_base
;
dt_add_ns_buf_node
(
&
ns_buf_base
);
plat_qemu_secure_partition_mmap
[
0
].
base_pa
=
ns_buf_base
;
plat_qemu_secure_partition_mmap
[
0
].
base_va
=
ns_buf_base
;
plat_qemu_secure_partition_boot_info
.
sp_ns_comm_buf_base
=
ns_buf_base
;
return
plat_qemu_secure_partition_mmap
;
return
plat_qemu_secure_partition_mmap
;
}
}
...
...
plat/qemu/qemu_sbsa/include/platform_def.h
View file @
986f8330
...
@@ -300,10 +300,13 @@
...
@@ -300,10 +300,13 @@
/*
/*
* Shared memory between Normal world and S-EL0 for
* Shared memory between Normal world and S-EL0 for
* passing data during service requests. It will be marked as RW and NS.
* passing data during service requests. It will be marked as RW and NS.
* This buffer is allocated at the top of NS_DRAM, the base address is
* overridden in SPM initialization.
*/
*/
#define PLAT_QEMU_SP_IMAGE_NS_BUF_BASE (PLAT_QEMU_DT_BASE + \
#define PLAT_QEMU_SP_IMAGE_NS_BUF_BASE (PLAT_QEMU_DT_BASE + \
PLAT_QEMU_DT_MAX_SIZE)
PLAT_QEMU_DT_MAX_SIZE)
#define PLAT_QEMU_SP_IMAGE_NS_BUF_SIZE ULL(0x10000)
#define PLAT_QEMU_SP_IMAGE_NS_BUF_SIZE ULL(0x200000)
#define QEMU_SP_IMAGE_NS_BUF_MMAP MAP_REGION2( \
#define QEMU_SP_IMAGE_NS_BUF_MMAP MAP_REGION2( \
PLAT_QEMU_SP_IMAGE_NS_BUF_BASE, \
PLAT_QEMU_SP_IMAGE_NS_BUF_BASE, \
PLAT_QEMU_SP_IMAGE_NS_BUF_BASE, \
PLAT_QEMU_SP_IMAGE_NS_BUF_BASE, \
...
@@ -334,6 +337,19 @@
...
@@ -334,6 +337,19 @@
MT_USER, \
MT_USER, \
PAGE_SIZE)
PAGE_SIZE)
/*
* Secure variable storage is located at Secure Flash.
*/
#if SPM_MM
#define QEMU_SECURE_VARSTORE_BASE 0x01000000
#define QEMU_SECURE_VARSTORE_SIZE 0x00100000
#define MAP_SECURE_VARSTORE MAP_REGION_FLAT( \
QEMU_SECURE_VARSTORE_BASE, \
QEMU_SECURE_VARSTORE_SIZE, \
MT_MEMORY | MT_RW | \
MT_SECURE | MT_USER)
#endif
/* Total number of memory regions with distinct properties */
/* Total number of memory regions with distinct properties */
#define PLAT_QEMU_SP_IMAGE_NUM_MEM_REGIONS 6
#define PLAT_QEMU_SP_IMAGE_NUM_MEM_REGIONS 6
...
...
plat/qemu/qemu_sbsa/platform.mk
View file @
986f8330
...
@@ -83,6 +83,8 @@ BL31_SOURCES += lib/cpus/aarch64/cortex_a57.S \
...
@@ -83,6 +83,8 @@ BL31_SOURCES += lib/cpus/aarch64/cortex_a57.S \
${PLAT_QEMU_COMMON_PATH}
/topology.c
\
${PLAT_QEMU_COMMON_PATH}
/topology.c
\
${PLAT_QEMU_COMMON_PATH}
/aarch64/plat_helpers.S
\
${PLAT_QEMU_COMMON_PATH}
/aarch64/plat_helpers.S
\
${PLAT_QEMU_COMMON_PATH}
/qemu_bl31_setup.c
\
${PLAT_QEMU_COMMON_PATH}
/qemu_bl31_setup.c
\
common/fdt_fixup.c
\
common/fdt_wrappers.c
\
${QEMU_GIC_SOURCES}
${QEMU_GIC_SOURCES}
ifeq
(${SPM_MM},1)
ifeq
(${SPM_MM},1)
BL31_SOURCES
+=
${PLAT_QEMU_COMMON_PATH}
/qemu_spm.c
BL31_SOURCES
+=
${PLAT_QEMU_COMMON_PATH}
/qemu_spm.c
...
...
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