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

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

commit 51d38b789226953be21a923d4af0cb46ebd5d6e9
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 f04e341a550..d1487942096 100644
--- a/drivers/net/e1000.c
+++ b/drivers/net/e1000.c
@@ -1330,6 +1330,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);
@@ -1414,11 +1425,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