From a1a6e8a1a37a6d08a3214b2701f216177a46981d Mon Sep 17 00:00:00 2001 From: Sylvio Alves Date: Thu, 24 Oct 2024 19:37:12 -0300 Subject: [PATCH] soc: esp32c6: update linker files Add new wifi sections into iram area. Add new functions to iram area. Remove unused entries. Signed-off-by: Sylvio Alves --- soc/espressif/esp32c6/Kconfig | 12 ---- soc/espressif/esp32c6/default.ld | 111 ++++++++++++++++++++++--------- soc/espressif/esp32c6/mcuboot.ld | 4 -- 3 files changed, 81 insertions(+), 46 deletions(-) diff --git a/soc/espressif/esp32c6/Kconfig b/soc/espressif/esp32c6/Kconfig index 7c5c00e4777..88963c36cd8 100644 --- a/soc/espressif/esp32c6/Kconfig +++ b/soc/espressif/esp32c6/Kconfig @@ -18,18 +18,6 @@ config SOC_SERIES_ESP32C6 if SOC_SERIES_ESP32C6 -config ESP32_PHY_MAX_WIFI_TX_POWER - int "Max WiFi TX power (dBm)" - range 10 20 - default 20 - help - Set maximum transmit power for WiFi radio. Actual transmit power for high - data rates may be lower than this setting. - -config ESP32_PHY_MAX_TX_POWER - int - default ESP32_PHY_MAX_WIFI_TX_POWER - config MAC_BB_PD bool "Power down MAC and baseband of Wi-Fi and Bluetooth when PHY is disabled" depends on SOC_SERIES_ESP32C6 && TICKLESS_KERNEL diff --git a/soc/espressif/esp32c6/default.ld b/soc/espressif/esp32c6/default.ld index 514c7ef058b..9cd69db8e3a 100644 --- a/soc/espressif/esp32c6/default.ld +++ b/soc/espressif/esp32c6/default.ld @@ -68,9 +68,9 @@ MEMORY mmap0_0_seg (R): org = CACHED_ORG, len = CACHED_SIZE lp_ram_seg(RW): org = LPSRAM_IRAM_START, - len = 0x4000 - RESERVE_RTC_MEM + len = 0x2000 - RESERVE_RTC_MEM - lp_reserved_seg(RW) : org = LPSRAM_IRAM_START + 0x4000 - RESERVE_RTC_MEM, + lp_reserved_seg(RW) : org = LPSRAM_IRAM_START + 0x2000 - RESERVE_RTC_MEM, len = RESERVE_RTC_MEM #ifdef CONFIG_GEN_ISR_TABLES @@ -145,35 +145,65 @@ SECTIONS .rtc.text : { . = ALIGN(4); + _rtc_fast_start = ABSOLUTE(.); + _rtc_text_start = ABSOLUTE(.); + *(.rtc.entry.text) *(.rtc.literal .rtc.text) *rtc_wake_stub*.o(.literal .text .literal.* .text.*) + . = ALIGN(4); + + _rtc_text_end = ABSOLUTE(.); } GROUP_DATA_LINK_IN(rtc_iram_seg, ROMABLE_REGION) - /* This section is required to skip rtc.text area because the text and - * data segments reflect the same address space on different buses. + /* This section located in RTC FAST Memory area. + * It holds data marked with RTC_FAST_ATTR attribute. + * See the file "esp_attr.h" for more information. */ - .rtc.dummy (NOLOAD): + .rtc.force_fast : { - . = SIZEOF(.rtc.text); - } GROUP_LINK_IN(rtc_iram_seg) + . = ALIGN(4); + _rtc_force_fast_start = ABSOLUTE(.); + *(.rtc.force_fast .rtc.force_fast.*) + . = ALIGN(4) ; + _rtc_force_fast_end = ABSOLUTE(.); + } GROUP_DATA_LINK_IN(rtc_data_seg, ROMABLE_REGION) + + /* RTC data section holds data marked with + * RTC_DATA_ATTR, RTC_RODATA_ATTR attributes. + */ .rtc.data : { _rtc_data_start = ABSOLUTE(.); *(.rtc.data) *(.rtc.rodata) - *rtc_wake_stub*.o(.data .rodata .data.* .rodata.* .bss .bss.*) _rtc_data_end = ABSOLUTE(.); } GROUP_DATA_LINK_IN(rtc_iram_seg, ROMABLE_REGION) .rtc.bss (NOLOAD) : { _rtc_bss_start = ABSOLUTE(.); - *rtc_wake_stub*.o(.bss .bss.*) - *rtc_wake_stub*.o(COMMON) + + *(.rtc.data) + *(.rtc.rodata) + _rtc_bss_end = ABSOLUTE(.); } GROUP_LINK_IN(rtc_iram_seg) + /* This section holds data that should not be initialized at power up + * and will be retained during deep sleep. + * User data marked with RTC_NOINIT_ATTR will be placed + * into this section. See the file "esp_attr.h" for more information. + */ + .rtc_noinit (NOLOAD): + { + . = ALIGN(4); + _rtc_noinit_start = ABSOLUTE(.); + *(.rtc_noinit .rtc_noinit.*) + . = ALIGN(4) ; + _rtc_noinit_end = ABSOLUTE(.); + } GROUP_LINK_IN(rtc_slow_seg) + /* This section located in RTC SLOW Memory area. * It holds data marked with RTC_SLOW_ATTR attribute. * See the file "esp_attr.h" for more information. @@ -183,12 +213,33 @@ SECTIONS . = ALIGN(4); _rtc_force_slow_start = ABSOLUTE(.); *(.rtc.force_slow .rtc.force_slow.*) - . = ALIGN(4) ; + . = ALIGN(4); _rtc_force_slow_end = ABSOLUTE(.); - } > rtc_slow_seg + } GROUP_DATA_LINK_IN(rtc_slow_seg, ROMABLE_REGION) - /* Get size of rtc slow data */ + /** + * This section holds RTC data that should have fixed addresses. + * The data are not initialized at power-up and are retained during deep sleep. + */ + .rtc_reserved (NOLOAD): + { + . = ALIGN(4); + _rtc_reserved_start = ABSOLUTE(.); + /* New data can only be added here to ensure existing data are not moved. + Because data have adhered to the end of the segment and code is relied on it. + >> put new data here << */ + + *(.rtc_timer_data_in_rtc_mem .rtc_timer_data_in_rtc_mem.*) + KEEP(*(.bootloader_data_rtc_mem .bootloader_data_rtc_mem.*)) + _rtc_reserved_end = ABSOLUTE(.); + } GROUP_LINK_IN(rtc_reserved_seg) + + /* Get size of rtc slow data based on rtc_data_location alias */ _rtc_slow_length = (_rtc_force_slow_end - _rtc_data_start); + _rtc_fast_length = (_rtc_force_fast_end - _rtc_fast_start); + + ASSERT((_rtc_slow_length <= LENGTH(rtc_slow_seg)), "RTC_SLOW segment data does not fit.") + ASSERT((_rtc_fast_length <= LENGTH(rtc_data_seg)), "RTC_FAST segment data does not fit.") /* --- END OF RTC --- */ @@ -229,7 +280,6 @@ SECTIONS *libkernel.a:(.literal .text .literal.* .text.*) *libgcc.a:lib2funcs.*(.literal .text .literal.* .text.*) *libdrivers__flash.a:flash_esp32.*(.literal .text .literal.* .text.*) - *libzephyr.a:spi_flash_rom_patch.*(.literal .text .literal.* .text.*) *libzephyr.a:log_noos.*(.literal .text .literal.* .text.*) *libdrivers__timer.a:esp32c6_sys_timer.*(.literal .text .literal.* .text.*) *libzephyr.a:log_core.*(.literal .text .literal.* .text.*) @@ -259,6 +309,8 @@ SECTIONS *libzephyr.a:wdt_hal_iram.*(.literal .text .literal.* .text.*) *libzephyr.a:systimer_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:spi_flash_hal_gpspi.*(.literal .literal.* .text .text.*) + *libzephyr.a:modem_clock_hal.*(.literal .literal.* .text .text.*) + *libzephyr.a:modem_clock.*(.literal .literal.* .text .text.*) /* [mapping:soc] */ *libzephyr.a:lldesc.*(.literal .literal.* .text .text.*) @@ -284,7 +336,7 @@ SECTIONS *libzephyr.a:flash_brownout_hook.*(.literal .literal.* .text .text.*) *libzephyr.a:spi_flash_wrap.*(.literal .literal.* .text .text.*) *libzephyr.a:spi_flash_hpm_enable.*(.literal .literal.* .text .text.*) - *libzephyr.a:spi_flash_oct_flash_init*(.literal .literal.* .text .text.*) + *libzephyr.a:flash_ops.*(.literal .literal.* .text .text.*) /* [mapping:esp_system] */ *libzephyr.a:reset_reason.*(.literal .literal.* .text .text.*) @@ -303,6 +355,7 @@ SECTIONS *(.literal.rtc_vddsdio_set_config .text.rtc_vddsdio_set_config) *libzephyr.a:esp_memory_utils.*(.literal .literal.* .text .text.*) *libzephyr.a:pmu_init.*(.literal .literal.* .text .text.*) + *libzephyr.a:pmu_param.*(.literal .literal.* .text .text.*) *libzephyr.a:rtc_clk.*(.literal .literal.* .text .text.*) *libzephyr.a:rtc_clk_init.*(.literal .literal.* .text .text.*) *libzephyr.a:rtc_time.*(.literal .literal.* .text .text.*) @@ -316,17 +369,14 @@ SECTIONS *(.literal.GPIO_HOLD_MASK .text.GPIO_HOLD_MASK) /* [mapping:esp_rom] */ - *libzephyr.a:esp_rom_spiflash.*(.literal .literal.* .text .text.*) - *libzephyr.a:esp_rom_systimer.*(.literal .literal.* .text .text.*) - *libzephyr.a:esp_rom_wdt.*(.literal .literal.* .text .text.*) - *libzephyr.a:esp_rom_crc.*(.literal .literal.* .text .text.*) *libzephyr.a:esp_rom_sys.*(.literal .literal.* .text .text.*) *libzephyr.a:esp_rom_uart.*(.literal .literal.* .text .text.*) *libzephyr.a:esp_rom_spiflash.*(.literal .literal.* .text .text.*) *libzephyr.a:esp_rom_efuse.*(.literal .literal.* .text .text.*) *libzephyr.a:esp_rom_systimer.*(.literal .literal.* .text .text.*) - *libzephyr.a:esp_rom_regi2c_esp32c6.*(.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] */ @@ -338,9 +388,8 @@ SECTIONS *libzephyr.a:bootloader_random*.*(.literal.bootloader_random_enable .text.bootloader_random_enable) #if defined(CONFIG_ESP32_WIFI_IRAM_OPT) - *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.*) - *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.*) - *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.*) + *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) + *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) /* [mapping:esp_wifi] */ *(.literal.wifi_clock_enable_wrapper .text.wifi_clock_enable_wrapper) @@ -383,7 +432,6 @@ SECTIONS *libzephyr.a:esp_image_format.*(.literal .text .literal.* .text.*) *libzephyr.a:flash_ops.*(.literal .text .literal.* .text.*) - *libzephyr.a:flash_ops_esp32c6.*(.literal .text .literal.* .text.*) *libzephyr.a:flash_encrypt.*(.literal .text .literal.* .text.*) *libzephyr.a:flash_encryption_secure_features.*(.literal .text .literal.* .text.*) *libzephyr.a:flash_partitions.*(.literal .text .literal.* .text.*) @@ -402,6 +450,8 @@ SECTIONS *libzephyr.a:secure_boot_secure_features.*(.literal .text .literal.* .text.*) *libzephyr.a:secure_boot_signatures_bootloader.*(.literal .text .literal.* .text.*) + *libzephyr.a:regi2c_ctrl.*(.literal .text .literal.* .text.*) + *libzephyr.a:cpu_region_protect.*(.literal .text .literal.* .text.*) /* TODO: optimise */ @@ -474,7 +524,6 @@ SECTIONS *libzephyr.a:log_output.*(.rodata .rodata.* .srodata .srodata.*) *libdrivers__flash.a:flash_esp32.*(.rodata .rodata.* .srodata .srodata.*) *libdrivers__serial.a:uart_esp32.*(.rodata .rodata.* .srodata .srodata.*) - *libzephyr.a:spi_flash_rom_patch.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:periph_ctrl.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:loader.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:cache_utils.*(.rodata .rodata.* .srodata .srodata.*) @@ -489,6 +538,8 @@ SECTIONS *libzephyr.a:wdt_hal_iram.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:systimer_hal.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_hal_gpspi.*(.rodata .rodata.* .srodata .srodata.*) + *libzephyr.a:modem_clock_hal.*(.rodata .rodata.* .srodata .srodata.*) + *libzephyr.a:modem_clock.*(.rodata .rodata.* .srodata .srodata.*) /* [mapping:soc] */ *libzephyr.a:lldesc.*(.rodata .rodata.* .srodata .srodata.*) @@ -514,7 +565,7 @@ SECTIONS *libzephyr.a:flash_brownout_hook.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_wrap.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_hpm_enable.*(.rodata .rodata.* .srodata .srodata.*) - *libzephyr.a:spi_flash_oct_flash_init.*(.rodata .rodata.* .srodata .srodata.*) + *libzephyr.a:flash_ops.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) *libzephyr.a:flash_qio_mode.*(.rodata .rodata.* .srodata .srodata.*) /* [mapping:esp_mm] */ @@ -538,6 +589,7 @@ SECTIONS *libzephyr.a:mspi_timing_tuning.*(.rodata .rodata.* .srodata .srodata.*) *(.rodata.sar_periph_ctrl_power_enable) *libzephyr.a:pmu_init.*(.rodata .rodata.* .srodata .srodata.*) + *libzephyr.a:pmu_param.*(.rodata .rodata.* .srodata .srodata.*) /* [mapping:esp_system] */ *libzephyr.a:reset_reason.*(.rodata .rodata.*) @@ -551,7 +603,7 @@ SECTIONS *libzephyr.a:esp_rom_spiflash.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:esp_rom_efuse.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:esp_rom_systimer.*(.rodata .rodata.* .srodata .srodata.*) - *libzephyr.a:esp_rom_regi2c_esp32c6.*(.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); @@ -585,7 +637,6 @@ SECTIONS *libzephyr.a:esp_clk.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:flash_mmap.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:flash_ops.*(.rodata .rodata.* .srodata .srodata.*) - *libzephyr.a:flash_ops_esp32c6.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:esp_gpio_reserve.*(.rodata .rodata.* .srodata .srodata.*) *libzephyr.a:spi_flash_hal.*(.rodata .rodata.* .srodata .srodata.*) @@ -686,8 +737,8 @@ SECTIONS __rom_region_start = ABSOLUTE(.); #if !defined(CONFIG_ESP32_WIFI_IRAM_OPT) - *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.*) - *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.*) + *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) + *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) #endif /* CONFIG_ESP32_WIFI_IRAM_OPT */ #if !defined(CONFIG_ESP32_WIFI_RX_IRAM_OPT) diff --git a/soc/espressif/esp32c6/mcuboot.ld b/soc/espressif/esp32c6/mcuboot.ld index a96d80471ac..8c76315ffe3 100644 --- a/soc/espressif/esp32c6/mcuboot.ld +++ b/soc/espressif/esp32c6/mcuboot.ld @@ -48,7 +48,6 @@ SECTIONS *libzephyr.a:cbprintf_nano.*(.literal .text .literal.* .text.*) *libzephyr.a:cpu.*(.literal .text .literal.* .text.*) *libzephyr.a:mmu_hal.*(.literal .text .literal.* .text.*) - *libzephyr.a:cache_hal.*(.literal .text .literal.* .text.*) *libzephyr.a:flash_map.*(.literal .text .literal.* .text.*) *libzephyr.a:esp_rom_spiflash.*(.literal .text .literal.* .text.*) @@ -57,9 +56,6 @@ SECTIONS *libkernel.a:kheap.*(.literal .text .literal.* .text.*) *libkernel.a:mempool.*(.literal .text .literal.* .text.*) - *(.literal.bootloader_mmap .text.bootloader_mmap) - *(.literal.bootloader_munmap .text.bootloader_munmap) - *libzephyr.a:esp_loader.*(.literal .text .literal.* .text.*) *libzephyr.a:mmu_hal.*(.literal .text .literal.* .text.*)