diff options
author | Masahiro Yamada <yamada.masahiro@socionext.com> | 2020-01-17 13:46:23 +0900 |
---|---|---|
committer | Masahiro Yamada <yamada.masahiro@socionext.com> | 2020-01-24 22:34:50 +0900 |
commit | 577b24411accd329d11c7d918d9104498d9a4e1a (patch) | |
tree | 3935913d7bda59d9c928cc9253b7978115ef0e2f /plat | |
parent | b79b3177d3c0eaf18a595feed82b250ac391a87f (diff) | |
download | arm-trusted-firmware-577b24411accd329d11c7d918d9104498d9a4e1a.tar.gz |
uniphier: pass SCP base address as a function parameter
Currently, UNIPHIER_SCP_BASE is hard-coded in uniphier_scp_start(),
which is not handy for PIE.
Towards the goal of making this really position-independent, pass in
image_info->image_base.
Change-Id: I88e020a1919c607b1d5ce70b116201d95773bb63
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'plat')
-rw-r--r-- | plat/socionext/uniphier/uniphier.h | 2 | ||||
-rw-r--r-- | plat/socionext/uniphier/uniphier_bl2_setup.c | 6 | ||||
-rw-r--r-- | plat/socionext/uniphier/uniphier_scp.c | 6 |
3 files changed, 6 insertions, 8 deletions
diff --git a/plat/socionext/uniphier/uniphier.h b/plat/socionext/uniphier/uniphier.h index 6ccd422de..698f3ebd9 100644 --- a/plat/socionext/uniphier/uniphier.h +++ b/plat/socionext/uniphier/uniphier.h @@ -48,7 +48,7 @@ struct image_info; struct image_info *uniphier_get_image_info(unsigned int image_id); int uniphier_scp_is_running(void); -void uniphier_scp_start(void); +void uniphier_scp_start(uint32_t scp_base); void uniphier_scp_open_com(void); void uniphier_scp_system_off(void); void uniphier_scp_system_reset(void); diff --git a/plat/socionext/uniphier/uniphier_bl2_setup.c b/plat/socionext/uniphier/uniphier_bl2_setup.c index 74d4fa235..2132bdd0d 100644 --- a/plat/socionext/uniphier/uniphier_bl2_setup.c +++ b/plat/socionext/uniphier/uniphier_bl2_setup.c @@ -149,12 +149,10 @@ int bl2_plat_handle_pre_image_load(unsigned int image_id) int bl2_plat_handle_post_image_load(unsigned int image_id) { + struct image_info *image_info = uniphier_get_image_info(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) @@ -163,7 +161,7 @@ int bl2_plat_handle_post_image_load(unsigned int image_id) #endif if (image_id == SCP_BL2_IMAGE_ID && uniphier_bl2_kick_scp) - uniphier_scp_start(); + uniphier_scp_start(image_info->image_base); return 0; } diff --git a/plat/socionext/uniphier/uniphier_scp.c b/plat/socionext/uniphier/uniphier_scp.c index c608a255a..8a12d5d8d 100644 --- a/plat/socionext/uniphier/uniphier_scp.c +++ b/plat/socionext/uniphier/uniphier_scp.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -28,11 +28,11 @@ int uniphier_scp_is_running(void) return mmio_read_32(UNIPHIER_STMBE2COM) == UNIPHIER_SCP_READY_MAGIC; } -void uniphier_scp_start(void) +void uniphier_scp_start(uint32_t scp_base) { uint32_t tmp; - mmio_write_32(UNIPHIER_STMBE2COM + 4, UNIPHIER_SCP_BASE); + mmio_write_32(UNIPHIER_STMBE2COM + 4, scp_base); mmio_write_32(UNIPHIER_STMBE2COM, UNIPHIER_SCP_READY_MAGIC); do { |