> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf
> Of Vitaly Lifshits
> Sent: Wednesday, June 11, 2025 2:53 PM
> To: [email protected]
> Cc: Lifshits, Vitaly <[email protected]>
> Subject: [Intel-wired-lan] [PATCH iwl-net v2 1/1] igc: disable L1.2
> PCI-E link substate to avoid performance issue
> 
> I226 devices advertise support for the PCI-E link L1.2 substate.
> However, due to a hardware limitation, the exit latency from this low-
> power state is longer than the packet buffer can tolerate under high
> traffic conditions. This can lead to packet loss and degraded
> performance.
> 
> To mitigate this, disable the L1.2 substate. The increased power draw
> between L1.1 and L1.2 is insignificant.
> 
> Link: https://lore.kernel.org/intel-wired-lan/15248b4f-3271-42dd-8e35-
> [email protected]
> Signed-off-by: Vitaly Lifshits <[email protected]>
Reviewed-by: Aleksandr Loktionov <[email protected]>

> Fixes: 43546211738e ("igc: Add new device ID's")
> ---
>  drivers/net/ethernet/intel/igc/igc_main.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c
> b/drivers/net/ethernet/intel/igc/igc_main.c
> index 27575a1e1777..3ada48b85bd9 100644
> --- a/drivers/net/ethernet/intel/igc/igc_main.c
> +++ b/drivers/net/ethernet/intel/igc/igc_main.c
> @@ -7113,6 +7113,10 @@ static int igc_probe(struct pci_dev *pdev,
>       adapter->port_num = hw->bus.func;
>       adapter->msg_enable = netif_msg_init(debug,
> DEFAULT_MSG_ENABLE);
> 
> +     /* Disable ASPM L1.2 on I226 devices to avoid packet loss */
> +     if (igc_is_device_id_i226(hw))
> +             pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2);
> +
>       err = pci_save_state(pdev);
>       if (err)
>               goto err_ioremap;
> @@ -7498,6 +7502,9 @@ static int __igc_resume(struct device *dev, bool
> rpm)
>       pci_enable_wake(pdev, PCI_D3hot, 0);
>       pci_enable_wake(pdev, PCI_D3cold, 0);
> 
> +     if (igc_is_device_id_i226(hw))
> +             pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2);
> +
>       if (igc_init_interrupt_scheme(adapter, true)) {
>               netdev_err(netdev, "Unable to allocate memory for
> queues\n");
>               return -ENOMEM;
> @@ -7623,6 +7630,9 @@ static pci_ers_result_t igc_io_slot_reset(struct
> pci_dev *pdev)
>               pci_enable_wake(pdev, PCI_D3hot, 0);
>               pci_enable_wake(pdev, PCI_D3cold, 0);
> 
> +             if (igc_is_device_id_i226(hw))
> +                     pci_disable_link_state_locked(pdev,
> PCIE_LINK_STATE_L1_2);
> +
>               /* In case of PCI error, adapter loses its HW address
>                * so we should re-assign it here.
>                */
> --
> 2.34.1

Reply via email to