feat(p4): changed to rev3.1 by default

This commit is contained in:
armando
2026-01-19 13:14:30 +08:00
parent bb79e6f246
commit e8814fc0f1
5 changed files with 19 additions and 11 deletions
@@ -1,7 +1,7 @@
config P4_REV3_MSPI_CRASH_AFTER_POWER_UP_WORKAROUND
bool
depends on IDF_TARGET_ESP32P4
default y if !ESP32P4_SELECTS_REV_LESS_V3
default y if !ESP32P4_SELECTS_REV_LESS_V3 # Fixed since REV3.1
config P4_REV3_MSPI_WORKAROUND_SIZE
hex
@@ -3,8 +3,7 @@ comment "Read the help text of the option below for explanation"
config ESP32P4_SELECTS_REV_LESS_V3
bool "Select ESP32-P4 revisions <3.0 (No >=3.x Support)"
default n if IDF_CI_BUILD
default y
default n
help
Select this option to support ESP32-P4 revisions 0.x and 1.x.
Revisions higher than 3.0 (included) and revisions less than 3.0
@@ -13,7 +12,8 @@ config ESP32P4_SELECTS_REV_LESS_V3
choice ESP32P4_REV_MIN
prompt "Minimum Supported ESP32-P4 Revision"
default ESP32P4_REV_MIN_1
default ESP32P4_REV_MIN_300 if IDF_CI_BUILD
default ESP32P4_REV_MIN_301
help
Required minimum chip revision. ESP-IDF will check for it and
reject to boot if the chip revision fails the check.
@@ -425,7 +425,9 @@ TCM_IRAM_ATTR uint32_t pmu_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt,
}
} else {
#if CONFIG_P4_REV3_MSPI_CRASH_AFTER_POWER_UP_WORKAROUND
if (efuse_hal_chip_revision() == 300) {
lp_clkrst_ll_boot_from_lp_ram(true);
}
#endif
}
@@ -456,8 +458,10 @@ TCM_IRAM_ATTR uint32_t pmu_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt,
ldo_ll_enable(LDO_ID2UNIT(CONFIG_ESP_LDO_CHAN_PSRAM_DOMAIN), true);
#endif
#if CONFIG_P4_REV3_MSPI_CRASH_AFTER_POWER_UP_WORKAROUND
// Set reset vector back to HP ROM after deepsleep request rejected
lp_clkrst_ll_boot_from_lp_ram(false);
if (efuse_hal_chip_revision() == 300) {
// Set reset vector back to HP ROM after deepsleep request rejected
lp_clkrst_ll_boot_from_lp_ram(false);
}
#endif
}
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -68,9 +68,10 @@ void rtc_clk_init(rtc_clk_config_t cfg)
hp_dcmvset = pvt_hp_dcmvset;
}
// Switch to DCDC
#if (CONFIG_ESP32P4_REV_MIN_FULL >= 301)
#if (CONFIG_ESP32P4_REV_MIN_FULL >= 300)
unsigned chip_version = efuse_hal_chip_revision();
if (ESP_CHIP_REV_ABOVE(chip_version, 301)) {
if (ESP_CHIP_REV_BETWEEN(chip_version, 300, 301)) {
// This workaround is only needed for P4 rev3.1
SET_PERI_REG_MASK(PMU_DCM_CTRL_REG, PMU_DCDC_FB_RES_FORCE_PD);
}
#endif
@@ -79,8 +80,9 @@ void rtc_clk_init(rtc_clk_config_t cfg)
pmu_ll_hp_set_dcm_vset(&PMU, PMU_MODE_HP_ACTIVE, hp_dcmvset);
SET_PERI_REG_MASK(PMU_HP_ACTIVE_HP_REGULATOR0_REG, PMU_DIG_REGULATOR0_DBIAS_SEL); // Hand over control of dbias to pmu
esp_rom_delay_us(1000);
#if (CONFIG_ESP32P4_REV_MIN_FULL >= 301)
if (ESP_CHIP_REV_ABOVE(chip_version, 301)) {
#if (CONFIG_ESP32P4_REV_MIN_FULL >= 300)
if (ESP_CHIP_REV_BETWEEN(chip_version, 300, 301)) {
// This workaround is only needed for P4 rev3.1
REG_SET_FIELD(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_LP_FIB_SEL, 0xEF);// lp_fib_sel bit4 set to 0: select dig_fib_reg instead of ana_fib_reg
CLEAR_PERI_REG_MASK(PMU_DCM_CTRL_REG, PMU_DCDC_FB_RES_FORCE_PD);
esp_rom_delay_us(10);
@@ -29,12 +29,14 @@ extern "C" {
*/
#define ESP_CHIP_REV_ABOVE(rev, min_rev) ((min_rev) <= (rev))
#define ESP_CHIP_REV_BETWEEN(rev, min_rev, max_rev) (((min_rev) <= (rev)) && ((rev) <= (max_rev)))
#define ESP_CHIP_REV_MAJOR_AND_ABOVE(rev, min_rev) (((rev) / 100 == (min_rev) / 100) && ((rev) >= (min_rev)))
/**
* eFuse block revision strategy is same as chip revision
*/
#define ESP_EFUSE_BLK_REV_ABOVE(rev, min_rev) ESP_CHIP_REV_ABOVE(rev, min_rev)
#define ESP_EFUSE_BLK_REV_BETWEEN(rev, min_rev, max_rev) ESP_CHIP_REV_BETWEEN(rev, min_rev, max_rev)
#define ESP_EFUSE_BLK_REV_MAJOR_AND_ABOVE(rev, min_rev) ESP_CHIP_REV_MAJOR_AND_ABOVE(rev, min_rev)
#ifdef __cplusplus