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

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

commit b7bbb563387e2e41b42f7b37333634060deae8e8
Author: Eren Terzioglu <eren.terzio...@espressif.com>
AuthorDate: Fri Apr 4 17:15:39 2025 +0200

    arch/risc-v: Add Dedicated GPIO support for esp32[c3|c6|h2]
    
    Add Dedicated GPIO support for risc-v based Espressif devices
    
    Signed-off-by: Eren Terzioglu <eren.terzio...@espressif.com>
---
 arch/risc-v/src/common/espressif/Kconfig          |  10 +
 arch/risc-v/src/common/espressif/Make.defs        |   4 +
 arch/risc-v/src/common/espressif/esp_dedic_gpio.c | 435 ++++++++++++++++++++++
 arch/risc-v/src/common/espressif/esp_dedic_gpio.h | 154 ++++++++
 arch/risc-v/src/esp32c3/hal_esp32c3.mk            |   1 +
 arch/risc-v/src/esp32c6/hal_esp32c6.mk            |   1 +
 arch/risc-v/src/esp32h2/hal_esp32h2.mk            |   1 +
 7 files changed, 606 insertions(+)

diff --git a/arch/risc-v/src/common/espressif/Kconfig 
b/arch/risc-v/src/common/espressif/Kconfig
index 43b7fa3f52..1ec3d4bf6b 100644
--- a/arch/risc-v/src/common/espressif/Kconfig
+++ b/arch/risc-v/src/common/espressif/Kconfig
@@ -303,6 +303,16 @@ config ESPRESSIF_USBSERIAL
        select OTHER_UART_SERIALDRIVER
        select ARCH_HAVE_SERIAL_TERMIOS
 
+config ESPRESSIF_DEDICATED_GPIO
+       bool "Dedicated GPIO"
+       default n
+       ---help---
+               Enable dedicated GPIO support for faster response time.
+               Dedicated GPIO is suitable for faster response times required
+               applications like simulate serial/parallel interfaces in a 
bit-banging way.
+               It can work as pin grouping and you can use any pin up to 8 
pins for
+               input and 8 pins for output for dedicated gpio in total.
+
 config ESPRESSIF_GPIO_IRQ
        bool "GPIO pin interrupts"
        default n
diff --git a/arch/risc-v/src/common/espressif/Make.defs 
b/arch/risc-v/src/common/espressif/Make.defs
index 8f05ed2500..df91a64534 100644
--- a/arch/risc-v/src/common/espressif/Make.defs
+++ b/arch/risc-v/src/common/espressif/Make.defs
@@ -107,6 +107,10 @@ ifeq ($(CONFIG_ESP_SDM),y)
        CHIP_CSRCS += esp_sdm.c
 endif
 
+ifeq ($(CONFIG_ESPRESSIF_DEDICATED_GPIO),y)
+       CHIP_CSRCS += esp_dedic_gpio.c
+endif
+
 ifeq ($(CONFIG_ESPRESSIF_TEMP),y)
        CHIP_CSRCS += esp_temperature_sensor.c
 endif
diff --git a/arch/risc-v/src/common/espressif/esp_dedic_gpio.c 
b/arch/risc-v/src/common/espressif/esp_dedic_gpio.c
new file mode 100644
index 0000000000..d31101898c
--- /dev/null
+++ b/arch/risc-v/src/common/espressif/esp_dedic_gpio.c
@@ -0,0 +1,435 @@
+/****************************************************************************
+ * arch/risc-v/src/common/espressif/esp_dedic_gpio.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <assert.h>
+#include <debug.h>
+
+#include <nuttx/arch.h>
+#include <nuttx/nuttx.h>
+#include <nuttx/kmalloc.h>
+#include <nuttx/spinlock.h>
+#include <nuttx/ioexpander/gpio.h>
+
+#include "riscv_internal.h"
+#include "esp_dedic_gpio.h"
+#include "esp_gpio.h"
+#include "soc/dedic_gpio_periph.h"
+#include "hal/dedic_gpio_cpu_ll.h"
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct esp_dedic_gpio_common_priv_s
+{
+  int refs;                       /* Reference count */
+  spinlock_t spinlock;            /* Held while chip is selected for mutual 
exclusion */
+  uint32_t out_occupied_mask;     /* Mask of output channels */
+  uint32_t in_occupied_mask;      /* Mask of input channels */
+};
+
+struct esp_dedic_gpio_bundle_priv_s
+{
+  struct file_operations *ops;  /* Externally visible part of the GPIO 
interface */
+  uint32_t out_offset;          /* Offset of output channels */
+  uint32_t in_offset;           /* Offset of input channels */
+  uint32_t out_mask;            /* Mask of output channels */
+  uint32_t in_mask;             /* Mask of input channels */
+};
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static int esp_dedic_gpio_bundle_read(struct file *filep,
+                                      char *buffer,
+                                      size_t buflen);
+static int esp_dedic_gpio_bundle_write(struct file *filep,
+                                       const char *buffer,
+                                       size_t buflen);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static struct file_operations dedic_gpio_ops =
+{
+  NULL,                               /* open */
+  NULL,                               /* close */
+  esp_dedic_gpio_bundle_read,         /* read */
+  esp_dedic_gpio_bundle_write,        /* write */
+};
+
+static struct esp_dedic_gpio_common_priv_s dedic_gpio_common =
+{
+  .refs = 0,
+  .spinlock = SP_UNLOCKED,
+  .out_occupied_mask = 0,
+  .in_occupied_mask = 0,
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_bundle_read
+ *
+ * Description:
+ *   Read dedicated gpio bundle data.
+ *
+ * Input Parameters:
+ *   filep  - The pointer of file, represents each user using the device.
+ *   buffer - Buffer to read.
+ *   buflen - Not in use, have it for compatibility reasons.
+ *
+ * Returned Value:
+ *   OK
+ *
+ ****************************************************************************/
+
+static int esp_dedic_gpio_bundle_read(struct file *filep,
+                                      char *buffer,
+                                      size_t buflen)
+{
+  struct inode *inode = filep->f_inode;
+  struct esp_dedic_gpio_bundle_priv_s *priv = inode->i_private;
+  uint32_t dedic_value = 0;
+
+  UNUSED(buflen);
+  DEBUGASSERT(priv != NULL && buffer != NULL);
+
+  gpioinfo("Reading pin...\n");
+
+  dedic_value = dedic_gpio_cpu_ll_read_in();
+  *buffer = (dedic_value & priv->in_mask) >> (priv->in_offset);
+  return OK;
+}
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_bundle_write
+ *
+ * Description:
+ *   Write data to the dedicated gpio bundle.
+ *
+ * Input Parameters:
+ *   filep  - The pointer of file, represents each user using the device.
+ *   buffer - Buffer to write value to GPIO bundle.
+ *   buflen - Mask of the value.
+ *
+ * Returned Value:
+ *   OK
+ *
+ ****************************************************************************/
+
+static int esp_dedic_gpio_bundle_write(struct file *filep,
+                                       const char *buffer,
+                                       size_t buflen)
+{
+  struct inode *inode = filep->f_inode;
+  struct esp_dedic_gpio_bundle_priv_s *priv = inode->i_private;
+  uint32_t mask_value = 0;
+  uint32_t write_value = 0;
+
+  DEBUGASSERT(priv != NULL);
+  gpioinfo("Writing %d with mask: %d\n", (int)*buffer, buflen);
+
+  mask_value = priv->out_mask & (buflen << priv->out_offset);
+  write_value = *(buffer) << priv->out_offset;
+
+  dedic_gpio_cpu_ll_write_mask(mask_value, write_value);
+  return OK;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_write
+ *
+ * Description:
+ *   Write data to the dedicated gpio bundle with given mask value.
+ *
+ * Input Parameters:
+ *   dev    - Pointer to the dedicated gpio driver struct
+ *   mask   - Mask of the GPIOs to be written
+ *   value  - Value to write
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void esp_dedic_gpio_write(struct file *dev,
+                          uint32_t mask,
+                          uint32_t value)
+{
+  struct esp_dedic_gpio_bundle_priv_s *priv =
+    (struct esp_dedic_gpio_bundle_priv_s *)dev;
+  uint32_t mask_value = priv->out_mask & (mask << priv->out_offset);
+  uint32_t write_value = value << priv->out_offset;
+
+  dedic_gpio_cpu_ll_write_mask(mask_value, write_value);
+}
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_read
+ *
+ * Description:
+ *   Read dedicated gpio bundle data.
+ *
+ * Input Parameters:
+ *   dev    - Pointer to the dedicated gpio driver struct
+ *   value  - Pointer to the read data will be saved
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void esp_dedic_gpio_read(struct file *dev, int *value)
+{
+  struct esp_dedic_gpio_bundle_priv_s *priv =
+    (struct esp_dedic_gpio_bundle_priv_s *)dev;
+
+  *value = dedic_gpio_cpu_ll_read_in();
+  *value = ((*value) & priv->in_mask) >> (priv->in_offset);
+}
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_new_bundle
+ *
+ * Description:
+ *   Request dedicated GPIO bundle and config it with given parameters.
+ *
+ * Input Parameters:
+ *   config - Dedicated GPIO bundle configuration
+ *
+ * Returned Value:
+ *   Valid GPIO device structure reference on success; NULL on failure.
+ *
+ ****************************************************************************/
+
+struct file *esp_dedic_gpio_new_bundle(
+    struct esp_dedic_gpio_config_s *config)
+{
+  struct esp_dedic_gpio_bundle_priv_s *priv = NULL;
+  irqstate_t flags = 0;
+  uint32_t out_mask = 0;
+  uint32_t in_mask = 0;
+  uint32_t pattern = 0;
+  uint32_t out_offset = 0;
+  uint32_t in_offset = 0;
+  gpio_pinattr_t attr = 0;
+
+  DEBUGASSERT(config != NULL);
+  DEBUGASSERT(config->gpio_array != NULL && config->array_size > 0);
+  DEBUGASSERT(config->path != NULL);
+  DEBUGASSERT(config->flags->input_enable ||
+              config->flags->output_enable > 0);
+
+  if (dedic_gpio_common.refs == 0)
+    {
+      flags = spin_lock_irqsave(&dedic_gpio_common.spinlock);
+
+      dedic_gpio_common.out_occupied_mask =
+        UINT32_MAX & ~((1 << SOC_DEDIC_GPIO_OUT_CHANNELS_NUM) - 1);
+      dedic_gpio_common.in_occupied_mask =
+        UINT32_MAX & ~((1 << SOC_DEDIC_GPIO_IN_CHANNELS_NUM) - 1);
+
+      spin_unlock_irqrestore(&dedic_gpio_common.spinlock, flags);
+    }
+
+  priv = kmm_zalloc(sizeof(struct esp_dedic_gpio_bundle_priv_s));
+  if (priv)
+    {
+      pattern = (1 << config->array_size) - 1;
+
+      /* configure outwards channels */
+
+      priv->ops = &dedic_gpio_ops;
+
+      out_offset = 0;
+      if (config->flags->output_enable)
+        {
+          if (config->array_size > SOC_DEDIC_GPIO_OUT_CHANNELS_NUM)
+            {
+              gpioerr("ERROR: array size(%d) exceeds maximum supported out\
+                       channels(%d)\n",
+                       config->array_size, SOC_DEDIC_GPIO_OUT_CHANNELS_NUM);
+              free(priv);
+              return NULL;
+            }
+
+          flags = spin_lock_irqsave(&dedic_gpio_common.spinlock);
+
+          for (int i = 0;
+                i <= SOC_DEDIC_GPIO_OUT_CHANNELS_NUM - config->array_size;
+                  i++)
+            {
+              if ((dedic_gpio_common.out_occupied_mask & (pattern << i))
+                   == 0)
+                {
+                  out_mask = pattern << i;
+                  out_offset = i;
+                  break;
+                }
+            }
+
+          if (out_mask)
+            {
+              dedic_gpio_common.out_occupied_mask |= out_mask;
+            }
+
+          spin_unlock_irqrestore(&dedic_gpio_common.spinlock, flags);
+          if (out_mask == 0)
+            {
+              gpioerr("ERROR: no free outward channels\n");
+              free(priv);
+              return NULL;
+            }
+
+          attr |= OUTPUT;
+          gpioinfo("New out bundle(%p), offset=%"PRIu32", mask(%"PRIx32")",
+                    priv, priv->out_offset, priv->out_mask);
+        }
+
+      if (config->flags->input_enable)
+        {
+          if (config->array_size > SOC_DEDIC_GPIO_IN_CHANNELS_NUM)
+            {
+              gpioerr("ERROR: array size(%d) exceeds maximum supported in\
+                       channels(%d)\n",
+                       config->array_size, SOC_DEDIC_GPIO_IN_CHANNELS_NUM);
+              free(priv);
+              return NULL;
+            }
+
+          flags = spin_lock_irqsave(&dedic_gpio_common.spinlock);
+
+          for (int i = 0;
+                i <= SOC_DEDIC_GPIO_IN_CHANNELS_NUM - config->array_size;
+                  i++)
+            {
+              if ((dedic_gpio_common.in_occupied_mask & (pattern << i)) == 0)
+                {
+                  in_mask = pattern << i;
+                  in_offset = i;
+                  break;
+                }
+            }
+
+          if (in_mask)
+            {
+              dedic_gpio_common.in_occupied_mask |= in_mask;
+            }
+
+          spin_unlock_irqrestore(&dedic_gpio_common.spinlock, flags);
+          if (in_mask == 0)
+            {
+              gpioerr("ERROR: no free inward channels\n");
+              free(priv);
+              return NULL;
+            }
+
+          attr |= INPUT;
+          gpioinfo("New in bundle(%p), offset=%"PRIu32", mask(%"PRIx32")",
+                    priv, priv->in_offset, priv->in_mask);
+        }
+
+      /* Route dedicated GPIO channel signals to GPIO matrix */
+
+      for (int i = 0; i < config->array_size; i++)
+        {
+          esp_configgpio(config->gpio_array[i], attr);
+          if (config->flags->input_enable)
+            {
+              esp_gpio_matrix_in(config->gpio_array[i],
+  dedic_gpio_periph_signals.cores[0].in_sig_per_channel[in_offset + i],
+  config->flags->invert_input_enable);
+            }
+
+          if (config->flags->output_enable)
+            {
+              esp_gpio_matrix_out(config->gpio_array[i],
+  dedic_gpio_periph_signals.cores[0].out_sig_per_channel[in_offset + i],
+  config->flags->invert_output_enable, 0);
+            }
+        }
+
+        dedic_gpio_cpu_ll_enable_output(dedic_gpio_common.out_occupied_mask);
+        priv->out_mask = out_mask;
+        priv->in_mask = in_mask;
+        priv->out_offset = out_offset;
+        priv->in_offset = in_offset;
+    }
+  else
+    {
+      gpioerr("ERROR: memory allocation failed\n");
+      return NULL;
+    }
+
+  dedic_gpio_common.refs++;
+
+  register_driver(config->path, &dedic_gpio_ops,
+                  0666, priv);
+  return (struct file *)priv;
+}
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_del_bundle
+ *
+ * Description:
+ *   Delete dedicated gpio bundle.
+ *
+ * Input Parameters:
+ *   dev - Pointer to the dedicated gpio driver struct
+ *
+ * Returned Value:
+ *   OK
+ *
+ ****************************************************************************/
+
+int esp_dedic_gpio_del_bundle(struct file *dev)
+{
+  struct esp_dedic_gpio_bundle_priv_s *priv =
+    (struct esp_dedic_gpio_bundle_priv_s *)dev;
+  irqstate_t flags = spin_lock_irqsave(&dedic_gpio_common.spinlock);
+
+  dedic_gpio_common.refs--;
+
+  dedic_gpio_common.out_occupied_mask &= ~(priv->out_mask);
+  dedic_gpio_common.in_occupied_mask &= ~(priv->in_mask);
+
+  free(priv);
+  priv = NULL;
+  spin_unlock_irqrestore(&dedic_gpio_common.spinlock, flags);
+
+  return OK;
+}
diff --git a/arch/risc-v/src/common/espressif/esp_dedic_gpio.h 
b/arch/risc-v/src/common/espressif/esp_dedic_gpio.h
new file mode 100644
index 0000000000..f898106a1b
--- /dev/null
+++ b/arch/risc-v/src/common/espressif/esp_dedic_gpio.h
@@ -0,0 +1,154 @@
+/****************************************************************************
+ * arch/risc-v/src/common/espressif/esp_dedic_gpio.h
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you 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.
+ *
+ ****************************************************************************/
+
+#ifndef __ARCH_RISCV_SRC_COMMON_ESPRESSIF_ESP_DEDIC_GPIO_H
+#define __ARCH_RISCV_SRC_COMMON_ESPRESSIF_ESP_DEDIC_GPIO_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <stdint.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+struct esp_dedic_gpio_flags_s
+{
+  bool input_enable;
+  bool invert_input_enable;
+  bool output_enable;
+  bool invert_output_enable;
+};
+
+struct esp_dedic_gpio_config_s
+{
+  const int *gpio_array;                /* Array of GPIO numbers */
+  int array_size;                       /* Number of GPIOs in gpio_array */
+  struct esp_dedic_gpio_flags_s *flags; /* Flags to control specific behaviour 
of GPIO bundle */
+  char *path;                           /* Path for character driver */
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_write
+ *
+ * Description:
+ *   Write data to the dedicated gpio bundle with given mask value.
+ *
+ * Input Parameters:
+ *   dev    - Pointer to the dedicated gpio driver struct
+ *   mask   - Mask of the GPIOs to be written
+ *   value  - Value to write
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void esp_dedic_gpio_write(struct file *dev,
+                          uint32_t mask,
+                          uint32_t value);
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_read
+ *
+ * Description:
+ *   Read dedicated gpio bundle data.
+ *
+ * Input Parameters:
+ *   dev    - Pointer to the dedicated gpio driver struct
+ *   value  - Pointer to the read data will be saved
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void esp_dedic_gpio_read(struct file *dev, int *value);
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_new_bundle
+ *
+ * Description:
+ *   Request dedicated GPIO bundle and config it with given parameters.
+ *
+ * Input Parameters:
+ *   config - Dedicated GPIO bundle configuration
+ *
+ * Returned Value:
+ *   Valid GPIO device structure reference on success; NULL on failure.
+ *
+ ****************************************************************************/
+
+struct file *esp_dedic_gpio_new_bundle(
+    struct esp_dedic_gpio_config_s *config);
+
+/****************************************************************************
+ * Name: esp_dedic_gpio_del_bundle
+ *
+ * Description:
+ *   Delete dedicated gpio bundle.
+ *
+ * Input Parameters:
+ *   dev - Pointer to the dedicated gpio driver struct
+ *
+ * Returned Value:
+ *   OK on success; ERROR on failure
+ *
+ ****************************************************************************/
+
+int esp_dedic_gpio_del_bundle(struct file *dev);
+
+#ifdef __cplusplus
+}
+#endif
+#undef EXTERN
+
+#endif /* __ASSEMBLY__ */
+#endif /* __ARCH_RISCV_SRC_COMMON_ESPRESSIF_ESP_DEDIC_GPIO_H */
diff --git a/arch/risc-v/src/esp32c3/hal_esp32c3.mk 
b/arch/risc-v/src/esp32c3/hal_esp32c3.mk
index 6470759e2a..c3fd14901a 100644
--- a/arch/risc-v/src/esp32c3/hal_esp32c3.mk
+++ b/arch/risc-v/src/esp32c3/hal_esp32c3.mk
@@ -160,6 +160,7 @@ CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)log$
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)riscv$(DELIM)interrupt.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)lldesc.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)adc_periph.c
+CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)dedic_gpio_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)gdma_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)gpio_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)ledc_periph.c
diff --git a/arch/risc-v/src/esp32c6/hal_esp32c6.mk 
b/arch/risc-v/src/esp32c6/hal_esp32c6.mk
index 0294b0bea3..7d3d82b006 100644
--- a/arch/risc-v/src/esp32c6/hal_esp32c6.mk
+++ b/arch/risc-v/src/esp32c6/hal_esp32c6.mk
@@ -170,6 +170,7 @@ CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)log$
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)riscv$(DELIM)interrupt.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)lldesc.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)adc_periph.c
+CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)dedic_gpio_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)gdma_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)gpio_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)ledc_periph.c
diff --git a/arch/risc-v/src/esp32h2/hal_esp32h2.mk 
b/arch/risc-v/src/esp32h2/hal_esp32h2.mk
index fb9b720d14..70de98c40d 100644
--- a/arch/risc-v/src/esp32h2/hal_esp32h2.mk
+++ b/arch/risc-v/src/esp32h2/hal_esp32h2.mk
@@ -154,6 +154,7 @@ CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)log$
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)riscv$(DELIM)interrupt.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)lldesc.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)adc_periph.c
+CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)dedic_gpio_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)gdma_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)gpio_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)ledc_periph.c

Reply via email to