Merge branch 'bugfix/c3_efuse_fail_bits_v4.4' into 'release/v4.4'

soc: Fix efuse fail bits (v4.4)

See merge request espressif/esp-idf!18417
pull/9239/head
Jiang Jiang Jian 2022-06-09 10:53:31 +08:00
commit efdca9431c
3 zmienionych plików z 87 dodań i 88 usunięć

Wyświetl plik

@ -15,7 +15,8 @@
static const char *TAG = "efuse";
#define ESP_EFUSE_BLOCK_ERROR_BITS(error_reg, block) ((error_reg) & (0x0F << (4 * (block))))
#define ESP_EFUSE_BLOCK_ERROR_BITS(error_reg, block) ((error_reg) & (0x08 << (4 * (block))))
#define ESP_EFUSE_BLOCK_ERROR_NUM_BITS(error_reg, block) ((error_reg) & (0x07 << (4 * (block))))
#ifdef CONFIG_EFUSE_VIRTUAL
extern uint32_t virt_blocks[EFUSE_BLK_MAX][COUNT_EFUSE_REG_PER_BLOCK];
@ -96,11 +97,16 @@ static bool efuse_hal_is_coding_error_in_block(unsigned block)
}
} else if (block <= 10) {
// The order of error in these regs is different only for the C3 chip.
// Fail bit (mask=0x8):
// EFUSE_RD_RS_ERR0_REG: (hi) BLOCK7, BLOCK6, BLOCK5, BLOCK4, BLOCK3, BLOCK2, BLOCK1, ------ (low)
// EFUSE_RD_RS_ERR1_REG: BLOCK9, BLOCK8
// Error num bits (mask=0x7):
// EFUSE_RD_RS_ERR0_REG: (hi) BLOCK8, BLOCK7, BLOCK6, BLOCK5, BLOCK4, BLOCK3, BLOCK2, BLOCK1 (low)
// EFUSE_RD_RS_ERR1_REG: BLOCK10, BLOCK9
// BLOCK10 is not presented in the error regs.
uint32_t error_reg = REG_READ(EFUSE_RD_RS_ERR0_REG + (block / 8) * 4);
return ESP_EFUSE_BLOCK_ERROR_BITS(error_reg, block % 8) != 0;
uint32_t err_fail_reg = REG_READ(EFUSE_RD_RS_ERR0_REG + (block / 8) * 4);
uint32_t err_num_reg = REG_READ(EFUSE_RD_RS_ERR0_REG + ((block - 1) / 8) * 4);
return (ESP_EFUSE_BLOCK_ERROR_BITS(err_fail_reg, block % 8) != 0) || (ESP_EFUSE_BLOCK_ERROR_NUM_BITS(err_num_reg, (block - 1) % 8) != 0);
}
return false;
}

Wyświetl plik

@ -1435,12 +1435,12 @@ extern "C" {
#define EFUSE_DIS_USB_DEVICE_ERR_M (BIT(11))
#define EFUSE_DIS_USB_DEVICE_ERR_V 0x1
#define EFUSE_DIS_USB_DEVICE_ERR_S 11
/* EFUSE_DIS_DOWNLOAD_ICACHE : RO ;bitpos:[10] ;default: 1'b0 ; */
/* EFUSE_DIS_DOWNLOAD_ICACHE_ERR : RO ;bitpos:[10] ;default: 1'b0 ; */
/*description: If DIS_DOWNLOAD_ICACHE is 1 then it indicates a programming error.*/
#define EFUSE_DIS_DOWNLOAD_ICACHE (BIT(10))
#define EFUSE_DIS_DOWNLOAD_ICACHE_M (BIT(10))
#define EFUSE_DIS_DOWNLOAD_ICACHE_V 0x1
#define EFUSE_DIS_DOWNLOAD_ICACHE_S 10
#define EFUSE_DIS_DOWNLOAD_ICACHE_ERR (BIT(10))
#define EFUSE_DIS_DOWNLOAD_ICACHE_ERR_M (BIT(10))
#define EFUSE_DIS_DOWNLOAD_ICACHE_ERR_V 0x1
#define EFUSE_DIS_DOWNLOAD_ICACHE_ERR_S 10
/* EFUSE_DIS_USB_JTAG_ERR : RO ;bitpos:[9] ;default: 1'b0 ; */
/*description: If DIS_USB_JTAG is 1 then it indicates a programming error.*/
#define EFUSE_DIS_USB_JTAG_ERR (BIT(9))
@ -1655,104 +1655,97 @@ extern "C" {
#define EFUSE_RPT4_RESERVED4_ERR_S 0
#define EFUSE_RD_RS_ERR0_REG (DR_REG_EFUSE_BASE + 0x1C0)
/* EFUSE_KEY4_FAIL : RO ;bitpos:[31] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of key$n is reliable 1:
Means that programming key$n failed and the number of error bytes is over 6.*/
#define EFUSE_KEY4_FAIL (BIT(31))
#define EFUSE_KEY4_FAIL_M (BIT(31))
#define EFUSE_KEY4_FAIL_V 0x1
#define EFUSE_KEY4_FAIL_S 31
/* EFUSE_KEY3_FAIL : RO ;bitpos:[31] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of key3 is reliable 1:
Means that programming key3 failed and the number of error bytes is over 6.*/
#define EFUSE_KEY3_FAIL (BIT(31))
#define EFUSE_KEY3_FAIL_M (BIT(31))
#define EFUSE_KEY3_FAIL_V 0x1
#define EFUSE_KEY3_FAIL_S 31
/* EFUSE_KEY4_ERR_NUM : RO ;bitpos:[30:28] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_KEY4_ERR_NUM 0x00000007
#define EFUSE_KEY4_ERR_NUM_M ((EFUSE_KEY4_ERR_NUM_V)<<(EFUSE_KEY4_ERR_NUM_S))
#define EFUSE_KEY4_ERR_NUM_V 0x7
#define EFUSE_KEY4_ERR_NUM_S 28
/* EFUSE_KEY3_FAIL : RO ;bitpos:[27] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of key$n is reliable 1:
Means that programming key$n failed and the number of error bytes is over 6.*/
#define EFUSE_KEY3_FAIL (BIT(27))
#define EFUSE_KEY3_FAIL_M (BIT(27))
#define EFUSE_KEY3_FAIL_V 0x1
#define EFUSE_KEY3_FAIL_S 27
/* EFUSE_KEY2_FAIL : RO ;bitpos:[27] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of key2 is reliable 1:
Means that programming key2 failed and the number of error bytes is over 6.*/
#define EFUSE_KEY2_FAIL (BIT(27))
#define EFUSE_KEY2_FAIL_M (BIT(27))
#define EFUSE_KEY2_FAIL_V 0x1
#define EFUSE_KEY2_FAIL_S 27
/* EFUSE_KEY3_ERR_NUM : RO ;bitpos:[26:24] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_KEY3_ERR_NUM 0x00000007
#define EFUSE_KEY3_ERR_NUM_M ((EFUSE_KEY3_ERR_NUM_V)<<(EFUSE_KEY3_ERR_NUM_S))
#define EFUSE_KEY3_ERR_NUM_V 0x7
#define EFUSE_KEY3_ERR_NUM_S 24
/* EFUSE_KEY2_FAIL : RO ;bitpos:[23] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of key$n is reliable 1:
Means that programming key$n failed and the number of error bytes is over 6.*/
#define EFUSE_KEY2_FAIL (BIT(23))
#define EFUSE_KEY2_FAIL_M (BIT(23))
#define EFUSE_KEY2_FAIL_V 0x1
#define EFUSE_KEY2_FAIL_S 23
/* EFUSE_KEY1_FAIL : RO ;bitpos:[23] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of key1 is reliable 1:
Means that programming key1 failed and the number of error bytes is over 6.*/
#define EFUSE_KEY1_FAIL (BIT(23))
#define EFUSE_KEY1_FAIL_M (BIT(23))
#define EFUSE_KEY1_FAIL_V 0x1
#define EFUSE_KEY1_FAIL_S 23
/* EFUSE_KEY2_ERR_NUM : RO ;bitpos:[22:20] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_KEY2_ERR_NUM 0x00000007
#define EFUSE_KEY2_ERR_NUM_M ((EFUSE_KEY2_ERR_NUM_V)<<(EFUSE_KEY2_ERR_NUM_S))
#define EFUSE_KEY2_ERR_NUM_V 0x7
#define EFUSE_KEY2_ERR_NUM_S 20
/* EFUSE_KEY1_FAIL : RO ;bitpos:[19] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of key$n is reliable 1:
Means that programming key$n failed and the number of error bytes is over 6.*/
#define EFUSE_KEY1_FAIL (BIT(19))
#define EFUSE_KEY1_FAIL_M (BIT(19))
#define EFUSE_KEY1_FAIL_V 0x1
#define EFUSE_KEY1_FAIL_S 19
/* EFUSE_KEY0_FAIL : RO ;bitpos:[19] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of key0 is reliable 1:
Means that programming key0 failed and the number of error bytes is over 6.*/
#define EFUSE_KEY0_FAIL (BIT(19))
#define EFUSE_KEY0_FAIL_M (BIT(19))
#define EFUSE_KEY0_FAIL_V 0x1
#define EFUSE_KEY0_FAIL_S 19
/* EFUSE_KEY1_ERR_NUM : RO ;bitpos:[18:16] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_KEY1_ERR_NUM 0x00000007
#define EFUSE_KEY1_ERR_NUM_M ((EFUSE_KEY1_ERR_NUM_V)<<(EFUSE_KEY1_ERR_NUM_S))
#define EFUSE_KEY1_ERR_NUM_V 0x7
#define EFUSE_KEY1_ERR_NUM_S 16
/* EFUSE_KEY0_FAIL : RO ;bitpos:[15] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of key$n is reliable 1:
Means that programming key$n failed and the number of error bytes is over 6.*/
#define EFUSE_KEY0_FAIL (BIT(15))
#define EFUSE_KEY0_FAIL_M (BIT(15))
#define EFUSE_KEY0_FAIL_V 0x1
#define EFUSE_KEY0_FAIL_S 15
/* EFUSE_USR_DATA_FAIL : RO ;bitpos:[15] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of user data is reliable
1: Means that programming user data failed and the number of error bytes is over 6.*/
#define EFUSE_USR_DATA_FAIL (BIT(15))
#define EFUSE_USR_DATA_FAIL_M (BIT(15))
#define EFUSE_USR_DATA_FAIL_V 0x1
#define EFUSE_USR_DATA_FAIL_S 15
/* EFUSE_KEY0_ERR_NUM : RO ;bitpos:[14:12] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_KEY0_ERR_NUM 0x00000007
#define EFUSE_KEY0_ERR_NUM_M ((EFUSE_KEY0_ERR_NUM_V)<<(EFUSE_KEY0_ERR_NUM_S))
#define EFUSE_KEY0_ERR_NUM_V 0x7
#define EFUSE_KEY0_ERR_NUM_S 12
/* EFUSE_USR_DATA_FAIL : RO ;bitpos:[11] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the user data is reliable 1: Means
that programming user data failed and the number of error bytes is over 6.*/
#define EFUSE_USR_DATA_FAIL (BIT(11))
#define EFUSE_USR_DATA_FAIL_M (BIT(11))
#define EFUSE_USR_DATA_FAIL_V 0x1
#define EFUSE_USR_DATA_FAIL_S 11
/* EFUSE_SYS_PART1_FAIL : RO ;bitpos:[11] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of system part1 is reliable
1: Means that programming data of system part1 failed and the number of error bytes is over 6.*/
#define EFUSE_SYS_PART1_FAIL (BIT(11))
#define EFUSE_SYS_PART1_FAIL_M (BIT(11))
#define EFUSE_SYS_PART1_FAIL_V 0x1
#define EFUSE_SYS_PART1_FAIL_S 11
/* EFUSE_USR_DATA_ERR_NUM : RO ;bitpos:[10:8] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_USR_DATA_ERR_NUM 0x00000007
#define EFUSE_USR_DATA_ERR_NUM_M ((EFUSE_USR_DATA_ERR_NUM_V)<<(EFUSE_USR_DATA_ERR_NUM_S))
#define EFUSE_USR_DATA_ERR_NUM_V 0x7
#define EFUSE_USR_DATA_ERR_NUM_S 8
/* EFUSE_SYS_PART1_FAIL : RO ;bitpos:[7] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of system part1 is reliable
1: Means that programming user data failed and the number of error bytes is over 6.*/
#define EFUSE_SYS_PART1_FAIL (BIT(7))
#define EFUSE_SYS_PART1_FAIL_M (BIT(7))
#define EFUSE_SYS_PART1_FAIL_V 0x1
#define EFUSE_SYS_PART1_FAIL_S 7
/* EFUSE_MAC_SPI_8M_FAIL : RO ;bitpos:[7] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of MAC_SPI_8M is reliable
1: Means that programming MAC_SPI_8M failed and the number of error bytes is over 6.*/
#define EFUSE_MAC_SPI_8M_FAIL (BIT(7))
#define EFUSE_MAC_SPI_8M_FAIL_M (BIT(7))
#define EFUSE_MAC_SPI_8M_FAIL_V 0x1
#define EFUSE_MAC_SPI_8M_FAIL_S 7
/* EFUSE_SYS_PART1_NUM : RO ;bitpos:[6:4] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_SYS_PART1_NUM 0x00000007
#define EFUSE_SYS_PART1_NUM_M ((EFUSE_SYS_PART1_NUM_V)<<(EFUSE_SYS_PART1_NUM_S))
#define EFUSE_SYS_PART1_NUM_V 0x7
#define EFUSE_SYS_PART1_NUM_S 4
/* EFUSE_MAC_SPI_8M_FAIL : RO ;bitpos:[3] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of MAC_SPI_8M is reliable
1: Means that programming user data failed and the number of error bytes is over 6.*/
#define EFUSE_MAC_SPI_8M_FAIL (BIT(3))
#define EFUSE_MAC_SPI_8M_FAIL_M (BIT(3))
#define EFUSE_MAC_SPI_8M_FAIL_V 0x1
#define EFUSE_MAC_SPI_8M_FAIL_S 3
/* EFUSE_MAC_SPI_8M_ERR_NUM : RO ;bitpos:[2:0] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_MAC_SPI_8M_ERR_NUM 0x00000007
@ -1761,26 +1754,26 @@ extern "C" {
#define EFUSE_MAC_SPI_8M_ERR_NUM_S 0
#define EFUSE_RD_RS_ERR1_REG (DR_REG_EFUSE_BASE + 0x1C4)
/* EFUSE_SYS_PART2_FAIL : RO ;bitpos:[7] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of system part2 is reliable
1: Means that programming user data failed and the number of error bytes is over 6.*/
#define EFUSE_SYS_PART2_FAIL (BIT(7))
#define EFUSE_SYS_PART2_FAIL_M (BIT(7))
#define EFUSE_SYS_PART2_FAIL_V 0x1
#define EFUSE_SYS_PART2_FAIL_S 7
/* EFUSE_KEY5_FAIL : RO ;bitpos:[7] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of KEY5 is reliable 1:
Means that programming KEY5 failed and the number of error bytes is over 6.*/
#define EFUSE_KEY5_FAIL (BIT(7))
#define EFUSE_KEY5_FAIL_M (BIT(7))
#define EFUSE_KEY5_FAIL_V 0x1
#define EFUSE_KEY5_FAIL_S 7
/* EFUSE_SYS_PART2_ERR_NUM : RO ;bitpos:[6:4] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_SYS_PART2_ERR_NUM 0x00000007
#define EFUSE_SYS_PART2_ERR_NUM_M ((EFUSE_SYS_PART2_ERR_NUM_V)<<(EFUSE_SYS_PART2_ERR_NUM_S))
#define EFUSE_SYS_PART2_ERR_NUM_V 0x7
#define EFUSE_SYS_PART2_ERR_NUM_S 4
/* EFUSE_KEY5_FAIL : RO ;bitpos:[3] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of KEY5 is reliable 1:
Means that programming user data failed and the number of error bytes is over 6.*/
#define EFUSE_KEY5_FAIL (BIT(3))
#define EFUSE_KEY5_FAIL_M (BIT(3))
#define EFUSE_KEY5_FAIL_V 0x1
#define EFUSE_KEY5_FAIL_S 3
/* EFUSE_KEY4_FAIL : RO ;bitpos:[3] ;default: 1'b0 ; */
/*description: 0: Means no failure and that the data of KEY4 is reliable 1:
Means that programming KEY4 failed and the number of error bytes is over 6.*/
#define EFUSE_KEY4_FAIL (BIT(3))
#define EFUSE_KEY4_FAIL_M (BIT(3))
#define EFUSE_KEY4_FAIL_V 0x1
#define EFUSE_KEY4_FAIL_S 3
/* EFUSE_KEY5_ERR_NUM : RO ;bitpos:[2:0] ;default: 3'h0 ; */
/*description: The value of this signal means the number of error bytes.*/
#define EFUSE_KEY5_ERR_NUM 0x00000007

Wyświetl plik

@ -358,30 +358,30 @@ typedef volatile struct efuse_dev_s {
union {
struct {
uint32_t mac_spi_8m_err_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t mac_spi_8m_fail: 1; /*0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that programming user data failed and the number of error bytes is over 6.*/
uint32_t reserved3: 1; /*Reserved.*/
uint32_t sys_part1_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t sys_part1_fail: 1; /*0: Means no failure and that the data of system part1 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.*/
uint32_t mac_spi_8m_fail: 1; /*0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that programming MAC_SPI_8M failed and the number of error bytes is over 6.*/
uint32_t usr_data_err_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t usr_data_fail: 1; /*0: Means no failure and that the user data is reliable 1: Means that programming user data failed and the number of error bytes is over 6.*/
uint32_t sys_part1_fail: 1; /*0: Means no failure and that the data of system part1 is reliable 1: Means that programming the data of system part1 failed and the number of error bytes is over 6.*/
uint32_t key0_err_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t key0_fail: 1; /*0: Means no failure and that the data of key$n is reliable 1: Means that programming key$n failed and the number of error bytes is over 6.*/
uint32_t usr_data_fail: 1; /*0: Means no failure and that the data of user data is reliable 1: Means that programming user data failed and the number of error bytes is over 6.*/
uint32_t key1_err_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t key1_fail: 1; /*0: Means no failure and that the data of key$n is reliable 1: Means that programming key$n failed and the number of error bytes is over 6.*/
uint32_t key0_fail: 1; /*0: Means no failure and that the data of key0 is reliable 1: Means that programming key0 failed and the number of error bytes is over 6.*/
uint32_t key2_err_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t key2_fail: 1; /*0: Means no failure and that the data of key$n is reliable 1: Means that programming key$n failed and the number of error bytes is over 6.*/
uint32_t key1_fail: 1; /*0: Means no failure and that the data of key1 is reliable 1: Means that programming key1 failed and the number of error bytes is over 6.*/
uint32_t key3_err_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t key3_fail: 1; /*0: Means no failure and that the data of key$n is reliable 1: Means that programming key$n failed and the number of error bytes is over 6.*/
uint32_t key2_fail: 1; /*0: Means no failure and that the data of key2 is reliable 1: Means that programming key2 failed and the number of error bytes is over 6.*/
uint32_t key4_err_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t key4_fail: 1; /*0: Means no failure and that the data of key$n is reliable 1: Means that programming key$n failed and the number of error bytes is over 6.*/
uint32_t key3_fail: 1; /*0: Means no failure and that the data of key3 is reliable 1: Means that programming key3 failed and the number of error bytes is over 6.*/
};
uint32_t val;
} rd_rs_err0;
union {
struct {
uint32_t key5_err_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t key5_fail: 1; /*0: Means no failure and that the data of KEY5 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.*/
uint32_t key4_fail: 1; /*0: Means no failure and that the data of KEY4 is reliable 1: Means that programming KEY4 failed and the number of error bytes is over 6.*/
uint32_t sys_part2_err_num: 3; /*The value of this signal means the number of error bytes.*/
uint32_t sys_part2_fail: 1; /*0: Means no failure and that the data of system part2 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.*/
uint32_t key5_fail: 1; /*0: Means no failure and that the data of KEY5 is reliable 1: Means that programming KEY5 failed and the number of error bytes is over 6.*/
uint32_t reserved8: 24; /*Reserved.*/
};
uint32_t val;