From 6babdfc0b792e3ea5e1d233f8d9ae80b4367c5f2 Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Wed, 11 Mar 2020 14:26:24 +0530 Subject: [PATCH] ipc: prevent code getting pulled in for unicore configuration --- components/bt/bt.c | 10 +++++++--- components/driver/gpio.c | 10 +++++++++- components/esp32/CMakeLists.txt | 5 ++++- components/esp32/component.mk | 4 ++++ components/esp32/cpu_start.c | 1 - components/esp32/intr_alloc.c | 10 +++++++++- components/esp32/test/test_ipc.c | 7 +++---- 7 files changed, 36 insertions(+), 11 deletions(-) diff --git a/components/bt/bt.c b/components/bt/bt.c index 9415f8c6e..38d8b1bdb 100644 --- a/components/bt/bt.c +++ b/components/bt/bt.c @@ -37,14 +37,15 @@ #include "esp_err.h" #include "esp_log.h" #include "esp_pm.h" -#include "esp_ipc.h" #include "driver/periph_ctrl.h" #include "soc/rtc.h" #include "soc/rtc_cntl_reg.h" #include "soc/soc_memory_layout.h" #include "esp_clk.h" #include "esp_coexist_internal.h" - +#if !CONFIG_FREERTOS_UNICORE +#include "esp_ipc.h" +#endif #if CONFIG_BT_ENABLED @@ -742,12 +743,15 @@ static int IRAM_ATTR cause_sw_intr_to_core_wrapper(int core_id, int intr_no) { esp_err_t err = ESP_OK; +#if CONFIG_FREERTOS_UNICORE + cause_sw_intr((void *)intr_no); +#else /* CONFIG_FREERTOS_UNICORE */ if (xPortGetCoreID() == core_id) { cause_sw_intr((void *)intr_no); } else { err = esp_ipc_call(core_id, cause_sw_intr, (void *)intr_no); } - +#endif /* !CONFIG_FREERTOS_UNICORE */ return err; } diff --git a/components/driver/gpio.c b/components/driver/gpio.c index 7ab93ac99..fc365c44a 100644 --- a/components/driver/gpio.c +++ b/components/driver/gpio.c @@ -22,7 +22,9 @@ #include "soc/soc.h" #include "esp_log.h" #include "soc/gpio_periph.h" +#if !CONFIG_FREERTOS_UNICORE #include "esp_ipc.h" +#endif #define GPIO_CHECK(a, str, ret_val) \ if (!(a)) { \ @@ -455,7 +457,13 @@ esp_err_t gpio_isr_register(void (*fn)(void*), void * arg, int intr_alloc_flags, isr_core_id = xPortGetCoreID(); } portEXIT_CRITICAL(&gpio_spinlock); - esp_err_t ret = esp_ipc_call_blocking(isr_core_id, gpio_isr_register_on_core_static, (void *)&p); + esp_err_t ret; +#if CONFIG_FREERTOS_UNICORE + gpio_isr_register_on_core_static(&p); + ret = ESP_OK; +#else /* CONFIG_FREERTOS_UNICORE */ + ret = esp_ipc_call_blocking(isr_core_id, gpio_isr_register_on_core_static, (void *)&p); +#endif /* !CONFIG_FREERTOS_UNICORE */ if(ret != ESP_OK || p.ret != ESP_OK) { return ESP_ERR_NOT_FOUND; } diff --git a/components/esp32/CMakeLists.txt b/components/esp32/CMakeLists.txt index 29b3633c8..1f4910e0a 100644 --- a/components/esp32/CMakeLists.txt +++ b/components/esp32/CMakeLists.txt @@ -33,7 +33,6 @@ else() "hw_random.c" "int_wdt.c" "intr_alloc.c" - "ipc.c" "lib_printf.c" "panic.c" "phy_init.c" @@ -53,6 +52,10 @@ else() "hwcrypto/sha.c") set(COMPONENT_ADD_INCLUDEDIRS "include") + if(NOT CONFIG_FREERTOS_UNICORE) + list(APPEND COMPONENT_SRCS "ipc.c") + endif() + set(COMPONENT_REQUIRES driver tcpip_adapter esp_event efuse) # driver is a public requirement because esp_sleep.h uses gpio_num_t & touch_pad_t # tcpip_adapter is a public requirement because esp_event.h uses tcpip_adapter types diff --git a/components/esp32/component.mk b/components/esp32/component.mk index 21d8ce6bc..67e72ed38 100644 --- a/components/esp32/component.mk +++ b/components/esp32/component.mk @@ -8,6 +8,10 @@ ifndef CONFIG_NO_BLOBS LIBS += core rtc net80211 pp wpa smartconfig coexist wps wpa2 espnow phy mesh endif +ifdef CONFIG_FREERTOS_UNICORE + COMPONENT_OBJEXCLUDE := ipc.o +endif + ifdef CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY # This linker script must come before esp32.project.ld LINKER_SCRIPTS += esp32.extram.bss.ld diff --git a/components/esp32/cpu_start.c b/components/esp32/cpu_start.c index 326716646..909f2486d 100644 --- a/components/esp32/cpu_start.c +++ b/components/esp32/cpu_start.c @@ -47,7 +47,6 @@ #include "nvs_flash.h" #include "esp_event.h" #include "esp_spi_flash.h" -#include "esp_ipc.h" #include "esp_crosscore_int.h" #include "esp_dport_access.h" #include "esp_log.h" diff --git a/components/esp32/intr_alloc.c b/components/esp32/intr_alloc.c index f72eae961..c4bc73fa0 100644 --- a/components/esp32/intr_alloc.c +++ b/components/esp32/intr_alloc.c @@ -29,9 +29,11 @@ #include "esp_intr.h" #include "esp_attr.h" #include "esp_intr_alloc.h" -#include "esp_ipc.h" #include #include +#if !CONFIG_FREERTOS_UNICORE +#include "esp_ipc.h" +#endif static const char* TAG = "intr_alloc"; @@ -706,20 +708,26 @@ esp_err_t IRAM_ATTR esp_intr_set_in_iram(intr_handle_t handle, bool is_in_iram) return ESP_OK; } +#if !CONFIG_FREERTOS_UNICORE static void esp_intr_free_cb(void *arg) { (void)esp_intr_free((intr_handle_t)arg); } +#endif /* !CONFIG_FREERTOS_UNICORE */ esp_err_t esp_intr_free(intr_handle_t handle) { bool free_shared_vector=false; if (!handle) return ESP_ERR_INVALID_ARG; + +#if !CONFIG_FREERTOS_UNICORE //Assign this routine to the core where this interrupt is allocated on. if (handle->vector_desc->cpu!=xPortGetCoreID()) { esp_err_t ret = esp_ipc_call_blocking(handle->vector_desc->cpu, &esp_intr_free_cb, (void *)handle); return ret == ESP_OK ? ESP_OK : ESP_FAIL; } +#endif /* !CONFIG_FREERTOS_UNICORE */ + portENTER_CRITICAL(&spinlock); esp_intr_disable(handle); if (handle->vector_desc->flags&VECDESC_FL_SHARED) { diff --git a/components/esp32/test/test_ipc.c b/components/esp32/test/test_ipc.c index c58e8f79a..f6dd53103 100644 --- a/components/esp32/test/test_ipc.c +++ b/components/esp32/test/test_ipc.c @@ -3,7 +3,9 @@ #include "freertos/task.h" #include "unity.h" #include "esp_ipc.h" +#include "sdkconfig.h" +#if !CONFIG_FREERTOS_UNICORE static void test_func_ipc_cb(void *arg) { vTaskDelay(50); @@ -14,10 +16,7 @@ static void test_func_ipc_cb(void *arg) TEST_CASE("Test blocking IPC function call", "[ipc]") { int val = 0x5a5a; -#ifdef CONFIG_FREERTOS_UNICORE - esp_ipc_call_blocking(xPortGetCoreID(), test_func_ipc_cb, &val); -#else esp_ipc_call_blocking(!xPortGetCoreID(), test_func_ipc_cb, &val); -#endif TEST_ASSERT_EQUAL_HEX(val, 0xa5a5); } +#endif /* !CONFIG_FREERTOS_UNICORE */