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