Few more observations inline. On Thu, 21 Aug 2025 20:12:29 +0300 Vitaly Lifshits <[email protected]> wrote:
> The K1 state reduces power consumption on ICH family network > controllers during idle periods, similarly to L1 state on PCI Express > NICs. Therefore, it is recommended and enabled by default. > However, on some systems it has been observed to have adverse side > effects, such as packet loss. It has been established through debug > that the problem may be due to firmware misconfiguration of specific > systems, interoperability with certain link partners, or marginal > electrical conditions of specific units. > > These problems typically cannot be fixed in the field, and generic > workarounds to resolve the side effects on all systems, while keeping > K1 enabled, were found infeasible. > Therefore, add the option for users to globally disable K1 idle state > on the adapter. > > Additionally, disable K1 by default for MTL and later platforms, due > to issues reported with the current configuration. > > Link: > https://lore.kernel.org/intel-wired-lan/camqyjg3lvqfgqmctxeapur_jq0oqh7ggdxruvtrx_6tth2m...@mail.gmail.com/ > Link: > https://lore.kernel.org/intel-wired-lan/[email protected]/ > Link: > https://lore.kernel.org/intel-wired-lan/Z_z9EjcKtwHCQcZR@mail-itl/ > Link: https://github.com/QubesOS/qubes-issues/issues/9896 Link: > https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2115393 > > Signed-off-by: Vitaly Lifshits <[email protected]> > --- > v2: Add a missing semaphore acquiring and disable K1 on MTL by default > --- > drivers/net/ethernet/intel/e1000e/e1000.h | 1 + > drivers/net/ethernet/intel/e1000e/ethtool.c | 29 ++++++++++++++-- > drivers/net/ethernet/intel/e1000e/hw.h | 1 + > drivers/net/ethernet/intel/e1000e/ich8lan.c | 38 > +++++++++++---------- drivers/net/ethernet/intel/e1000e/ich8lan.h | > 2 ++ drivers/net/ethernet/intel/e1000e/netdev.c | 10 ++++++ > 6 files changed, 60 insertions(+), 21 deletions(-) > >[snip] > a/drivers/net/ethernet/intel/e1000e/netdev.c +++ > b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -5267,6 +5267,13 @@ > static void e1000_watchdog_task(struct work_struct *work) > &adapter->link_duplex); e1000_print_link_info(adapter); > > + if (adapter->flags2 & FLAG2_DISABLE_K1) { > + hw->phy.ops.acquire(hw); > + > adapter->hw.dev_spec.ich8lan.disable_k1 = true; > + > e1000_reconfigure_k1_params(&adapter->hw); > + hw->phy.ops.release(hw); > + } > + This also seems to now calling on every whatdog run the k1-params again and again if FLAG2_DISABLE_K1 is set. Is this intended? I suspect this should also change id disable_k1 != flags2 & FLAG2_DISABLE_K1. > /* check if SmartSpeed worked */ > e1000e_check_downshift(hw); > if (phy->speed_downgraded) > @@ -7675,6 +7682,9 @@ 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) > + adapter->flags2 |= FLAG2_DISABLE_K1; > + Is this sufficient? The > /* reset the hardware with the new settings */ > e1000e_reset(adapter); >
