aboutsummaryrefslogtreecommitdiff
path: root/plat/fvp/plat_io_storage.c
diff options
context:
space:
mode:
Diffstat (limited to 'plat/fvp/plat_io_storage.c')
-rw-r--r--plat/fvp/plat_io_storage.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/plat/fvp/plat_io_storage.c b/plat/fvp/plat_io_storage.c
index fd2d2b2..768c3c5 100644
--- a/plat/fvp/plat_io_storage.c
+++ b/plat/fvp/plat_io_storage.c
@@ -62,6 +62,7 @@ static io_dev_handle memmap_dev_handle;
static int fvp_bl2_policy(io_dev_handle *dev_handle, void **image_spec);
static int fvp_bl31_policy(io_dev_handle *dev_handle, void **image_spec);
+static int fvp_bl32_policy(io_dev_handle *dev_handle, void **image_spec);
static int fvp_bl33_policy(io_dev_handle *dev_handle, void **image_spec);
static int fvp_fip_policy(io_dev_handle *dev_handle, void **image_spec);
@@ -81,6 +82,11 @@ static io_file_spec bl31_file_spec = {
.mode = FOPEN_MODE_R
};
+static io_file_spec bl32_file_spec = {
+ .path = BL32_IMAGE_NAME,
+ .mode = FOPEN_MODE_R
+};
+
static io_file_spec bl33_file_spec = {
.path = BL33_IMAGE_NAME,
.mode = FOPEN_MODE_R
@@ -89,6 +95,7 @@ static io_file_spec bl33_file_spec = {
static plat_io_policy fvp_policy[] = {
{BL2_IMAGE_NAME, fvp_bl2_policy},
{BL31_IMAGE_NAME, fvp_bl31_policy},
+ {BL32_IMAGE_NAME, fvp_bl32_policy},
{BL33_IMAGE_NAME, fvp_bl33_policy},
{FIP_IMAGE_NAME, fvp_fip_policy},
{NULL, NULL}
@@ -194,6 +201,31 @@ static int fvp_bl31_policy(io_dev_handle *dev_handle, void **image_spec)
}
+/* Try to load BL32 from Firmware Image Package in FLASH first. If there is no
+ * FIP in FLASH or it is broken, try to load the file from semi-hosting.
+ */
+static int fvp_bl32_policy(io_dev_handle *dev_handle, void **image_spec)
+{
+ int result = IO_FAIL;
+ void *local_image_spec = &bl32_file_spec;
+
+ INFO("Loading BL32\n");
+ /* FIP first then fall back to semi-hosting */
+ result = open_fip(local_image_spec);
+ if (result == IO_SUCCESS) {
+ *dev_handle = fip_dev_handle;
+ *(io_file_spec **)image_spec = local_image_spec;
+ } else {
+ result = open_semihosting(local_image_spec);
+ if (result == IO_SUCCESS) {
+ *dev_handle = sh_dev_handle;
+ *(io_file_spec **)image_spec = local_image_spec;
+ }
+ }
+ return result;
+}
+
+
/* Try to load BL33 from Firmware Image Package in FLASH first. If there is no
* FIP in FLASH or it is broken, try to load the file from semi-hosting.
*/