xref: /aosp_15_r20/external/arm-trusted-firmware/include/bl1/bl1.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef BL1_H
8*54fd6939SJiyong Park #define BL1_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <common/bl_common.h>
11*54fd6939SJiyong Park 
12*54fd6939SJiyong Park /*
13*54fd6939SJiyong Park  * Defines for BL1 SMC function ids.
14*54fd6939SJiyong Park  */
15*54fd6939SJiyong Park #define BL1_SMC_CALL_COUNT		0x0
16*54fd6939SJiyong Park #define BL1_SMC_UID			0x1
17*54fd6939SJiyong Park /* SMC #0x2 reserved */
18*54fd6939SJiyong Park #define BL1_SMC_VERSION			0x3
19*54fd6939SJiyong Park 
20*54fd6939SJiyong Park /*
21*54fd6939SJiyong Park  * Corresponds to the function ID of the SMC that
22*54fd6939SJiyong Park  * the BL1 exception handler service to execute BL31.
23*54fd6939SJiyong Park  */
24*54fd6939SJiyong Park #define BL1_SMC_RUN_IMAGE		0x4
25*54fd6939SJiyong Park 
26*54fd6939SJiyong Park /*
27*54fd6939SJiyong Park  * BL1 SMC version
28*54fd6939SJiyong Park  */
29*54fd6939SJiyong Park #define BL1_SMC_MAJOR_VER		UL(0x0)
30*54fd6939SJiyong Park #define BL1_SMC_MINOR_VER		UL(0x1)
31*54fd6939SJiyong Park 
32*54fd6939SJiyong Park /*
33*54fd6939SJiyong Park  * Defines for FWU SMC function ids.
34*54fd6939SJiyong Park  */
35*54fd6939SJiyong Park 
36*54fd6939SJiyong Park #define FWU_SMC_IMAGE_COPY		0x10
37*54fd6939SJiyong Park #define FWU_SMC_IMAGE_AUTH		0x11
38*54fd6939SJiyong Park #define FWU_SMC_IMAGE_EXECUTE		0x12
39*54fd6939SJiyong Park #define FWU_SMC_IMAGE_RESUME		0x13
40*54fd6939SJiyong Park #define FWU_SMC_SEC_IMAGE_DONE		0x14
41*54fd6939SJiyong Park #define FWU_SMC_UPDATE_DONE		0x15
42*54fd6939SJiyong Park #define FWU_SMC_IMAGE_RESET		0x16
43*54fd6939SJiyong Park 
44*54fd6939SJiyong Park /*
45*54fd6939SJiyong Park  * Number of FWU calls (above) implemented
46*54fd6939SJiyong Park  */
47*54fd6939SJiyong Park #define FWU_NUM_SMC_CALLS		7
48*54fd6939SJiyong Park 
49*54fd6939SJiyong Park #if TRUSTED_BOARD_BOOT
50*54fd6939SJiyong Park # define BL1_NUM_SMC_CALLS		(FWU_NUM_SMC_CALLS + 4)
51*54fd6939SJiyong Park #else
52*54fd6939SJiyong Park # define BL1_NUM_SMC_CALLS		4
53*54fd6939SJiyong Park #endif
54*54fd6939SJiyong Park 
55*54fd6939SJiyong Park /*
56*54fd6939SJiyong Park  * The macros below are used to identify FWU
57*54fd6939SJiyong Park  * calls from the SMC function ID
58*54fd6939SJiyong Park  */
59*54fd6939SJiyong Park #define FWU_SMC_FID_START		FWU_SMC_IMAGE_COPY
60*54fd6939SJiyong Park #define FWU_SMC_FID_END			FWU_SMC_IMAGE_RESET
61*54fd6939SJiyong Park #define is_fwu_fid(_fid) \
62*54fd6939SJiyong Park     ((_fid >= FWU_SMC_FID_START) && (_fid <= FWU_SMC_FID_END))
63*54fd6939SJiyong Park 
64*54fd6939SJiyong Park #ifndef __ASSEMBLER__
65*54fd6939SJiyong Park 
66*54fd6939SJiyong Park #include <lib/cassert.h>
67*54fd6939SJiyong Park 
68*54fd6939SJiyong Park struct entry_point_info;
69*54fd6939SJiyong Park 
70*54fd6939SJiyong Park u_register_t bl1_smc_wrapper(uint32_t smc_fid,
71*54fd6939SJiyong Park 	void *cookie,
72*54fd6939SJiyong Park 	void *handle,
73*54fd6939SJiyong Park 	unsigned int flags);
74*54fd6939SJiyong Park 
75*54fd6939SJiyong Park u_register_t bl1_smc_handler(unsigned int smc_fid,
76*54fd6939SJiyong Park 	u_register_t x1,
77*54fd6939SJiyong Park 	u_register_t x2,
78*54fd6939SJiyong Park 	u_register_t x3,
79*54fd6939SJiyong Park 	u_register_t x4,
80*54fd6939SJiyong Park 	void *cookie,
81*54fd6939SJiyong Park 	void *handle,
82*54fd6939SJiyong Park 	unsigned int flags);
83*54fd6939SJiyong Park 
84*54fd6939SJiyong Park void bl1_print_next_bl_ep_info(const struct entry_point_info *bl_ep_info);
85*54fd6939SJiyong Park 
86*54fd6939SJiyong Park void bl1_setup(void);
87*54fd6939SJiyong Park void bl1_main(void);
88*54fd6939SJiyong Park void bl1_plat_prepare_exit(entry_point_info_t *ep_info);
89*54fd6939SJiyong Park 
90*54fd6939SJiyong Park /*
91*54fd6939SJiyong Park  * Check if the total number of FWU SMC calls are as expected.
92*54fd6939SJiyong Park  */
93*54fd6939SJiyong Park CASSERT(FWU_NUM_SMC_CALLS == 	\
94*54fd6939SJiyong Park 		(FWU_SMC_FID_END - FWU_SMC_FID_START + 1),\
95*54fd6939SJiyong Park 		assert_FWU_NUM_SMC_CALLS_mismatch);
96*54fd6939SJiyong Park 
97*54fd6939SJiyong Park /* Utility functions */
98*54fd6939SJiyong Park void bl1_calc_bl2_mem_layout(const meminfo_t *bl1_mem_layout,
99*54fd6939SJiyong Park 			meminfo_t *bl2_mem_layout);
100*54fd6939SJiyong Park 
101*54fd6939SJiyong Park #endif /* __ASSEMBLER__ */
102*54fd6939SJiyong Park #endif /* BL1_H */
103