1 /* 2 * Copyright 2021 NXP 3 * 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 #ifndef _API_KB_API_H_ 9 #define _API_KB_API_H_ 10 11 #include "fsl_common.h" 12 13 /******************************************************************************* 14 * Definitions 15 ******************************************************************************/ 16 17 #define kStatusGroup_SBLoader (102U) /*!< SB loader status group number */ 18 19 typedef struct _kb_interface 20 { 21 /*!< Initialize the API. */ 22 status_t (*kb_init)(void); 23 status_t (*kb_deinit)(void); 24 status_t (*kb_execute)(const uint8_t *data, uint32_t dataLength, uint32_t isUpdateExt); 25 } kb_interface_t; 26 27 /*! @brief SB loader status codes.*/ 28 enum 29 { 30 kStatus_RomLdr_SectionOverrun = MAKE_STATUS(kStatusGroup_SBLoader, 0), 31 kStatus_RomLdr_Signature = MAKE_STATUS(kStatusGroup_SBLoader, 1), 32 kStatus_RomLdr_SectionLength = MAKE_STATUS(kStatusGroup_SBLoader, 2), 33 kStatus_RomLdr_UnencryptedOnly = MAKE_STATUS(kStatusGroup_SBLoader, 3), 34 kStatus_RomLdr_EOFReached = MAKE_STATUS(kStatusGroup_SBLoader, 4), 35 kStatus_RomLdr_Checksum = MAKE_STATUS(kStatusGroup_SBLoader, 5), 36 kStatus_RomLdr_Crc32Error = MAKE_STATUS(kStatusGroup_SBLoader, 6), 37 kStatus_RomLdr_UnknownCommand = MAKE_STATUS(kStatusGroup_SBLoader, 7), 38 kStatus_RomLdr_IdNotFound = MAKE_STATUS(kStatusGroup_SBLoader, 8), 39 kStatus_RomLdr_DataUnderrun = MAKE_STATUS(kStatusGroup_SBLoader, 9), 40 kStatus_RomLdr_JumpReturned = MAKE_STATUS(kStatusGroup_SBLoader, 10), 41 kStatus_RomLdr_CallFailed = MAKE_STATUS(kStatusGroup_SBLoader, 11), 42 kStatus_RomLdr_KeyNotFound = MAKE_STATUS(kStatusGroup_SBLoader, 12), 43 kStatus_RomLdr_SecureOnly = MAKE_STATUS(kStatusGroup_SBLoader, 13), 44 kStatus_RomLdr_ResetReturned = MAKE_STATUS(kStatusGroup_SBLoader, 14), 45 46 kStatus_RomLdr_RollbackBlocked = MAKE_STATUS(kStatusGroup_SBLoader, 15), 47 kStatus_RomLdr_InvalidSectionMacCount = MAKE_STATUS(kStatusGroup_SBLoader, 16), 48 kStatus_RomLdr_UnexpectedCommand = MAKE_STATUS(kStatusGroup_SBLoader, 17), 49 kStatus_RomLdr_BadSBKEK = MAKE_STATUS(kStatusGroup_SBLoader, 18), 50 kStatus_RomLdr_PendingJumpCommand = MAKE_STATUS(kStatusGroup_SBLoader, 19), 51 }; 52 53 /******************************************************************************* 54 * API 55 ******************************************************************************/ 56 #if defined(__cplusplus) 57 extern "C" { 58 #endif 59 60 /*! 61 * @brief This API is used to initialize bootloader and nboot context necessary to process sb3 file format. 62 * 63 * @retval #kStatus_Success API was executed successfully. 64 * @retval #kStatus_Fail API execution failed. 65 */ 66 status_t KB_Init(void); 67 68 /*! 69 * @brief This API is used to decrypt sb3 file and store signed image contents specified by loader command supported 70 * while generating sb3 image through Json configuration. If sb3 file to be processed includes sblaoder command 71 * "programFuses" then voltage must be regulated for over-drive and normalize voltage once operation is completed. 72 * 73 * @param data A Pointer to start of sb file data in memory. 74 * @param dataLength sb file data length in bytes. 75 * @param isUpdateExt Indicator for update(sb) file start address is in internal or external flash. 76 * 77 * @retval #kStatus_Success API was executed successfully. 78 * @retval #kStatus_Fail API execution failed. 79 * @retval #kStatus_InvalidArgument An invalid argument is provided. 80 * @retval #kStatus_ROM_LPSPI_Busy LPSPI transfer is busy. 81 * @retval #kStatus_RomLdr_DataUnderrun 82 */ 83 status_t KB_Execute(const uint8_t *data, uint32_t dataLength, uint32_t isUpdateExt); 84 85 /*! 86 * @brief This API is used to release nboot context and finalize sb3 file processing. 87 * 88 * @retval #kStatus_Success API was executed successfully. 89 * @retval #kStatus_Fail API execution failed. 90 */ 91 status_t KB_Deinit(void); 92 93 #if defined(__cplusplus) 94 } 95 #endif 96 97 /*! 98 *@} 99 */ 100 101 #endif /* _API_KB_API_H_ */ 102