All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark D Rustad <mark.d.rustad@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH V5 04/11] ixgbe: Use new methods for PHY access
Date: Fri, 01 Apr 2016 12:18:14 -0700	[thread overview]
Message-ID: <20160401191814.120975.37572.stgit@mdrustad-wks.jf.intel.com> (raw)
In-Reply-To: <20160401191701.120975.34684.stgit@mdrustad-wks.jf.intel.com>

Now x550em_a devices will use a new method for PHY access that will
get the firmware token for each access.

Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
---
Changes in V4:
- This is a complete replacement of what was the 4th patch in the series
- x550em_a requires a new phy access method, so this patch implements it
Changes in V5:
- Delete trailing space from a comment
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c |   67 ++++++++++++++++++++++++-
 1 file changed, 64 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
index ba161b5077eb..ad5a2d3c42ef 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
@@ -2548,6 +2548,57 @@ static void ixgbe_release_swfw_sync_x550em_a(struct ixgbe_hw *hw, u32 mask)
 		ixgbe_release_swfw_sync_X540(hw, hmask);
 }
 
+/**
+ * ixgbe_read_phy_reg_x550a  - Reads specified PHY register
+ * @hw: pointer to hardware structure
+ * @reg_addr: 32 bit address of PHY register to read
+ * @phy_data: Pointer to read data from PHY register
+ *
+ * Reads a value from a specified PHY register using the SWFW lock and PHY
+ * Token. The PHY Token is needed since the MDIO is shared between to MAC
+ * instances.
+ */
+static s32 ixgbe_read_phy_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
+				    u32 device_type, u16 *phy_data)
+{
+	u32 mask = hw->phy.phy_semaphore_mask | IXGBE_GSSR_TOKEN_SM;
+	s32 status;
+
+	if (hw->mac.ops.acquire_swfw_sync(hw, mask))
+		return IXGBE_ERR_SWFW_SYNC;
+
+	status = hw->phy.ops.read_reg_mdi(hw, reg_addr, device_type, phy_data);
+
+	hw->mac.ops.release_swfw_sync(hw, mask);
+
+	return status;
+}
+
+/**
+ * ixgbe_write_phy_reg_x550a - Writes specified PHY register
+ * @hw: pointer to hardware structure
+ * @reg_addr: 32 bit PHY register to write
+ * @device_type: 5 bit device type
+ * @phy_data: Data to write to the PHY register
+ *
+ * Writes a value to specified PHY register using the SWFW lock and PHY Token.
+ * The PHY Token is needed since the MDIO is shared between to MAC instances.
+ */
+static s32 ixgbe_write_phy_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
+				     u32 device_type, u16 phy_data)
+{
+	u32 mask = hw->phy.phy_semaphore_mask | IXGBE_GSSR_TOKEN_SM;
+	s32 status;
+
+	if (hw->mac.ops.acquire_swfw_sync(hw, mask))
+		return IXGBE_ERR_SWFW_SYNC;
+
+	status = ixgbe_write_phy_reg_mdi(hw, reg_addr, device_type, phy_data);
+	hw->mac.ops.release_swfw_sync(hw, mask);
+
+	return status;
+}
+
 #define X550_COMMON_MAC \
 	.init_hw			= &ixgbe_init_hw_generic, \
 	.start_hw			= &ixgbe_start_hw_X540, \
@@ -2673,8 +2724,6 @@ static const struct ixgbe_eeprom_operations eeprom_ops_X550EM_x = {
 	.read_i2c_sff8472	= &ixgbe_read_i2c_sff8472_generic, \
 	.read_i2c_eeprom	= &ixgbe_read_i2c_eeprom_generic, \
 	.write_i2c_eeprom	= &ixgbe_write_i2c_eeprom_generic, \
-	.read_reg		= &ixgbe_read_phy_reg_generic, \
-	.write_reg		= &ixgbe_write_phy_reg_generic, \
 	.setup_link		= &ixgbe_setup_phy_link_generic, \
 	.set_phy_power		= NULL, \
 	.check_overtemp		= &ixgbe_tn_check_overtemp, \
@@ -2684,12 +2733,16 @@ static const struct ixgbe_phy_operations phy_ops_X550 = {
 	X550_COMMON_PHY
 	.init			= NULL,
 	.identify		= &ixgbe_identify_phy_generic,
+	.read_reg		= &ixgbe_read_phy_reg_generic,
+	.write_reg		= &ixgbe_write_phy_reg_generic,
 };
 
 static const struct ixgbe_phy_operations phy_ops_X550EM_x = {
 	X550_COMMON_PHY
 	.init			= &ixgbe_init_phy_ops_X550em,
 	.identify		= &ixgbe_identify_phy_x550em,
+	.read_reg		= &ixgbe_read_phy_reg_generic,
+	.write_reg		= &ixgbe_write_phy_reg_generic,
 	.read_i2c_combined	= &ixgbe_read_i2c_combined_generic,
 	.write_i2c_combined	= &ixgbe_write_i2c_combined_generic,
 	.read_i2c_combined_unlocked = &ixgbe_read_i2c_combined_generic_unlocked,
@@ -2697,6 +2750,14 @@ static const struct ixgbe_phy_operations phy_ops_X550EM_x = {
 				     &ixgbe_write_i2c_combined_generic_unlocked,
 };
 
+static const struct ixgbe_phy_operations phy_ops_x550em_a = {
+	X550_COMMON_PHY
+	.init			= &ixgbe_init_phy_ops_X550em,
+	.identify		= &ixgbe_identify_phy_x550em,
+	.read_reg		= &ixgbe_read_phy_reg_x550a,
+	.write_reg		= &ixgbe_write_phy_reg_x550a,
+};
+
 static const u32 ixgbe_mvals_X550[IXGBE_MVALS_IDX_LIMIT] = {
 	IXGBE_MVALS_INIT(X550)
 };
@@ -2734,7 +2795,7 @@ const struct ixgbe_info ixgbe_x550em_a_info = {
 	.get_invariants		= &ixgbe_get_invariants_X550_x,
 	.mac_ops		= &mac_ops_x550em_a,
 	.eeprom_ops		= &eeprom_ops_X550EM_x,
-	.phy_ops		= &phy_ops_X550EM_x,
+	.phy_ops		= &phy_ops_x550em_a,
 	.mbx_ops		= &mbx_ops_generic,
 	.mvals			= ixgbe_mvals_x550em_a,
 };


  parent reply	other threads:[~2016-04-01 19:18 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-01 19:17 [Intel-wired-lan] [PATCH V5 00/11] ixgbe: Add support for x550em_a MAC Mark D Rustad
2016-04-01 19:17 ` [Intel-wired-lan] [PATCH V5 01/11] ixgbe: Add definitions for x550em_a 10G MAC Mark D Rustad
2016-04-06 16:00   ` Bowers, AndrewX
2016-04-01 19:18 ` [Intel-wired-lan] [PATCH V5 02/11] ixgbe: Use method pointer to access IOSF devices Mark D Rustad
2016-04-04 19:15   ` Bowers, AndrewX
2016-04-06 16:29   ` Bowers, AndrewX
2016-04-01 19:18 ` [Intel-wired-lan] [PATCH V5 03/11] ixgbe: Add support for x550em_a 10G MAC type Mark D Rustad
2016-04-06 16:33   ` Bowers, AndrewX
2016-04-01 19:18 ` Mark D Rustad [this message]
2016-04-06 16:37   ` [Intel-wired-lan] [PATCH V5 04/11] ixgbe: Use new methods for PHY access Bowers, AndrewX
2016-04-01 19:18 ` [Intel-wired-lan] [PATCH V5 05/11] ixgbe: Read and set instance id Mark D Rustad
2016-04-06 18:35   ` Bowers, AndrewX
2016-04-01 19:18 ` [Intel-wired-lan] [PATCH V5 06/11] ixgbe: Read and parse NW_MNG_IF_SEL register Mark D Rustad
2016-04-06 18:36   ` Bowers, AndrewX
2016-04-01 19:18 ` [Intel-wired-lan] [PATCH V5 07/11] ixgbe: Introduce function to control MDIO speed Mark D Rustad
2016-04-06 18:36   ` Bowers, AndrewX
2016-04-01 19:18 ` [Intel-wired-lan] [PATCH V5 08/11] ixgbe: Add support for SFPs with retimer Mark D Rustad
2016-04-06 18:38   ` Bowers, AndrewX
2016-04-01 19:18 ` [Intel-wired-lan] [PATCH V5 09/11] ixgbe: Add support for SGMII backplane interface Mark D Rustad
2016-04-01 19:18 ` [Intel-wired-lan] [PATCH V5 10/11] ixgbe: Add KR backplane support for x550em_a Mark D Rustad
2016-04-01 19:18 ` [Intel-wired-lan] [PATCH V5 11/11] ixgbe: Bump version number Mark D Rustad
2016-04-04 22:56   ` Bowers, AndrewX

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=20160401191814.120975.37572.stgit@mdrustad-wks.jf.intel.com \
    --to=mark.d.rustad@intel.com \
    --cc=intel-wired-lan@osuosl.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.