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

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

commit 0c65f2fdbcda7dd4c38a11bcd475ab350426f023
Author: raiden00pl <[email protected]>
AuthorDate: Tue Oct 13 12:59:07 2026 +0200

    drivers/net/igc: Program IVAR, GPIE and EITR0 on every enable.
    
    Program them after the reset in igc_enable() instead of once in
    igc_initialize(), as done for igb.  Build tested only.
    
    Assisted-by: Claude:claude-opus-5-5
    Signed-off-by: raiden00pl <[email protected]>
---
 drivers/net/igc.c | 33 +++++++++++++++------------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/drivers/net/igc.c b/drivers/net/igc.c
index e4353ea1415..5fcc7c76fda 100644
--- a/drivers/net/igc.c
+++ b/drivers/net/igc.c
@@ -1241,6 +1241,21 @@ static void igc_enable(FAR struct igc_driver_s *priv)
   regval = IGC_RX_DESC * sizeof(struct igc_rx_leg_s);
   igc_putreg_mem(priv, IGC_RDLEN0, regval);
 
+  /* Configure MSI-X.  Done on every enable, not once at probe, because
+   * igc_disable() resets the device.
+   */
+
+  igc_putreg_mem(priv, IGC_IVAR0, IGC_MSIX_IVAR0);
+  igc_putreg_mem(priv, IGC_IVARMSC, IGC_MSIX_IVARMSC);
+
+  /* Enable MSI-X Single Vector */
+
+  igc_putreg_mem(priv, IGC_GPIE, IGC_GPIE_MSIX_SINGLE);
+
+  /* Configure Interrupt Throttle */
+
+  igc_putreg_mem(priv, IGC_EITR0, (CONFIG_NET_IGC_INT_INTERVAL << 2));
+
   /* Enable interrupts */
 
   igc_putreg_mem(priv, IGC_EIMS, IGC_MSIX_EIMS);
@@ -1335,24 +1350,6 @@ static int igc_initialize(FAR struct igc_driver_s *priv)
   igc_putreg_mem(priv, IGC_EIMC, 0xffffffff);
   igc_putreg_mem(priv, IGC_IMC, 0xffffffff);
 
-  /* Configure MSI-X */
-
-  igc_putreg_mem(priv, IGC_IVAR0, IGC_MSIX_IVAR0);
-  igc_putreg_mem(priv, IGC_IVARMSC, IGC_MSIX_IVARMSC);
-
-  /* Enable MSI-X Single Vector */
-
-  igc_putreg_mem(priv, IGC_GPIE, IGC_GPIE_MSIX_SINGLE);
-  igc_putreg_mem(priv, IGC_EIMS, IGC_MSIX_EIMS);
-
-  /* Configure Other causes */
-
-  igc_putreg_mem(priv, IGC_IMS, IGC_MSIX_IMS);
-
-  /* Configure Interrupt Throttle */
-
-  igc_putreg_mem(priv, IGC_EITR0, (CONFIG_NET_IGC_INT_INTERVAL << 2));
-
   /* Get MAC if valid */
 
   regval = igc_getreg_mem(priv, IGC_RAH);

Reply via email to