From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
To: davem@davemloft.net
Cc: Mark Rustad <mark.d.rustad@intel.com>,
netdev@vger.kernel.org, nhorman@redhat.com, sassmann@redhat.com,
jogreene@redhat.com, Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Subject: [net-next 14/19] ixgbe: Avoid needless PHY access on copper phys
Date: Tue, 1 Sep 2015 18:13:58 -0700 [thread overview]
Message-ID: <1441156443-33381-15-git-send-email-jeffrey.t.kirsher@intel.com> (raw)
In-Reply-To: <1441156443-33381-1-git-send-email-jeffrey.t.kirsher@intel.com>
From: Mark Rustad <mark.d.rustad@intel.com>
Avoid a needless PHY access on copper phys to save the 10ms wait
time for each PHY access. A helper function is introduced to
actually do the register access and process the contents.
Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 64 ++++++++++++++++++---------
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 1 +
2 files changed, 44 insertions(+), 21 deletions(-)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
index 97275dc..597d0b1 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
@@ -730,39 +730,61 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
}
/**
- * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
+ * ixgbe_get_copper_speeds_supported - Get copper link speed from phy
* @hw: pointer to hardware structure
- * @speed: pointer to link speed
- * @autoneg: boolean auto-negotiation value
*
- * Determines the link capabilities by reading the AUTOC register.
+ * Determines the supported link capabilities by reading the PHY auto
+ * negotiation register.
*/
-s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
- ixgbe_link_speed *speed,
- bool *autoneg)
+static s32 ixgbe_get_copper_speeds_supported(struct ixgbe_hw *hw)
{
- s32 status;
u16 speed_ability;
-
- *speed = 0;
- *autoneg = true;
+ s32 status;
status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD,
&speed_ability);
+ if (status)
+ return status;
- if (status == 0) {
- if (speed_ability & MDIO_SPEED_10G)
- *speed |= IXGBE_LINK_SPEED_10GB_FULL;
- if (speed_ability & MDIO_PMA_SPEED_1000)
- *speed |= IXGBE_LINK_SPEED_1GB_FULL;
- if (speed_ability & MDIO_PMA_SPEED_100)
- *speed |= IXGBE_LINK_SPEED_100_FULL;
+ if (speed_ability & MDIO_SPEED_10G)
+ hw->phy.speeds_supported |= IXGBE_LINK_SPEED_10GB_FULL;
+ if (speed_ability & MDIO_PMA_SPEED_1000)
+ hw->phy.speeds_supported |= IXGBE_LINK_SPEED_1GB_FULL;
+ if (speed_ability & MDIO_PMA_SPEED_100)
+ hw->phy.speeds_supported |= IXGBE_LINK_SPEED_100_FULL;
+
+ switch (hw->mac.type) {
+ case ixgbe_mac_X550:
+ hw->phy.speeds_supported |= IXGBE_LINK_SPEED_2_5GB_FULL;
+ hw->phy.speeds_supported |= IXGBE_LINK_SPEED_5GB_FULL;
+ break;
+ case ixgbe_mac_X550EM_x:
+ hw->phy.speeds_supported &= ~IXGBE_LINK_SPEED_100_FULL;
+ break;
+ default:
+ break;
}
- /* Internal PHY does not support 100 Mbps */
- if (hw->mac.type == ixgbe_mac_X550EM_x)
- *speed &= ~IXGBE_LINK_SPEED_100_FULL;
+ return 0;
+}
+
+/**
+ * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
+ * @hw: pointer to hardware structure
+ * @speed: pointer to link speed
+ * @autoneg: boolean auto-negotiation value
+ */
+s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
+ ixgbe_link_speed *speed,
+ bool *autoneg)
+{
+ s32 status = 0;
+
+ *autoneg = true;
+ if (!hw->phy.speeds_supported)
+ status = ixgbe_get_copper_speeds_supported(hw);
+ *speed = hw->phy.speeds_supported;
return status;
}
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
index a3eec19..6368919 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
@@ -3384,6 +3384,7 @@ struct ixgbe_phy_info {
u32 phy_semaphore_mask;
bool reset_disable;
ixgbe_autoneg_advertised autoneg_advertised;
+ ixgbe_link_speed speeds_supported;
enum ixgbe_smart_speed smart_speed;
bool smart_speed_active;
bool multispeed_fiber;
--
2.4.3
next prev parent reply other threads:[~2015-09-02 1:14 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-02 1:13 [net-next 00/19][pull request] Intel Wired LAN Driver Updates 2015-09-01 Jeff Kirsher
2015-09-02 1:13 ` [net-next 01/19] i40e: Set defport behavior for the Main VSI when in promiscuous mode Jeff Kirsher
2015-09-02 1:13 ` [net-next 02/19] ixgbe: add new function to check for management presence Jeff Kirsher
2015-09-02 1:13 ` [net-next 03/19] ixgbe: Assign set_phy_power dynamically where needed Jeff Kirsher
2015-09-02 1:13 ` [net-next 04/19] ixgbe: Check whether FDIRCMD writes actually complete Jeff Kirsher
2015-09-02 1:13 ` [net-next 05/19] ixgbe: Add support for UDP-encapsulated tx checksum offload Jeff Kirsher
2015-09-02 3:17 ` Tom Herbert
2015-09-02 16:46 ` Rustad, Mark D
2015-09-02 17:38 ` Tom Herbert
2015-09-02 20:56 ` Or Gerlitz
2015-09-02 21:07 ` Or Gerlitz
2015-09-02 22:34 ` Tom Herbert
2015-09-02 23:21 ` Tom Herbert
2015-09-03 0:21 ` Rustad, Mark D
2015-09-02 1:13 ` [net-next 06/19] ixgbe: Add support for VXLAN RX offloads Jeff Kirsher
2015-09-02 3:31 ` Tom Herbert
2015-09-02 16:53 ` Rustad, Mark D
2015-09-02 1:13 ` [net-next 07/19] ixgbe: Add support for entering low power link up state Jeff Kirsher
2015-09-02 1:13 ` [net-next 08/19] ixgbe: add get_bus_info method for X550 Jeff Kirsher
2015-09-02 1:13 ` [net-next 09/19] ixgbe: add new bus type for intergrated I/O interface (IOSF) Jeff Kirsher
2015-09-02 1:13 ` [net-next 10/19] ixgbe: Remove unused PCI bus types Jeff Kirsher
2015-09-02 1:13 ` [net-next 11/19] ixgbe: use kzalloc for allocating one thing Jeff Kirsher
2015-09-02 1:13 ` [net-next 12/19] ixgbe: Remove second instance of lan_id variable Jeff Kirsher
2015-09-02 1:13 ` [net-next 13/19] ixgbe: cleanup to use cached mask value Jeff Kirsher
2015-09-02 1:13 ` Jeff Kirsher [this message]
2015-09-02 1:13 ` [net-next 15/19] ixgbe: support for ethtool set_rxfh Jeff Kirsher
2015-09-02 1:14 ` [net-next 16/19] ixgbe: fix bounds checking in ixgbe_setup_tc for 82598 Jeff Kirsher
2015-09-02 1:14 ` [net-next 17/19] ixgbe: Add support for reporting 2.5G link speed Jeff Kirsher
2015-09-02 1:14 ` [net-next 18/19] ixgbe: Remove bimodal SR-IOV disabling Jeff Kirsher
2015-09-02 1:14 ` [net-next 19/19] ixgbe: Resolve "initialized field overwritten" warnings Jeff Kirsher
2015-09-02 3:19 ` [net-next 00/19][pull request] Intel Wired LAN Driver Updates 2015-09-01 David Miller
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=1441156443-33381-15-git-send-email-jeffrey.t.kirsher@intel.com \
--to=jeffrey.t.kirsher@intel.com \
--cc=davem@davemloft.net \
--cc=jogreene@redhat.com \
--cc=mark.d.rustad@intel.com \
--cc=netdev@vger.kernel.org \
--cc=nhorman@redhat.com \
--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).