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 65b1f0a36f386e0d25cee778ff020ccf0a859f7d
Author: raiden00pl <[email protected]>
AuthorDate: Tue Oct 13 12:58:58 2026 +0200

    drivers/net/e1000: Program IVAR on every enable.
    
    CTRL.RST in e1000_disable() clears IVAR on 82574, so after ifdown/ifup
    the interface stopped working.  Move its setup to e1000_enable().
    
    Assisted-by: Claude:claude-opus-5-5
    Signed-off-by: raiden00pl <[email protected]>
---
 drivers/net/e1000.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c
index dc9254e0a83..2ce32ff36db 100644
--- a/drivers/net/e1000.c
+++ b/drivers/net/e1000.c
@@ -1359,6 +1359,17 @@ static void e1000_enable(FAR struct e1000_driver_s *priv)
 
   e1000_rxclean(priv);
 
+#ifdef CONFIG_PCI_MSIX
+  /* Configure MSI-X.  Done on every enable, not once at probe, because
+   * the reset in e1000_disable() clears IVAR.
+   */
+
+  if (priv->type->flags & E1000_HAS_MSIX)
+    {
+      e1000_putreg_mem(priv, E1000_IVAR, E1000_MSIX_IVAR);
+    }
+#endif
+
   /* Enable interrupts */
 
   e1000_putreg_mem(priv, E1000_IMS, priv->irqs);
@@ -1446,11 +1457,10 @@ static int e1000_initialize(FAR struct e1000_driver_s 
*priv)
   irq_attach(priv->irq, e1000_interrupt, priv);
 
 #ifdef CONFIG_PCI_MSIX
-  /* Configure MSI-X */
+  /* Select the MSI-X interrupt causes, IVAR is set in e1000_enable() */
 
   if (priv->type->flags & E1000_HAS_MSIX)
     {
-      e1000_putreg_mem(priv, E1000_IVAR, E1000_MSIX_IVAR);
       priv->irqs = E1000_MSIX_INTERRUPTS;
     }
   else

Reply via email to