Browse Source

xtensa: add TRAX support for esp32s2

Ivan Grokhotkov 5 years ago
parent
commit
8fec484d2b

+ 5 - 5
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

+ 1 - 0
components/xtensa/component.mk

@@ -4,3 +4,4 @@ COMPONENT_ADD_LDFLAGS += $(COMPONENT_PATH)/esp32/libhal.a
 
 COMPONENT_ADD_LDFRAGMENTS += linker.lf
 
+COMPONENT_SRCDIRS := . esp32

+ 46 - 0
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 <stdio.h>
+#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;
+}

+ 38 - 0
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 <stdio.h>
+#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;
+}

+ 9 - 30
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 <stdio.h>
-#include "soc/dport_reg.h"
-#include "sdkconfig.h"
+#include "esp_log.h"
 #include "esp_err.h"
-#include "eri.h"
 #include "xtensa-debug-module.h"
+#include "eri.h"
 #include "trax.h"
-#include "esp_log.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