From: David Decotigny <david.decotigny@google.com>
To: Jeff Kirsher <jeffrey.t.kirsher@intel.com>,
Jesse Brandeburg <jesse.brandeburg@intel.com>,
Bruce Allan <bruce.w.allan@intel.com>,
Carolyn Wyborny <carolyn.wyborny@intel.com>,
Don Skidmore <donald.c.skidmore@intel.com>,
Greg Rose <gregory.v.rose@intel.com>,
Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>,
Alex Duyck <alexander.h.duyck@intel.com>,
John Ronciak <john.ronciak@intel.com>,
e1000-devel@lists.sourceforge.net, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: "David Decotigny" <david.decotigny@google.com>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <eric.dumazet@gmail.com>,
"Ian Campbell" <ian.campbell@citrix.com>,
"Paul Gortmaker" <paul.gortmaker@windriver.com>,
"Maciej Żenczykowski" <zenczykowski@gmail.com>
Subject: [PATCH net-next v2 3/4] net-e1000e: reworked carrier detection logic
Date: Tue, 22 Nov 2011 11:23:37 -0800 [thread overview]
Message-ID: <162f094e526f3b2a21e66b5863608de6970bba68.1321989502.git.david.decotigny@google.com> (raw)
In-Reply-To: <cover.1321989502.git.david.decotigny@google.com>
In-Reply-To: <cover.1321989502.git.david.decotigny@google.com>
From: Maciej Żenczykowski <zenczykowski@gmail.com>
This change removes an un-needed final pause in case of timeout and
reworks the "link is up" detection logic.
Signed-off-by: David Decotigny <david.decotigny@google.com>
---
drivers/net/ethernet/intel/e1000e/phy.c | 64 +++++++++++++++++++------------
1 files changed, 39 insertions(+), 25 deletions(-)
diff --git a/drivers/net/ethernet/intel/e1000e/phy.c b/drivers/net/ethernet/intel/e1000e/phy.c
index 8666476..f487a7f 100644
--- a/drivers/net/ethernet/intel/e1000e/phy.c
+++ b/drivers/net/ethernet/intel/e1000e/phy.c
@@ -1775,39 +1775,53 @@ static s32 e1000_wait_autoneg(struct e1000_hw *hw)
* Polls the PHY status register for link, 'iterations' number of times.
**/
s32 e1000e_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
- u32 usec_interval, bool *success)
+ u32 usec_interval, bool *success)
{
- s32 ret_val = 0;
- u16 i, phy_status;
+ u32 i;
+ u16 phy_reg;
+ int good_reads_phy_status = 0;
+
+ }
+
+ /*
+ * Remember that e1e_rphy may fail because of another entity
+ * (like the firmware) holding the lock, we need to handle
+ * this gracefully - by waiting and trying again.
+ *
+ * Some PHYs require the PHY_STATUS register to be read twice
+ * due to the link bit being sticky. No harm doing it across
+ * the board.
+ */
+ for (i = 0; i < iterations; /* i incremented manually */) {
+ if (0 == e1e_rphy(hw, PHY_STATUS, &phy_reg)) {
+ if (++good_reads_phy_status < 2)
+ continue; /* Re-read once, to make sure */
- for (i = 0; i < iterations; i++) {
- /*
- * Some PHYs require the PHY_STATUS register to be read
- * twice due to the link bit being sticky. No harm doing
- * it across the board.
- */
- ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
- if (ret_val)
/*
- * If the first read fails, another entity may have
- * ownership of the resources, wait and try again to
- * see if they have relinquished the resources yet.
+ * Great, we got at least 2 successfull reads
*/
- udelay(usec_interval);
- ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
- if (ret_val)
- break;
- if (phy_status & MII_SR_LINK_STATUS)
- break;
- if (usec_interval >= 1000)
- mdelay(usec_interval/1000);
+
+ if (phy_reg & MII_SR_LINK_STATUS) {
+ /* success: link up */
+ *success = true;
+ return 0;
+ }
+ }
+
+ /* Pause now and re-iterate */
+ if (++i >= iterations)
+ break; /* Pause not needed after last iteration */
+ else if (usec_interval >= 1000)
+ mdelay(usec_interval / 1000);
else
udelay(usec_interval);
}
- *success = (i < iterations);
-
- return ret_val;
+ /* no success in for(;;) loop */
+ *success = false;
+ if (good_reads_phy_status < 2)
+ return -E1000_ERR_PHY;
+ return 0;
}
/**
--
1.7.3.1
next prev parent reply other threads:[~2011-11-22 19:24 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-22 19:23 [PATCH net-next v2 0/4] e1000e: ethtool setfeatures fixes + loopback David Decotigny
2011-11-22 19:23 ` [PATCH net-next v2 1/4] net-e1000e: fix ethtool set_features taking new features into account too late David Decotigny
2011-11-22 19:23 ` [PATCH net-next v2 2/4] net-e1000e: ethtool loopback support David Decotigny
2011-11-22 19:23 ` David Decotigny [this message]
2011-11-22 19:23 ` [PATCH net-next v2 4/4] net-e1000e: Report carrier in loopback mode David Decotigny
2011-11-22 20:46 ` [PATCH net-next v2 0/4] e1000e: ethtool setfeatures fixes + loopback Jeff Kirsher
2011-11-22 21:13 ` David Decotigny
2011-11-23 1:56 ` Maciej Żenczykowski
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=162f094e526f3b2a21e66b5863608de6970bba68.1321989502.git.david.decotigny@google.com \
--to=david.decotigny@google.com \
--cc=alexander.h.duyck@intel.com \
--cc=bruce.w.allan@intel.com \
--cc=carolyn.wyborny@intel.com \
--cc=davem@davemloft.net \
--cc=donald.c.skidmore@intel.com \
--cc=e1000-devel@lists.sourceforge.net \
--cc=eric.dumazet@gmail.com \
--cc=gregory.v.rose@intel.com \
--cc=ian.campbell@citrix.com \
--cc=jeffrey.t.kirsher@intel.com \
--cc=jesse.brandeburg@intel.com \
--cc=john.ronciak@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=paul.gortmaker@windriver.com \
--cc=peter.p.waskiewicz.jr@intel.com \
--cc=zenczykowski@gmail.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
all inboxes | Powered by JetHome®