summaryrefslogtreecommitdiff
path: root/plat/socionext/uniphier/uniphier_bl2_setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'plat/socionext/uniphier/uniphier_bl2_setup.c')
-rw-r--r--plat/socionext/uniphier/uniphier_bl2_setup.c42
1 files changed, 40 insertions, 2 deletions
diff --git a/plat/socionext/uniphier/uniphier_bl2_setup.c b/plat/socionext/uniphier/uniphier_bl2_setup.c
index 29108c0b..54b30e5b 100644
--- a/plat/socionext/uniphier/uniphier_bl2_setup.c
+++ b/plat/socionext/uniphier/uniphier_bl2_setup.c
@@ -9,8 +9,12 @@
#include <desc_image_load.h>
#include <errno.h>
#include <io/io_storage.h>
+#include <image_decompress.h>
#include <platform.h>
#include <platform_def.h>
+#ifdef UNIPHIER_DECOMPRESS_GZIP
+#include <tf_gunzip.h>
+#endif
#include <xlat_tables_v2.h>
#include "uniphier.h"
@@ -93,8 +97,12 @@ void bl2_el3_plat_arch_setup(void)
}
}
- if (skip_scp)
- uniphier_image_descs_fixup();
+ if (skip_scp) {
+ struct image_info *image_info;
+
+ image_info = uniphier_get_image_info(SCP_BL2_IMAGE_ID);
+ image_info->h.attr |= IMAGE_ATTRIB_SKIP_LOADING;
+ }
}
void bl2_platform_setup(void)
@@ -116,8 +124,38 @@ bl_params_t *plat_get_next_bl_params(void)
return get_next_bl_params_from_mem_params_desc();
}
+void bl2_plat_preload_setup(void)
+{
+#ifdef UNIPHIER_DECOMPRESS_GZIP
+ image_decompress_init(UNIPHIER_IMAGE_BUF_BASE,
+ UNIPHIER_IMAGE_BUF_SIZE,
+ gunzip);
+#endif
+}
+
+int bl2_plat_handle_pre_image_load(unsigned int image_id)
+{
+#ifdef UNIPHIER_DECOMPRESS_GZIP
+ image_decompress_prepare(uniphier_get_image_info(image_id));
+#endif
+ return 0;
+}
+
int bl2_plat_handle_post_image_load(unsigned int image_id)
{
+#ifdef UNIPHIER_DECOMPRESS_GZIP
+ struct image_info *image_info;
+ int ret;
+
+ image_info = uniphier_get_image_info(image_id);
+
+ if (!(image_info->h.attr & IMAGE_ATTRIB_SKIP_LOADING)) {
+ ret = image_decompress(uniphier_get_image_info(image_id));
+ if (ret)
+ return ret;
+ }
+#endif
+
if (image_id == SCP_BL2_IMAGE_ID && uniphier_bl2_kick_scp)
uniphier_scp_start();