DPDK patches and discussions
 help / color / mirror / Atom feed
From: Wenzhuo Lu <wenzhuo.lu@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v2 08/11] ixgbe/base: set MDIO speed after MAC reset
Date: Sun, 14 Feb 2016 16:55:03 +0800	[thread overview]
Message-ID: <1455440106-28547-9-git-send-email-wenzhuo.lu@intel.com> (raw)
In-Reply-To: <1455440106-28547-1-git-send-email-wenzhuo.lu@intel.com>

The MDIO clock speed must be reconfigured after the MAC reset.
The MDIO clock speed becomes invalid, therefore the driver reads
invalid PHY register values. The driver now set the MDIO clock
speed prior to initializing PHY ops and again after the MAC reset.

As now the MDIO speed gets set in more than one place, make a
function for it so it will always be done correctly.

Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
---
 doc/guides/rel_notes/release_16_04.rst |  7 +++++++
 drivers/net/ixgbe/base/ixgbe_x550.c    | 35 +++++++++++++++++++++++++++-------
 2 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/doc/guides/rel_notes/release_16_04.rst b/doc/guides/rel_notes/release_16_04.rst
index 7687ffd..7ce4547 100644
--- a/doc/guides/rel_notes/release_16_04.rst
+++ b/doc/guides/rel_notes/release_16_04.rst
@@ -88,6 +88,13 @@ Drivers
   is already set in ixgbe_set_fdir_drop_queue_82599() which makes more sense for
   drivers that call that function.
 
+* **ixgbe/base: Set MDIO speed after MAC reset.**
+
+  The MDIO clock speed must be reconfigured after the MAC reset. The MDIO clock
+  speed becomes invalid, therefore the driver reads invalid PHY register values.
+  The driver now set the MDIO clock speed prior to initializing PHY ops and
+  again after the MAC reset.
+
 
 Libraries
 ~~~~~~~~~
diff --git a/drivers/net/ixgbe/base/ixgbe_x550.c b/drivers/net/ixgbe/base/ixgbe_x550.c
index 83d9c81..e4416d3 100644
--- a/drivers/net/ixgbe/base/ixgbe_x550.c
+++ b/drivers/net/ixgbe/base/ixgbe_x550.c
@@ -1679,6 +1679,31 @@ s32 ixgbe_init_phy_ops_X550em(struct ixgbe_hw *hw)
 }
 
 /**
+ * ixgbe_set_mdio_speed - Set MDIO clock speed
+ *  @hw: pointer to hardware structure
+ */
+static void ixgbe_set_mdio_speed(struct ixgbe_hw *hw)
+{
+	u32 hlreg0;
+
+	switch (hw->device_id) {
+	case IXGBE_DEV_ID_X550EM_X_10G_T:
+	case IXGBE_DEV_ID_X550EM_A_1G_T:
+	case IXGBE_DEV_ID_X550EM_A_1G_T_L:
+	case IXGBE_DEV_ID_X550EM_A_10G_T:
+	case IXGBE_DEV_ID_X550EM_A_SFP:
+	case IXGBE_DEV_ID_X550EM_A_QSFP:
+		/* Config MDIO clock speed before the first MDIO PHY access */
+		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
+		hlreg0 &= ~IXGBE_HLREG0_MDCSPD;
+		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
+		break;
+	default:
+		break;
+	}
+}
+
+/**
  *  ixgbe_reset_hw_X550em - Perform hardware reset
  *  @hw: pointer to hardware structure
  *
@@ -1692,7 +1717,6 @@ s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)
 	s32 status;
 	u32 ctrl = 0;
 	u32 i;
-	u32 hlreg0;
 	bool link_up = false;
 
 	DEBUGFUNC("ixgbe_reset_hw_X550em");
@@ -1705,12 +1729,7 @@ s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)
 	/* flush pending Tx transactions */
 	ixgbe_clear_tx_pending(hw);
 
-	if (hw->device_id == IXGBE_DEV_ID_X550EM_X_10G_T) {
-		/* Config MDIO clock speed before the first MDIO PHY access */
-		hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
-		hlreg0 &= ~IXGBE_HLREG0_MDCSPD;
-		IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
-	}
+	ixgbe_set_mdio_speed(hw);
 
 	/* PHY ops must be identified and initialized prior to reset */
 	status = hw->phy.ops.init(hw);
@@ -1789,6 +1808,8 @@ mac_reset_top:
 	hw->mac.num_rar_entries = 128;
 	hw->mac.ops.init_rx_addrs(hw);
 
+	ixgbe_set_mdio_speed(hw);
+
 	if (hw->device_id == IXGBE_DEV_ID_X550EM_X_SFP)
 		ixgbe_setup_mux_ctl(hw);
 
-- 
1.9.3

  parent reply	other threads:[~2016-02-14  8:55 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-19  2:48 [dpdk-dev] [PATCH 00/12] update ixgbe base driver Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 01/12] ixgbe/base: update readme Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 02/12] ixgbe/base: add new devices and mac type Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 03/12] ixgeb/base: use PHY token for X550EM_a Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 04/12] ixgbe/base: set VF mac address only when acked by PF Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 05/12] ixgbe/base: always turn PHY power on when requested Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 06/12] ixgbe/base: add definition of a register for mac SGMII busy Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 07/12] ixgbe/base: support fuse for both x550em_x V1 and V2 Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 08/12] ixgbe/base: remove duplicate setting for fdir no match drop Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 09/12] ixgbe/base: consolidate MDIO speed-setting Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 10/12] ixgbe/base: use link instead of I2C combined abstraction Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 11/12] ixgbe: support new devices and mac types Wenzhuo Lu
2016-01-19  2:48 ` [dpdk-dev] [PATCH 12/12] doc: update release note for ixgbe base code update Wenzhuo Lu
2016-02-11 22:35 ` [dpdk-dev] [PATCH 00/12] update ixgbe base driver Bruce Richardson
2016-02-14  2:33   ` Lu, Wenzhuo
2016-02-14  8:54 ` [dpdk-dev] [PATCH v2 00/11] " Wenzhuo Lu
2016-02-14  8:54   ` [dpdk-dev] [PATCH v2 01/11] ixgbe/base: add x550em_a device support Wenzhuo Lu
2016-02-14  8:54   ` [dpdk-dev] [PATCH v2 02/11] ixgbe/base: add x550em_x V2 " Wenzhuo Lu
2016-02-14  8:54   ` [dpdk-dev] [PATCH v2 03/11] ixgbe/base: sw-firmware sync for resource sharing Wenzhuo Lu
2016-02-14  8:54   ` [dpdk-dev] [PATCH v2 04/11] ixgbe/base: set VF mac addr only when acked by PF Wenzhuo Lu
2016-02-14  8:55   ` [dpdk-dev] [PATCH v2 05/11] ixgbe/base: ignore manageability for phy power on Wenzhuo Lu
2016-02-14  8:55   ` [dpdk-dev] [PATCH v2 06/11] ixgbe/base: add register definition for SGMII busy Wenzhuo Lu
2016-02-14  8:55   ` [dpdk-dev] [PATCH v2 07/11] ixgbe/base: fix setting flow dir flag twice Wenzhuo Lu
2016-02-14  8:55   ` Wenzhuo Lu [this message]
2016-02-14  8:55   ` [dpdk-dev] [PATCH v2 09/11] ixgbe/base: abstract out link read/write ops Wenzhuo Lu
2016-02-14  8:55   ` [dpdk-dev] [PATCH v2 10/11] ixgbe/base: update readme Wenzhuo Lu
2016-02-14  8:55   ` [dpdk-dev] [PATCH v2 11/11] ixgbe: support new devices and mac types Wenzhuo Lu
2016-02-15 21:39   ` [dpdk-dev] [PATCH v2 00/11] update ixgbe base driver Bruce Richardson

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=1455440106-28547-9-git-send-email-wenzhuo.lu@intel.com \
    --to=wenzhuo.lu@intel.com \
    --cc=dev@dpdk.org \
    /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).