From 8be7850fd67b9eed258330155ce16ab13d02123c Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Thu, 4 Oct 2018 14:54:49 +0900 Subject: [PATCH 1/2] uniphier: terminate boot if SCP_BL2 image is missing in SCP boot mode Skipping SCP_BL2 image is just a temporary workaround. If on-chip SCP needs to work, BL2 should load the SCP_BL2 image. Signed-off-by: Masahiro Yamada --- plat/socionext/uniphier/uniphier.h | 1 - plat/socionext/uniphier/uniphier_bl2_setup.c | 10 ---------- plat/socionext/uniphier/uniphier_io_storage.c | 18 ------------------ 3 files changed, 29 deletions(-) diff --git a/plat/socionext/uniphier/uniphier.h b/plat/socionext/uniphier/uniphier.h index 7ff146415..89ed36287 100644 --- a/plat/socionext/uniphier/uniphier.h +++ b/plat/socionext/uniphier/uniphier.h @@ -41,7 +41,6 @@ int uniphier_nand_init(uintptr_t *block_dev_spec); int uniphier_usb_init(unsigned int soc, uintptr_t *block_dev_spec); int uniphier_io_setup(unsigned int soc); -int uniphier_check_image(unsigned int image_id); struct image_info; struct image_info *uniphier_get_image_info(unsigned int image_id); diff --git a/plat/socionext/uniphier/uniphier_bl2_setup.c b/plat/socionext/uniphier/uniphier_bl2_setup.c index f7ae42646..fb7997c89 100644 --- a/plat/socionext/uniphier/uniphier_bl2_setup.c +++ b/plat/socionext/uniphier/uniphier_bl2_setup.c @@ -88,16 +88,6 @@ void bl2_el3_plat_arch_setup(void) break; } - if (!skip_scp) { - ret = uniphier_check_image(SCP_BL2_IMAGE_ID); - if (ret) { - WARN("SCP_BL2 image not found. SCP_BL2 load will be skipped.\n"); - WARN("You must setup SCP by other means.\n"); - skip_scp = 1; - uniphier_bl2_kick_scp = 0; - } - } - if (skip_scp) { struct image_info *image_info; diff --git a/plat/socionext/uniphier/uniphier_io_storage.c b/plat/socionext/uniphier/uniphier_io_storage.c index 1fd835b54..5d841ac00 100644 --- a/plat/socionext/uniphier/uniphier_io_storage.c +++ b/plat/socionext/uniphier/uniphier_io_storage.c @@ -335,21 +335,3 @@ int plat_get_image_source(unsigned int image_id, uintptr_t *dev_handle, return io_dev_init(*dev_handle, init_params); } - -int uniphier_check_image(unsigned int image_id) -{ - uintptr_t dev_handle, image_spec, image_handle; - int ret; - - ret = plat_get_image_source(image_id, &dev_handle, &image_spec); - if (ret) - return ret; - - ret = io_open(dev_handle, image_spec, &image_handle); - if (ret) - return ret; - - io_close(image_handle); - - return 0; -} From e6a90288c39a5d3f145bc0b04cfd7b80a7305fe1 Mon Sep 17 00:00:00 2001 From: Dai Okamura Date: Fri, 5 Oct 2018 08:56:24 +0900 Subject: [PATCH 2/2] uniphier: revise SCP protocol handshake When the SoC issues a command IRQ to SCP, SCP sets STMTOBEIRQ as ACK. The SoC must wait for it before issuing the next command. This commit makes sure to meet the requirement. Signed-off-by: Dai Okamura Signed-off-by: Masahiro Yamada --- plat/socionext/uniphier/uniphier_scp.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plat/socionext/uniphier/uniphier_scp.c b/plat/socionext/uniphier/uniphier_scp.c index 9a921c4a9..58eb72eff 100644 --- a/plat/socionext/uniphier/uniphier_scp.c +++ b/plat/socionext/uniphier/uniphier_scp.c @@ -12,7 +12,9 @@ #define UNIPHIER_ROM_RSV3 0x5980120c #define UNIPHIER_STMBE2COM 0x5f800030 +#define UNIPHIER_STMTOBEIRQ 0x5f800060 #define UNIPHIER_BETOSTMIRQ0PT 0x5f800070 +#define UNIPHIER_BEIRQCLRPT 0x5f800072 #define UNIPHIER_SCP_READY_MAGIC 0x0000b6a5 @@ -59,6 +61,10 @@ static void uniphier_scp_send_packet(const uint8_t *packet, int packet_len) } mmio_write_8(UNIPHIER_BETOSTMIRQ0PT, 0x55); + + while (!(mmio_read_32(UNIPHIER_STMTOBEIRQ) & BIT(1))) + ; + mmio_write_8(UNIPHIER_BEIRQCLRPT, BIT(1) | BIT(0)); } static void uniphier_scp_send_cmd(const uint8_t *cmd, int cmd_len)