From 5369b68bc8bfb437c0c0a776c4aef9609ef4197e Mon Sep 17 00:00:00 2001 From: morris Date: Mon, 25 Mar 2024 18:23:59 +0800 Subject: [PATCH] change(flash): acquire the LDO channel used by flash so that even if the same channel has other consumers, the voltage won't be changed --- .../esp_hw_support/port/esp32p4/Kconfig.ldo | 25 +++++++++++++++++++ components/spi_flash/esp_flash_spi_init.c | 16 +++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/components/esp_hw_support/port/esp32p4/Kconfig.ldo b/components/esp_hw_support/port/esp32p4/Kconfig.ldo index da3c8de84a..6c0bea47ed 100644 --- a/components/esp_hw_support/port/esp32p4/Kconfig.ldo +++ b/components/esp_hw_support/port/esp32p4/Kconfig.ldo @@ -1,6 +1,31 @@ menu "LDO Regulator Configurations" depends on SOC_GP_LDO_SUPPORTED + config ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN + int "LDO regulator channel that used to power SPI NOR Flash (READ HELP)" + default 1 + range -1 4 + help + The internal LDO regulator can be used to power the SPI Flash specific power domain. + This option is to select which LDO channel to connect to that domain. + Please set this option correctly according to your schematic. + Set to -1 if the Flash is using any external power supply. + + choice ESP_LDO_VOLTAGE_SPI_NOR_FLASH_DOMAIN + prompt "SPI NOR Flash power domain voltage" + depends on ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN != -1 + default ESP_LDO_VOLTAGE_SPI_NOR_FLASH_3300_MV + help + Select the voltage used by the Flash power domain. + + config ESP_LDO_VOLTAGE_SPI_NOR_FLASH_3300_MV + bool "3.3V" + endchoice + + config ESP_LDO_VOLTAGE_SPI_NOR_FLASH_DOMAIN + int + default 3300 if ESP_LDO_VOLTAGE_SPI_NOR_FLASH_3300_MV + config ESP_LDO_CHAN_PSRAM_DOMAIN int "LDO regulator channel that used to power PSRAM and MPLL (READ HELP)" default 2 diff --git a/components/spi_flash/esp_flash_spi_init.c b/components/spi_flash/esp_flash_spi_init.c index 575da4e808..aee5da0c8a 100644 --- a/components/spi_flash/esp_flash_spi_init.c +++ b/components/spi_flash/esp_flash_spi_init.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -15,6 +15,7 @@ #include "esp_heap_caps.h" #include "hal/spi_types.h" #include "esp_private/spi_share_hw_ctrl.h" +#include "esp_ldo_regulator.h" #include "hal/spi_flash_hal.h" #include "hal/gpio_hal.h" #include "esp_flash_internal.h" @@ -420,6 +421,19 @@ esp_err_t esp_flash_init_default_chip(void) esp_err_t esp_flash_app_init(void) { esp_err_t err = ESP_OK; + + // Acquire the LDO channel used by the SPI NOR flash + // in case the LDO voltage is changed by other users +#if defined(CONFIG_ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN) && CONFIG_ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN != -1 + static esp_ldo_channel_handle_t s_ldo_chan = NULL; + esp_ldo_channel_config_t ldo_config = { + .chan_id = CONFIG_ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN, + .voltage_mv = CONFIG_ESP_LDO_VOLTAGE_SPI_NOR_FLASH_DOMAIN, + }; + err = esp_ldo_acquire_channel(&ldo_config, &s_ldo_chan); + if (err != ESP_OK) return err; +#endif + spi_flash_init_lock(); spi_flash_guard_set(&g_flash_guard_default_ops); #if CONFIG_SPI_FLASH_ENABLE_COUNTERS