bl2: add bl2_plat_handle_pre_image_load()

There are cases where we need to manipulate image information before
the load.  For example, for decompressing data, we cannot load the
compressed images to their final destination.  Instead, we need to
load them to the temporary buffer for the decompressor.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
Masahiro Yamada 2018-02-01 16:45:51 +09:00
parent 0fc50a86c1
commit ba68ef557b
4 changed files with 38 additions and 8 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -54,6 +54,12 @@ entry_point_info_t *bl2_load_images(void)
} }
} }
err = bl2_plat_handle_pre_image_load(bl2_node_info->image_id);
if (err) {
ERROR("BL2: Failure in pre image load handling (%i)\n", err);
plat_error_handler(err);
}
if (!(bl2_node_info->image_info->h.attr & IMAGE_ATTRIB_SKIP_LOADING)) { if (!(bl2_node_info->image_info->h.attr & IMAGE_ATTRIB_SKIP_LOADING)) {
INFO("BL2: Loading image id %d\n", bl2_node_info->image_id); INFO("BL2: Loading image id %d\n", bl2_node_info->image_id);
err = load_auth_image(bl2_node_info->image_id, err = load_auth_image(bl2_node_info->image_id,

View File

@ -1424,10 +1424,10 @@ The purpose of this function is to return a pointer to a ``meminfo`` structure
populated with the extents of secure RAM available for BL2 to use. See populated with the extents of secure RAM available for BL2 to use. See
``bl2_early_platform_setup()`` above. ``bl2_early_platform_setup()`` above.
Following function is required only when LOAD\_IMAGE\_V2 is enabled. Following functions are optionally used only when LOAD\_IMAGE\_V2 is enabled.
Function : bl2\_plat\_handle\_post\_image\_load() [mandatory] Function : bl2\_plat\_handle\_pre\_image\_load() [optional]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: ::
@ -1435,9 +1435,20 @@ Function : bl2\_plat\_handle\_post\_image\_load() [mandatory]
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 given ``image_id``. This function is currently invoked in BL2 to handle for given ``image_id``. This function is currently invoked in BL2 before
BL image specific information based on the ``image_id`` passed, when loading each image, when LOAD\_IMAGE\_V2 is enabled.
LOAD\_IMAGE\_V2 is enabled.
Function : bl2\_plat\_handle\_post\_image\_load() [optional]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
Argument : unsigned int
Return : int
This function can be used by the platforms to update/use image information
for given ``image_id``. This function is currently invoked in BL2 after
loading each image, when LOAD\_IMAGE\_V2 is enabled.
Following functions are required only when LOAD\_IMAGE\_V2 is disabled. Following functions are required only when LOAD\_IMAGE\_V2 is disabled.

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -169,6 +169,7 @@ struct meminfo *bl2_plat_sec_mem_layout(void);
* This function can be used by the platforms to update/use image * This function can be used by the platforms to update/use image
* information for given `image_id`. * information for given `image_id`.
*/ */
int bl2_plat_handle_pre_image_load(unsigned int image_id);
int bl2_plat_handle_post_image_load(unsigned int image_id); int bl2_plat_handle_post_image_load(unsigned int image_id);
#else /* LOAD_IMAGE_V2 */ #else /* LOAD_IMAGE_V2 */

View File

@ -13,6 +13,8 @@
#pragma weak plat_error_handler #pragma weak plat_error_handler
#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_post_image_load
#pragma weak plat_try_next_boot_source #pragma weak plat_try_next_boot_source
void __dead2 plat_error_handler(int err) void __dead2 plat_error_handler(int err)
@ -25,6 +27,16 @@ void bl2_plat_preload_setup(void)
{ {
} }
int bl2_plat_handle_pre_image_load(unsigned int image_id)
{
return 0;
}
int bl2_plat_handle_post_image_load(unsigned int image_id)
{
return 0;
}
int plat_try_next_boot_source(void) int plat_try_next_boot_source(void)
{ {
return 0; return 0;