diff --git a/arch/xtensa/src/esp32/esp32_cpuint.c b/arch/xtensa/src/esp32/esp32_cpuint.c index 6d45e1802db..dcb8446ecdd 100644 --- a/arch/xtensa/src/esp32/esp32_cpuint.c +++ b/arch/xtensa/src/esp32/esp32_cpuint.c @@ -221,7 +221,7 @@ static inline void xtensa_disable_all(void) * be allocated from free interrupts within this set * * Returned Value: - * On success, the allocated level-sensitive, CPU interrupt numbr is + * On success, the allocated level-sensitive, CPU interrupt number is * returned. A negated errno is returned on failure. The only possible * failure is that all level-sensitive CPU interrupts have already been * allocated. @@ -236,6 +236,7 @@ static int esp32_alloc_cpuint(uint32_t intmask) uint32_t intset; int cpuint; int ret = -ENOMEM; + int cpu = 0; /* Check if there are CPU interrupts with the requested properties * available. @@ -243,8 +244,9 @@ static int esp32_alloc_cpuint(uint32_t intmask) flags = enter_critical_section(); + cpu = up_cpu_index(); #ifdef CONFIG_SMP - if (this_cpu() != 0) + if (cpu != 0) { freeints = &g_cpu1_freeints; } @@ -287,6 +289,13 @@ static int esp32_alloc_cpuint(uint32_t intmask) } } + /* Make sure the CPU interrupt is disabled. */ + + if (ret >= 0) + { + xtensa_disable_cpuint(&g_intenable[cpu], (1ul << ret)); + } + leave_critical_section(flags); return ret; } diff --git a/arch/xtensa/src/esp32/esp32_cpustart.c b/arch/xtensa/src/esp32/esp32_cpustart.c index 531c4946ee5..747973afbdd 100644 --- a/arch/xtensa/src/esp32/esp32_cpustart.c +++ b/arch/xtensa/src/esp32/esp32_cpustart.c @@ -97,7 +97,6 @@ static inline void xtensa_attach_fromcpu0_interrupt(void) /* Connect all CPU peripheral source to allocated CPU interrupt */ - up_disable_irq(cpuint); esp32_attach_peripheral(1, ESP32_PERIPH_CPU_CPU0, cpuint); /* Attach the inter-CPU interrupt. */ diff --git a/arch/xtensa/src/esp32/esp32_emac.c b/arch/xtensa/src/esp32/esp32_emac.c index 5f055b3ec9e..ec2320ff989 100644 --- a/arch/xtensa/src/esp32/esp32_emac.c +++ b/arch/xtensa/src/esp32/esp32_emac.c @@ -2196,7 +2196,6 @@ int esp32_emac_init(void) goto error; } - up_disable_irq(priv->cpuint); esp32_attach_peripheral(0, ESP32_PERIPH_EMAC, priv->cpuint); ret = irq_attach(ESP32_IRQ_EMAC, emac_interrupt, priv); diff --git a/arch/xtensa/src/esp32/esp32_gpio.c b/arch/xtensa/src/esp32/esp32_gpio.c index 8f89c96b5e4..7a36607f43e 100644 --- a/arch/xtensa/src/esp32/esp32_gpio.c +++ b/arch/xtensa/src/esp32/esp32_gpio.c @@ -421,7 +421,6 @@ void esp32_gpioirqinitialize(void) /* Attach the GPIO peripheral to the allocated CPU interrupt */ - up_disable_irq(g_gpio_cpuint); esp32_attach_peripheral(cpu, ESP32_PERIPH_CPU_GPIO, g_gpio_cpuint); /* Attach and enable the interrupt handler */ diff --git a/arch/xtensa/src/esp32/esp32_i2c.c b/arch/xtensa/src/esp32/esp32_i2c.c index 2e2e158ab94..4c399f69b2e 100644 --- a/arch/xtensa/src/esp32/esp32_i2c.c +++ b/arch/xtensa/src/esp32/esp32_i2c.c @@ -1567,7 +1567,6 @@ FAR struct i2c_master_s *esp32_i2cbus_initialize(int port) /* Set up to receive peripheral interrupts on the current CPU */ priv->cpu = up_cpu_index(); - up_disable_irq(priv->cpuint); esp32_attach_peripheral(priv->cpu, config->periph, priv->cpuint); ret = irq_attach(config->irq, esp32_i2c_irq, priv); diff --git a/arch/xtensa/src/esp32/esp32_irq.c b/arch/xtensa/src/esp32/esp32_irq.c index 3b93f8c2b2b..de011769e5b 100644 --- a/arch/xtensa/src/esp32/esp32_irq.c +++ b/arch/xtensa/src/esp32/esp32_irq.c @@ -139,7 +139,6 @@ static inline void xtensa_attach_fromcpu1_interrupt(void) /* Connect all CPU peripheral source to allocated CPU interrupt */ - up_disable_irq(cpuint); esp32_attach_peripheral(0, ESP32_PERIPH_CPU_CPU1, cpuint); /* Attach the inter-CPU interrupt. */ diff --git a/arch/xtensa/src/esp32/esp32_serial.c b/arch/xtensa/src/esp32/esp32_serial.c index 352aad2b753..659ea2f7de9 100644 --- a/arch/xtensa/src/esp32/esp32_serial.c +++ b/arch/xtensa/src/esp32/esp32_serial.c @@ -1029,7 +1029,6 @@ static int esp32_attach(struct uart_dev_s *dev) /* Attach the GPIO peripheral to the allocated CPU interrupt */ - up_disable_irq(priv->cpuint); esp32_attach_peripheral(priv->cpu, priv->config->periph, priv->cpuint); @@ -1158,8 +1157,6 @@ static void dma_attach(uint8_t dma_chan) * and attach and enable the IRQ. */ - up_disable_irq(dma_cpuint); - if (dma_chan == 0) { esp32_attach_peripheral(cpu, ESP32_PERIPH_UHCI0, dma_cpuint); diff --git a/arch/xtensa/src/esp32/esp32_spi.c b/arch/xtensa/src/esp32/esp32_spi.c index 5c9b8e0be04..bac7e46b4c2 100644 --- a/arch/xtensa/src/esp32/esp32_spi.c +++ b/arch/xtensa/src/esp32/esp32_spi.c @@ -1474,7 +1474,6 @@ FAR struct spi_dev_s *esp32_spibus_initialize(int port) /* Set up to receive peripheral interrupts on the current CPU */ priv->cpu = up_cpu_index(); - up_disable_irq(priv->cpuint); esp32_attach_peripheral(priv->cpu, priv->config->periph, priv->cpuint); diff --git a/arch/xtensa/src/esp32/esp32_spi_slave.c b/arch/xtensa/src/esp32/esp32_spi_slave.c index 7764bc95b9c..bd463ab8e34 100644 --- a/arch/xtensa/src/esp32/esp32_spi_slave.c +++ b/arch/xtensa/src/esp32/esp32_spi_slave.c @@ -1307,7 +1307,6 @@ FAR struct spi_slave_ctrlr_s *esp32_spislv_ctrlr_initialize(int port) /* Set up to receive peripheral interrupts on the current CPU */ priv->cpu = up_cpu_index(); - up_disable_irq(priv->cpuint); esp32_attach_peripheral(priv->cpu, priv->config->periph, priv->cpuint); diff --git a/arch/xtensa/src/esp32/esp32_wdt.c b/arch/xtensa/src/esp32/esp32_wdt.c index 8b903d44d8f..ef40840b67e 100644 --- a/arch/xtensa/src/esp32/esp32_wdt.c +++ b/arch/xtensa/src/esp32/esp32_wdt.c @@ -752,10 +752,6 @@ static int esp32_wdt_setisr(FAR struct esp32_wdt_dev_s *dev, xcpt_t handler, wdt->cpu = up_cpu_index(); - /* Disable the provided CPU Interrupt to configure it */ - - up_disable_irq(wdt->cpuint); - /* Attach a peripheral interrupt to the available CPU interrupt in * the current core */