/* * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #include #include #include static struct k_spinlock loglock; void smp_log(const char *msg) { while (*msg) { esp_rom_uart_tx_one_char(*msg++); } esp_rom_uart_tx_one_char('\r'); esp_rom_uart_tx_one_char('\n'); } void esp_appcpu_start(void *entry_point) { soc_ll_unstall_core(1); if (!REG_GET_BIT(SYSTEM_CORE_1_CONTROL_0_REG, SYSTEM_CONTROL_CORE_1_CLKGATE_EN)) { REG_SET_BIT(SYSTEM_CORE_1_CONTROL_0_REG, SYSTEM_CONTROL_CORE_1_CLKGATE_EN); REG_CLR_BIT(SYSTEM_CORE_1_CONTROL_0_REG, SYSTEM_CONTROL_CORE_1_RUNSTALL); REG_SET_BIT(SYSTEM_CORE_1_CONTROL_0_REG, SYSTEM_CONTROL_CORE_1_RESETTING); REG_CLR_BIT(SYSTEM_CORE_1_CONTROL_0_REG, SYSTEM_CONTROL_CORE_1_RESETTING); } esp_rom_ets_set_appcpu_boot_addr((void *)entry_point); ets_delay_us(50000); smp_log("ESP32S3: CPU1 start sequence complete"); }