From 35f8df399595ebc462198b7ecdb26c46bad1478d Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Wed, 29 Jun 2022 14:28:28 +0530 Subject: [PATCH] freertos: Fix issue with bootup failure in ESP_MAIN_TASK_AFFINITY_CPU1 config Idle tick hook that indicates completion of scheduler init must be launched on other core than the one where main task runs. Earlier it was assumed that main task shall always run on PRO cpu but that behavior can be changed with ESP_MAIN_TASK_AFFINITY_CPU1 and hence this fix. Closes https://github.com/espressif/esp-idf/issues/9247 Closes IDFGH-7705 --- components/freertos/port/port_common.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/components/freertos/port/port_common.c b/components/freertos/port/port_common.c index 7815ba5942..1a45ef201b 100644 --- a/components/freertos/port/port_common.c +++ b/components/freertos/port/port_common.c @@ -87,10 +87,10 @@ void esp_startup_start_app_common(void) } #if !CONFIG_FREERTOS_UNICORE -static volatile bool s_app_cpu_startup_done = false; -static bool s_app_cpu_startup_idle_hook_cb(void) +static volatile bool s_other_cpu_startup_done = false; +static bool other_cpu_startup_idle_hook_cb(void) { - s_app_cpu_startup_done = true; + s_other_cpu_startup_done = true; return true; } #endif @@ -98,12 +98,12 @@ static bool s_app_cpu_startup_idle_hook_cb(void) static void main_task(void* args) { #if !CONFIG_FREERTOS_UNICORE - // Wait for FreeRTOS initialization to finish on APP CPU, before replacing its startup stack - esp_register_freertos_idle_hook_for_cpu(s_app_cpu_startup_idle_hook_cb, 1); - while (!s_app_cpu_startup_done) { + // Wait for FreeRTOS initialization to finish on other core, before replacing its startup stack + esp_register_freertos_idle_hook_for_cpu(other_cpu_startup_idle_hook_cb, !xPortGetCoreID()); + while (!s_other_cpu_startup_done) { ; } - esp_deregister_freertos_idle_hook_for_cpu(s_app_cpu_startup_idle_hook_cb, 1); + esp_deregister_freertos_idle_hook_for_cpu(other_cpu_startup_idle_hook_cb, !xPortGetCoreID()); #endif // [refactor-todo] check if there is a way to move the following block to esp_system startup