From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
To: davem@davemloft.net
Cc: David Ertman <davidx.m.ertman@intel.com>,
netdev@vger.kernel.org, gospo@redhat.com, sassmann@redhat.com,
Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Subject: [net-next 03/15] e1000e: Resolve issues with Management Engine (ME) briefly blocking PHY resets
Date: Sat, 8 Mar 2014 01:25:29 -0800 [thread overview]
Message-ID: <1394270741-29926-4-git-send-email-jeffrey.t.kirsher@intel.com> (raw)
In-Reply-To: <1394270741-29926-1-git-send-email-jeffrey.t.kirsher@intel.com>
From: David Ertman <davidx.m.ertman@intel.com>
On a ME enabled system with the cable out, the driver init flow would
generate an erroneous message indicating that resets were being blocked
by an active ME session. Cause was ME clearing the semaphore bit to
block further PHY resets for up to 50 msec during power-on/cycle. After
this interval, ME would re-set the bit and allow PHY resets.
To resolve this, change the flow of e1000e_phy_hw_reset_generic() to
utilize a delay and retry method. Poll the FWSM register to minimize
any extra time added to the flow. If the delay times out at 100ms
(checked in 10msec increments), then return the value E1000_BLK_PHY_RESET,
as this is the accurate state of the PHY. Attempting to alter just the
call to e1000e_phy_hw_reset_generic() in e1000_init_phy_workarounds_pchlan()
just caused the problem to move further down the flow.
Signed-off-by: Dave Ertman <davidx.m.ertman@intel.com>
Acked-by: Bruce W. Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/e1000e/ich8lan.c | 30 +++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
index 42f0f67..4f3da87 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
@@ -247,6 +247,7 @@ out:
**/
static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw)
{
+ struct e1000_adapter *adapter = hw->adapter;
u32 mac_reg, fwsm = er32(FWSM);
s32 ret_val;
@@ -349,12 +350,31 @@ static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw)
hw->phy.ops.release(hw);
if (!ret_val) {
+
+ /* Check to see if able to reset PHY. Print error if not */
+ if (hw->phy.ops.check_reset_block(hw)) {
+ e_err("Reset blocked by ME\n");
+ goto out;
+ }
+
/* Reset the PHY before any access to it. Doing so, ensures
* that the PHY is in a known good state before we read/write
* PHY registers. The generic reset is sufficient here,
* because we haven't determined the PHY type yet.
*/
ret_val = e1000e_phy_hw_reset_generic(hw);
+ if (ret_val)
+ goto out;
+
+ /* On a successful reset, possibly need to wait for the PHY
+ * to quiesce to an accessible state before returning control
+ * to the calling function. If the PHY does not quiesce, then
+ * return E1000E_BLK_PHY_RESET, as this is the condition that
+ * the PHY is in.
+ */
+ ret_val = hw->phy.ops.check_reset_block(hw);
+ if (ret_val)
+ e_err("ME blocked access to PHY after reset\n");
}
out:
@@ -1484,11 +1504,13 @@ out:
**/
static s32 e1000_check_reset_block_ich8lan(struct e1000_hw *hw)
{
- u32 fwsm;
+ bool blocked = false;
+ int i = 0;
- fwsm = er32(FWSM);
-
- return (fwsm & E1000_ICH_FWSM_RSPCIPHY) ? 0 : E1000_BLK_PHY_RESET;
+ while ((blocked = !(er32(FWSM) & E1000_ICH_FWSM_RSPCIPHY)) &&
+ (i++ < 10))
+ usleep_range(10000, 20000);
+ return blocked ? E1000_BLK_PHY_RESET : 0;
}
/**
--
1.8.3.1
next prev parent reply other threads:[~2014-03-08 9:25 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-08 9:25 [net-next 00/15][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
2014-03-08 9:25 ` [net-next 01/15] e1000e: PTP lock in e1000e_phc_adjustfreq Jeff Kirsher
2014-03-08 9:25 ` [net-next 02/15] e1000e: Cleanup unecessary references Jeff Kirsher
2014-03-08 9:25 ` Jeff Kirsher [this message]
2014-03-08 9:25 ` [net-next 04/15] e1000e: Fix 82579 sets LPI too early Jeff Kirsher
2014-03-08 9:25 ` [net-next 05/15] e1000e: Cleanup - Update GPL header and Copyright Jeff Kirsher
2014-03-08 9:25 ` [net-next 06/15] e1000e: Add missing branding strings in ich8lan.c Jeff Kirsher
2014-03-08 9:25 ` [net-next 07/15] e1000e: Refactor PM flows Jeff Kirsher
2014-03-08 9:25 ` [net-next 08/15] e1000e Refactor of Runtime Power Management Jeff Kirsher
2014-03-08 9:25 ` [net-next 09/15] e1000e: Feature Enable PHY Ultra Low Power Mode (ULP) Jeff Kirsher
2014-03-08 9:25 ` [net-next 10/15] e1000e: Fix not generating an error on invalid load parameter Jeff Kirsher
2014-03-08 9:25 ` [net-next 11/15] e1000e: Fix ethtool offline tests for 82579 parts Jeff Kirsher
2014-03-08 9:25 ` [net-next 12/15] e1000e: Fix SHRA register access for 82579 Jeff Kirsher
2014-03-08 9:25 ` [net-next 13/15] ixgbevf: fix skb->pkt_type checks Jeff Kirsher
2014-03-08 9:25 ` [net-next 14/15] igb: fix array size calculation Jeff Kirsher
2014-03-08 9:25 ` [net-next 15/15] igb: fix warning if !CONFIG_IGB_HWMON Jeff Kirsher
2014-03-08 23:50 ` [net-next 00/15][pull request] Intel Wired LAN Driver Updates David Miller
2014-03-09 0:10 ` David Miller
2014-03-09 1:12 ` Jeff Kirsher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1394270741-29926-4-git-send-email-jeffrey.t.kirsher@intel.com \
--to=jeffrey.t.kirsher@intel.com \
--cc=davem@davemloft.net \
--cc=davidx.m.ertman@intel.com \
--cc=gospo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=sassmann@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).