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);
