From c6e5bee48a4d198eed953e52a1ab35022ae4216e Mon Sep 17 00:00:00 2001 From: jiangguangming Date: Fri, 4 Nov 2022 11:45:39 +0800 Subject: [PATCH] esp_rom: add rom api esp_rom_uart_set_as_console for riscv chips --- components/esp_rom/CMakeLists.txt | 2 +- components/esp_rom/patches/esp_rom_uart.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/components/esp_rom/CMakeLists.txt b/components/esp_rom/CMakeLists.txt index ccb2469800..19388d9f0f 100644 --- a/components/esp_rom/CMakeLists.txt +++ b/components/esp_rom/CMakeLists.txt @@ -19,7 +19,7 @@ else() "patches/esp_rom_uart.c" "patches/esp_rom_tjpgd.c" "patches/esp_rom_efuse.c") - list(APPEND private_required_comp soc hal) + list(APPEND private_required_comp soc hal efuse) endif() if(CONFIG_IDF_TARGET_ARCH_XTENSA) diff --git a/components/esp_rom/patches/esp_rom_uart.c b/components/esp_rom/patches/esp_rom_uart.c index 78fa08ec1a..f7567b1abe 100644 --- a/components/esp_rom/patches/esp_rom_uart.c +++ b/components/esp_rom/patches/esp_rom_uart.c @@ -15,6 +15,7 @@ #include #include #include "esp_attr.h" +#include "esp_efuse.h" #include "sdkconfig.h" #include "hal/uart_ll.h" @@ -33,3 +34,25 @@ IRAM_ATTR void esp_rom_uart_set_clock_baudrate(uint8_t uart_no, uint32_t clock_h (void)clock_hz; uart_ll_set_baudrate(UART_LL_GET_HW(uart_no), baud_rate); } + +#if CONFIG_IDF_TARGET_ESP32C3 +/** + * The ESP32-C3 ROM has released two versions, one is the ECO3 version, + * and the other is the version before ECO3 (include ECO0 ECO1 ECO2). + * These two versions of the ROM code do not list uart_tx_switch wrap + * function in the ROM interface, so here use the uart_tx_switch direct + * address instead. + */ +IRAM_ATTR void esp_rom_uart_set_as_console(uint8_t uart_no) +{ + typedef void (*rom_func_t)(uint8_t); + rom_func_t uart_tx_switch = NULL; + + if (esp_efuse_get_chip_ver() < 3) { + uart_tx_switch = (rom_func_t)0x4004b8ca; + } else { + uart_tx_switch = (rom_func_t)0x4004c166; + } + uart_tx_switch(uart_no); +} +#endif