From 1903a8f41547decd8c829b9e537cd9c86b6cdee9 Mon Sep 17 00:00:00 2001 From: Sylvio Alves Date: Sun, 23 Feb 2025 23:27:51 -0300 Subject: [PATCH] soc: espressif: fix optimization flag boot fault When DEBUG_OPTIMIZATION or NO_OPTIMIZATION is enabled, efuse reading fails during bootloader start. Move those calls into IRAM area so that reading when cache is disabled works without any faults. In HAL side, we need to use low level calls to read CPU id instead of Zephyr's default one. Signed-off-by: Sylvio Alves --- soc/espressif/esp32/default.ld | 3 +-- soc/espressif/esp32c2/default.ld | 1 + soc/espressif/esp32c3/default.ld | 1 + soc/espressif/esp32c6/default.ld | 3 +-- soc/espressif/esp32s2/default.ld | 4 +--- soc/espressif/esp32s3/default.ld | 1 + west.yml | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) diff --git a/soc/espressif/esp32/default.ld b/soc/espressif/esp32/default.ld index 9d210a8040f..184b0d7a4f3 100644 --- a/soc/espressif/esp32/default.ld +++ b/soc/espressif/esp32/default.ld @@ -502,7 +502,6 @@ SECTIONS *libzephyr.a:secure_boot_secure_features.*(.literal .text .literal.* .text.*) *libzephyr.a:secure_boot_signatures_bootloader.*(.literal .text .literal.* .text.*) - *libzephyr.a:efuse_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:esp_efuse_table.*(.literal .text .literal.* .text.*) *libzephyr.a:esp_efuse_fields.*(.literal .text .literal.* .text.*) *libzephyr.a:esp_efuse_api.*(.literal .text .literal.* .text.*) @@ -604,6 +603,7 @@ SECTIONS *libzephyr.a:esp_psram_impl_quad.*(.rodata .rodata.*) /* [mapping:hal] */ + *libzephyr.a:efuse_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:mmu_hal.*(.rodata .rodata.*) *libzephyr.a:spi_flash_hal_iram.*(.rodata .rodata.*) *libzephyr.a:spi_flash_encrypt_hal_iram.*(.rodata .rodata.*) @@ -711,7 +711,6 @@ SECTIONS *libzephyr.a:esp_clk.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) *libzephyr.a:rtc_clk_init.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) *libzephyr.a:rtc_time.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) - *libzephyr.a:efuse_hal.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) *libzephyr.a:cpu_region_protect.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) *libzephyr.a:periph_ctrl.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) diff --git a/soc/espressif/esp32c2/default.ld b/soc/espressif/esp32c2/default.ld index 0c866ba9332..64b7498394f 100644 --- a/soc/espressif/esp32c2/default.ld +++ b/soc/espressif/esp32c2/default.ld @@ -467,6 +467,7 @@ SECTIONS *libzephyr.a:cache_utils.*(.rodata .rodata.* .srodata .srodata.*) /* [mapping:hal] */ + *libzephyr.a:efuse_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:mmu_hal.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_hal_iram.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_encrypt_hal_iram.*(.rodata .rodata.* .srodata .srodata.*) diff --git a/soc/espressif/esp32c3/default.ld b/soc/espressif/esp32c3/default.ld index 4cce6c7f1eb..7e8b9ebbbef 100644 --- a/soc/espressif/esp32c3/default.ld +++ b/soc/espressif/esp32c3/default.ld @@ -560,6 +560,7 @@ SECTIONS *libzephyr.a:cache_utils.*(.rodata .rodata.* .srodata .srodata.*) /* [mapping:hal] */ + *libzephyr.a:efuse_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:mmu_hal.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_hal_iram.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_encrypt_hal_iram.*(.rodata .rodata.* .srodata .srodata.*) diff --git a/soc/espressif/esp32c6/default.ld b/soc/espressif/esp32c6/default.ld index ea24cf1abff..20ad7ca98b6 100644 --- a/soc/espressif/esp32c6/default.ld +++ b/soc/espressif/esp32c6/default.ld @@ -421,7 +421,6 @@ SECTIONS *libzephyr.a:esp_rom_systimer.*(.literal .literal.* .text .text.*) *libzephyr.a:esp_rom_wdt.*(.literal .literal.* .text .text.*) *libzephyr.a:esp_rom_hp_regi2c_esp32c6.*(.literal .literal.* .text .text.*) - *libzephyr.a:efuse_hal.*(.literal .literal.* .text .text.*) /* [mapping:esp_mm] */ *libzephyr.a:esp_cache.*(.literal .literal.* .text .text.*) @@ -572,6 +571,7 @@ SECTIONS *libzephyr.a:cache_utils.*(.rodata .rodata.* .srodata .srodata.*) /* [mapping:hal] */ + *libzephyr.a:efuse_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:mmu_hal.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_hal_iram.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_encrypt_hal_iram.*(.rodata .rodata.* .srodata .srodata.*) @@ -647,7 +647,6 @@ SECTIONS *libzephyr.a:esp_rom_efuse.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:esp_rom_systimer.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:esp_rom_hp_regi2c_esp32c6.*(.rodata .rodata.* .srodata .srodata.*) - *libzephyr.a:efuse_hal.*(.rodata .rodata.* .srodata .srodata.*) . = ALIGN(4); #include diff --git a/soc/espressif/esp32s2/default.ld b/soc/espressif/esp32s2/default.ld index 085f3e70114..fa4ab5ecba1 100644 --- a/soc/espressif/esp32s2/default.ld +++ b/soc/espressif/esp32s2/default.ld @@ -510,7 +510,6 @@ SECTIONS *libzephyr.a:secure_boot.*(.literal .text .literal.* .text.*) *libzephyr.a:secure_boot_secure_features.*(.literal .text .literal.* .text.*) *libzephyr.a:secure_boot_signatures_bootloader.*(.literal .text .literal.* .text.*) - *libzephyr.a:efuse_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:esp_efuse_table.*(.literal .text .literal.* .text.*) *libzephyr.a:esp_efuse_fields.*(.literal .text .literal.* .text.*) *libzephyr.a:esp_efuse_api.*(.literal .text .literal.* .text.*) @@ -619,6 +618,7 @@ SECTIONS *libzephyr.a:esp_psram_impl_quad.*(.rodata .rodata.*) /* [mapping:hal] */ + *libzephyr.a:efuse_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:mmu_hal.*(.rodata .rodata.*) *libzephyr.a:spi_flash_hal_iram.*(.rodata .rodata.*) *libzephyr.a:spi_flash_encrypt_hal_iram.*(.rodata .rodata.*) @@ -736,8 +736,6 @@ SECTIONS *libzephyr.a:esp_flash_api.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) *libzephyr.a:esp_flash_spi_init.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) - *libzephyr.a:efuse_hal.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) - . = ALIGN(4); _loader_data_end = ABSOLUTE(.); } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) diff --git a/soc/espressif/esp32s3/default.ld b/soc/espressif/esp32s3/default.ld index e1c87a2de7a..943d2d70a1c 100644 --- a/soc/espressif/esp32s3/default.ld +++ b/soc/espressif/esp32s3/default.ld @@ -398,6 +398,7 @@ SECTIONS *libzephyr.a:esp_psram_impl_octal.*(.literal .literal.* .text .text.*) /* [mapping:hal] */ + *libzephyr.a:efuse_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:mmu_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:spi_flash_hal_iram.*(.literal .text .literal.* .text.*) *libzephyr.a:spi_flash_encrypt_hal_iram.*(.literal .text .literal.* .text.*) diff --git a/west.yml b/west.yml index 7b8e5cec119..fe8f2168b8e 100644 --- a/west.yml +++ b/west.yml @@ -162,7 +162,7 @@ manifest: groups: - hal - name: hal_espressif - revision: a459b40356f5e6fb55d92bcb458cec45365d5ec5 + revision: 202c59552dc98e5cd02386313e1977ecb17a131f path: modules/hal/espressif west-commands: west/west-commands.yml groups: