From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753654AbcHANCo (ORCPT ); Mon, 1 Aug 2016 09:02:44 -0400 Received: from softlayer.compulab.co.il ([50.23.254.55]:50224 "EHLO compulab.co.il" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753494AbcHANCe (ORCPT ); Mon, 1 Aug 2016 09:02:34 -0400 X-Greylist: delayed 2001 seconds by postgrey-1.27 at vger.kernel.org; Mon, 01 Aug 2016 09:02:34 EDT To: Jeff Kirsher Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org From: Denis Turischev Subject: e1000e: PHY cann't be initialized correctly on some I218 controllers Message-ID: <579F407E.9090602@compulab.co.il> Date: Mon, 1 Aug 2016 15:28:46 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - softlayer.compulab.co.il X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - compulab.co.il X-Get-Message-Sender-Via: softlayer.compulab.co.il: acl_c_recent_authed_mail_ips_text_entry: -unknown-@compulab.co.il|compulab.co.il X-Authenticated-Sender: softlayer.compulab.co.il: -unknown-@compulab.co.il Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There is an error "e1000e: probe of 0000:00:19.0 failed with error -3" that can be observed after power-on on some I218 controllers. Hardware reset and re-initialization fixes the issue. Signed-off-by: Denis Turischev diff -Nru linux-4.7.orig/drivers/net/ethernet/intel/e1000e/ich8lan.c linux-4.7/drivers/net/ethernet/intel/e1000e/ich8lan.c --- linux-4.7.orig/drivers/net/ethernet/intel/e1000e/ich8lan.c 2016-07-24 22:23:50.000000000 +0300 +++ linux-4.7/drivers/net/ethernet/intel/e1000e/ich8lan.c 2016-08-01 13:59:08.046563095 +0300 @@ -155,6 +155,7 @@ static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force); static s32 e1000_setup_copper_link_pch_lpt(struct e1000_hw *hw); static s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state); +static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw); static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg) { @@ -459,8 +460,12 @@ phy->id = e1000_phy_unknown; ret_val = e1000_init_phy_workarounds_pchlan(hw); - if (ret_val) - return ret_val; + if (ret_val) { + e1000_reset_hw_ich8lan(hw); + ret_val = e1000_init_phy_workarounds_pchlan(hw); + if (ret_val) + return ret_val; + } if (phy->id == e1000_phy_unknown) switch (hw->mac.type) { From mboxrd@z Thu Jan 1 00:00:00 1970 From: Denis Turischev Date: Mon, 1 Aug 2016 15:28:46 +0300 Subject: [Intel-wired-lan] e1000e: PHY cann't be initialized correctly on some I218 controllers Message-ID: <579F407E.9090602@compulab.co.il> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: intel-wired-lan@osuosl.org List-ID: There is an error "e1000e: probe of 0000:00:19.0 failed with error -3" that can be observed after power-on on some I218 controllers. Hardware reset and re-initialization fixes the issue. Signed-off-by: Denis Turischev diff -Nru linux-4.7.orig/drivers/net/ethernet/intel/e1000e/ich8lan.c linux-4.7/drivers/net/ethernet/intel/e1000e/ich8lan.c --- linux-4.7.orig/drivers/net/ethernet/intel/e1000e/ich8lan.c 2016-07-24 22:23:50.000000000 +0300 +++ linux-4.7/drivers/net/ethernet/intel/e1000e/ich8lan.c 2016-08-01 13:59:08.046563095 +0300 @@ -155,6 +155,7 @@ static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force); static s32 e1000_setup_copper_link_pch_lpt(struct e1000_hw *hw); static s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state); +static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw); static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg) { @@ -459,8 +460,12 @@ phy->id = e1000_phy_unknown; ret_val = e1000_init_phy_workarounds_pchlan(hw); - if (ret_val) - return ret_val; + if (ret_val) { + e1000_reset_hw_ich8lan(hw); + ret_val = e1000_init_phy_workarounds_pchlan(hw); + if (ret_val) + return ret_val; + } if (phy->id == e1000_phy_unknown) switch (hw->mac.type) {