Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp412158pxk; Thu, 24 Sep 2020 08:33:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwE5hdG96iA6YGnn+o2Xo1Zll5noiCjZhZj53mDJ83HVQI9gaMwHRSBMAKXIrNBRE9Zz6jz X-Received: by 2002:aa7:d382:: with SMTP id x2mr515161edq.108.1600961619950; Thu, 24 Sep 2020 08:33:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600961619; cv=none; d=google.com; s=arc-20160816; b=Q1AqbFVnItnMytEicUivKIcX0b7YaD9rZGWfU0mX2anrgKvFJboWcC+os47oyYZ/7I Ep2YMTC9DNgUl3DwfFDcLkZ+ycLKMXRyQEeS0uIQ2HFVR9ekzp8XescZ9Lk2P43Ex1Ea hFoQDDMUhop6oIA/8nZvsyI/E4V8QN9xFUVES/NrmJsf5xr0C/hzj9ZYXyrgjQF0CDyl gE2VaK3yrafYfYn+JAABZNlEJ3UpF1/t7uDhQrY67usIiUPy3XLMuV2ZJ9d+Y4x8HpNv 2PhFso5V0/XR73vRqusj8ohuxxu7sf+npPuJNaZGw2acamIwlXEb4JskM+ZdNnWD1qrd u5Tw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=0qRJZC/OMIFOfJHnQCGu1WJiLMfsBaFFwP5PAPbnIpI=; b=TT5Knk7Mh7UoKA9WxS1KeE6vhwl1DnpsHCQEU60JUSbpVDia405zEEOAcsNpbNkKMX WKIXn0xfDuZSPc9AmvcSzeGFPOX8GcmT4VoR7TVTpfP0Saz9QHdjIACDF8cEDuosXQiN K/gG/eMDItla5jyYkrPyRmBVcZ96mvX73sU7Z7NXNzqsY10Q8AOtjX9Wp3Z4qcIsM2o0 3WHkoI/zS2QGK9xZEW54KzJAc490CV2zvQ/YrEvWA7xSFqGmyBrW5jno2bXFvNAdvy+q 4GJs+iaaX8ahk4d7nd5CfQ0klHRP4CrV2M7U8upNQNcg1CQyHiklQH81BvgygIz61Gl0 jtjQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r26si2432825eds.384.2020.09.24.08.33.15; Thu, 24 Sep 2020 08:33:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728423AbgIXPcP (ORCPT + 99 others); Thu, 24 Sep 2020 11:32:15 -0400 Received: from mx3.molgen.mpg.de ([141.14.17.11]:40541 "EHLO mx1.molgen.mpg.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728285AbgIXPcO (ORCPT ); Thu, 24 Sep 2020 11:32:14 -0400 Received: from [141.14.220.45] (g45.guest.molgen.mpg.de [141.14.220.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: pmenzel) by mx.molgen.mpg.de (Postfix) with ESMTPSA id 2E70C20646203; Thu, 24 Sep 2020 17:32:12 +0200 (CEST) Subject: Re: [Intel-wired-lan] [PATCH v2] e1000e: Increase iteration on polling MDIC ready bit To: Kai-Heng Feng , Jeff Kirsher Cc: Andrew Lunn , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, intel-wired-lan@lists.osuosl.org, Jakub Kicinski , "David S. Miller" References: <20200923074751.10527-1-kai.heng.feng@canonical.com> <20200924150958.18016-1-kai.heng.feng@canonical.com> From: Paul Menzel Message-ID: <748efbf9-573f-ab2a-0c82-a7b2a11cda60@molgen.mpg.de> Date: Thu, 24 Sep 2020 17:32:12 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <20200924150958.18016-1-kai.heng.feng@canonical.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Dear Kai-Heng, Thank you for sending version 2. Am 24.09.20 um 17:09 schrieb Kai-Heng Feng: > We are seeing the following error after S3 resume: I’d be great if you added the system and used hardware, you are seeing this with. > [ 704.746874] e1000e 0000:00:1f.6 eno1: Setting page 0x6020 > [ 704.844232] e1000e 0000:00:1f.6 eno1: MDI Write did not complete A follow-up patch, should extend the message to include the timeout value. > MDI Write did not complete did not complete in … seconds. According to the Linux timestamps it’s 98 ms, which makes sense, as (640 * 3 * 50 μs = 96 ms). What crappy hardware is this, that it takes longer than 100 ms? > [ 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. Please explicitly state, what the current timeout value is, and what it is increased to. 640 * 3 * 50 μs = 96 ms 640 * 10 * 50 μs = 320 ms The macro definition also misses the unit. /* SerDes Control */ #define E1000_GEN_POLL_TIMEOUT 640 How did you determine, that tenfold that value is good. And not eightfold, for example? Please give the exact value (Linux log message timestamps should be enough), what the hardware needs now. As a commit message summary, I suggest: > e1000e: Increase MDIC ready bit polling timeout from 96 ms to 320 ms > While at it, also move the delay to the end of loop, to potentially save > 50 us. > > Signed-off-by: Kai-Heng Feng > --- > v2: > - Increase polling iteration instead of powering down the phy. > > drivers/net/ethernet/intel/e1000e/phy.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/intel/e1000e/phy.c b/drivers/net/ethernet/intel/e1000e/phy.c > index e11c877595fb..72968a01164b 100644 > --- a/drivers/net/ethernet/intel/e1000e/phy.c > +++ b/drivers/net/ethernet/intel/e1000e/phy.c > @@ -203,11 +203,12 @@ 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++) { > - udelay(50); > + for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 10); i++) { > mdic = er32(MDIC); > if (mdic & E1000_MDIC_READY) > break; > + > + udelay(50); > } > if (!(mdic & E1000_MDIC_READY)) { > e_dbg("MDI Write did not complete\n"); >