Skip to content

Commit da27816

Browse files
committed
Merge branch 'feat/add_efuse_cpu_freq_rating' into 'master'
efuse/add cpu freq rating See merge request idf/esp-idf!1994
2 parents a17d12d + 8b1277c commit da27816

File tree

3 files changed

+49
-22
lines changed

3 files changed

+49
-22
lines changed

components/bootloader/subproject/main/bootloader_start.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,14 @@ void bootloader_main()
447447
{
448448
vddsdio_configure();
449449
flash_gpio_configure();
450+
#if (CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ == 240)
451+
//Check if ESP32 is rated for a CPU frequency of 160MHz only
452+
if (REG_GET_BIT(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_CPU_FREQ_RATED) &&
453+
REG_GET_BIT(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_CPU_FREQ_LOW)) {
454+
ESP_LOGE(TAG, "Chip CPU frequency rated for 160MHz. Modify CPU frequency in menuconfig");
455+
return;
456+
}
457+
#endif
450458
bootloader_clock_configure();
451459
uart_console_configure();
452460
wdt_reset_check();

components/bootloader/subproject/main/flash_qio_mode.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,15 @@ static esp_err_t enable_qio_mode(read_status_fn_t read_status_fn,
174174
// spiconfig specifies a custom efuse pin configuration. This config defines all pins -except- WP,
175175
// which is compiled into the bootloader instead.
176176
//
177-
// Most commonly an overriden pin mapping means ESP32-D2WD. Warn if chip is ESP32-D2WD
178-
// but someone has changed the WP pin assignment from that chip's WP pin.
179-
uint32_t chip_ver = REG_GET_FIELD(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_VER_RESERVE);
180-
uint32_t pkg_ver = chip_ver & 0x7;
181-
const int PKG_VER_ESP32_D2WD = 2; // TODO: use chip detection API once available
182-
if (pkg_ver == PKG_VER_ESP32_D2WD && CONFIG_BOOTLOADER_SPI_WP_PIN != ESP32_D2WD_WP_GPIO) {
183-
ESP_LOGW(TAG, "Chip is ESP32-D2WD but flash WP pin is different value to internal flash");
177+
// Most commonly an overriden pin mapping means ESP32-D2WD or ESP32-PICOD4.
178+
//Warn if chip is ESP32-D2WD/ESP32-PICOD4 but someone has changed the WP pin
179+
//assignment from that chip's WP pin.
180+
uint32_t pkg_ver = REG_GET_FIELD(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_VER_PKG);
181+
if (CONFIG_BOOTLOADER_SPI_WP_PIN != ESP32_D2WD_WP_GPIO &&
182+
(pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32D2WDQ5 ||
183+
pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32PICOD2 ||
184+
pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32PICOD4)) {
185+
ESP_LOGW(TAG, "Chip is ESP32-D2WD/ESP32-PICOD4 but flash WP pin is different value to internal flash");
184186
}
185187
}
186188

components/soc/esp32/include/soc/efuse_reg.h

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,21 @@
9191
#define EFUSE_RD_BLK3_PART_RESERVE_M ((EFUSE_RD_BLK3_PART_RESERVE_V)<<(EFUSE_RD_BLK3_PART_RESERVE_S))
9292
#define EFUSE_RD_BLK3_PART_RESERVE_V 0x1
9393
#define EFUSE_RD_BLK3_PART_RESERVE_S 14
94-
/* EFUSE_RD_CHIP_VER_RESERVE : R/W ;bitpos:[13:12] ;default: 2'b0 ; */
95-
/*description: */
96-
#define EFUSE_RD_CHIP_VER_RESERVE 0x00000003
97-
#define EFUSE_RD_CHIP_VER_RESERVE_M ((EFUSE_RD_CHIP_VER_RESERVE_V)<<(EFUSE_RD_CHIP_VER_RESERVE_S))
98-
#define EFUSE_RD_CHIP_VER_RESERVE_V 0x3
99-
#define EFUSE_RD_CHIP_VER_RESERVE_S 12
100-
/* EFUSE_RD_CHIP_VER : R/W ;bitpos:[11:9] ;default: 3'b0 ; */
94+
/* EFUSE_RD_CHIP_CPU_FREQ_RATED : R/W ;bitpos:[13] ;default: 1'b0 ; */
95+
/*description: If set, the ESP32's maximum CPU frequency has been rated*/
96+
#define EFUSE_RD_CHIP_CPU_FREQ_RATED (BIT(13))
97+
#define EFUSE_RD_CHIP_CPU_FREQ_RATED_M ((EFUSE_RD_CHIP_CPU_FREQ_RATED_V)<<(EFUSE_RD_CHIP_CPU_FREQ_RATED_S))
98+
#define EFUSE_RD_CHIP_CPU_FREQ_RATED_V 0x1
99+
#define EFUSE_RD_CHIP_CPU_FREQ_RATED_S 13
100+
/* EFUSE_RD_CHIP_CPU_FREQ_LOW : R/W ;bitpos:[12] ;default: 1'b0 ; */
101+
/*description: If set alongside EFUSE_RD_CHIP_CPU_FREQ_RATED, the ESP32's max CPU frequency is rated for 160MHz. 240MHz otherwise*/
102+
#define EFUSE_RD_CHIP_CPU_FREQ_LOW (BIT(12))
103+
#define EFUSE_RD_CHIP_CPU_FREQ_LOW_M ((EFUSE_RD_CHIP_CPU_FREQ_LOW_V)<<(EFUSE_RD_CHIP_CPU_FREQ_LOW_S))
104+
#define EFUSE_RD_CHIP_CPU_FREQ_LOW_V 0x1
105+
#define EFUSE_RD_CHIP_CPU_FREQ_LOW_S 12
106+
/* EFUSE_RD_CHIP_VER_PKG : R/W ;bitpos:[11:9] ;default: 3'b0 ; */
101107
/*description: chip package */
102-
#define EFUSE_RD_CHIP_VER 0x00000007
108+
#define EFUSE_RD_CHIP_VER_PKG 0x00000007
103109
#define EFUSE_RD_CHIP_VER_PKG_M ((EFUSE_RD_CHIP_VER_PKG_V)<<(EFUSE_RD_CHIP_VER_PKG_S))
104110
#define EFUSE_RD_CHIP_VER_PKG_V 0x7
105111
#define EFUSE_RD_CHIP_VER_PKG_S 9
@@ -341,18 +347,29 @@
341347
#define EFUSE_BLK3_PART_RESERVE_M ((EFUSE_BLK3_PART_RESERVE_V)<<(EFUSE_BLK3_PART_RESERVE_S))
342348
#define EFUSE_BLK3_PART_RESERVE_V 0x1
343349
#define EFUSE_BLK3_PART_RESERVE_S 14
344-
/* EFUSE_CHIP_VER_RESERVE : R/W ;bitpos:[13:12] ;default: 2'b0 ; */
345-
/*description: */
346-
#define EFUSE_CHIP_VER_RESERVE 0x00000003
347-
#define EFUSE_CHIP_VER_RESERVE_M ((EFUSE_CHIP_VER_RESERVE_V)<<(EFUSE_CHIP_VER_RESERVE_S))
348-
#define EFUSE_CHIP_VER_RESERVE_V 0x3
349-
#define EFUSE_CHIP_VER_RESERVE_S 12
350-
/* EFUSE_CHIP_VER : R/W ;bitpos:[11:9] ;default: 3'b0 ; */
350+
/* EFUSE_CHIP_CPU_FREQ_RATED : R/W ;bitpos:[13] ;default: 1'b0 ; */
351+
/*description: If set, the ESP32's maximum CPU frequency has been rated*/
352+
#define EFUSE_CHIP_CPU_FREQ_RATED (BIT(13))
353+
#define EFUSE_CHIP_CPU_FREQ_RATED_M ((EFUSE_CHIP_CPU_FREQ_RATED_V)<<(EFUSE_CHIP_CPU_FREQ_RATED_S))
354+
#define EFUSE_CHIP_CPU_FREQ_RATED_V 0x1
355+
#define EFUSE_CHIP_CPU_FREQ_RATED_S 13
356+
/* EFUSE_CHIP_CPU_FREQ_LOW : R/W ;bitpos:[12] ;default: 1'b0 ; */
357+
/*description: If set alongside EFUSE_CHIP_CPU_FREQ_RATED, the ESP32's max CPU frequency is rated for 160MHz. 240MHz otherwise*/
358+
#define EFUSE_CHIP_CPU_FREQ_LOW (BIT(12))
359+
#define EFUSE_CHIP_CPU_FREQ_LOW_M ((EFUSE_CHIP_CPU_FREQ_LOW_V)<<(EFUSE_CHIP_CPU_FREQ_LOW_S))
360+
#define EFUSE_CHIP_CPU_FREQ_LOW_V 0x1
361+
#define EFUSE_CHIP_CPU_FREQ_LOW_S 12
362+
/* EFUSE_CHIP_VER_PKG : R/W ;bitpos:[11:9] ;default: 3'b0 ; */
351363
/*description: */
352364
#define EFUSE_CHIP_VER_PKG 0x00000007
353365
#define EFUSE_CHIP_VER_PKG_M ((EFUSE_CHIP_VER_PKG_V)<<(EFUSE_CHIP_VER_PKG_S))
354366
#define EFUSE_CHIP_VER_PKG_V 0x7
355367
#define EFUSE_CHIP_VER_PKG_S 9
368+
#define EFUSE_CHIP_VER_PKG_ESP32D0WDQ6 0
369+
#define EFUSE_CHIP_VER_PKG_ESP32D0WDQ5 1
370+
#define EFUSE_CHIP_VER_PKG_ESP32D2WDQ5 2
371+
#define EFUSE_CHIP_VER_PKG_ESP32PICOD2 4
372+
#define EFUSE_CHIP_VER_PKG_ESP32PICOD4 5
356373
/* EFUSE_SPI_PAD_CONFIG_HD : R/W ;bitpos:[8:4] ;default: 5'b0 ; */
357374
/*description: program for SPI_pad_config_hd*/
358375
#define EFUSE_SPI_PAD_CONFIG_HD 0x0000001F

0 commit comments

Comments
 (0)