1 #ifndef _BFLB_EF_CTRL_H 2 #define _BFLB_EF_CTRL_H 3 4 #include "bflb_core.h" 5 6 #ifdef __cplusplus 7 extern "C" { 8 #endif 9 10 /** @addtogroup LHAL 11 * @{ 12 */ 13 14 /** @addtogroup EF_CTRL 15 * @{ 16 */ 17 18 /** 19 * @brief Efuse common trim config definition 20 */ 21 typedef struct 22 { 23 char *name; /*!< trim anme */ 24 uint16_t en_addr; /*!< enable address */ 25 uint16_t parity_addr; /*!< parity address */ 26 uint16_t value_addr; /*!< value address */ 27 uint16_t value_len; /*!< value length */ 28 } bflb_ef_ctrl_com_trim_cfg_t; 29 30 /** 31 * @brief Efuse common trim type definition 32 */ 33 typedef struct 34 { 35 uint8_t en; /*!< Enable status */ 36 uint8_t parity; /*!< Trim parity */ 37 uint8_t empty; /*!< Trim empty */ 38 uint8_t len; /*!< Trim value len in bit */ 39 uint32_t value; /*!< Trim value */ 40 } bflb_ef_ctrl_com_trim_t; 41 42 /** 43 * @brief Get efuse control common trim list. 44 * 45 * @param [in] trim_list pointer to save trim list 46 * @return trim list length 47 */ 48 uint32_t bflb_ef_ctrl_get_common_trim_list(const bflb_ef_ctrl_com_trim_cfg_t **trim_list); 49 50 /** 51 * @brief 52 * 53 * @param [in] dev device handle 54 * @return int 55 */ 56 int bflb_ef_ctrl_autoload_done(struct bflb_device_s *dev); 57 58 /** 59 * @brief 60 * 61 * @param [in] dev device handle 62 * @param [in] offset 63 * @param [in] pword 64 * @param [in] count 65 * @param [in] program 66 */ 67 void bflb_ef_ctrl_write_direct(struct bflb_device_s *dev, uint32_t offset, uint32_t *pword, uint32_t count, uint8_t program); 68 69 /** 70 * @brief 71 * 72 * @param [in] dev device handle 73 * @param [in] offset 74 * @param [in] pword 75 * @param [in] count 76 * @param [in] reload 77 */ 78 void bflb_ef_ctrl_read_direct(struct bflb_device_s *dev, uint32_t offset, uint32_t *pword, uint32_t count, uint8_t reload); 79 80 /** 81 * @brief 82 * 83 * @param [in] dev device handle 84 * @param [in] name 85 * @param [in] trim 86 * @param [in] reload 87 */ 88 void bflb_ef_ctrl_read_common_trim(struct bflb_device_s *dev, char *name, bflb_ef_ctrl_com_trim_t *trim, uint8_t reload); 89 90 /** 91 * @brief 92 * 93 * @param [in] dev device handle 94 * @param [in] name 95 * @param [in] value 96 * @param [in] program 97 */ 98 void bflb_ef_ctrl_write_common_trim(struct bflb_device_s *dev, char *name, uint32_t value, uint8_t program); 99 100 /** 101 * @brief 102 * 103 * @param [in] val 104 * @param [in] start 105 * @param [in] len 106 * @return uint8_t 107 */ 108 uint8_t bflb_ef_ctrl_is_all_bits_zero(uint32_t val, uint8_t start, uint8_t len); 109 110 /** 111 * @brief 112 * 113 * @param [in] val 114 * @return uint32_t 115 */ 116 uint32_t bflb_ef_ctrl_get_byte_zero_cnt(uint8_t val); 117 118 /** 119 * @brief 120 * 121 * @param [in] val 122 * @param [in] len 123 * @return uint8_t 124 */ 125 uint8_t bflb_ef_ctrl_get_trim_parity(uint32_t val, uint8_t len); 126 127 #ifdef __cplusplus 128 } 129 #endif 130 131 /** 132 * @} 133 */ 134 135 /** 136 * @} 137 */ 138 139 #endif 140