mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 17:44:19 +00:00
Add image_id to bl1_plat_handle_post/pre_image_load()
This patch adds an argument to bl1_plat_post/pre_image_load() APIs to make it more future proof. The default implementation of these are moved to `plat_bl1_common.c` file. These APIs are now invoked appropriately in the FWU code path prior to or post image loading by BL1 and are not restricted to LOAD_IMAGE_V2. The patch also reorganizes some common platform files. The previous `plat_bl2_el3_common.c` and `platform_helpers_default.c` files are merged into a new `plat_bl_common.c` file. NOTE: The addition of an argument to the above mentioned platform APIs is not expected to have a great impact because these APIs were only recently added and are unlikely to be used. Change-Id: I0519caaee0f774dd33638ff63a2e597ea178c453 Signed-off-by: Soby Mathew <soby.mathew@arm.com>
This commit is contained in:
parent
5ff6da9487
commit
566034fc27
9 changed files with 62 additions and 60 deletions
2
Makefile
2
Makefile
|
@ -192,8 +192,8 @@ BL_COMMON_SOURCES += common/bl_common.c \
|
||||||
common/${ARCH}/debug.S \
|
common/${ARCH}/debug.S \
|
||||||
lib/${ARCH}/cache_helpers.S \
|
lib/${ARCH}/cache_helpers.S \
|
||||||
lib/${ARCH}/misc_helpers.S \
|
lib/${ARCH}/misc_helpers.S \
|
||||||
|
plat/common/plat_bl_common.c \
|
||||||
plat/common/plat_log_common.c \
|
plat/common/plat_log_common.c \
|
||||||
plat/common/platform_helpers_default.c \
|
|
||||||
plat/common/${ARCH}/plat_common.c \
|
plat/common/${ARCH}/plat_common.c \
|
||||||
plat/common/${ARCH}/platform_helpers.S \
|
plat/common/${ARCH}/platform_helpers.S \
|
||||||
${COMPILER_RT_SRCS} \
|
${COMPILER_RT_SRCS} \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -350,6 +350,15 @@ static int bl1_fwu_image_copy(unsigned int image_id,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Allow the platform to handle pre-image load before copying */
|
||||||
|
if (image_desc->state == IMAGE_STATE_RESET) {
|
||||||
|
if (bl1_plat_handle_pre_image_load(image_id) != 0) {
|
||||||
|
ERROR("BL1-FWU: Failure in pre-image load of image id %d\n",
|
||||||
|
image_id);
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Everything looks sane. Go ahead and copy the block of data. */
|
/* Everything looks sane. Go ahead and copy the block of data. */
|
||||||
dest_addr = image_desc->image_info.image_base + image_desc->copied_size;
|
dest_addr = image_desc->image_info.image_base + image_desc->copied_size;
|
||||||
memcpy((void *) dest_addr, (const void *) image_src, block_size);
|
memcpy((void *) dest_addr, (const void *) image_src, block_size);
|
||||||
|
@ -474,6 +483,18 @@ static int bl1_fwu_image_auth(unsigned int image_id,
|
||||||
/* Indicate that image is in authenticated state. */
|
/* Indicate that image is in authenticated state. */
|
||||||
image_desc->state = IMAGE_STATE_AUTHENTICATED;
|
image_desc->state = IMAGE_STATE_AUTHENTICATED;
|
||||||
|
|
||||||
|
/* Allow the platform to handle post-image load */
|
||||||
|
result = bl1_plat_handle_post_image_load(image_id);
|
||||||
|
if (result != 0) {
|
||||||
|
ERROR("BL1-FWU: Failure %d in post-image load of image id %d\n",
|
||||||
|
result, image_id);
|
||||||
|
/*
|
||||||
|
* Panic here as the platform handling of post-image load is
|
||||||
|
* not correct.
|
||||||
|
*/
|
||||||
|
plat_error_handler(result);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Flush image_info to memory so that other
|
* Flush image_info to memory so that other
|
||||||
* secure world images can see changes.
|
* secure world images can see changes.
|
||||||
|
|
|
@ -177,13 +177,13 @@ void bl1_load_bl2(void)
|
||||||
|
|
||||||
INFO("BL1: Loading BL2\n");
|
INFO("BL1: Loading BL2\n");
|
||||||
|
|
||||||
#if LOAD_IMAGE_V2
|
err = bl1_plat_handle_pre_image_load(BL2_IMAGE_ID);
|
||||||
err = bl1_plat_handle_pre_image_load();
|
|
||||||
if (err) {
|
if (err) {
|
||||||
ERROR("Failure in pre image load handling of BL2 (%d)\n", err);
|
ERROR("Failure in pre image load handling of BL2 (%d)\n", err);
|
||||||
plat_error_handler(err);
|
plat_error_handler(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LOAD_IMAGE_V2
|
||||||
err = load_auth_image(BL2_IMAGE_ID, image_info);
|
err = load_auth_image(BL2_IMAGE_ID, image_info);
|
||||||
#else
|
#else
|
||||||
/* Load the BL2 image */
|
/* Load the BL2 image */
|
||||||
|
@ -200,14 +200,14 @@ void bl1_load_bl2(void)
|
||||||
plat_error_handler(err);
|
plat_error_handler(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LOAD_IMAGE_V2
|
|
||||||
/* Allow platform to handle image information. */
|
/* Allow platform to handle image information. */
|
||||||
err = bl1_plat_handle_post_image_load();
|
err = bl1_plat_handle_post_image_load(BL2_IMAGE_ID);
|
||||||
if (err) {
|
if (err) {
|
||||||
ERROR("Failure in post image load handling of BL2 (%d)\n", err);
|
ERROR("Failure in post image load handling of BL2 (%d)\n", err);
|
||||||
plat_error_handler(err);
|
plat_error_handler(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LOAD_IMAGE_V2
|
||||||
/*
|
/*
|
||||||
* Create a new layout of memory for BL2 as seen by BL1 i.e.
|
* Create a new layout of memory for BL2 as seen by BL1 i.e.
|
||||||
* tell it the amount of total and free memory available.
|
* tell it the amount of total and free memory available.
|
||||||
|
|
|
@ -29,7 +29,6 @@ BL2_LINKERFILE := bl2/bl2.ld.S
|
||||||
else
|
else
|
||||||
BL2_SOURCES += bl2/${ARCH}/bl2_el3_entrypoint.S \
|
BL2_SOURCES += bl2/${ARCH}/bl2_el3_entrypoint.S \
|
||||||
bl2/${ARCH}/bl2_el3_exceptions.S \
|
bl2/${ARCH}/bl2_el3_exceptions.S \
|
||||||
plat/common/plat_bl2_el3_common.c \
|
|
||||||
lib/cpus/${ARCH}/cpu_helpers.S \
|
lib/cpus/${ARCH}/cpu_helpers.S \
|
||||||
lib/cpus/errata_report.c
|
lib/cpus/errata_report.c
|
||||||
BL2_LINKERFILE := bl2/bl2_el3.ld.S
|
BL2_LINKERFILE := bl2/bl2_el3.ld.S
|
||||||
|
|
|
@ -1264,24 +1264,24 @@ Function : bl1\_plat\_handle\_pre\_image\_load() [optional]
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
Argument : void
|
Argument : unsigned int image_id
|
||||||
Return : int
|
Return : int
|
||||||
|
|
||||||
This function can be used by the platforms to update/use image information
|
This function can be used by the platforms to update/use image information
|
||||||
for BL2. This function is currently invoked in BL1 before loading BL2,
|
corresponding to ``image_id``. This function is invoked in BL1, both in cold
|
||||||
when LOAD\_IMAGE\_V2 is enabled.
|
boot and FWU code path, before loading the image.
|
||||||
|
|
||||||
Function : bl1\_plat\_handle\_post\_image\_load() [optional]
|
Function : bl1\_plat\_handle\_post\_image\_load() [optional]
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
Argument : void
|
Argument : unsigned int image_id
|
||||||
Return : int
|
Return : int
|
||||||
|
|
||||||
This function can be used by the platforms to update/use image information
|
This function can be used by the platforms to update/use image information
|
||||||
for BL2. This function is currently invoked in BL1 after loading BL2,
|
corresponding to ``image_id``. This function is invoked in BL1, both in cold
|
||||||
when LOAD\_IMAGE\_V2 is enabled.
|
boot and FWU code path, after loading and authenticating the image.
|
||||||
|
|
||||||
Function : bl1\_plat\_fwu\_done() [optional]
|
Function : bl1\_plat\_fwu\_done() [optional]
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
@ -155,15 +155,12 @@ struct image_desc *bl1_plat_get_image_desc(unsigned int image_id);
|
||||||
*/
|
*/
|
||||||
__dead2 void bl1_plat_fwu_done(void *client_cookie, void *reserved);
|
__dead2 void bl1_plat_fwu_done(void *client_cookie, void *reserved);
|
||||||
|
|
||||||
#if LOAD_IMAGE_V2
|
|
||||||
/*
|
/*
|
||||||
* This function can be used by the platforms to update/use image
|
* This BL1 function can be used by the platforms to update/use image
|
||||||
* information for BL2.
|
* information for a given `image_id`.
|
||||||
*/
|
*/
|
||||||
int bl1_plat_handle_pre_image_load(void);
|
int bl1_plat_handle_pre_image_load(unsigned int image_id);
|
||||||
int bl1_plat_handle_post_image_load(void);
|
int bl1_plat_handle_post_image_load(unsigned int image_id);
|
||||||
|
|
||||||
#endif /* LOAD_IMAGE_V2 */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Mandatory BL2 functions
|
* Mandatory BL2 functions
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <bl_common.h>
|
#include <bl_common.h>
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <platform.h>
|
||||||
#include <platform_def.h>
|
#include <platform_def.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -21,6 +22,8 @@
|
||||||
#pragma weak bl1_plat_set_ep_info
|
#pragma weak bl1_plat_set_ep_info
|
||||||
#pragma weak bl1_plat_get_image_desc
|
#pragma weak bl1_plat_get_image_desc
|
||||||
#pragma weak bl1_plat_fwu_done
|
#pragma weak bl1_plat_fwu_done
|
||||||
|
#pragma weak bl1_plat_handle_pre_image_load
|
||||||
|
#pragma weak bl1_plat_handle_post_image_load
|
||||||
|
|
||||||
|
|
||||||
unsigned int bl1_plat_get_next_image_id(void)
|
unsigned int bl1_plat_get_next_image_id(void)
|
||||||
|
@ -35,6 +38,16 @@ void bl1_plat_set_ep_info(unsigned int image_id,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bl1_plat_handle_pre_image_load(unsigned int image_id)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bl1_plat_handle_post_image_load(unsigned int image_id)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Following is the default definition that always
|
* Following is the default definition that always
|
||||||
* returns BL2 image details.
|
* returns BL2 image details.
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <arch_helpers.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <bl_common.h>
|
|
||||||
#include <debug.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <platform_def.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The following platform functions are weakly defined. They
|
|
||||||
* are default implementations that allow BL2 to compile in
|
|
||||||
* absence of real definitions. The Platforms may override
|
|
||||||
* with more complex definitions.
|
|
||||||
*/
|
|
||||||
#pragma weak bl2_el3_plat_prepare_exit
|
|
||||||
|
|
||||||
void bl2_el3_plat_prepare_exit(void)
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -1,40 +1,36 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <arch_helpers.h>
|
#include <arch_helpers.h>
|
||||||
#include <platform.h>
|
#include <assert.h>
|
||||||
|
#include <bl_common.h>
|
||||||
|
#include <debug.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Placeholder functions which can be redefined by each platfrom.
|
* The following platform functions are weakly defined. The Platforms
|
||||||
|
* may redefine with strong definition.
|
||||||
*/
|
*/
|
||||||
|
#pragma weak bl2_el3_plat_prepare_exit
|
||||||
#pragma weak plat_error_handler
|
#pragma weak plat_error_handler
|
||||||
#pragma weak bl1_plat_handle_pre_image_load
|
|
||||||
#pragma weak bl1_plat_handle_post_image_load
|
|
||||||
#pragma weak bl2_plat_preload_setup
|
#pragma weak bl2_plat_preload_setup
|
||||||
#pragma weak bl2_plat_handle_pre_image_load
|
#pragma weak bl2_plat_handle_pre_image_load
|
||||||
#pragma weak bl2_plat_handle_post_image_load
|
#pragma weak bl2_plat_handle_post_image_load
|
||||||
#pragma weak plat_try_next_boot_source
|
#pragma weak plat_try_next_boot_source
|
||||||
|
|
||||||
|
void bl2_el3_plat_prepare_exit(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void __dead2 plat_error_handler(int err)
|
void __dead2 plat_error_handler(int err)
|
||||||
{
|
{
|
||||||
while (1)
|
while (1)
|
||||||
wfi();
|
wfi();
|
||||||
}
|
}
|
||||||
|
|
||||||
int bl1_plat_handle_pre_image_load(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int bl1_plat_handle_post_image_load(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void bl2_plat_preload_setup(void)
|
void bl2_plat_preload_setup(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue