1 /* 2 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #pragma once 8 9 #include <stdint.h> 10 #include <stdbool.h> 11 #include "soc/efuse_periph.h" 12 #include "hal/assert.h" 13 #include "esp32h2/rom/efuse.h" 14 15 #ifdef __cplusplus 16 extern "C" { 17 #endif 18 19 // Always inline these functions even no gcc optimization is applied. 20 21 /******************* eFuse fields *************************/ 22 efuse_ll_get_flash_crypt_cnt(void)23__attribute__((always_inline)) static inline uint32_t efuse_ll_get_flash_crypt_cnt(void) 24 { 25 return EFUSE.rd_repeat_data1.spi_boot_crypt_cnt; 26 } 27 efuse_ll_get_wdt_delay_sel(void)28__attribute__((always_inline)) static inline uint32_t efuse_ll_get_wdt_delay_sel(void) 29 { 30 return EFUSE.rd_repeat_data1.wdt_delay_sel; 31 } 32 efuse_ll_get_mac0(void)33__attribute__((always_inline)) static inline uint32_t efuse_ll_get_mac0(void) 34 { 35 return EFUSE.rd_mac_sys_0.mac_0; 36 } 37 efuse_ll_get_mac1(void)38__attribute__((always_inline)) static inline uint32_t efuse_ll_get_mac1(void) 39 { 40 return EFUSE.rd_mac_sys_1.mac_1; 41 } 42 efuse_ll_get_active_hp_dbias(void)43__attribute__((always_inline)) static inline uint32_t efuse_ll_get_active_hp_dbias(void) 44 { 45 return EFUSE.rd_mac_sys_2.active_hp_dbias; 46 } 47 efuse_ll_get_active_lp_dbias(void)48__attribute__((always_inline)) static inline uint32_t efuse_ll_get_active_lp_dbias(void) 49 { 50 return EFUSE.rd_mac_sys_2.active_lp_dbias; 51 } 52 efuse_ll_get_dslp_dbias(void)53__attribute__((always_inline)) static inline uint32_t efuse_ll_get_dslp_dbias(void) 54 { 55 return EFUSE.rd_mac_sys_2.dslp_dbias; 56 } 57 efuse_ll_get_dbias_vol_gap(void)58__attribute__((always_inline)) static inline int32_t efuse_ll_get_dbias_vol_gap(void) 59 { 60 return (EFUSE.rd_mac_sys_3.dbias_vol_gap_sign << 4)|(EFUSE.rd_mac_sys_3.dbias_vol_gap_value2 << 1)|EFUSE.rd_mac_sys_2.dbias_vol_gap_value1; 61 } 62 efuse_ll_get_secure_boot_v2_en(void)63__attribute__((always_inline)) static inline bool efuse_ll_get_secure_boot_v2_en(void) 64 { 65 return EFUSE.rd_repeat_data2.secure_boot_en; 66 } 67 68 // use efuse_hal_get_major_chip_version() to get major chip version efuse_ll_get_chip_wafer_version_major(void)69__attribute__((always_inline)) static inline uint32_t efuse_ll_get_chip_wafer_version_major(void) 70 { 71 return EFUSE.rd_mac_sys_3.wafer_version_major; 72 } 73 74 // use efuse_hal_get_minor_chip_version() to get minor chip version efuse_ll_get_chip_wafer_version_minor(void)75__attribute__((always_inline)) static inline uint32_t efuse_ll_get_chip_wafer_version_minor(void) 76 { 77 return EFUSE.rd_mac_sys_3.wafer_version_minor; 78 } 79 efuse_ll_get_disable_wafer_version_major(void)80__attribute__((always_inline)) static inline bool efuse_ll_get_disable_wafer_version_major(void) 81 { 82 return EFUSE.rd_mac_sys_3.disable_wafer_version_major; 83 } 84 efuse_ll_get_blk_version_major(void)85__attribute__((always_inline)) static inline uint32_t efuse_ll_get_blk_version_major(void) 86 { 87 return EFUSE.rd_sys_part1_data4.blk_version_major; 88 } 89 efuse_ll_get_blk_version_minor(void)90__attribute__((always_inline)) static inline uint32_t efuse_ll_get_blk_version_minor(void) 91 { 92 return EFUSE.rd_sys_part1_data4.blk_version_minor; 93 } 94 efuse_ll_get_disable_blk_version_major(void)95__attribute__((always_inline)) static inline bool efuse_ll_get_disable_blk_version_major(void) 96 { 97 return EFUSE.rd_sys_part1_data4.disable_blk_version_major; 98 } 99 efuse_ll_get_chip_ver_pkg(void)100__attribute__((always_inline)) static inline uint32_t efuse_ll_get_chip_ver_pkg(void) 101 { 102 return EFUSE.rd_mac_sys_4.pkg_version; 103 } 104 efuse_ll_get_ecdsa_key_blk(void)105__attribute__((always_inline)) static inline uint32_t efuse_ll_get_ecdsa_key_blk(void) 106 { 107 return EFUSE.conf.cfg_ecdsa_blk; 108 } 109 efuse_ll_set_ecdsa_key_blk(int efuse_blk)110__attribute__((always_inline)) static inline void efuse_ll_set_ecdsa_key_blk(int efuse_blk) 111 { 112 EFUSE.conf.cfg_ecdsa_blk = efuse_blk; 113 } 114 115 /******************* eFuse control functions *************************/ 116 efuse_ll_get_read_cmd(void)117__attribute__((always_inline)) static inline bool efuse_ll_get_read_cmd(void) 118 { 119 return EFUSE.cmd.read_cmd; 120 } 121 efuse_ll_get_pgm_cmd(void)122__attribute__((always_inline)) static inline bool efuse_ll_get_pgm_cmd(void) 123 { 124 return EFUSE.cmd.pgm_cmd; 125 } 126 efuse_ll_set_read_cmd(void)127__attribute__((always_inline)) static inline void efuse_ll_set_read_cmd(void) 128 { 129 EFUSE.cmd.read_cmd = 1; 130 } 131 efuse_ll_set_pgm_cmd(uint32_t block)132__attribute__((always_inline)) static inline void efuse_ll_set_pgm_cmd(uint32_t block) 133 { 134 HAL_ASSERT(block < ETS_EFUSE_BLOCK_MAX); 135 EFUSE.cmd.val = ((block << EFUSE_BLK_NUM_S) & EFUSE_BLK_NUM_M) | EFUSE_PGM_CMD; 136 } 137 efuse_ll_set_conf_read_op_code(void)138__attribute__((always_inline)) static inline void efuse_ll_set_conf_read_op_code(void) 139 { 140 EFUSE.conf.op_code = EFUSE_READ_OP_CODE; 141 } 142 efuse_ll_set_conf_write_op_code(void)143__attribute__((always_inline)) static inline void efuse_ll_set_conf_write_op_code(void) 144 { 145 EFUSE.conf.op_code = EFUSE_WRITE_OP_CODE; 146 } 147 efuse_ll_set_dac_num(uint8_t val)148__attribute__((always_inline)) static inline void efuse_ll_set_dac_num(uint8_t val) 149 { 150 EFUSE.dac_conf.dac_num = val; 151 } 152 efuse_ll_set_dac_clk_div(uint8_t val)153__attribute__((always_inline)) static inline void efuse_ll_set_dac_clk_div(uint8_t val) 154 { 155 EFUSE.dac_conf.dac_clk_div = val; 156 } 157 efuse_ll_set_pwr_on_num(uint16_t val)158__attribute__((always_inline)) static inline void efuse_ll_set_pwr_on_num(uint16_t val) 159 { 160 EFUSE.wr_tim_conf1.pwr_on_num = val; 161 } 162 efuse_ll_set_pwr_off_num(uint16_t value)163__attribute__((always_inline)) static inline void efuse_ll_set_pwr_off_num(uint16_t value) 164 { 165 EFUSE.wr_tim_conf2.pwr_off_num = value; 166 } 167 efuse_ll_rs_bypass_update(void)168__attribute__((always_inline)) static inline void efuse_ll_rs_bypass_update(void) 169 { 170 EFUSE.wr_tim_conf0_rs_bypass.update = 1; 171 } 172 173 /******************* eFuse control functions *************************/ 174 175 #ifdef __cplusplus 176 } 177 #endif 178