You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2026/10/14 08:21:42 UTC
(nuttx) 07/07: drivers/net/igc: Program IVAR, GPIE and EITR0 on every enable.
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 <ra...@railab.me>
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 <ra...@railab.me>
---
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);