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
0f99bf32
Commit
0f99bf32
authored
5 years ago
by
Alexei Fedorov
Committed by
TrustedFirmware Code Review
5 years ago
Browse files
Options
Download
Plain Diff
Merge "Add support to pass the nt_fw_config DTB to OP-TEE." into integration
parents
7c49d398
42c33ba3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
common/desc_image_load.c
+49
-20
common/desc_image_load.c
with
49 additions
and
20 deletions
+49
-20
common/desc_image_load.c
View file @
0f99bf32
...
...
@@ -214,11 +214,12 @@ void populate_next_bl_params_config(bl_params_t *bl2_to_next_bl_params)
{
bl_params_node_t
*
params_node
;
unsigned
int
fw_config_id
;
uintptr_t
hw_config_base
=
0
,
fw_config_base
;
#if defined(SPD_spmd)
#ifdef SPD_spmd
uint32_t
fw_config_size
=
0
;
#endif
uintptr_t
fw_config_base
;
bl_mem_params_node_t
*
mem_params
;
uintptr_t
hw_config_base
=
0
;
assert
(
bl2_to_next_bl_params
!=
NULL
);
...
...
@@ -227,6 +228,7 @@ void populate_next_bl_params_config(bl_params_t *bl2_to_next_bl_params)
* if available.
*/
mem_params
=
get_bl_mem_params_node
(
HW_CONFIG_ID
);
if
(
mem_params
!=
NULL
)
hw_config_base
=
mem_params
->
image_info
.
image_base
;
...
...
@@ -240,8 +242,16 @@ void populate_next_bl_params_config(bl_params_t *bl2_to_next_bl_params)
fw_config_id
=
SOC_FW_CONFIG_ID
;
break
;
case
BL32_IMAGE_ID
:
/*
* At the moment, OPTEE cannot accept a DTB in secure memory,
* so fall back and use NT_FW_CONFIG instead.
* This MUST be fixed as soon as OPTEE has support to
* receive DTBs in secure memory.
*/
#ifndef SPD_opteed
fw_config_id
=
TOS_FW_CONFIG_ID
;
break
;
#endif
case
BL33_IMAGE_ID
:
fw_config_id
=
NT_FW_CONFIG_ID
;
break
;
...
...
@@ -254,38 +264,57 @@ void populate_next_bl_params_config(bl_params_t *bl2_to_next_bl_params)
mem_params
=
get_bl_mem_params_node
(
fw_config_id
);
if
(
mem_params
!=
NULL
)
{
fw_config_base
=
mem_params
->
image_info
.
image_base
;
#if
def
ined(
SPD_spmd
)
#ifdef
SPD_spmd
fw_config_size
=
mem_params
->
image_info
.
image_size
;
#endif
}
}
#ifdef SPD_opteed
/*
* Pass hw and tb_fw config addresses to next images. NOTE - for
* EL3 runtime images (BL31 for AArch64 and BL32 for AArch32),
* arg0 is already used by generic code. Take care of not
* overwriting the previous initialisations.
* If SPD_opteed is enabled, arg[0,2] are populated by
* parse_optee_header(), which is called by
* arm_bl2_handle_post_image_load(). The meaning of the
* arguments are:
* arg0 <-- MODE_RW
* arg1 <-- Paged image base
* arg2 <-- Paged image size
*/
if
(
params_node
==
bl2_to_next_bl_params
->
head
)
{
if
(
params_node
->
ep_info
->
args
.
arg1
==
0U
)
params_node
->
ep_info
->
args
.
arg1
=
if
(
params_node
->
image_id
==
BL32_IMAGE_ID
)
{
params_node
->
ep_info
->
args
.
arg3
=
fw_config_base
;
}
else
{
#endif
/*
* Pass hw and tb_fw config addresses to next images.
* NOTE - for EL3 runtime images (BL31 for AArch64
* and BL32 for AArch32), arg0 is already used by
* generic code. Take care of not overwriting the
* previous initialisations.
*/
if
(
params_node
==
bl2_to_next_bl_params
->
head
)
{
if
(
params_node
->
ep_info
->
args
.
arg1
==
0U
)
params_node
->
ep_info
->
args
.
arg1
=
fw_config_base
;
if
(
params_node
->
ep_info
->
args
.
arg2
==
0U
)
params_node
->
ep_info
->
args
.
arg2
=
if
(
params_node
->
ep_info
->
args
.
arg2
==
0U
)
params_node
->
ep_info
->
args
.
arg2
=
hw_config_base
;
}
else
{
if
(
params_node
->
ep_info
->
args
.
arg0
==
0U
)
params_node
->
ep_info
->
args
.
arg0
=
}
else
{
if
(
params_node
->
ep_info
->
args
.
arg0
==
0U
)
params_node
->
ep_info
->
args
.
arg0
=
fw_config_base
;
if
(
params_node
->
ep_info
->
args
.
arg1
==
0U
)
params_node
->
ep_info
->
args
.
arg1
=
if
(
params_node
->
ep_info
->
args
.
arg1
==
0U
)
params_node
->
ep_info
->
args
.
arg1
=
hw_config_base
;
#if
def
ined(
SPD_spmd
)
if
(
params_node
->
ep_info
->
args
.
arg2
==
0U
)
params_node
->
ep_info
->
args
.
arg2
=
#ifdef
SPD_spmd
if
(
params_node
->
ep_info
->
args
.
arg2
==
0U
)
params_node
->
ep_info
->
args
.
arg2
=
fw_config_size
;
#endif
}
#ifdef SPD_opteed
}
#endif
}
}
...
...
This diff is collapsed.
Click to expand it.
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