From 2e9904556f135cc55efd86ca92fde386abfd5fcd Mon Sep 17 00:00:00 2001 From: Konstantin Kondrashov Date: Tue, 25 Jun 2019 19:23:10 +0800 Subject: [PATCH] esp32: Dis interrupts up to 5 lvl for DPORT Disable interrupts for both DPORT workarounds up to 5 lvl. Closes: https://esp32.com/viewtopic.php?f=2&t=10981&sid=d125cec233070ed4d2c5410bf5d3d74a Closes: IDF-728 --- components/esp32/Kconfig | 8 +++++++- components/esp32/dport_access.c | 2 +- components/esp32/dport_panic_highint_hdl.S | 9 +++++++-- components/esp32/include/esp_dport_access.h | 2 +- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/components/esp32/Kconfig b/components/esp32/Kconfig index 605fd72c91..8c60767c60 100644 --- a/components/esp32/Kconfig +++ b/components/esp32/Kconfig @@ -1038,6 +1038,13 @@ menu "ESP32-specific" This option depends on the CONFIG_FREERTOS_UNICORE option because RTC fast memory can be accessed only by PRO_CPU core. + config ESP32_DPORT_DIS_INTERRUPT_LVL + int "Disable the interrupt level for the DPORT workarounds" + default 5 + help + To prevent interrupting DPORT workarounds, + need to disable interrupt with a maximum used level in the system. + endmenu # ESP32-Specific menu Wi-Fi @@ -1406,7 +1413,6 @@ menu PHY endmenu # PHY - menu "Power Management" config PM_ENABLE diff --git a/components/esp32/dport_access.c b/components/esp32/dport_access.c index 42f36c0d86..cad078386d 100644 --- a/components/esp32/dport_access.c +++ b/components/esp32/dport_access.c @@ -256,7 +256,7 @@ uint32_t IRAM_ATTR esp_dport_access_reg_read(uint32_t reg) unsigned int intLvl; __asm__ __volatile__ (\ "movi %[APB], "XTSTR(0x3ff40078)"\n"\ - "rsil %[LVL], "XTSTR(3)"\n"\ + "rsil %[LVL], "XTSTR(CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL)"\n"\ "l32i %[APB], %[APB], 0\n"\ "l32i %[REG], %[REG], 0\n"\ "wsr %[LVL], "XTSTR(PS)"\n"\ diff --git a/components/esp32/dport_panic_highint_hdl.S b/components/esp32/dport_panic_highint_hdl.S index bddde3cdff..35412deba9 100644 --- a/components/esp32/dport_panic_highint_hdl.S +++ b/components/esp32/dport_panic_highint_hdl.S @@ -31,9 +31,10 @@ Interrupt , a high-priority interrupt, is used for several things: */ -#define L4_INTR_STACK_SIZE 8 +#define L4_INTR_STACK_SIZE 12 #define L4_INTR_A2_OFFSET 0 #define L4_INTR_A3_OFFSET 4 +#define L4_INTR_A4_OFFSET 8 .data _l4_intr_stack: .space L4_INTR_STACK_SIZE @@ -145,10 +146,11 @@ xt_highint4: movi a0, (1<