From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris J Arges Date: Wed, 30 Nov 2016 21:13:18 -0600 Subject: [Intel-wired-lan] [PATCH] igb: reset the PHY before reading the PHY ID In-Reply-To: <1589605144.308560.1480435436440.JavaMail.zimbra@xes-inc.com> References: <1589605144.308560.1480435436440.JavaMail.zimbra@xes-inc.com> Message-ID: <20161201031318.GA6368@outlook.office365.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: intel-wired-lan@osuosl.org List-ID: On Tue, Nov 29, 2016 at 10:03:56AM -0600, Aaron Sierra wrote: > Several people have reported firmware leaving the I210/I211 PHY's page > select register set to something other than the default of zero. This > causes the first accesses, PHY_IDx register reads, to access something > else, resulting in device probe failure: > > igb: Intel(R) Gigabit Ethernet Network Driver - version 5.4.0-k > igb: Copyright (c) 2007-2014 Intel Corporation. > igb: probe of 0000:01:00.0 failed with error -2 > > This problem began for them after a previous patch I submitted was > applied: > > commit 2a3cdead8b408351fa1e3079b220fa331480ffbc > Author: Aaron Sierra > Date: Tue Nov 3 12:37:09 2015 -0600 > > igb: Remove GS40G specific defines/functions > > I personally experienced this problem after attempting to PXE boot from > I210 devices using this firmware: > > Intel(R) Boot Agent GE v1.5.78 > Copyright (C) 1997-2014, Intel Corporation > > Resetting the PHY before reading from it, ensures the page select > register is in its default state and doesn't make assumptions about > the PHY's register set before the PHY has been probed. > Hi, I could not get this patch to fix the original issue I had. The patch I submitted a while back fixed the issue for me: https://patchwork.ozlabs.org/patch/690464/ Let me know if there is something else I can get check here. To reproduce I have to fully power off the server which contains this NIC. --chris > Cc: Matwey V. Kornilov > Cc: Chris Arges > Cc: Jochen Henneberg > Signed-off-by: Aaron Sierra > --- > drivers/net/ethernet/intel/igb/e1000_82575.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c > index a61447f..ee44398 100644 > --- a/drivers/net/ethernet/intel/igb/e1000_82575.c > +++ b/drivers/net/ethernet/intel/igb/e1000_82575.c > @@ -245,6 +245,17 @@ static s32 igb_init_phy_params_82575(struct e1000_hw *hw) > hw->bus.func = (rd32(E1000_STATUS) & E1000_STATUS_FUNC_MASK) >> > E1000_STATUS_FUNC_SHIFT; > > + /* Make sure the PHY is in a good state. Several people have reported > + * firmware leaving the PHY's page select register set to something > + * other than the default of zero, which causes the PHY ID read to > + * access something other than the intended register. > + */ > + ret_val = hw->phy.ops.reset(hw); > + if (ret_val) { > + hw_dbg("Error resetting the PHY.\n"); > + goto out; > + } > + > /* Set phy->phy_addr and phy->id. */ > ret_val = igb_get_phy_id_82575(hw); > if (ret_val) > -- > 1.9.1