Re: [Intel-wired-lan] [PATCH v3] e1000e: Increase iteration on polling MDIC ready bit

Paul Menzel
2020-09-25T05:16:44Z

Dear Kai-Heng,

Thank you for patch version 3.

Am 24.09.20 um 18:45 schrieb Kai-Heng Feng:
> We are seeing the following error after S3 resume:
> [ 704.746874] e1000e 0000:00:1f.6 eno1: Setting page 0x6020
> [ 704.844232] e1000e 0000:00:1f.6 eno1: MDI Write did not complete
> [ 704.902817] e1000e 0000:00:1f.6 eno1: Setting page 0x6020
> [ 704.903075] e1000e 0000:00:1f.6 eno1: reading PHY page 769 (or 0x6020 shifted) reg 0x17
> [ 704.903281] e1000e 0000:00:1f.6 eno1: Setting page 0x6020
> [ 704.903486] e1000e 0000:00:1f.6 eno1: writing PHY page 769 (or 0x6020 shifted) reg 0x17
> [ 704.943155] e1000e 0000:00:1f.6 eno1: MDI Error
> ...
> [ 705.108161] e1000e 0000:00:1f.6 eno1: Hardware Error
>
> As Andrew Lunn pointed out, MDIO has nothing to do with phy, and indeed
> increase polling iteration can resolve the issue.
>
> The root cause is quite likely Intel ME, since it's a blackbox to the
> kernel so the only approach we can take is to be patient and wait
> longer.
>
> Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
> ---
> v3:
> - Moving delay to end of loop doesn't save anytime, move it back.
> - Point out this is quitely likely caused by Intel ME.

quietly

You seem to have missed my comments regarding patch version 3. It’d be
great if you improved the commit message with my suggestions.

Without knowing what hardware this happened on, nobody, even later
getting the hardware, can reproduce the your results. If you say the ME
is involved, please also document the ME firmware version, which is used
here.

> v2:
> - Increase polling iteration instead of powering down the phy.
>
> drivers/net/ethernet/intel/e1000e/phy.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/e1000e/phy.c b/drivers/net/ethernet/intel/e1000e/phy.c
> index e11c877595fb..e6d4acd90937 100644
> --- a/drivers/net/ethernet/intel/e1000e/phy.c
> +++ b/drivers/net/ethernet/intel/e1000e/phy.c
> @@ -203,7 +203,7 @@ s32 e1000e_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
> * Increasing the time out as testing showed failures with
> * the lower time out
> */
> - for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
> + for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 10); i++) {
> udelay(50);
> mdic = er32(MDIC);
> if (mdic & E1000_MDIC_READY)

In the PCI subsystem, a warning is shown, when something takes more then
100 ms. As you increase it to over 320 ms, a warning should be printed
to talk to the firmware folks, when it passes 100 ms.

Kind regards,

Paul