From: "Marek Behún" <kabel@kernel.org>
To: Andrew Lunn <andrew@lunn.ch>, netdev@vger.kernel.org
Cc: devicetree@vger.kernel.org, "Rob Herring" <robh+dt@kernel.org>,
"Russell King" <rmk+kernel@armlinux.org.uk>,
pali@kernel.org, "Marek Behún" <kabel@kernel.org>
Subject: [PATCH RFC net-next 5/8] net: phylink: pass supported PHY interface modes to phylib
Date: Wed, 10 Nov 2021 20:07:06 +0100 [thread overview]
Message-ID: <20211110190709.16505-6-kabel@kernel.org> (raw)
In-Reply-To: <20211110190709.16505-1-kabel@kernel.org>
Pass the supported PHY interface types to phylib so that PHY drivers
can select an appropriate host configuration mode for their interface
according to the host capabilities.
Signed-off-by: Marek Behún <kabel@kernel.org>
---
drivers/net/phy/phylink.c | 28 ++++++++++++++++++++++++++++
include/linux/phy.h | 4 ++++
2 files changed, 32 insertions(+)
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 4a8a0adf8c6c..0697c88227f7 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -1178,6 +1178,10 @@ int phylink_connect_phy(struct phylink *pl, struct phy_device *phy)
{
int ret;
+ /* Set the PHY's host supported interfaces */
+ phy_interface_copy(phy->host_interfaces,
+ pl->config->supported_interfaces);
+
/* Use PHY device/driver interface */
if (pl->link_interface == PHY_INTERFACE_MODE_NA) {
pl->link_interface = phy->interface;
@@ -1253,6 +1257,10 @@ int phylink_fwnode_phy_connect(struct phylink *pl,
if (!phy_dev)
return -ENODEV;
+ /* Set the PHY's host supported interfaces */
+ phy_interface_copy(phy_dev->host_interfaces,
+ pl->config->supported_interfaces);
+
ret = phy_attach_direct(pl->netdev, phy_dev, flags,
pl->link_interface);
if (ret) {
@@ -2437,6 +2445,8 @@ static bool phylink_phy_no_inband(struct phy_device *phy)
(phy->c45_ids.device_ids[1] & 0xfffffff0) == 0xae025150;
}
+static DECLARE_PHY_INTERFACE_MASK(phylink_sfp_interfaces);
+
static int phylink_sfp_connect_phy(void *upstream, struct phy_device *phy)
{
struct phylink *pl = upstream;
@@ -2458,6 +2468,10 @@ static int phylink_sfp_connect_phy(void *upstream, struct phy_device *phy)
else
mode = MLO_AN_INBAND;
+ /* Set the PHY's host supported interfaces */
+ phy_interface_and(phy->host_interfaces, phylink_sfp_interfaces,
+ pl->config->supported_interfaces);
+
/* Do the initial configuration */
ret = phylink_sfp_config(pl, mode, phy->supported, phy->advertising);
if (ret < 0)
@@ -2819,4 +2833,18 @@ void phylink_mii_c45_pcs_get_state(struct mdio_device *pcs,
}
EXPORT_SYMBOL_GPL(phylink_mii_c45_pcs_get_state);
+static int __init phylink_init(void)
+{
+ __set_bit(PHY_INTERFACE_MODE_USXGMII, phylink_sfp_interfaces);
+ __set_bit(PHY_INTERFACE_MODE_10GBASER, phylink_sfp_interfaces);
+ __set_bit(PHY_INTERFACE_MODE_10GKR, phylink_sfp_interfaces);
+ __set_bit(PHY_INTERFACE_MODE_5GBASER, phylink_sfp_interfaces);
+ __set_bit(PHY_INTERFACE_MODE_2500BASEX, phylink_sfp_interfaces);
+ __set_bit(PHY_INTERFACE_MODE_SGMII, phylink_sfp_interfaces);
+ __set_bit(PHY_INTERFACE_MODE_1000BASEX, phylink_sfp_interfaces);
+
+ return 0;
+}
+module_init(phylink_init);
+
MODULE_LICENSE("GPL v2");
diff --git a/include/linux/phy.h b/include/linux/phy.h
index effa4137f173..e05146b383ab 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -569,6 +569,7 @@ struct macsec_ops;
* @advertising: Currently advertised linkmodes
* @adv_old: Saved advertised while power saving for WoL
* @lp_advertising: Current link partner advertised linkmodes
+ * @host_interfaces: PHY interface modes supported by host
* @eee_broken_modes: Energy efficient ethernet modes which should be prohibited
* @autoneg: Flag autoneg being used
* @link: Current link state
@@ -658,6 +659,9 @@ struct phy_device {
/* used with phy_speed_down */
__ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old);
+ /* host supported PHY interface types */
+ DECLARE_PHY_INTERFACE_MASK(host_interfaces);
+
/* Energy efficient ethernet modes which should be prohibited */
u32 eee_broken_modes;
--
2.32.0
next prev parent reply other threads:[~2021-11-10 19:07 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-10 19:07 [PATCH RFC net-next 0/8] Extend `phy-mode` to string array Marek Behún
2021-11-10 19:07 ` [PATCH RFC net-next 1/8] dt-bindings: ethernet-controller: support multiple PHY connection types Marek Behún
2021-11-10 19:07 ` [PATCH RFC net-next 2/8] net: Update documentation for *_get_phy_mode() functions Marek Behún
2021-11-10 19:07 ` [PATCH RFC net-next 3/8] device property: add helper function for getting phy mode bitmap Marek Behún
2021-11-10 19:07 ` [PATCH RFC net-next 4/8] net: phylink: update supported_interfaces with modes from fwnode Marek Behún
2021-11-10 19:07 ` Marek Behún [this message]
2021-11-10 19:07 ` [PATCH RFC net-next 6/8] net: phy: marvell10g: Use generic macro for supported interfaces Marek Behún
2021-11-10 19:07 ` [PATCH RFC net-next 7/8] net: phy: marvell10g: Use tabs instead of spaces for indentation Marek Behún
2021-11-10 19:07 ` [PATCH RFC net-next 8/8] net: phy: marvell10g: select host interface configuration Marek Behún
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=20211110190709.16505-6-kabel@kernel.org \
--to=kabel@kernel.org \
--cc=andrew@lunn.ch \
--cc=devicetree@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pali@kernel.org \
--cc=rmk+kernel@armlinux.org.uk \
--cc=robh+dt@kernel.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.