From 8fec484d2b0b9b00ccfedc79c53dcedb5f0ded54 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 19 Feb 2020 12:31:54 +0100 Subject: [PATCH] xtensa: add TRAX support for esp32s2 --- components/xtensa/CMakeLists.txt | 10 +++--- components/xtensa/component.mk | 1 + components/xtensa/esp32/trax_init.c | 46 +++++++++++++++++++++++++++ components/xtensa/esp32s2/trax_init.c | 38 ++++++++++++++++++++++ components/xtensa/trax.c | 43 +++++++------------------ 5 files changed, 101 insertions(+), 37 deletions(-) create mode 100644 components/xtensa/esp32/trax_init.c create mode 100644 components/xtensa/esp32s2/trax_init.c diff --git a/components/xtensa/CMakeLists.txt b/components/xtensa/CMakeLists.txt index 1f8df4536..e06de51b4 100644 --- a/components/xtensa/CMakeLists.txt +++ b/components/xtensa/CMakeLists.txt @@ -1,3 +1,5 @@ +idf_build_get_property(target IDF_TARGET) + if(BOOTLOADER_BUILD) # bootloader only needs headers from this component set(priv_requires soc) @@ -6,19 +8,17 @@ else() set(srcs "debug_helpers.c" "debug_helpers_asm.S" "expression_with_stack_xtensa_asm.S" - "expression_with_stack_xtensa.c" + "expression_with_stack_xtensa.c" "eri.c" + "trax.c" + "${target}/trax_init.c" ) if(IDF_TARGET STREQUAL "esp32s2") list(APPEND srcs "stdatomic.c") endif() - if(IDF_TARGET STREQUAL "esp32") - list(APPEND srcs "trax.c") - endif() endif() -idf_build_get_property(target IDF_TARGET) idf_component_register(SRCS ${srcs} INCLUDE_DIRS include ${target}/include LDFRAGMENTS linker.lf diff --git a/components/xtensa/component.mk b/components/xtensa/component.mk index 81a0e33e7..5bb61224a 100644 --- a/components/xtensa/component.mk +++ b/components/xtensa/component.mk @@ -4,3 +4,4 @@ COMPONENT_ADD_LDFLAGS += $(COMPONENT_PATH)/esp32/libhal.a COMPONENT_ADD_LDFRAGMENTS += linker.lf +COMPONENT_SRCDIRS := . esp32 diff --git a/components/xtensa/esp32/trax_init.c b/components/xtensa/esp32/trax_init.c new file mode 100644 index 000000000..c027ac52a --- /dev/null +++ b/components/xtensa/esp32/trax_init.c @@ -0,0 +1,46 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include "esp_err.h" +#include "esp_log.h" +#include "trax.h" +#include "soc/dport_reg.h" +#include "sdkconfig.h" + +#define TRACEMEM_MUX_PROBLK0_APPBLK1 0 +#define TRACEMEM_MUX_BLK0_ONLY 1 +#define TRACEMEM_MUX_BLK1_ONLY 2 +#define TRACEMEM_MUX_PROBLK1_APPBLK0 3 + +static const char* __attribute__((unused)) TAG = "trax"; + +int trax_enable(trax_ena_select_t which) +{ +#ifndef CONFIG_ESP32_TRAX + ESP_LOGE(TAG, "Trax_enable called, but trax is disabled in menuconfig!"); + return ESP_ERR_NO_MEM; +#endif +#ifndef CONFIG_ESP32_TRAX_TWOBANKS + if (which == TRAX_ENA_PRO_APP || which == TRAX_ENA_PRO_APP_SWAP) return ESP_ERR_NO_MEM; +#endif + if (which == TRAX_ENA_PRO_APP || which == TRAX_ENA_PRO_APP_SWAP) { + DPORT_WRITE_PERI_REG(DPORT_TRACEMEM_MUX_MODE_REG, (which == TRAX_ENA_PRO_APP_SWAP)?TRACEMEM_MUX_PROBLK1_APPBLK0:TRACEMEM_MUX_PROBLK0_APPBLK1); + } else { + DPORT_WRITE_PERI_REG(DPORT_TRACEMEM_MUX_MODE_REG, TRACEMEM_MUX_BLK0_ONLY); + } + DPORT_WRITE_PERI_REG(DPORT_PRO_TRACEMEM_ENA_REG, (which == TRAX_ENA_PRO_APP || which == TRAX_ENA_PRO_APP_SWAP || which == TRAX_ENA_PRO)); + DPORT_WRITE_PERI_REG(DPORT_APP_TRACEMEM_ENA_REG, (which == TRAX_ENA_PRO_APP || which == TRAX_ENA_PRO_APP_SWAP || which == TRAX_ENA_APP)); + return ESP_OK; +} diff --git a/components/xtensa/esp32s2/trax_init.c b/components/xtensa/esp32s2/trax_init.c new file mode 100644 index 000000000..01b2dbed9 --- /dev/null +++ b/components/xtensa/esp32s2/trax_init.c @@ -0,0 +1,38 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include "esp_err.h" +#include "esp_log.h" +#include "trax.h" +#include "soc/sensitive_reg.h" +#include "sdkconfig.h" + +#define TRACEMEM_MUX_BLK0_NUM 19 +#define TRACEMEM_MUX_BLK1_NUM 20 + +static const char* __attribute__((unused)) TAG = "trax"; + +int trax_enable(trax_ena_select_t which) +{ +#ifndef CONFIG_ESP32S2_TRAX + ESP_LOGE(TAG, "Trax_enable called, but trax is disabled in menuconfig!"); + return ESP_ERR_NO_MEM; +#endif + if (which != TRAX_ENA_PRO) { + return ESP_ERR_INVALID_ARG; + } + REG_WRITE(DPORT_PMS_OCCUPY_3_REG, BIT(TRACEMEM_MUX_BLK1_NUM-4)); + return ESP_OK; +} diff --git a/components/xtensa/trax.c b/components/xtensa/trax.c index ec64d1bc6..725e677d4 100644 --- a/components/xtensa/trax.c +++ b/components/xtensa/trax.c @@ -3,7 +3,7 @@ // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at - +// // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software @@ -13,44 +13,23 @@ // limitations under the License. #include -#include "soc/dport_reg.h" -#include "sdkconfig.h" -#include "esp_err.h" -#include "eri.h" -#include "xtensa-debug-module.h" -#include "trax.h" #include "esp_log.h" +#include "esp_err.h" +#include "xtensa-debug-module.h" +#include "eri.h" +#include "trax.h" +#include "sdkconfig.h" -#define TRACEMEM_MUX_PROBLK0_APPBLK1 0 -#define TRACEMEM_MUX_BLK0_ONLY 1 -#define TRACEMEM_MUX_BLK1_ONLY 2 -#define TRACEMEM_MUX_PROBLK1_APPBLK0 3 +#if defined(CONFIG_ESP32_TRAX) || defined(CONFIG_ESP32S2_TRAX) +#define WITH_TRAX 1 +#endif static const char* TAG = "trax"; -int trax_enable(trax_ena_select_t which) -{ -#if !CONFIG_ESP32_TRAX - ESP_LOGE(TAG, "Trax_enable called, but trax is disabled in menuconfig!"); - return ESP_ERR_NO_MEM; -#endif -#if !CONFIG_ESP32_TRAX_TWOBANKS - if (which == TRAX_ENA_PRO_APP || which == TRAX_ENA_PRO_APP_SWAP) return ESP_ERR_NO_MEM; -#endif - if (which == TRAX_ENA_PRO_APP || which == TRAX_ENA_PRO_APP_SWAP) { - DPORT_WRITE_PERI_REG(DPORT_TRACEMEM_MUX_MODE_REG, (which == TRAX_ENA_PRO_APP_SWAP)?TRACEMEM_MUX_PROBLK1_APPBLK0:TRACEMEM_MUX_PROBLK0_APPBLK1); - } else { - DPORT_WRITE_PERI_REG(DPORT_TRACEMEM_MUX_MODE_REG, TRACEMEM_MUX_BLK0_ONLY); - } - DPORT_WRITE_PERI_REG(DPORT_PRO_TRACEMEM_ENA_REG, (which == TRAX_ENA_PRO_APP || which == TRAX_ENA_PRO_APP_SWAP || which == TRAX_ENA_PRO)); - DPORT_WRITE_PERI_REG(DPORT_APP_TRACEMEM_ENA_REG, (which == TRAX_ENA_PRO_APP || which == TRAX_ENA_PRO_APP_SWAP || which == TRAX_ENA_APP)); - return ESP_OK; -} - int trax_start_trace(trax_downcount_unit_t units_until_stop) { -#if !CONFIG_ESP32_TRAX +#if !WITH_TRAX ESP_LOGE(TAG, "Trax_start_trace called, but trax is disabled in menuconfig!"); return ESP_ERR_NO_MEM; #endif @@ -74,7 +53,7 @@ int trax_start_trace(trax_downcount_unit_t units_until_stop) int trax_trigger_traceend_after_delay(int delay) { -#if !CONFIG_ESP32_TRAX +#if !WITH_TRAX ESP_LOGE(TAG, "Trax_trigger_traceend_after_delay called, but trax is disabled in menuconfig!"); return ESP_ERR_NO_MEM; #endif