Ver Fonte

system: moved placement of disable rom log efuse in startup flow

Functions used for burning this efuse would log, but at this point
esp_log is not initialized. Moved to a later point in the startup process.

Closes https://github.com/espressif/esp-idf/issues/9457
Marius Vikhammer há 3 anos atrás
pai
commit
da91fb7a81
2 ficheiros alterados com 18 adições e 17 exclusões
  1. 1 17
      components/esp_system/port/cpu_start.c
  2. 17 0
      components/esp_system/startup.c

+ 1 - 17
components/esp_system/port/cpu_start.c

@@ -91,18 +91,6 @@
 #include "esp_rom_spiflash.h"
 #endif // CONFIG_APP_BUILD_TYPE_ELF_RAM
 
-// Set efuse ROM_LOG_MODE on first boot
-//
-// For CONFIG_BOOT_ROM_LOG_ALWAYS_ON (default) or undefined (ESP32), leave
-// ROM_LOG_MODE undefined (no need to call this function during startup)
-#if CONFIG_BOOT_ROM_LOG_ALWAYS_OFF
-#define ROM_LOG_MODE ESP_EFUSE_ROM_LOG_ALWAYS_OFF
-#elif CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW
-#define ROM_LOG_MODE ESP_EFUSE_ROM_LOG_ON_GPIO_LOW
-#elif CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH
-#define ROM_LOG_MODE ESP_EFUSE_ROM_LOG_ON_GPIO_HIGH
-#endif
-
 //This dependency will be removed in the future
 #include "soc/ext_mem_defs.h"
 
@@ -616,7 +604,7 @@ void IRAM_ATTR call_start_cpu0(void)
 #if CONFIG_SPI_FLASH_SIZE_OVERRIDE
     int app_flash_size = esp_image_get_flash_size(fhdr.spi_size);
     if (app_flash_size < 1 * 1024 * 1024) {
-        ESP_LOGE(TAG, "Invalid flash size in app image header.");
+        ESP_EARLY_LOGE(TAG, "Invalid flash size in app image header.");
         abort();
     }
     bootloader_flash_update_size(app_flash_size);
@@ -636,9 +624,5 @@ void IRAM_ATTR call_start_cpu0(void)
     }
 #endif
 
-#ifdef ROM_LOG_MODE
-    esp_efuse_set_rom_log_scheme(ROM_LOG_MODE);
-#endif
-
     SYS_STARTUP_FN();
 }

+ 17 - 0
components/esp_system/startup.c

@@ -81,6 +81,19 @@
     #error "System has been configured to run on multiple cores, but target SoC only has a single core."
 #endif
 
+// Set efuse ROM_LOG_MODE on first boot
+//
+// For CONFIG_BOOT_ROM_LOG_ALWAYS_ON (default) or undefined (ESP32), leave
+// ROM_LOG_MODE undefined (no need to call this function during startup)
+#if CONFIG_BOOT_ROM_LOG_ALWAYS_OFF
+#define ROM_LOG_MODE ESP_EFUSE_ROM_LOG_ALWAYS_OFF
+#elif CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW
+#define ROM_LOG_MODE ESP_EFUSE_ROM_LOG_ON_GPIO_LOW
+#elif CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH
+#define ROM_LOG_MODE ESP_EFUSE_ROM_LOG_ON_GPIO_HIGH
+#endif
+
+
 uint64_t g_startup_time = 0;
 
 #if SOC_APB_BACKUP_DMA
@@ -347,6 +360,10 @@ static void do_core_init(void)
     esp_secure_boot_init_checks();
 #endif
 
+#ifdef ROM_LOG_MODE
+    esp_efuse_set_rom_log_scheme(ROM_LOG_MODE);
+#endif
+
 #if CONFIG_ESP_XT_WDT
     esp_xt_wdt_config_t cfg = {
         .timeout                = CONFIG_ESP_XT_WDT_TIMEOUT,