[Intel-wired-lan] [PATCH v1 2/2] e1000e: Fixing packet loss issues on new platforms

Sasha Neftin sasha.neftin at intel.com
Wed Sep 22 07:30:57 UTC 2021


On 9/22/2021 10:09, Paul Menzel wrote:
> Dear Sasha,
> 
> 
> THank you for the patch.
> 
> Am 22.09.21 um 08:55 schrieb Sasha Neftin:
> 
> Please use imperative mood in the commit message summary: Fix …. Maybe:
> 
> e1000e: Fix packet loss on Tiger Lake and later
> 
>> Update the HW MAC initialization flow. Do not gate DMA clock from
>> the modPHY block. Keeping this clock will prevent drop packets sent
> 
> dropped
> 
>> in burst mode on the Kumeran interface.
> 
> What is Kumeran?
interface to external Gigabit Ethernet PHY
> 
> Where is the new HW MAC initialization flow documented? The spec or some 
> errata?
> 
> How can the bug be reproduced?
Described in bugzilla - please, make sure the burst traffic:
run commands:
tc qdisc add dev eno1 (lan device name) root netem delay 5 ms on client side
iperf -s on server side
iperf -c server_IP -R on client side
> 
>> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=213651
>> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=213377
>> Fixes: bc7f75fa9788 ("New pci-express e1000 driver");
>> Signed-off-by: Sasha Neftin <sasha.neftin at intel.com>
>> ---
>>   drivers/net/ethernet/intel/e1000e/ich8lan.c | 11 ++++++++++-
>>   drivers/net/ethernet/intel/e1000e/ich8lan.h |  3 +++
>>   2 files changed, 13 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c 
>> b/drivers/net/ethernet/intel/e1000e/ich8lan.c
>> index 66d7196310e2..5e4fc9b4e2ad 100644
>> --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
>> +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
>> @@ -4813,7 +4813,7 @@ static s32 e1000_reset_hw_ich8lan(struct 
>> e1000_hw *hw)
>>   static s32 e1000_init_hw_ich8lan(struct e1000_hw *hw)
>>   {
>>       struct e1000_mac_info *mac = &hw->mac;
>> -    u32 ctrl_ext, txdctl, snoop;
>> +    u32 ctrl_ext, txdctl, snoop, fflt_dbg;
>>       s32 ret_val;
>>       u16 i;
>> @@ -4872,6 +4872,15 @@ static s32 e1000_init_hw_ich8lan(struct 
>> e1000_hw *hw)
>>           snoop = (u32)~(PCIE_NO_SNOOP_ALL);
>>       e1000e_set_pcie_no_snoop(hw, snoop);
>> +    /* Enable workaround for packet loss issue on TGP PCH
> 
> Maybe:
> 
>> Work around packet loss issue on TGP PCH and later
> 
>> +     * Do not gate DMA clock from the modPHY block
>> +     */
>> +    if (mac->type >= e1000_pch_tgp) {
>> +        fflt_dbg = er32(FFLT_DBG);
> 
> Maybe the variable `ctrl_ext` could be renamed to `tmp` or `tmp32`, and 
> reused.
I prefer to stay with a meaningful name
> 
>> +        fflt_dbg |= E1000_FFLT_DBG_DONT_GATE_WAKE_DMA_CLK;
>> +        ew32(FFLT_DBG, fflt_dbg);
>> +    }
>> +
>>       ctrl_ext = er32(CTRL_EXT);
>>       ctrl_ext |= E1000_CTRL_EXT_RO_DIS;
>>       ew32(CTRL_EXT, ctrl_ext);
>> diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h 
>> b/drivers/net/ethernet/intel/e1000e/ich8lan.h
>> index d6a092e5ee74..2504b11c3169 100644
>> --- a/drivers/net/ethernet/intel/e1000e/ich8lan.h
>> +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h
>> @@ -289,6 +289,9 @@
>>   /* Proprietary Latency Tolerance Reporting PCI Capability */
>>   #define E1000_PCI_LTR_CAP_LPT        0xA8
>> +/* Don't gate wake DMA clock */
>> +#define E1000_FFLT_DBG_DONT_GATE_WAKE_DMA_CLK    0x1000
>> +
>>   void e1000e_write_protect_nvm_ich8lan(struct e1000_hw *hw);
>>   void e1000e_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw,
>>                             bool state);
>>


More information about the Intel-wired-lan mailing list