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 0c65f2fdbcda7dd4c38a11bcd475ab350426f023 Author: raiden00pl <[email protected]> AuthorDate: Tue Oct 13 12:59:07 2026 +0200 drivers/net/igc: Program IVAR, GPIE and EITR0 on every enable. Program them after the reset in igc_enable() instead of once in igc_initialize(), as done for igb. Build tested only. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: raiden00pl <[email protected]> --- drivers/net/igc.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/drivers/net/igc.c b/drivers/net/igc.c index e4353ea1415..5fcc7c76fda 100644 --- a/drivers/net/igc.c +++ b/drivers/net/igc.c @@ -1241,6 +1241,21 @@ static void igc_enable(FAR struct igc_driver_s *priv) regval = IGC_RX_DESC * sizeof(struct igc_rx_leg_s); igc_putreg_mem(priv, IGC_RDLEN0, regval); + /* Configure MSI-X. Done on every enable, not once at probe, because + * igc_disable() resets the device. + */ + + igc_putreg_mem(priv, IGC_IVAR0, IGC_MSIX_IVAR0); + igc_putreg_mem(priv, IGC_IVARMSC, IGC_MSIX_IVARMSC); + + /* Enable MSI-X Single Vector */ + + igc_putreg_mem(priv, IGC_GPIE, IGC_GPIE_MSIX_SINGLE); + + /* Configure Interrupt Throttle */ + + igc_putreg_mem(priv, IGC_EITR0, (CONFIG_NET_IGC_INT_INTERVAL << 2)); + /* Enable interrupts */ igc_putreg_mem(priv, IGC_EIMS, IGC_MSIX_EIMS); @@ -1335,24 +1350,6 @@ static int igc_initialize(FAR struct igc_driver_s *priv) igc_putreg_mem(priv, IGC_EIMC, 0xffffffff); igc_putreg_mem(priv, IGC_IMC, 0xffffffff); - /* Configure MSI-X */ - - igc_putreg_mem(priv, IGC_IVAR0, IGC_MSIX_IVAR0); - igc_putreg_mem(priv, IGC_IVARMSC, IGC_MSIX_IVARMSC); - - /* Enable MSI-X Single Vector */ - - igc_putreg_mem(priv, IGC_GPIE, IGC_GPIE_MSIX_SINGLE); - igc_putreg_mem(priv, IGC_EIMS, IGC_MSIX_EIMS); - - /* Configure Other causes */ - - igc_putreg_mem(priv, IGC_IMS, IGC_MSIX_IMS); - - /* Configure Interrupt Throttle */ - - igc_putreg_mem(priv, IGC_EITR0, (CONFIG_NET_IGC_INT_INTERVAL << 2)); - /* Get MAC if valid */ regval = igc_getreg_mem(priv, IGC_RAH);
