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 a47803bee1d7938f51fce4850a1a8dd9b651f723
Author: raiden00pl <[email protected]>
AuthorDate: Tue Oct 13 11:29:05 2026 +0200

    drivers/net/igb: Program IVAR, GPIE and EITR0 on every enable.
    
    CTRL.RST in igb_disable() clears them, so after ifdown/ifup no TX
    interrupt was raised.  Move their setup from igb_initialize() to
    igb_enable().
    
    Assisted-by: Claude:claude-opus-5-5
    Signed-off-by: raiden00pl <[email protected]>
---
 drivers/net/igb.c | 33 +++++++++++++++------------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/drivers/net/igb.c b/drivers/net/igb.c
index 8b872fb92d3..e36d70496a3 100644
--- a/drivers/net/igb.c
+++ b/drivers/net/igb.c
@@ -1326,6 +1326,21 @@ static void igb_enable(FAR struct igb_driver_s *priv)
   regval = IGB_RX_DESC * sizeof(struct igb_rx_leg_s);
   igb_putreg_mem(priv, IGB_RDLEN0, regval);
 
+  /* Configure MSI-X.  Done on every enable, not once at probe, because
+   * the reset in igb_disable() clears IVAR and GPIE.
+   */
+
+  igb_putreg_mem(priv, IGB_IVAR0, IGB_MSIX_IVAR0);
+  igb_putreg_mem(priv, IGB_IVARMSC, IGB_MSIX_IVARMSC);
+
+  /* Enable MSI-X Single Vector */
+
+  igb_putreg_mem(priv, IGB_GPIE, IGB_GPIE_MSIX_SINGLE);
+
+  /* Configure Interrupt Throttle */
+
+  igb_putreg_mem(priv, IGB_EITR0, (CONFIG_NET_IGB_INT_INTERVAL << 2));
+
   /* Enable interrupts */
 
   igb_putreg_mem(priv, IGB_EIMS, IGB_MSIX_EIMS);
@@ -1426,24 +1441,6 @@ static int igb_initialize(FAR struct igb_driver_s *priv)
   igb_putreg_mem(priv, IGB_EIMC, 0xffffffff);
   igb_putreg_mem(priv, IGB_IMC, 0xffffffff);
 
-  /* Configure MSI-X */
-
-  igb_putreg_mem(priv, IGB_IVAR0, IGB_MSIX_IVAR0);
-  igb_putreg_mem(priv, IGB_IVARMSC, IGB_MSIX_IVARMSC);
-
-  /* Enable MSI-X Single Vector */
-
-  igb_putreg_mem(priv, IGB_GPIE, IGB_GPIE_MSIX_SINGLE);
-  igb_putreg_mem(priv, IGB_EIMS, IGB_MSIX_EIMS);
-
-  /* Configure Other causes */
-
-  igb_putreg_mem(priv, IGB_IMS, IGB_MSIX_IMS);
-
-  /* Configure Interrupt Throttle */
-
-  igb_putreg_mem(priv, IGB_EITR0, (CONFIG_NET_IGB_INT_INTERVAL << 2));
-
   /* Get MAC if valid */
 
   regval = igb_getreg_mem(priv, IGB_RAH);

Reply via email to