xref: /arm-trusted-firmware/plat/arm/css/common/css_bl2u_setup.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #include <common/bl_common.h>
8*91f16700Schasinglulu #include <common/debug.h>
9*91f16700Schasinglulu #include <drivers/arm/css/css_scp.h>
10*91f16700Schasinglulu #include <plat/arm/common/plat_arm.h>
11*91f16700Schasinglulu #include <plat/common/platform.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu /* Weak definition may be overridden in specific CSS based platform */
14*91f16700Schasinglulu #pragma weak bl2u_plat_handle_scp_bl2u
15*91f16700Schasinglulu 
16*91f16700Schasinglulu /* Data structure which holds the SCP_BL2U image info for BL2U */
17*91f16700Schasinglulu static image_info_t scp_bl2u_image_info;
18*91f16700Schasinglulu 
19*91f16700Schasinglulu /*******************************************************************************
20*91f16700Schasinglulu  * BL1 can pass platform dependent information to BL2U in x1.
21*91f16700Schasinglulu  * In case of ARM CSS platforms x1 contains SCP_BL2U image info.
22*91f16700Schasinglulu  * In case of ARM FVP platforms x1 is not used.
23*91f16700Schasinglulu  * In both cases, x0 contains the extents of the memory available to BL2U
24*91f16700Schasinglulu  ******************************************************************************/
25*91f16700Schasinglulu void bl2u_early_platform_setup(meminfo_t *mem_layout, void *plat_info)
26*91f16700Schasinglulu {
27*91f16700Schasinglulu 	if (!plat_info)
28*91f16700Schasinglulu 		panic();
29*91f16700Schasinglulu 
30*91f16700Schasinglulu 	arm_bl2u_early_platform_setup(mem_layout, plat_info);
31*91f16700Schasinglulu 
32*91f16700Schasinglulu 	scp_bl2u_image_info = *(image_info_t *)plat_info;
33*91f16700Schasinglulu }
34*91f16700Schasinglulu 
35*91f16700Schasinglulu /*******************************************************************************
36*91f16700Schasinglulu  * Transfer SCP_BL2U from Trusted RAM using the SCP Download protocol.
37*91f16700Schasinglulu  ******************************************************************************/
38*91f16700Schasinglulu int bl2u_plat_handle_scp_bl2u(void)
39*91f16700Schasinglulu {
40*91f16700Schasinglulu 	int ret;
41*91f16700Schasinglulu 
42*91f16700Schasinglulu 	INFO("BL2U: Initiating SCP_BL2U transfer to SCP\n");
43*91f16700Schasinglulu 
44*91f16700Schasinglulu 	ret = css_scp_boot_image_xfer((void *)scp_bl2u_image_info.image_base,
45*91f16700Schasinglulu 		scp_bl2u_image_info.image_size);
46*91f16700Schasinglulu 
47*91f16700Schasinglulu 	if (ret == 0)
48*91f16700Schasinglulu 		ret = css_scp_boot_ready();
49*91f16700Schasinglulu 
50*91f16700Schasinglulu 	if (ret == 0)
51*91f16700Schasinglulu 		INFO("BL2U: SCP_BL2U transferred to SCP\n");
52*91f16700Schasinglulu 	else
53*91f16700Schasinglulu 		ERROR("BL2U: SCP_BL2U transfer failure\n");
54*91f16700Schasinglulu 
55*91f16700Schasinglulu 	return ret;
56*91f16700Schasinglulu }
57