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
