On 4/17/26 12:43, Dima Ruinskiy wrote:
> Commit 3c7bf5af21960 ("e1000e: Introduce private flag to disable K1")
> disabled K1 by default on Meteor Lake and newer systems due to packet
> loss observed on various platforms. However, disabling K1 caused an
> increase in power consumption.
>
> To mitigate this, reconfigure the PLL clock gate value so that K1 can
> remain enabled without incurring the additional power consumption.
> Re-enable K1 by default, but keep the private flag to support disabling
> it via ethtool. Additionally, introduce a DMI quirk table, so that K1 may
> be disabled by default on known problematic systems. Currently, this
> includes the Dell Pro 16 Plus, where the issue has been reported to persist
> despite the changes to the PLL lock timeout.
>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=220954
> Link:
> https://lists.osuosl.org/pipermail/intel-wired-lan/Week-of-Mon-20250623/048860.html
> Link:
> https://lists.osuosl.org/pipermail/intel-wired-lan/Week-of-Mon-20260330/054059.html
What happened to this fix for a regression first reported in January? It
looks like it fell through the cracks. Or was some other solution found?
Ciao, Thorsten
> Signed-off-by: Dima Ruinskiy <[email protected]>
> Co-developed-by: Vitaly Lifshits <[email protected]>
> Signed-off-by: Vitaly Lifshits <[email protected]>
> Fixes: 3c7bf5af21960 ("e1000e: Introduce private flag to disable K1")
> ---
> v3: add DMI quirk
> v2: add comment for the PLL timeout value and revisit the commit message
> v1: initial version
> ---
> drivers/net/ethernet/intel/e1000e/ich8lan.c | 3 +++
> drivers/net/ethernet/intel/e1000e/netdev.c | 15 ++++++++++++++-
> 2 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c
> b/drivers/net/ethernet/intel/e1000e/ich8lan.c
> index dea208db1be5..aa90e0ce8aca 100644
> --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
> +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
> @@ -1594,6 +1594,9 @@ static s32 e1000_check_for_copper_link_ich8lan(struct
> e1000_hw *hw)
> phy_reg &= ~I217_PLL_CLOCK_GATE_MASK;
> if (speed == SPEED_100 || speed == SPEED_10)
> phy_reg |= 0x3E8;
> + else if (hw->mac.type == e1000_pch_mtp ||
> + hw->mac.type == e1000_pch_ptp)
> + phy_reg |= 0x1D5;
> else
> phy_reg |= 0xFA;
> e1e_wphy_locked(hw, I217_PLL_CLOCK_GATE_REG, phy_reg);
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c
> b/drivers/net/ethernet/intel/e1000e/netdev.c
> index 4d553c6edd98..a7605e453382 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -25,6 +25,7 @@
> #include <linux/pm_runtime.h>
> #include <linux/prefetch.h>
> #include <linux/suspend.h>
> +#include <linux/dmi.h>
>
> #include "e1000.h"
> #define CREATE_TRACE_POINTS
> @@ -58,6 +59,17 @@ static const struct e1000_info *e1000_info_tbl[] = {
> [board_pch_ptp] = &e1000_pch_ptp_info,
> };
>
> +static const struct dmi_system_id disable_k1_list[] = {
> + {
> + .ident = "Dell Pro 16 Plus PB16250",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> + DMI_MATCH(DMI_PRODUCT_NAME, "Dell Pro 16 Plus PB16250"),
> + },
> + },
> + {}
> +};
> +
> struct e1000_reg_info {
> u32 ofs;
> char *name;
> @@ -7748,7 +7760,8 @@ static int e1000_probe(struct pci_dev *pdev, const
> struct pci_device_id *ent)
> /* init PTP hardware clock */
> e1000e_ptp_init(adapter);
>
> - if (hw->mac.type >= e1000_pch_mtp)
> + /* disable K1 by default on known problematic systems */
> + if (hw->mac.type >= e1000_pch_mtp && dmi_check_system(disable_k1_list))
> adapter->flags2 |= FLAG2_DISABLE_K1;
>
> /* reset the hardware with the new settings */