From fe70172a35abfbf468a1fac7f1d84d3d41e9e4b4 Mon Sep 17 00:00:00 2001 From: jiangguangming Date: Wed, 2 Nov 2022 14:06:56 +0800 Subject: [PATCH 1/4] esp_rom: update esp32c6 rom caps 1. esp32c6 rom support ESP_ROM_HAS_HAL_WDT 2. esp32c6 rom support ESP_ROM_HAS_HAL_SYSTIMER --- components/esp_rom/esp32c6/Kconfig.soc_caps.in | 16 ++++++++++++---- components/esp_rom/esp32c6/esp_rom_caps.h | 4 +++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/components/esp_rom/esp32c6/Kconfig.soc_caps.in b/components/esp_rom/esp32c6/Kconfig.soc_caps.in index abb7f8fe10..937fc2e2c7 100644 --- a/components/esp_rom/esp32c6/Kconfig.soc_caps.in +++ b/components/esp_rom/esp32c6/Kconfig.soc_caps.in @@ -31,6 +31,18 @@ config ESP_ROM_GET_CLK_FREQ bool default y +config ESP_ROM_HAS_RVFPLIB + bool + default y + +config ESP_ROM_HAS_HAL_WDT + bool + default y + +config ESP_ROM_HAS_HAL_SYSTIMER + bool + default y + config ESP_ROM_HAS_HEAP_TLSF bool default y @@ -39,10 +51,6 @@ config ESP_ROM_HAS_LAYOUT_TABLE bool default y -config ESP_ROM_HAS_RVFPLIB - bool - default y - config ESP_ROM_HAS_SPI_FLASH bool default y diff --git a/components/esp_rom/esp32c6/esp_rom_caps.h b/components/esp_rom/esp32c6/esp_rom_caps.h index 4305caa9a0..ffdabb66bc 100644 --- a/components/esp_rom/esp32c6/esp_rom_caps.h +++ b/components/esp_rom/esp32c6/esp_rom_caps.h @@ -13,7 +13,9 @@ #define ESP_ROM_USB_SERIAL_DEVICE_NUM (3) // UART uses USB_SERIAL_JTAG port in ROM. #define ESP_ROM_HAS_RETARGETABLE_LOCKING (1) // ROM was built with retargetable locking #define ESP_ROM_GET_CLK_FREQ (1) // Get clk frequency with rom function `ets_get_cpu_frequency` +#define ESP_ROM_HAS_RVFPLIB (1) // ROM has the rvfplib +#define ESP_ROM_HAS_HAL_WDT (1) // ROM has the implementation of Watchdog HAL driver +#define ESP_ROM_HAS_HAL_SYSTIMER (1) // ROM has the implementation of Systimer HAL driver #define ESP_ROM_HAS_HEAP_TLSF (1) // ROM has the implementation of the tlsf and multi-heap library #define ESP_ROM_HAS_LAYOUT_TABLE (1) // ROM has the layout table -#define ESP_ROM_HAS_RVFPLIB (1) // ROM has the rvfplib #define ESP_ROM_HAS_SPI_FLASH (1) // ROM has the implementation of SPI Flash driver From 14e974fd4490037d71d00f4fda804f2026189449 Mon Sep 17 00:00:00 2001 From: jiangguangming Date: Wed, 2 Nov 2022 19:46:55 +0800 Subject: [PATCH 2/4] esp_rom: esp32c6 support spiflash driver rom implementation --- components/esp_rom/CMakeLists.txt | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/components/esp_rom/CMakeLists.txt b/components/esp_rom/CMakeLists.txt index 8861f70abb..a687bd600f 100644 --- a/components/esp_rom/CMakeLists.txt +++ b/components/esp_rom/CMakeLists.txt @@ -70,15 +70,6 @@ else() target_linker_script(${COMPONENT_LIB} INTERFACE "${target}/${ld_folder}/${target}.rom.ld") rom_linker_script("api") - # esp32c6.rom.api.ld has been split to several lds by components - if(target STREQUAL "esp32c6") - rom_linker_script("phy") - rom_linker_script("coexist") - rom_linker_script("net80211") - rom_linker_script("pp") - # rom_linker_script("spiflash") # TODO: IDF-5632 (Supports more rom components) - endif() - if(CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB) rom_linker_script("libgcc") else() @@ -117,6 +108,8 @@ if(BOOTLOADER_BUILD) elseif(target STREQUAL "esp32c6") rom_linker_script("newlib") + # The linking of the bootloader needs to use the rom_i2c_writeReg_Mask in esp32c6.rom.phy.ld + rom_linker_script("phy") endif() else() # Regular app build @@ -233,6 +226,17 @@ else() # Regular app build elseif(target STREQUAL "esp32c6") rom_linker_script("newlib") rom_linker_script("version") + + # esp32c6.rom.api.ld has been split to several lds by components. + rom_linker_script("phy") + rom_linker_script("coexist") + rom_linker_script("net80211") + rom_linker_script("pp") + + if(CONFIG_SPI_FLASH_ROM_IMPL) + rom_linker_script("spiflash") + endif() + endif() if(CONFIG_HEAP_TLSF_USE_ROM_IMPL) From a8df72745b15c5b3df73203d19f60ebfcc5ffaaf Mon Sep 17 00:00:00 2001 From: jiangguangming Date: Wed, 2 Nov 2022 19:49:48 +0800 Subject: [PATCH 3/4] esp_rom: esp32c6 rom newlib support normal-formatting version --- components/esp_rom/CMakeLists.txt | 12 +++++++ .../esp32c6/ld/esp32c6.rom.newlib-nano.ld | 32 ------------------- 2 files changed, 12 insertions(+), 32 deletions(-) delete mode 100644 components/esp_rom/esp32c6/ld/esp32c6.rom.newlib-nano.ld diff --git a/components/esp_rom/CMakeLists.txt b/components/esp_rom/CMakeLists.txt index a687bd600f..4ec45e00dc 100644 --- a/components/esp_rom/CMakeLists.txt +++ b/components/esp_rom/CMakeLists.txt @@ -237,6 +237,18 @@ else() # Regular app build rom_linker_script("spiflash") endif() + if(time_t_size EQUAL 8) + # The ROM functions listed in this linker script depend on sizeof(time_t). + # ESP32-C6 ROM was compiled for 64-bit time_t, only link these functions + # if the toolchain is also using 64-bit time_t. + rom_linker_script("newlib-time") + + if(NOT CONFIG_NEWLIB_NANO_FORMAT) + # Normal(Non-nano) formatting functions in ROM are also built for 64-bit time_t. + rom_linker_script("newlib-normal") + endif() + endif() + endif() if(CONFIG_HEAP_TLSF_USE_ROM_IMPL) diff --git a/components/esp_rom/esp32c6/ld/esp32c6.rom.newlib-nano.ld b/components/esp_rom/esp32c6/ld/esp32c6.rom.newlib-nano.ld deleted file mode 100644 index ceb70b0fd5..0000000000 --- a/components/esp_rom/esp32c6/ld/esp32c6.rom.newlib-nano.ld +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -/* ROM function interface esp32c6.rom.newlib-nano.ld for esp32c6 - * - * - * Generated from ./target/esp32c6/interface-esp32c6.yml md5sum ff3b116f1987b5a5433645b8f7947f32 - * - * Compatible with ROM where ECO version equal or greater to 0. - * - * THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT. - */ - -/*************************************** - Group newlib_nano_format - ***************************************/ - -/* Functions */ -__sprint_r = 0x400005c8; -_fiprintf_r = 0x400005cc; -_fprintf_r = 0x400005d0; -_printf_common = 0x400005d4; -_printf_i = 0x400005d8; -_vfiprintf_r = 0x400005dc; -_vfprintf_r = 0x400005e0; -fiprintf = 0x400005e4; -fprintf = 0x400005e8; -printf = 0x400005ec; -vfiprintf = 0x400005f0; -vfprintf = 0x400005f4; From 15c8f296f40372408a44b125be7f899b10ea19d1 Mon Sep 17 00:00:00 2001 From: jiangguangming Date: Wed, 2 Nov 2022 20:05:20 +0800 Subject: [PATCH 4/4] esp_rom: move esp_rom_spiflash_write_disable to esp32c6.rom.ld --- components/esp_rom/esp32c6/ld/esp32c6.rom.ld | 2 ++ components/esp_rom/esp32c6/ld/esp32c6.rom.spiflash.ld | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/components/esp_rom/esp32c6/ld/esp32c6.rom.ld b/components/esp_rom/esp32c6/ld/esp32c6.rom.ld index d43d88553c..88adb38f83 100644 --- a/components/esp_rom/esp32c6/ld/esp32c6.rom.ld +++ b/components/esp_rom/esp32c6/ld/esp32c6.rom.ld @@ -166,6 +166,8 @@ rom_spiflash_legacy_funcs = 0x4087fff0; rom_spiflash_legacy_data = 0x4087ffec; g_flash_guard_ops = 0x4087fff4; +/* Note: esp_rom_spiflash_write_disable was moved from esp32c6.rom.spiflash.ld */ +esp_rom_spiflash_write_disable = 0x40000278; /*************************************** Group hal_wdt diff --git a/components/esp_rom/esp32c6/ld/esp32c6.rom.spiflash.ld b/components/esp_rom/esp32c6/ld/esp32c6.rom.spiflash.ld index 3e35d56c60..55f28f0330 100644 --- a/components/esp_rom/esp32c6/ld/esp32c6.rom.spiflash.ld +++ b/components/esp_rom/esp32c6/ld/esp32c6.rom.spiflash.ld @@ -66,7 +66,7 @@ esp_flash_set_io_mode = 0x40000268; spi_flash_boot_attach = 0x4000026c; esp_flash_read_chip_id = 0x40000270; detect_spi_flash_chip = 0x40000274; -esp_rom_spiflash_write_disable = 0x40000278; +/* esp_rom_spiflash_write_disable = 0x40000278; */ esp_flash_suspend_cmd_init = 0x4000027c; /* Data (.data, .bss, .rodata) */ esp_flash_default_chip = 0x4087ffe8;