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