1 /**
2  * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
3  *
4  *  SPDX-License-Identifier: Apache-2.0
5  */
6 #pragma once
7 
8 #include <stdint.h>
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /** Group: PGM Data Register */
14 /** Type of pgm_data0 register
15  *  Register 0 that stores data to be programmed.
16  */
17 typedef union {
18     struct {
19         /** pgm_data_0 : R/W; bitpos: [31:0]; default: 0;
20          *  The content of the 0th 32-bit data to be programmed.
21          */
22         uint32_t pgm_data_0:32;
23     };
24     uint32_t val;
25 } efuse_pgm_data0_reg_t;
26 
27 /** Type of pgm_data1 register
28  *  Register 1 that stores data to be programmed.
29  */
30 typedef union {
31     struct {
32         /** pgm_data_1 : R/W; bitpos: [31:0]; default: 0;
33          *  The content of the 1st 32-bit data to be programmed.
34          */
35         uint32_t pgm_data_1:32;
36     };
37     uint32_t val;
38 } efuse_pgm_data1_reg_t;
39 
40 /** Type of pgm_data2 register
41  *  Register 2 that stores data to be programmed.
42  */
43 typedef union {
44     struct {
45         /** pgm_data_2 : R/W; bitpos: [31:0]; default: 0;
46          *  The content of the 2nd 32-bit data to be programmed.
47          */
48         uint32_t pgm_data_2:32;
49     };
50     uint32_t val;
51 } efuse_pgm_data2_reg_t;
52 
53 /** Type of pgm_data3 register
54  *  Register 3 that stores data to be programmed.
55  */
56 typedef union {
57     struct {
58         /** pgm_data_3 : R/W; bitpos: [31:0]; default: 0;
59          *  The content of the 3rd 32-bit data to be programmed.
60          */
61         uint32_t pgm_data_3:32;
62     };
63     uint32_t val;
64 } efuse_pgm_data3_reg_t;
65 
66 /** Type of pgm_data4 register
67  *  Register 4 that stores data to be programmed.
68  */
69 typedef union {
70     struct {
71         /** pgm_data_4 : R/W; bitpos: [31:0]; default: 0;
72          *  The content of the 4th 32-bit data to be programmed.
73          */
74         uint32_t pgm_data_4:32;
75     };
76     uint32_t val;
77 } efuse_pgm_data4_reg_t;
78 
79 /** Type of pgm_data5 register
80  *  Register 5 that stores data to be programmed.
81  */
82 typedef union {
83     struct {
84         /** pgm_data_5 : R/W; bitpos: [31:0]; default: 0;
85          *  The content of the 5th 32-bit data to be programmed.
86          */
87         uint32_t pgm_data_5:32;
88     };
89     uint32_t val;
90 } efuse_pgm_data5_reg_t;
91 
92 /** Type of pgm_data6 register
93  *  Register 6 that stores data to be programmed.
94  */
95 typedef union {
96     struct {
97         /** pgm_data_6 : R/W; bitpos: [31:0]; default: 0;
98          *  The content of the 6th 32-bit data to be programmed.
99          */
100         uint32_t pgm_data_6:32;
101     };
102     uint32_t val;
103 } efuse_pgm_data6_reg_t;
104 
105 /** Type of pgm_data7 register
106  *  Register 7 that stores data to be programmed.
107  */
108 typedef union {
109     struct {
110         /** pgm_data_7 : R/W; bitpos: [31:0]; default: 0;
111          *  The content of the 7th 32-bit data to be programmed.
112          */
113         uint32_t pgm_data_7:32;
114     };
115     uint32_t val;
116 } efuse_pgm_data7_reg_t;
117 
118 /** Type of pgm_check_value0 register
119  *  Register 0 that stores the RS code to be programmed.
120  */
121 typedef union {
122     struct {
123         /** pgm_rs_data_0 : R/W; bitpos: [31:0]; default: 0;
124          *  The content of the 0th 32-bit RS code to be programmed.
125          */
126         uint32_t pgm_rs_data_0:32;
127     };
128     uint32_t val;
129 } efuse_pgm_check_value0_reg_t;
130 
131 /** Type of pgm_check_value1 register
132  *  Register 1 that stores the RS code to be programmed.
133  */
134 typedef union {
135     struct {
136         /** pgm_rs_data_1 : R/W; bitpos: [31:0]; default: 0;
137          *  The content of the 1st 32-bit RS code to be programmed.
138          */
139         uint32_t pgm_rs_data_1:32;
140     };
141     uint32_t val;
142 } efuse_pgm_check_value1_reg_t;
143 
144 /** Type of pgm_check_value2 register
145  *  Register 2 that stores the RS code to be programmed.
146  */
147 typedef union {
148     struct {
149         /** pgm_rs_data_2 : R/W; bitpos: [31:0]; default: 0;
150          *  The content of the 2nd 32-bit RS code to be programmed.
151          */
152         uint32_t pgm_rs_data_2:32;
153     };
154     uint32_t val;
155 } efuse_pgm_check_value2_reg_t;
156 
157 
158 /** Group: Read Data Register */
159 /** Type of rd_wr_dis register
160  *  BLOCK0 data register 0.
161  */
162 typedef union {
163     struct {
164         /** wr_dis : RO; bitpos: [7:0]; default: 0;
165          *  Disable programming of individual eFuses.
166          */
167         uint32_t wr_dis:8;
168         /** reserved_0_8 : RW; bitpos: [31:8]; default: 0; */
169         uint32_t reserved_0_8:24;
170     };
171     uint32_t val;
172 } efuse_rd_wr_dis_reg_t;
173 
174 /** Type of rd_repeat_data0 register
175  *  BLOCK0 data register 1.
176  */
177 typedef union {
178     struct {
179         /** rd_dis : RO; bitpos: [1:0]; default: 0;
180          *  The bit be set to disable software read high/low 128-bit of BLK3.
181          */
182         uint32_t rd_dis:2;
183         /** wdt_delay_sel : RO; bitpos: [3:2]; default: 0;
184          *  Selects RTC watchdog timeout threshold, in unit of slow clock cycle. 0: 40000. 1:
185          *  80000. 2: 160000. 3:320000.
186          */
187         uint32_t wdt_delay_sel:2;
188         /** dis_pad_jtag : RO; bitpos: [4]; default: 0;
189          *  Set this bit to disable pad jtag.
190          */
191         uint32_t dis_pad_jtag:1;
192         /** dis_download_icache : RO; bitpos: [5]; default: 0;
193          *  The bit be set to disable icache in download mode.
194          */
195         uint32_t dis_download_icache:1;
196         /** dis_download_manual_encrypt : RO; bitpos: [6]; default: 0;
197          *  The bit be set to disable manual encryption.
198          */
199         uint32_t dis_download_manual_encrypt:1;
200         /** spi_boot_crypt_cnt : RO; bitpos: [9:7]; default: 0;
201          *  These bits be set to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even
202          *  number of 1: disable.
203          */
204         uint32_t spi_boot_crypt_cnt:3;
205         /** xts_key_length_256 : RO; bitpos: [10]; default: 0;
206          *  The bit be set means XTS_AES use the whole 256-bit efuse data in BLOCK3. Otherwise,
207          *  XTS_AES use 128-bit eFuse data in BLOCK3.
208          */
209         uint32_t xts_key_length_256:1;
210         /** uart_print_control : RO; bitpos: [12:11]; default: 0;
211          *  Set this bit to disable usb printing.
212          */
213         uint32_t uart_print_control:2;
214         /** force_send_resume : RO; bitpos: [13]; default: 0;
215          *  Set this bit to force ROM code to send a resume command during SPI boot.
216          */
217         uint32_t force_send_resume:1;
218         /** dis_download_mode : RO; bitpos: [14]; default: 0;
219          *  Set this bit to disable download mode (boot_mode[3:0] = 0, 1, 2, 4, 5, 6, 7).
220          */
221         uint32_t dis_download_mode:1;
222         /** dis_direct_boot : RO; bitpos: [15]; default: 0;
223          *  This bit set means disable direct_boot mode.
224          */
225         uint32_t dis_direct_boot:1;
226         /** enable_security_download : RO; bitpos: [16]; default: 0;
227          *  Set this bit to enable secure UART download mode.
228          */
229         uint32_t enable_security_download:1;
230         /** flash_tpuw : RO; bitpos: [20:17]; default: 0;
231          *  Configures flash waiting time after power-up, in unit of ms. If the value is less
232          *  than 15, the waiting time is the configurable value.  Otherwise, the waiting time
233          *  is twice the configurable value.
234          */
235         uint32_t flash_tpuw:4;
236         /** secure_boot_en : RO; bitpos: [21]; default: 0;
237          *  The bit be set to enable secure boot.
238          */
239         uint32_t secure_boot_en:1;
240         /** secure_version : R; bitpos: [25:22]; default: 0;
241          *  Secure version for anti-rollback
242          */
243         uint32_t secure_version:4;
244         /** custom_mac_used : R; bitpos: [26]; default: 0;
245          *  True if MAC_CUSTOM is burned
246          */
247         uint32_t custom_mac_used:1;
248         /** disable_wafer_version_major : R; bitpos: [27]; default: 0;
249          *  Disables check of wafer version major
250          */
251         uint32_t disable_wafer_version_major:1;
252         /** disable_blk_version_major : R; bitpos: [28]; default: 0;
253          *  Disables check of blk version major
254          */
255         uint32_t disable_blk_version_major:1;
256         /** reserved_0_61 : R; bitpos: [31:29]; default: 0;
257          *  reserved
258          */
259         uint32_t reserved_0_61:3;
260     };
261     uint32_t val;
262 } efuse_rd_repeat_data0_reg_t;
263 
264 /** Type of rd_blk1_data0 register
265  *  BLOCK1 data register 0.
266  */
267 typedef union {
268     struct {
269         /** custom_mac : R; bitpos: [31:0]; default: 0;
270          *  Custom MAC address
271          */
272         uint32_t custom_mac:32;
273     };
274     uint32_t val;
275 } efuse_rd_blk1_data0_reg_t;
276 
277 /** Type of rd_blk1_data1 register
278  *  BLOCK1 data register 1.
279  */
280 typedef union {
281     struct {
282         /** custom_mac_1 : R; bitpos: [15:0]; default: 0;
283          *  Custom MAC address
284          */
285         uint32_t custom_mac_1:16;
286         /** reserved_1_48 : R; bitpos: [31:16]; default: 0;
287          *  reserved
288          */
289         uint32_t reserved_1_48:16;
290     };
291     uint32_t val;
292 } efuse_rd_blk1_data1_reg_t;
293 
294 /** Type of rd_blk1_data2 register
295  *  BLOCK1 data register 2.
296  */
297 typedef union {
298     struct {
299         /** system_data2 : RO; bitpos: [23:0]; default: 0;
300          *  Stores the bits [64:87] of system data.
301          */
302         uint32_t system_data2:24;
303         uint32_t reserved_24:8;
304     };
305     uint32_t val;
306 } efuse_rd_blk1_data2_reg_t;
307 
308 /** Type of rd_blk2_data0 register
309  *  Register 0 of BLOCK2.
310  */
311 typedef union {
312     struct {
313         /** mac : R; bitpos: [31:0]; default: 0;
314          *  MAC address
315          */
316         uint32_t mac:32;
317     };
318     uint32_t val;
319 } efuse_rd_blk2_data0_reg_t;
320 
321 /** Type of rd_blk2_data1 register
322  *  Register 1 of BLOCK2.
323  */
324 typedef union {
325     struct {
326         /** mac_1 : R; bitpos: [15:0]; default: 0;
327          *  MAC address
328          */
329         uint32_t mac_1:16;
330         /** wafer_version_minor : R; bitpos: [19:16]; default: 0;
331          *  WAFER_VERSION_MINOR
332          */
333         uint32_t wafer_version_minor:4;
334         /** wafer_version_major : R; bitpos: [21:20]; default: 0;
335          *  WAFER_VERSION_MAJOR
336          */
337         uint32_t wafer_version_major:2;
338         /** pkg_version : R; bitpos: [24:22]; default: 0;
339          *  EFUSE_PKG_VERSION
340          */
341         uint32_t pkg_version:3;
342         /** blk_version_minor : R; bitpos: [27:25]; default: 0;
343          *  Minor version of BLOCK2
344          */
345         uint32_t blk_version_minor:3;
346         /** blk_version_major : R; bitpos: [29:28]; default: 0;
347          *  Major version of BLOCK2
348          */
349         uint32_t blk_version_major:2;
350         /** ocode : R; bitpos: [31:30]; default: 0;
351          *  OCode
352          */
353         uint32_t ocode:2;
354     };
355     uint32_t val;
356 } efuse_rd_blk2_data1_reg_t;
357 
358 /** Type of rd_blk2_data2 register
359  *  Register 2 of BLOCK2.
360  */
361 typedef union {
362     struct {
363         /** ocode_1 : R; bitpos: [4:0]; default: 0;
364          *  OCode
365          */
366         uint32_t ocode_1:5;
367         /** temp_calib : R; bitpos: [13:5]; default: 0;
368          *  Temperature calibration data
369          */
370         uint32_t temp_calib:9;
371         /** adc1_init_code_atten0 : R; bitpos: [21:14]; default: 0;
372          *  ADC1 init code at atten0
373          */
374         uint32_t adc1_init_code_atten0:8;
375         /** adc1_init_code_atten3 : R; bitpos: [26:22]; default: 0;
376          *  ADC1 init code at atten3
377          */
378         uint32_t adc1_init_code_atten3:5;
379         /** adc1_cal_vol_atten0 : R; bitpos: [31:27]; default: 0;
380          *  ADC1 calibration voltage at atten0
381          */
382         uint32_t adc1_cal_vol_atten0:5;
383     };
384     uint32_t val;
385 } efuse_rd_blk2_data2_reg_t;
386 
387 /** Type of rd_blk2_data3 register
388  *  Register 3 of BLOCK2.
389  */
390 typedef union {
391     struct {
392         /** adc1_cal_vol_atten0_1 : R; bitpos: [2:0]; default: 0;
393          *  ADC1 calibration voltage at atten0
394          */
395         uint32_t adc1_cal_vol_atten0_1:3;
396         /** adc1_cal_vol_atten3 : R; bitpos: [8:3]; default: 0;
397          *  ADC1 calibration voltage at atten3
398          */
399         uint32_t adc1_cal_vol_atten3:6;
400         /** dig_dbias_hvt : R; bitpos: [13:9]; default: 0;
401          *  BLOCK2 digital dbias when hvt
402          */
403         uint32_t dig_dbias_hvt:5;
404         /** dig_ldo_slp_dbias2 : R; bitpos: [20:14]; default: 0;
405          *  BLOCK2 DIG_LDO_DBG0_DBIAS2
406          */
407         uint32_t dig_ldo_slp_dbias2:7;
408         /** dig_ldo_slp_dbias26 : R; bitpos: [28:21]; default: 0;
409          *  BLOCK2 DIG_LDO_DBG0_DBIAS26
410          */
411         uint32_t dig_ldo_slp_dbias26:8;
412         /** dig_ldo_act_dbias26 : R; bitpos: [31:29]; default: 0;
413          *  BLOCK2 DIG_LDO_ACT_DBIAS26
414          */
415         uint32_t dig_ldo_act_dbias26:3;
416     };
417     uint32_t val;
418 } efuse_rd_blk2_data3_reg_t;
419 
420 /** Type of rd_blk2_data4 register
421  *  Register 4 of BLOCK2.
422  */
423 typedef union {
424     struct {
425         /** dig_ldo_act_dbias26_1 : R; bitpos: [2:0]; default: 0;
426          *  BLOCK2 DIG_LDO_ACT_DBIAS26
427          */
428         uint32_t dig_ldo_act_dbias26_1:3;
429         /** dig_ldo_act_stepd10 : R; bitpos: [6:3]; default: 0;
430          *  BLOCK2 DIG_LDO_ACT_STEPD10
431          */
432         uint32_t dig_ldo_act_stepd10:4;
433         /** rtc_ldo_slp_dbias13 : R; bitpos: [13:7]; default: 0;
434          *  BLOCK2 DIG_LDO_SLP_DBIAS13
435          */
436         uint32_t rtc_ldo_slp_dbias13:7;
437         /** rtc_ldo_slp_dbias29 : R; bitpos: [22:14]; default: 0;
438          *  BLOCK2 DIG_LDO_SLP_DBIAS29
439          */
440         uint32_t rtc_ldo_slp_dbias29:9;
441         /** rtc_ldo_slp_dbias31 : R; bitpos: [28:23]; default: 0;
442          *  BLOCK2 DIG_LDO_SLP_DBIAS31
443          */
444         uint32_t rtc_ldo_slp_dbias31:6;
445         /** rtc_ldo_act_dbias31 : R; bitpos: [31:29]; default: 0;
446          *  BLOCK2 DIG_LDO_ACT_DBIAS31
447          */
448         uint32_t rtc_ldo_act_dbias31:3;
449     };
450     uint32_t val;
451 } efuse_rd_blk2_data4_reg_t;
452 
453 /** Type of rd_blk2_data5 register
454  *  Register 5 of BLOCK2.
455  */
456 typedef union {
457     struct {
458         /** rtc_ldo_act_dbias31_1 : R; bitpos: [2:0]; default: 0;
459          *  BLOCK2 DIG_LDO_ACT_DBIAS31
460          */
461         uint32_t rtc_ldo_act_dbias31_1:3;
462         /** rtc_ldo_act_dbias13 : R; bitpos: [10:3]; default: 0;
463          *  BLOCK2 DIG_LDO_ACT_DBIAS13
464          */
465         uint32_t rtc_ldo_act_dbias13:8;
466         /** reserved_2_171 : R; bitpos: [31:11]; default: 0;
467          *  reserved
468          */
469         uint32_t reserved_2_171:21;
470     };
471     uint32_t val;
472 } efuse_rd_blk2_data5_reg_t;
473 
474 /** Type of rd_blk2_data6 register
475  *  Register 6 of BLOCK2.
476  */
477 typedef union {
478     struct {
479         /** adc_calibration_3 : RO; bitpos: [10:0]; default: 0;
480          *  Store the bit [86:96] of ADC calibration data.
481          */
482         uint32_t adc_calibration_3:11;
483         /** blk2_reserved_data_0 : RO; bitpos: [31:11]; default: 0;
484          *  Store the bit [0:20] of block2 reserved data.
485          */
486         uint32_t blk2_reserved_data_0:21;
487     };
488     uint32_t val;
489 } efuse_rd_blk2_data6_reg_t;
490 
491 /** Type of rd_blk2_data7 register
492  *  Register 7 of BLOCK2.
493  */
494 typedef union {
495     struct {
496         /** blk2_reserved_data_1 : RO; bitpos: [31:0]; default: 0;
497          *  Store the bit [21:52] of block2 reserved data.
498          */
499         uint32_t blk2_reserved_data_1:32;
500     };
501     uint32_t val;
502 } efuse_rd_blk2_data7_reg_t;
503 
504 /** Type of rd_blk3_data0 register
505  *  Register 0 of BLOCK3.
506  */
507 typedef union {
508     struct {
509         /** blk3_data0 : RO; bitpos: [31:0]; default: 0;
510          *  Store the first 32-bit of Block3.
511          */
512         uint32_t blk3_data0:32;
513     };
514     uint32_t val;
515 } efuse_rd_blk3_data0_reg_t;
516 
517 /** Type of rd_blk3_data1 register
518  *  Register 1 of BLOCK3.
519  */
520 typedef union {
521     struct {
522         /** blk3_data1 : RO; bitpos: [31:0]; default: 0;
523          *  Store the second 32-bit of Block3.
524          */
525         uint32_t blk3_data1:32;
526     };
527     uint32_t val;
528 } efuse_rd_blk3_data1_reg_t;
529 
530 /** Type of rd_blk3_data2 register
531  *  Register 2 of BLOCK3.
532  */
533 typedef union {
534     struct {
535         /** blk3_data2 : RO; bitpos: [31:0]; default: 0;
536          *  Store the third 32-bit of Block3.
537          */
538         uint32_t blk3_data2:32;
539     };
540     uint32_t val;
541 } efuse_rd_blk3_data2_reg_t;
542 
543 /** Type of rd_blk3_data3 register
544  *  Register 3 of BLOCK3.
545  */
546 typedef union {
547     struct {
548         /** blk3_data3 : RO; bitpos: [31:0]; default: 0;
549          *  Store the fourth 32-bit of Block3.
550          */
551         uint32_t blk3_data3:32;
552     };
553     uint32_t val;
554 } efuse_rd_blk3_data3_reg_t;
555 
556 /** Type of rd_blk3_data4 register
557  *  Register 4 of BLOCK3.
558  */
559 typedef union {
560     struct {
561         /** blk3_data4 : RO; bitpos: [31:0]; default: 0;
562          *  Store the fifth 32-bit of Block3.
563          */
564         uint32_t blk3_data4:32;
565     };
566     uint32_t val;
567 } efuse_rd_blk3_data4_reg_t;
568 
569 /** Type of rd_blk3_data5 register
570  *  Register 5 of BLOCK3.
571  */
572 typedef union {
573     struct {
574         /** blk3_data5 : RO; bitpos: [31:0]; default: 0;
575          *  Store the sixth 32-bit of Block3.
576          */
577         uint32_t blk3_data5:32;
578     };
579     uint32_t val;
580 } efuse_rd_blk3_data5_reg_t;
581 
582 /** Type of rd_blk3_data6 register
583  *  Register 6 of BLOCK3.
584  */
585 typedef union {
586     struct {
587         /** blk3_data6 : RO; bitpos: [31:0]; default: 0;
588          *  Store the seventh 32-bit of Block3.
589          */
590         uint32_t blk3_data6:32;
591     };
592     uint32_t val;
593 } efuse_rd_blk3_data6_reg_t;
594 
595 /** Type of rd_blk3_data7 register
596  *  Register 7 of BLOCK3.
597  */
598 typedef union {
599     struct {
600         /** blk3_data7 : RO; bitpos: [31:0]; default: 0;
601          *  Store the eighth 32-bit of Block3.
602          */
603         uint32_t blk3_data7:32;
604     };
605     uint32_t val;
606 } efuse_rd_blk3_data7_reg_t;
607 
608 
609 /** Group: Report Register */
610 /** Type of rd_repeat_err register
611  *  Programming error record register 0 of BLOCK0.
612  */
613 typedef union {
614     struct {
615         /** rd_dis_err : RO; bitpos: [1:0]; default: 0;
616          *  If any bit in RD_DIS is 1, then it indicates a programming error.
617          */
618         uint32_t rd_dis_err:2;
619         /** wdt_delay_sel_err : RO; bitpos: [3:2]; default: 0;
620          *  If any bit in WDT_DELAY_SEL is 1, then it indicates a programming error.
621          */
622         uint32_t wdt_delay_sel_err:2;
623         /** dis_pad_jtag_err : RO; bitpos: [4]; default: 0;
624          *  If any bit in DIS_PAD_JTAG is 1, then it indicates a programming error.
625          */
626         uint32_t dis_pad_jtag_err:1;
627         /** dis_download_icache_err : RO; bitpos: [5]; default: 0;
628          *  If any bit in this filed is 1, then it indicates a programming error.
629          */
630         uint32_t dis_download_icache_err:1;
631         /** dis_download_manual_encrypt_err : RO; bitpos: [6]; default: 0;
632          *  If any bit in DIS_DOWNLOAD_MANUAL_ENCRYPT is 1, then it indicates a programming
633          *  error.
634          */
635         uint32_t dis_download_manual_encrypt_err:1;
636         /** spi_boot_encrypt_decrypt_cnt_err : RO; bitpos: [9:7]; default: 0;
637          *  If any bit in SPI_BOOT_ENCRYPT_DECRYPT_CNT is 1, then it indicates a programming
638          *  error.
639          */
640         uint32_t spi_boot_encrypt_decrypt_cnt_err:3;
641         /** xts_key_length_256_err : RO; bitpos: [10]; default: 0;
642          *  If any bit in XTS_KEY_LENGTH_256 is 1, then it indicates a programming error.
643          */
644         uint32_t xts_key_length_256_err:1;
645         /** uart_print_control_err : RO; bitpos: [12:11]; default: 0;
646          *  If any bit in UART_PRINT_CONTROL is 1, then it indicates a programming error.
647          */
648         uint32_t uart_print_control_err:2;
649         /** force_send_resume_err : RO; bitpos: [13]; default: 0;
650          *  If any bit in FORCE_SEND_RESUME is 1, then it indicates a programming error.
651          */
652         uint32_t force_send_resume_err:1;
653         /** dis_download_mode_err : RO; bitpos: [14]; default: 0;
654          *  If any bit in this filed is 1, then it indicates a programming error.
655          */
656         uint32_t dis_download_mode_err:1;
657         /** dis_direct_boot_err : RO; bitpos: [15]; default: 0;
658          *  If any bit in this filed is 1, then it indicates a programming error.
659          */
660         uint32_t dis_direct_boot_err:1;
661         /** enable_security_download_err : RO; bitpos: [16]; default: 0;
662          *  If any bit in this filed is 1, then it indicates a programming error.
663          */
664         uint32_t enable_security_download_err:1;
665         /** flash_tpuw_err : RO; bitpos: [20:17]; default: 0;
666          *  If any bit in this filed is 1, then it indicates a programming error.
667          */
668         uint32_t flash_tpuw_err:4;
669         /** secure_boot_en_err : RO; bitpos: [21]; default: 0;
670          *  If any bit in this filed is 1, then it indicates a programming error.
671          */
672         uint32_t secure_boot_en_err:1;
673         /** rpt4_reserved_err : RO; bitpos: [31:22]; default: 0;
674          *  Reserved.
675          */
676         uint32_t rpt4_reserved_err:10;
677     };
678     uint32_t val;
679 } efuse_rd_repeat_err_reg_t;
680 
681 /** Type of rd_rs_err register
682  *  Programming error record register 0 of BLOCK1-10.
683  */
684 typedef union {
685     struct {
686         /** blk1_err_num : RO; bitpos: [2:0]; default: 0;
687          *  The value of this signal means the number of error bytes in block1.
688          */
689         uint32_t blk1_err_num:3;
690         /** blk1_fail : RO; bitpos: [3]; default: 0;
691          *  0: Means no failure and that the data of block1 is reliable 1: Means that
692          *  programming user data failed and the number of error bytes is over 6.
693          */
694         uint32_t blk1_fail:1;
695         /** blk2_err_num : RO; bitpos: [6:4]; default: 0;
696          *  The value of this signal means the number of error bytes in block2.
697          */
698         uint32_t blk2_err_num:3;
699         /** blk2_fail : RO; bitpos: [7]; default: 0;
700          *  0: Means no failure and that the data of block2 is reliable 1: Means that
701          *  programming user data failed and the number of error bytes is over 6.
702          */
703         uint32_t blk2_fail:1;
704         /** blk3_err_num : RO; bitpos: [10:8]; default: 0;
705          *  The value of this signal means the number of error bytes in block3.
706          */
707         uint32_t blk3_err_num:3;
708         /** blk3_fail : RO; bitpos: [11]; default: 0;
709          *  0: Means no failure and that the block3 data is reliable 1: Means that programming
710          *  user data failed and the number of error bytes is over 6.
711          */
712         uint32_t blk3_fail:1;
713         uint32_t reserved_12:20;
714     };
715     uint32_t val;
716 } efuse_rd_rs_err_reg_t;
717 
718 
719 /** Group: Configuration Register */
720 /** Type of clk register
721  *  eFuse clcok configuration register.
722  */
723 typedef union {
724     struct {
725         /** efuse_mem_force_pd : R/W; bitpos: [0]; default: 0;
726          *  Set this bit to force eFuse SRAM into power-saving mode.
727          */
728         uint32_t efuse_mem_force_pd:1;
729         /** mem_clk_force_on : R/W; bitpos: [1]; default: 1;
730          *  Set this bit and force to activate clock signal of eFuse SRAM.
731          */
732         uint32_t mem_clk_force_on:1;
733         /** efuse_mem_force_pu : R/W; bitpos: [2]; default: 0;
734          *  Set this bit to force eFuse SRAM into working mode.
735          */
736         uint32_t efuse_mem_force_pu:1;
737         uint32_t reserved_3:13;
738         /** clk_en : R/W; bitpos: [16]; default: 0;
739          *  Set this bit and force to enable clock signal of eFuse memory.
740          */
741         uint32_t clk_en:1;
742         uint32_t reserved_17:15;
743     };
744     uint32_t val;
745 } efuse_clk_reg_t;
746 
747 /** Type of conf register
748  *  eFuse operation mode configuraiton register
749  */
750 typedef union {
751     struct {
752         /** op_code : R/W; bitpos: [15:0]; default: 0;
753          *  0x5A5A: Operate programming command 0x5AA5: Operate read command.
754          */
755         uint32_t op_code:16;
756         uint32_t reserved_16:16;
757     };
758     uint32_t val;
759 } efuse_conf_reg_t;
760 
761 /** Type of cmd register
762  *  eFuse command register.
763  */
764 typedef union {
765     struct {
766         /** read_cmd : R/W/SC; bitpos: [0]; default: 0;
767          *  Set this bit to send read command.
768          */
769         uint32_t read_cmd:1;
770         /** pgm_cmd : R/W/SC; bitpos: [1]; default: 0;
771          *  Set this bit to send programming command.
772          */
773         uint32_t pgm_cmd:1;
774         /** blk_num : R/W; bitpos: [3:2]; default: 0;
775          *  The serial number of the block to be programmed. Value 0-3 corresponds to block
776          *  number 0-3, respectively.
777          */
778         uint32_t blk_num:2;
779         uint32_t reserved_4:28;
780     };
781     uint32_t val;
782 } efuse_cmd_reg_t;
783 
784 /** Type of dac_conf register
785  *  Controls the eFuse programming voltage.
786  */
787 typedef union {
788     struct {
789         /** dac_clk_div : R/W; bitpos: [7:0]; default: 28;
790          *  Controls the division factor of the rising clock of the programming voltage.
791          */
792         uint32_t dac_clk_div:8;
793         /** dac_clk_pad_sel : R/W; bitpos: [8]; default: 0;
794          *  Don't care.
795          */
796         uint32_t dac_clk_pad_sel:1;
797         /** dac_num : R/W; bitpos: [16:9]; default: 255;
798          *  Controls the rising period of the programming voltage.
799          */
800         uint32_t dac_num:8;
801         /** oe_clr : R/W; bitpos: [17]; default: 0;
802          *  Reduces the power supply of the programming voltage.
803          */
804         uint32_t oe_clr:1;
805         uint32_t reserved_18:14;
806     };
807     uint32_t val;
808 } efuse_dac_conf_reg_t;
809 
810 /** Type of rd_tim_conf register
811  *  Configures read timing parameters.
812  */
813 typedef union {
814     struct {
815         /** thr_a : R/W; bitpos: [7:0]; default: 1;
816          *  Configures hold time for efuse read.
817          */
818         uint32_t thr_a:8;
819         /** trd : R/W; bitpos: [15:8]; default: 2;
820          *  Configures pulse time for efuse read.
821          */
822         uint32_t trd:8;
823         /** tsur_a : R/W; bitpos: [23:16]; default: 1;
824          *  Configures setup time for efuse read.
825          */
826         uint32_t tsur_a:8;
827         /** read_init_num : R/W; bitpos: [31:24]; default: 18;
828          *  Configures the initial read time of eFuse.
829          */
830         uint32_t read_init_num:8;
831     };
832     uint32_t val;
833 } efuse_rd_tim_conf_reg_t;
834 
835 /** Type of wr_tim_conf0 register
836  *  Configurarion register 0 of eFuse programming timing parameters.
837  */
838 typedef union {
839     struct {
840         /** thp_a : R/W; bitpos: [7:0]; default: 1;
841          *  Configures hold time for efuse program.
842          */
843         uint32_t thp_a:8;
844         /** tpgm_inactive : R/W; bitpos: [15:8]; default: 1;
845          *  Configures pulse time for burning '0' bit.
846          */
847         uint32_t tpgm_inactive:8;
848         /** tpgm : R/W; bitpos: [31:16]; default: 200;
849          *  Configures pulse time for burning '1' bit.
850          */
851         uint32_t tpgm:16;
852     };
853     uint32_t val;
854 } efuse_wr_tim_conf0_reg_t;
855 
856 /** Type of wr_tim_conf1 register
857  *  Configurarion register 1 of eFuse programming timing parameters.
858  */
859 typedef union {
860     struct {
861         /** tsup_a : R/W; bitpos: [7:0]; default: 1;
862          *  Configures setup time for efuse program.
863          */
864         uint32_t tsup_a:8;
865         /** pwr_on_num : R/W; bitpos: [23:8]; default: 12288;
866          *  Configures the power up time for VDDQ.
867          */
868         uint32_t pwr_on_num:16;
869         uint32_t reserved_24:8;
870     };
871     uint32_t val;
872 } efuse_wr_tim_conf1_reg_t;
873 
874 /** Type of wr_tim_conf2 register
875  *  Configurarion register 2 of eFuse programming timing parameters.
876  */
877 typedef union {
878     struct {
879         /** pwr_off_num : R/W; bitpos: [15:0]; default: 400;
880          *  Configures the power outage time for VDDQ.
881          */
882         uint32_t pwr_off_num:16;
883         uint32_t reserved_16:16;
884     };
885     uint32_t val;
886 } efuse_wr_tim_conf2_reg_t;
887 
888 
889 /** Group: Status Register */
890 /** Type of status register
891  *  eFuse status register.
892  */
893 typedef union {
894     struct {
895         /** state : RO; bitpos: [3:0]; default: 0;
896          *  Indicates the state of the eFuse state machine.
897          */
898         uint32_t state:4;
899         /** otp_load_sw : RO; bitpos: [4]; default: 0;
900          *  The value of OTP_LOAD_SW.
901          */
902         uint32_t otp_load_sw:1;
903         /** otp_vddq_c_sync2 : RO; bitpos: [5]; default: 0;
904          *  The value of OTP_VDDQ_C_SYNC2.
905          */
906         uint32_t otp_vddq_c_sync2:1;
907         /** otp_strobe_sw : RO; bitpos: [6]; default: 0;
908          *  The value of OTP_STROBE_SW.
909          */
910         uint32_t otp_strobe_sw:1;
911         /** otp_csb_sw : RO; bitpos: [7]; default: 0;
912          *  The value of OTP_CSB_SW.
913          */
914         uint32_t otp_csb_sw:1;
915         /** otp_pgenb_sw : RO; bitpos: [8]; default: 0;
916          *  The value of OTP_PGENB_SW.
917          */
918         uint32_t otp_pgenb_sw:1;
919         /** otp_vddq_is_sw : RO; bitpos: [9]; default: 0;
920          *  The value of OTP_VDDQ_IS_SW.
921          */
922         uint32_t otp_vddq_is_sw:1;
923         /** blk0_valid_bit_cnt : RO; bitpos: [15:10]; default: 0;
924          *  Record the number of bit '1' in BLOCK0.
925          */
926         uint32_t blk0_valid_bit_cnt:6;
927         uint32_t reserved_16:16;
928     };
929     uint32_t val;
930 } efuse_status_reg_t;
931 
932 
933 /** Group: Interrupt Register */
934 /** Type of int_raw register
935  *  eFuse raw interrupt register.
936  */
937 typedef union {
938     struct {
939         /** read_done_int_raw : R/WTC/SS; bitpos: [0]; default: 0;
940          *  The raw bit signal for read_done interrupt.
941          */
942         uint32_t read_done_int_raw:1;
943         /** pgm_done_int_raw : R/WTC/SS; bitpos: [1]; default: 0;
944          *  The raw bit signal for pgm_done interrupt.
945          */
946         uint32_t pgm_done_int_raw:1;
947         uint32_t reserved_2:30;
948     };
949     uint32_t val;
950 } efuse_int_raw_reg_t;
951 
952 /** Type of int_st register
953  *  eFuse interrupt status register.
954  */
955 typedef union {
956     struct {
957         /** read_done_int_st : RO; bitpos: [0]; default: 0;
958          *  The status signal for read_done interrupt.
959          */
960         uint32_t read_done_int_st:1;
961         /** pgm_done_int_st : RO; bitpos: [1]; default: 0;
962          *  The status signal for pgm_done interrupt.
963          */
964         uint32_t pgm_done_int_st:1;
965         uint32_t reserved_2:30;
966     };
967     uint32_t val;
968 } efuse_int_st_reg_t;
969 
970 /** Type of int_ena register
971  *  eFuse interrupt enable register.
972  */
973 typedef union {
974     struct {
975         /** read_done_int_ena : R/W; bitpos: [0]; default: 0;
976          *  The enable signal for read_done interrupt.
977          */
978         uint32_t read_done_int_ena:1;
979         /** pgm_done_int_ena : R/W; bitpos: [1]; default: 0;
980          *  The enable signal for pgm_done interrupt.
981          */
982         uint32_t pgm_done_int_ena:1;
983         uint32_t reserved_2:30;
984     };
985     uint32_t val;
986 } efuse_int_ena_reg_t;
987 
988 /** Type of int_clr register
989  *  eFuse interrupt clear register.
990  */
991 typedef union {
992     struct {
993         /** read_done_int_clr : WT; bitpos: [0]; default: 0;
994          *  The clear signal for read_done interrupt.
995          */
996         uint32_t read_done_int_clr:1;
997         /** pgm_done_int_clr : WT; bitpos: [1]; default: 0;
998          *  The clear signal for pgm_done interrupt.
999          */
1000         uint32_t pgm_done_int_clr:1;
1001         uint32_t reserved_2:30;
1002     };
1003     uint32_t val;
1004 } efuse_int_clr_reg_t;
1005 
1006 
1007 /** Group: Version Register */
1008 /** Type of date register
1009  *  eFuse version register.
1010  */
1011 typedef union {
1012     struct {
1013         /** date : R/W; bitpos: [27:0]; default: 34636176;
1014          *  Stores eFuse version.
1015          */
1016         uint32_t date:28;
1017         uint32_t reserved_28:4;
1018     };
1019     uint32_t val;
1020 } efuse_date_reg_t;
1021 
1022 
1023 typedef struct {
1024     volatile efuse_pgm_data0_reg_t pgm_data0;
1025     volatile efuse_pgm_data1_reg_t pgm_data1;
1026     volatile efuse_pgm_data2_reg_t pgm_data2;
1027     volatile efuse_pgm_data3_reg_t pgm_data3;
1028     volatile efuse_pgm_data4_reg_t pgm_data4;
1029     volatile efuse_pgm_data5_reg_t pgm_data5;
1030     volatile efuse_pgm_data6_reg_t pgm_data6;
1031     volatile efuse_pgm_data7_reg_t pgm_data7;
1032     volatile efuse_pgm_check_value0_reg_t pgm_check_value0;
1033     volatile efuse_pgm_check_value1_reg_t pgm_check_value1;
1034     volatile efuse_pgm_check_value2_reg_t pgm_check_value2;
1035     volatile efuse_rd_wr_dis_reg_t rd_wr_dis;
1036     volatile efuse_rd_repeat_data0_reg_t rd_repeat_data0;
1037     volatile efuse_rd_blk1_data0_reg_t rd_blk1_data0;
1038     volatile efuse_rd_blk1_data1_reg_t rd_blk1_data1;
1039     volatile efuse_rd_blk1_data2_reg_t rd_blk1_data2;
1040     volatile efuse_rd_blk2_data0_reg_t rd_blk2_data0;
1041     volatile efuse_rd_blk2_data1_reg_t rd_blk2_data1;
1042     volatile efuse_rd_blk2_data2_reg_t rd_blk2_data2;
1043     volatile efuse_rd_blk2_data3_reg_t rd_blk2_data3;
1044     volatile efuse_rd_blk2_data4_reg_t rd_blk2_data4;
1045     volatile efuse_rd_blk2_data5_reg_t rd_blk2_data5;
1046     volatile efuse_rd_blk2_data6_reg_t rd_blk2_data6;
1047     volatile efuse_rd_blk2_data7_reg_t rd_blk2_data7;
1048     volatile efuse_rd_blk3_data0_reg_t rd_blk3_data0;
1049     volatile efuse_rd_blk3_data1_reg_t rd_blk3_data1;
1050     volatile efuse_rd_blk3_data2_reg_t rd_blk3_data2;
1051     volatile efuse_rd_blk3_data3_reg_t rd_blk3_data3;
1052     volatile efuse_rd_blk3_data4_reg_t rd_blk3_data4;
1053     volatile efuse_rd_blk3_data5_reg_t rd_blk3_data5;
1054     volatile efuse_rd_blk3_data6_reg_t rd_blk3_data6;
1055     volatile efuse_rd_blk3_data7_reg_t rd_blk3_data7;
1056     volatile efuse_rd_repeat_err_reg_t rd_repeat_err;
1057     volatile efuse_rd_rs_err_reg_t rd_rs_err;
1058     volatile efuse_clk_reg_t clk;
1059     volatile efuse_conf_reg_t conf;
1060     volatile efuse_status_reg_t status;
1061     volatile efuse_cmd_reg_t cmd;
1062     volatile efuse_int_raw_reg_t int_raw;
1063     volatile efuse_int_st_reg_t int_st;
1064     uint32_t reserved_0a0[24];
1065     volatile efuse_int_ena_reg_t int_ena;
1066     volatile efuse_int_clr_reg_t int_clr;
1067     volatile efuse_dac_conf_reg_t dac_conf;
1068     volatile efuse_rd_tim_conf_reg_t rd_tim_conf;
1069     volatile efuse_wr_tim_conf0_reg_t wr_tim_conf0;
1070     volatile efuse_wr_tim_conf1_reg_t wr_tim_conf1;
1071     volatile efuse_wr_tim_conf2_reg_t wr_tim_conf2;
1072     uint32_t reserved_11c[56];
1073     volatile efuse_date_reg_t date;
1074 } efuse_dev_t;
1075 
1076 extern efuse_dev_t EFUSE;
1077 
1078 #ifndef __cplusplus
1079 _Static_assert(sizeof(efuse_dev_t) == 0x200, "Invalid size of efuse_dev_t structure");
1080 #endif
1081 
1082 #ifdef __cplusplus
1083 }
1084 #endif
1085