summaryrefslogtreecommitdiff
path: root/bl1
diff options
context:
space:
mode:
authorSoby Mathew <soby.mathew@arm.com>2018-02-08 17:45:12 +0000
committerSoby Mathew <soby.mathew@arm.com>2018-02-26 16:29:29 +0000
commit566034fc27fc270b240efbef7a7dd9b0caf13c82 (patch)
tree24f63a50889f0d116e7872f3a80aa95406d7cb1e /bl1
parent5ff6da948710361dec294f4b5106978501531caf (diff)
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>
Diffstat (limited to 'bl1')
-rw-r--r--bl1/bl1_fwu.c23
-rw-r--r--bl1/bl1_main.c8
2 files changed, 26 insertions, 5 deletions
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.