From 566034fc27fc270b240efbef7a7dd9b0caf13c82 Mon Sep 17 00:00:00 2001 From: Soby Mathew Date: Thu, 8 Feb 2018 17:45:12 +0000 Subject: 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 --- bl1/bl1_fwu.c | 23 ++++++++++++++++++++++- bl1/bl1_main.c | 8 ++++---- 2 files changed, 26 insertions(+), 5 deletions(-) (limited to 'bl1') diff --git a/bl1/bl1_fwu.c b/bl1/bl1_fwu.c index 07a7fc81..38780833 100644 --- a/bl1/bl1_fwu.c +++ b/bl1/bl1_fwu.c @@ -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 */ @@ -350,6 +350,15 @@ static int bl1_fwu_image_copy(unsigned int image_id, 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. */ dest_addr = image_desc->image_info.image_base + image_desc->copied_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. */ 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 * secure world images can see changes. diff --git a/bl1/bl1_main.c b/bl1/bl1_main.c index 91b5f0b1..fe09070b 100644 --- a/bl1/bl1_main.c +++ b/bl1/bl1_main.c @@ -177,13 +177,13 @@ void bl1_load_bl2(void) INFO("BL1: Loading BL2\n"); -#if LOAD_IMAGE_V2 - err = bl1_plat_handle_pre_image_load(); + err = bl1_plat_handle_pre_image_load(BL2_IMAGE_ID); if (err) { ERROR("Failure in pre image load handling of BL2 (%d)\n", err); plat_error_handler(err); } +#if LOAD_IMAGE_V2 err = load_auth_image(BL2_IMAGE_ID, image_info); #else /* Load the BL2 image */ @@ -200,14 +200,14 @@ void bl1_load_bl2(void) plat_error_handler(err); } -#if LOAD_IMAGE_V2 /* 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) { ERROR("Failure in post image load handling of BL2 (%d)\n", err); plat_error_handler(err); } +#if LOAD_IMAGE_V2 /* * Create a new layout of memory for BL2 as seen by BL1 i.e. * tell it the amount of total and free memory available. -- cgit v1.2.3