This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 1530b0f  risc-v/esp32c3: Fix overwriting of registered-but-disabled 
interrupts
1530b0f is described below

commit 1530b0f639ed58ffb412a1a2f1f48c2258a0ba02
Author: Gustavo Henrique Nihei <[email protected]>
AuthorDate: Mon May 31 09:05:05 2021 -0300

    risc-v/esp32c3: Fix overwriting of registered-but-disabled interrupts
---
 arch/risc-v/src/esp32c3/esp32c3_irq.c | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/arch/risc-v/src/esp32c3/esp32c3_irq.c 
b/arch/risc-v/src/esp32c3/esp32c3_irq.c
index 4252299..03b8be4 100644
--- a/arch/risc-v/src/esp32c3/esp32c3_irq.c
+++ b/arch/risc-v/src/esp32c3/esp32c3_irq.c
@@ -163,6 +163,8 @@ void up_enable_irq(int cpuint)
 {
   irqstate_t irqstate;
 
+  irqinfo("cpuint=%d\n", cpuint);
+
   DEBUGASSERT(cpuint >= ESP32C3_CPUINT_MIN && cpuint <= ESP32C3_CPUINT_MAX);
 
   irqstate = enter_critical_section();
@@ -182,6 +184,8 @@ void up_disable_irq(int cpuint)
 {
   irqstate_t irqstate;
 
+  irqinfo("cpuint=%d\n", cpuint);
+
   DEBUGASSERT(cpuint >= ESP32C3_CPUINT_MIN && cpuint <= ESP32C3_CPUINT_MAX);
 
   irqstate = enter_critical_section();
@@ -252,7 +256,6 @@ void esp32c3_bind_irq(uint8_t cpuint, uint8_t periphid, 
uint8_t prio,
 int esp32c3_request_irq(uint8_t periphid, uint8_t prio, uint32_t flags)
 {
   int ret;
-  uint32_t regval;
   int cpuint;
   irqstate_t irqstate;
 
@@ -262,33 +265,27 @@ int esp32c3_request_irq(uint8_t periphid, uint8_t prio, 
uint32_t flags)
 
   irqstate = enter_critical_section();
 
-  /* Skip over enabled interrupts.  NOTE: bit 0 is reserved. */
-
-  regval = getreg32(INTERRUPT_CPU_INT_ENABLE_REG);
-
-  /* Skip over reserved CPU interrupts */
-
-  regval |= CPUINT_RESERVED_MAPS;
+  /* Skip over already registered interrupts.
+   * NOTE: bit 0 is reserved.
+   */
 
   for (cpuint = 1; cpuint <= ESP32C3_CPUINT_MAX; cpuint++)
     {
-      if (!(regval & (1 << cpuint)))
+      if (g_cpuint_map[cpuint] == CPUINT_UNASSIGNED)
         {
           break;
         }
     }
 
-  irqinfo("INFO: cpuint=%d\n", cpuint);
+  irqinfo("periphid:%" PRIu8 " cpuint=%d\n", periphid, cpuint);
 
   if (cpuint <= ESP32C3_CPUINT_MAX)
     {
-      DEBUGASSERT(g_cpuint_map[cpuint] == CPUINT_UNASSIGNED);
-
-      /* We have a free CPU interrupt.  We can continue with mapping the
+      /* We have a free CPU interrupt. We can continue with mapping the
        * peripheral.
        */
 
-      /* Save the CPU interrupt ID.  We will return this value. */
+      /* Save the CPU interrupt ID. We will return this value. */
 
       ret = cpuint;
 

Reply via email to