1 #ifndef _BFLB_FLASH_H 2 #define _BFLB_FLASH_H 3 4 #include "bflb_core.h" 5 #include "bflb_sflash.h" 6 7 /** @addtogroup LHAL 8 * @{ 9 */ 10 11 /** @addtogroup FLASH 12 * @{ 13 */ 14 15 /** @defgroup FLASH_IOMODE flash iomode definition 16 * @{ 17 */ 18 #define FLASH_IOMODE_NIO 0 /*!< Normal IO mode define */ 19 #define FLASH_IOMODE_DO 1 /*!< Dual Output mode define */ 20 #define FLASH_IOMODE_QO 2 /*!< Quad Output mode define */ 21 #define FLASH_IOMODE_DIO 3 /*!< Dual IO mode define */ 22 #define FLASH_IOMODE_QIO 4 /*!< Quad IO mode define */ 23 /** 24 * @} 25 */ 26 27 /** @defgroup FLASH_AES_KEY_TYPE flash aes key type definition 28 * @{ 29 */ 30 #define FLASH_AES_KEY_128BITS 0 31 #define FLASH_AES_KEY_192BITS 2 32 #define FLASH_AES_KEY_256BITS 1 33 #define FLASH_AES_KEY_DOUBLE_128BITS 3 34 /** 35 * @} 36 */ 37 38 #if defined(BL602) || defined(BL702) || defined(BL702L) 39 #define FLASH_XIP_BASE (0x23000000) 40 #elif defined(BL616) || defined(BL628) 41 #define FLASH_XIP_BASE (0xA0000000) 42 #elif defined(BL808) || defined(BL606P) 43 #define FLASH_XIP_BASE (0x58000000) 44 #endif 45 46 struct bflb_flash_aes_config_s { 47 uint8_t region; 48 uint8_t region_enable; 49 uint8_t lock_enable; 50 const uint8_t *key; 51 uint8_t keybits; 52 uint8_t *iv; 53 uint32_t start_addr; 54 uint32_t end_addr; 55 }; 56 57 #ifdef __cplusplus 58 extern "C" { 59 #endif 60 61 /** 62 * @brief Initialize flash. 63 * 64 * @return Zero on success; a negated errno value on failure 65 */ 66 int bflb_flash_init(void); 67 68 #if defined(BL616) || defined(BL606P) || defined(BL808) 69 /** 70 * @brief flash_set_cmds 71 * 72 * @return None 73 */ 74 void bflb_flash_set_cmds(spi_flash_cfg_type *p_flash_cfg); 75 #endif 76 77 /** 78 * @brief Get flash jedec id. 79 * 80 * @return uint32_t 81 */ 82 uint32_t bflb_flash_get_jedec_id(void); 83 84 /** 85 * @brief Get flash config. 86 * 87 * @param [out] cfg_addr pointer to save config 88 * @param [in] len flash config size 89 */ 90 void bflb_flash_get_cfg(uint8_t **cfg_addr, uint32_t *len); 91 92 /** 93 * @brief Set flash iomode. 94 * 95 * @param [in] iomode flash iomode, use @ref FLASH_IOMODE 96 */ 97 void bflb_flash_set_iomode(uint8_t iomode); 98 99 /** 100 * @brief Get flash image offset. 101 * 102 * @return flash image offset 103 */ 104 uint32_t bflb_flash_get_image_offset(void); 105 106 /** 107 * @brief Erase flash with sectors. 108 * 109 * @param [in] addr 110 * @param [in] len 111 * @return Zero on success; a negated errno value on failure 112 */ 113 int bflb_flash_erase(uint32_t addr, uint32_t len); 114 115 /** 116 * @brief Write data into flash. 117 * 118 * @param [in] addr flash physical address 119 * @param [in] data pointer to data buffer 120 * @param [in] len length of data 121 * @return Zero on success; a negated errno value on failure 122 */ 123 int bflb_flash_write(uint32_t addr, uint8_t *data, uint32_t len); 124 125 /** 126 * @brief Read data from flash. 127 * 128 * @param [in] addr flash physical address 129 * @param [out] data pointer to data buffer 130 * @param [in] len length of data 131 * @return Zero on success; a negated errno value on failure 132 */ 133 int bflb_flash_read(uint32_t addr, uint8_t *data, uint32_t len); 134 135 /** 136 * @brief Config flash cache. 137 * 138 * @param [in] cont_read enable or not continuous read mode. 139 * @param [in] cache_enable enable cache or not 140 * @param [in] cache_way_disable ways of cache to disable 141 * @param [in] flash_offset flash image offset 142 * @return Zero on success; a negated errno value on failure 143 */ 144 int bflb_flash_set_cache(uint8_t cont_read, uint8_t cache_enable, uint8_t cache_way_disable, uint32_t flash_offset); 145 146 /** 147 * @brief Initialize flash aes controller. 148 * 149 * @param [in] config pointer to flash aes config. 150 */ 151 void bflb_flash_aes_init(struct bflb_flash_aes_config_s *config); 152 153 /** 154 * @brief Enable flash decrypt with aes. 155 * 156 */ 157 void bflb_flash_aes_enable(void); 158 159 /** 160 * @brief Disable flash decrypt with aes. 161 * 162 */ 163 void bflb_flash_aes_disable(void); 164 165 #ifdef __cplusplus 166 } 167 #endif 168 169 /** 170 * @} 171 */ 172 173 /** 174 * @} 175 */ 176 177 #endif