* [PATCH v1 0/3] e1000 base code updates
@ 2026-10-16 10:22 Anatoly Burakov
2026-10-16 10:22 ` [PATCH v1 1/3] net/e1000/base: add new PCH MAC type Anatoly Burakov
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Anatoly Burakov @ 2026-10-16 10:22 UTC (permalink / raw)
To: dev
Small base code update for e1000 driver.
Dima Ruinskiy (3):
net/e1000/base: add new PCH MAC type
net/e1000/base: retry failed MTA writes on i210/i211
net/e1000/base: enable ULP on LANPHYPC
.mailmap | 1 +
drivers/net/intel/e1000/base/e1000_api.c | 5 ++-
drivers/net/intel/e1000/base/e1000_hw.h | 1 +
drivers/net/intel/e1000/base/e1000_ich8lan.c | 8 +++++
drivers/net/intel/e1000/base/e1000_mac.c | 34 ++++++++++++++++++++
drivers/net/intel/e1000/em_ethdev.c | 5 ++-
6 files changed, 52 insertions(+), 2 deletions(-)
--
2.52.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v1 1/3] net/e1000/base: add new PCH MAC type
2026-10-16 10:22 [PATCH v1 0/3] e1000 base code updates Anatoly Burakov
@ 2026-10-16 10:22 ` Anatoly Burakov
2026-10-16 10:23 ` [PATCH v1 2/3] net/e1000/base: retry failed MTA writes on i210/i211 Anatoly Burakov
2026-10-16 10:23 ` [PATCH v1 3/3] net/e1000/base: enable ULP on LANPHYPC Anatoly Burakov
2 siblings, 0 replies; 4+ messages in thread
From: Anatoly Burakov @ 2026-10-16 10:22 UTC (permalink / raw)
To: dev
From: Dima Ruinskiy <dima.ruinskiy@intel.com>
Add a new `e1000_pch_nvp` MAC type and move the existing NVL device IDs
from `e1000_pch_ptp` to it. The new MAC type takes the same code paths as
`e1000_pch_ptp` in both the base code and the em PMD.
Signed-off-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
drivers/net/intel/e1000/base/e1000_api.c | 5 ++++-
drivers/net/intel/e1000/base/e1000_hw.h | 1 +
drivers/net/intel/e1000/base/e1000_ich8lan.c | 7 +++++++
drivers/net/intel/e1000/em_ethdev.c | 5 ++++-
4 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/drivers/net/intel/e1000/base/e1000_api.c b/drivers/net/intel/e1000/base/e1000_api.c
index 83b3d6c439..19ba8b575b 100644
--- a/drivers/net/intel/e1000/base/e1000_api.c
+++ b/drivers/net/intel/e1000/base/e1000_api.c
@@ -328,9 +328,11 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
case E1000_DEV_ID_PCH_PTP_I219_V25:
case E1000_DEV_ID_PCH_WCL_I219_LM27:
case E1000_DEV_ID_PCH_WCL_I219_V27:
+ mac->type = e1000_pch_ptp;
+ break;
case E1000_DEV_ID_PCH_NVL_I219_LM29:
case E1000_DEV_ID_PCH_NVL_I219_V29:
- mac->type = e1000_pch_ptp;
+ mac->type = e1000_pch_nvp;
break;
case E1000_DEV_ID_82575EB_COPPER:
case E1000_DEV_ID_82575EB_FIBER_SERDES:
@@ -505,6 +507,7 @@ s32 e1000_setup_init_funcs(struct e1000_hw *hw, bool init_device)
case e1000_pch_tgp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
e1000_init_function_pointers_ich8lan(hw);
break;
case e1000_82575:
diff --git a/drivers/net/intel/e1000/base/e1000_hw.h b/drivers/net/intel/e1000/base/e1000_hw.h
index 99c2195916..335a018776 100644
--- a/drivers/net/intel/e1000/base/e1000_hw.h
+++ b/drivers/net/intel/e1000/base/e1000_hw.h
@@ -265,6 +265,7 @@ enum e1000_mac_type {
e1000_pch_adp,
e1000_pch_mtp,
e1000_pch_ptp,
+ e1000_pch_nvp,
e1000_pch_tgp,
e1000_82575,
e1000_82576,
diff --git a/drivers/net/intel/e1000/base/e1000_ich8lan.c b/drivers/net/intel/e1000/base/e1000_ich8lan.c
index 0290a7dcb4..b020639563 100644
--- a/drivers/net/intel/e1000/base/e1000_ich8lan.c
+++ b/drivers/net/intel/e1000/base/e1000_ich8lan.c
@@ -372,6 +372,7 @@ STATIC s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw)
case e1000_pch_adp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
/* Due to clock synchronization issue on MTL and above prior to
* disabling k1 it is required to disable P0s state and
* reconfigure PHY k1 exit timeout. At this point the PHY might
@@ -549,6 +550,7 @@ STATIC s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
case e1000_pch_adp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
/* In case the PHY needs to be in mdio slow mode,
* set slow mode and try to get the PHY id again.
*/
@@ -856,6 +858,7 @@ STATIC s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
case e1000_pch_adp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
/* multicast address update for pch2 */
mac->ops.update_mc_addr_list =
e1000_update_mc_addr_list_pch2lan;
@@ -1866,6 +1869,7 @@ void e1000_init_function_pointers_ich8lan(struct e1000_hw *hw)
case e1000_pch_adp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
hw->phy.ops.init_params = e1000_init_phy_params_pchlan;
break;
default:
@@ -2335,6 +2339,7 @@ STATIC s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
case e1000_pch_adp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
break;
default:
@@ -3461,6 +3466,7 @@ STATIC s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
case e1000_pch_adp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
bank1_offset = nvm->flash_bank_size;
act_offset = E1000_ICH_NVM_SIG_WORD;
@@ -4436,6 +4442,7 @@ STATIC s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw)
case e1000_pch_adp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
word = NVM_COMPAT;
valid_csum_mask = NVM_COMPAT_VALID_CSUM;
break;
diff --git a/drivers/net/intel/e1000/em_ethdev.c b/drivers/net/intel/e1000/em_ethdev.c
index c02d09e500..be830881db 100644
--- a/drivers/net/intel/e1000/em_ethdev.c
+++ b/drivers/net/intel/e1000/em_ethdev.c
@@ -593,6 +593,7 @@ em_set_pba(struct e1000_hw *hw)
case e1000_pch_tgp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
pba = E1000_PBA_26K;
break;
default:
@@ -983,7 +984,8 @@ em_hardware_init(struct e1000_hw *hw)
hw->mac.type == e1000_pch_adp ||
hw->mac.type == e1000_pch_tgp ||
hw->mac.type == e1000_pch_mtp ||
- hw->mac.type == e1000_pch_ptp) {
+ hw->mac.type == e1000_pch_ptp ||
+ hw->mac.type == e1000_pch_nvp) {
hw->fc.requested_mode = e1000_fc_full;
}
@@ -1177,6 +1179,7 @@ em_get_max_pktlen(struct rte_eth_dev *dev)
case e1000_pch_tgp:
case e1000_pch_mtp:
case e1000_pch_ptp:
+ case e1000_pch_nvp:
case e1000_82574:
case e1000_80003es2lan: /* 9K Jumbo Frame size */
case e1000_82583:
--
2.52.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v1 2/3] net/e1000/base: retry failed MTA writes on i210/i211
2026-10-16 10:22 [PATCH v1 0/3] e1000 base code updates Anatoly Burakov
2026-10-16 10:22 ` [PATCH v1 1/3] net/e1000/base: add new PCH MAC type Anatoly Burakov
@ 2026-10-16 10:23 ` Anatoly Burakov
2026-10-16 10:23 ` [PATCH v1 3/3] net/e1000/base: enable ULP on LANPHYPC Anatoly Burakov
2 siblings, 0 replies; 4+ messages in thread
From: Anatoly Burakov @ 2026-10-16 10:23 UTC (permalink / raw)
To: dev, Thomas Monjalon
From: Dima Ruinskiy <dima.ruinskiy@intel.com>
On i210 and i211, writes to the multicast table array (MTA) sometimes
fail silently, leaving the hardware MTA out of sync with the driver's
`mta_shadow` copy.
After updating the MTA in `e1000_update_mc_addr_list_generic()`, read
the registers back on these devices and compare them with `mta_shadow`.
Rewrite any register that does not match, up to three attempts.
Signed-off-by: Grzegorz Siwik <grzegorz.siwik@intel.com>
Signed-off-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
Signed-off-by: Yashaswini Raghuram Prathivadi Bhayankaram <yashaswini.raghuram.prathivadi.bhayankaram@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
.mailmap | 1 +
drivers/net/intel/e1000/base/e1000_mac.c | 34 ++++++++++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/.mailmap b/.mailmap
index 6d9e262cfb..f2e35dd968 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1927,6 +1927,7 @@ Yaron Illouz <yaroni@radcom.com>
Yaroslav Brustinov <ybrustin@cisco.com>
Yash Sharma <ysharma@marvell.com>
Yashaswini Kanaujia <ykanaujia@marvell.com>
+Yashaswini Raghuram Prathivadi Bhayankaram <yashaswini.raghuram.prathivadi.bhayankaram@intel.com>
Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp> <yasufum.o@gmail.com>
Ye Chen <yex.chen@intel.com>
Yehor Malikov <yehor.malikov@solidigm.com>
diff --git a/drivers/net/intel/e1000/base/e1000_mac.c b/drivers/net/intel/e1000/base/e1000_mac.c
index 408e8e46e8..f794e24b75 100644
--- a/drivers/net/intel/e1000/base/e1000_mac.c
+++ b/drivers/net/intel/e1000/base/e1000_mac.c
@@ -549,6 +549,38 @@ u32 e1000_hash_mc_addr_generic(struct e1000_hw *hw, u8 *mc_addr)
return hash_value;
}
+/**
+ * e1000_i21x_mta_workaround - workaround for MTA write failures
+ * @hw: pointer to the HW structure
+ *
+ * On I210/I211 sometimes multicast table array writes silently fail.
+ * Compare to MTA shadow to see if any registers are incorrectly written.
+ * If a mismatch is found, try to write again up to three times.
+ **/
+static void e1000_i21x_mta_workaround(struct e1000_hw *hw)
+{
+ int failed_cnt = 3;
+ bool is_failed;
+ int i;
+
+ do {
+ is_failed = false;
+ for (i = hw->mac.mta_reg_count - 1; i >= 0; i--) {
+ if (E1000_READ_REG_ARRAY(hw, E1000_MTA, i) !=
+ hw->mac.mta_shadow[i]) {
+ is_failed = true;
+ E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i,
+ hw->mac.mta_shadow[i]);
+ E1000_WRITE_FLUSH(hw);
+ }
+ }
+ if (is_failed && --failed_cnt <= 0) {
+ DEBUGOUT("Failed to update MTA register, too many retries\n");
+ break;
+ }
+ } while (is_failed);
+}
+
/**
* e1000_update_mc_addr_list_generic - Update Multicast addresses
* @hw: pointer to the HW structure
@@ -584,6 +616,8 @@ void e1000_update_mc_addr_list_generic(struct e1000_hw *hw,
for (i = hw->mac.mta_reg_count - 1; i >= 0; i--)
E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, hw->mac.mta_shadow[i]);
E1000_WRITE_FLUSH(hw);
+ if (hw->mac.type == e1000_i210 || hw->mac.type == e1000_i211)
+ e1000_i21x_mta_workaround(hw);
}
/**
--
2.52.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v1 3/3] net/e1000/base: enable ULP on LANPHYPC
2026-10-16 10:22 [PATCH v1 0/3] e1000 base code updates Anatoly Burakov
2026-10-16 10:22 ` [PATCH v1 1/3] net/e1000/base: add new PCH MAC type Anatoly Burakov
2026-10-16 10:23 ` [PATCH v1 2/3] net/e1000/base: retry failed MTA writes on i210/i211 Anatoly Burakov
@ 2026-10-16 10:23 ` Anatoly Burakov
2 siblings, 0 replies; 4+ messages in thread
From: Anatoly Burakov @ 2026-10-16 10:23 UTC (permalink / raw)
To: dev
From: Dima Ruinskiy <dima.ruinskiy@intel.com>
When the system enters Sx without wakeup configured, the PHY is powered
down autonomously via LANPHYPC.
Set `I218_ULP_CONFIG1_EN_ULP_LANPHYPC` when configuring ULP in
`e1000_enable_ulp_lpt_lp()` so that the PHY also enters ULP on
LANPHYPC, for additional power savings.
Signed-off-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
drivers/net/intel/e1000/base/e1000_ich8lan.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/intel/e1000/base/e1000_ich8lan.c b/drivers/net/intel/e1000/base/e1000_ich8lan.c
index b020639563..ed86c24af6 100644
--- a/drivers/net/intel/e1000/base/e1000_ich8lan.c
+++ b/drivers/net/intel/e1000/base/e1000_ich8lan.c
@@ -1283,6 +1283,7 @@ s32 e1000_enable_ulp_lpt_lp(struct e1000_hw *hw, bool to_sx)
if (ret_val)
goto release;
phy_reg |= (I218_ULP_CONFIG1_RESET_TO_SMBUS |
+ I218_ULP_CONFIG1_EN_ULP_LANPHYPC |
I218_ULP_CONFIG1_DISABLE_SMB_PERST);
if (to_sx) {
if (E1000_READ_REG(hw, E1000_WUFC) & E1000_WUFC_LNKC)
--
2.52.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-10-16 10:23 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-16 10:22 [PATCH v1 0/3] e1000 base code updates Anatoly Burakov
2026-10-16 10:22 ` [PATCH v1 1/3] net/e1000/base: add new PCH MAC type Anatoly Burakov
2026-10-16 10:23 ` [PATCH v1 2/3] net/e1000/base: retry failed MTA writes on i210/i211 Anatoly Burakov
2026-10-16 10:23 ` [PATCH v1 3/3] net/e1000/base: enable ULP on LANPHYPC Anatoly Burakov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.