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 */

Reply via email to