From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
To: Andrew Lunn <andrew@lunn.ch>, Heiner Kallweit <hkallweit1@gmail.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
"Ar__n__ __NAL" <arinc.unal@arinc9.com>,
Claudiu Manoil <claudiu.manoil@nxp.com>,
Daniel Golle <daniel@makrotopia.org>,
"David S. Miller" <davem@davemloft.net>,
DENG Qingfang <dqfext@gmail.com>,
Eric Dumazet <edumazet@google.com>,
Florian Fainelli <f.fainelli@gmail.com>,
Jakub Kicinski <kuba@kernel.org>,
Landen Chao <Landen.Chao@mediatek.com>,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org,
Matthias Brugger <matthias.bgg@gmail.com>,
netdev@vger.kernel.org, Paolo Abeni <pabeni@redhat.com>,
Sean Wang <sean.wang@mediatek.com>,
UNGLinuxDriver@microchip.com, Vladimir Oltean <olteanv@gmail.com>
Subject: [PATCH RFC net-next 03/14] net: phylink: add support for PCS link change notifications
Date: Fri, 23 Jun 2023 15:17:04 +0100 [thread overview]
Message-ID: <E1qChay-00Fmrf-9Y@rmk-PC.armlinux.org.uk> (raw)
In-Reply-To: <ZJWpGCtIZ06jiBsO@shell.armlinux.org.uk>
Add a function, phylink_pcs_change() which can be used by PCs drivers
to notify phylink about changes to the PCS link state.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/phy/phylink.c | 38 ++++++++++++++++++++++++++++++++++----
include/linux/phylink.h | 7 +++++++
2 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 9840a2952309..71b1012ef3be 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -1137,6 +1137,11 @@ static void phylink_major_config(struct phylink *pl, bool restart,
if (pcs_changed) {
phylink_pcs_disable(pl->pcs);
+ if (pl->pcs)
+ pl->pcs->phylink = NULL;
+
+ pcs->phylink = pl;
+
pl->pcs = pcs;
}
@@ -1991,6 +1996,14 @@ void phylink_disconnect_phy(struct phylink *pl)
}
EXPORT_SYMBOL_GPL(phylink_disconnect_phy);
+static void phylink_link_changed(struct phylink *pl, bool up, const char *what)
+{
+ if (!up)
+ pl->mac_link_dropped = true;
+ phylink_run_resolve(pl);
+ phylink_dbg(pl, "%s link %s\n", what, up ? "up" : "down");
+}
+
/**
* phylink_mac_change() - notify phylink of a change in MAC state
* @pl: a pointer to a &struct phylink returned from phylink_create()
@@ -2001,13 +2014,30 @@ EXPORT_SYMBOL_GPL(phylink_disconnect_phy);
*/
void phylink_mac_change(struct phylink *pl, bool up)
{
- if (!up)
- pl->mac_link_dropped = true;
- phylink_run_resolve(pl);
- phylink_dbg(pl, "mac link %s\n", up ? "up" : "down");
+ phylink_link_changed(pl, up, "mac");
}
EXPORT_SYMBOL_GPL(phylink_mac_change);
+/**
+ * phylink_pcs_change() - notify phylink of a change to PCS link state
+ * @pcs: pointer to &struct phylink_pcs
+ * @up: indicates whether the link is currently up.
+ *
+ * The PCS driver should call this when the state of its link changes
+ * (e.g. link failure, new negotiation results, etc.) Note: it should
+ * not determine "up" by reading the BMSR. If in doubt about the link
+ * state at interrupt time, then pass true if pcs_get_state() returns
+ * the latched link-down state, otherwise pass false.
+ */
+void phylink_pcs_change(struct phylink_pcs *pcs, bool up)
+{
+ struct phylink *pl = pcs->phylink;
+
+ if (pl)
+ phylink_link_changed(pl, up, "pcs");
+}
+EXPORT_SYMBOL_GPL(phylink_pcs_change);
+
static irqreturn_t phylink_link_handler(int irq, void *data)
{
struct phylink *pl = data;
diff --git a/include/linux/phylink.h b/include/linux/phylink.h
index e609b208fa3d..734fb4ca9cf7 100644
--- a/include/linux/phylink.h
+++ b/include/linux/phylink.h
@@ -9,6 +9,7 @@ struct device_node;
struct ethtool_cmd;
struct fwnode_handle;
struct net_device;
+struct phylink;
enum {
MLO_PAUSE_NONE,
@@ -518,14 +519,19 @@ struct phylink_pcs_ops;
/**
* struct phylink_pcs - PHYLINK PCS instance
* @ops: a pointer to the &struct phylink_pcs_ops structure
+ * @phylink: pointer to &struct phylink_config
* @neg_mode: provide PCS neg mode via "mode" argument
* @poll: poll the PCS for link changes
*
* This structure is designed to be embedded within the PCS private data,
* and will be passed between phylink and the PCS.
+ *
+ * The @phylink member is private to phylink and must not be touched by
+ * the PCS driver.
*/
struct phylink_pcs {
const struct phylink_pcs_ops *ops;
+ struct phylink *phylink;
bool neg_mode;
bool poll;
};
@@ -697,6 +703,7 @@ int phylink_fwnode_phy_connect(struct phylink *pl,
void phylink_disconnect_phy(struct phylink *);
void phylink_mac_change(struct phylink *, bool up);
+void phylink_pcs_change(struct phylink_pcs *, bool up);
void phylink_start(struct phylink *);
void phylink_stop(struct phylink *);
--
2.30.2
next prev parent reply other threads:[~2023-06-23 14:17 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-23 14:15 [PATCH RFC net-next 00/14] dsa/88e6xxx/phylink changes after the next merge window Russell King (Oracle)
2023-06-23 14:16 ` [PATCH RFC net-next 01/14] net: phylink: add pcs_enable()/pcs_disable() methods Russell King (Oracle)
2023-06-23 14:16 ` [PATCH RFC net-next 02/14] net: phylink: add pcs_pre_config()/pcs_post_config() methods Russell King (Oracle)
2023-06-23 14:17 ` Russell King (Oracle) [this message]
2024-01-23 19:46 ` [PATCH RFC net-next 03/14] net: phylink: add support for PCS link change notifications Sean Anderson
2024-01-23 20:07 ` Russell King (Oracle)
2024-01-23 20:33 ` Sean Anderson
2024-01-23 21:05 ` Russell King (Oracle)
2024-01-23 21:09 ` Sean Anderson
2023-06-23 14:17 ` [PATCH RFC net-next 04/14] net: mdio: add unlocked mdiobus and mdiodev bus accessors Russell King (Oracle)
2023-06-23 14:17 ` [PATCH RFC net-next 05/14] net: dsa: mv88e6xxx: remove handling for DSA and CPU ports Russell King (Oracle)
2023-06-23 14:17 ` [PATCH RFC net-next 06/14] net: dsa: mv88e6xxx: add infrastructure for phylink_pcs Russell King (Oracle)
2023-06-23 14:17 ` [PATCH RFC net-next 07/14] net: dsa: mv88e6xxx: export mv88e6xxx_pcs_decode_state() Russell King (Oracle)
2023-06-23 14:17 ` [PATCH RFC net-next 08/14] net: dsa: mv88e6xxx: convert 88e6185 to phylink_pcs Russell King (Oracle)
2023-06-23 14:17 ` [PATCH RFC net-next 09/14] net: dsa: mv88e6xxx: convert 88e6352 " Russell King
2023-06-23 14:17 ` [PATCH RFC net-next 10/14] net: dsa: mv88e6xxx: convert 88e639x " Russell King (Oracle)
2023-06-23 14:17 ` [PATCH RFC net-next 11/14] net: dsa: mv88e6xxx: cleanup after phylink_pcs conversion Russell King (Oracle)
2023-06-23 14:17 ` [PATCH RFC net-next 12/14] net: dsa: remove legacy_pre_march2020 detection Russell King (Oracle)
2023-06-23 14:17 ` [PATCH RFC net-next 13/14] net: dsa: remove legacy_pre_march2020 from drivers Russell King (Oracle)
2023-06-23 14:18 ` [PATCH RFC net-next 14/14] net: phylink: remove legacy mac_an_restart() method Russell King (Oracle)
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=E1qChay-00Fmrf-9Y@rmk-PC.armlinux.org.uk \
--to=rmk+kernel@armlinux.org.uk \
--cc=Landen.Chao@mediatek.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=alexandre.belloni@bootlin.com \
--cc=andrew@lunn.ch \
--cc=angelogioacchino.delregno@collabora.com \
--cc=arinc.unal@arinc9.com \
--cc=claudiu.manoil@nxp.com \
--cc=daniel@makrotopia.org \
--cc=davem@davemloft.net \
--cc=dqfext@gmail.com \
--cc=edumazet@google.com \
--cc=f.fainelli@gmail.com \
--cc=hkallweit1@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=matthias.bgg@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=sean.wang@mediatek.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).