Backport pending PCS standalone feature for kernel 6.12 and all the required dependency patch. All affected patch automatically refreshed. Link: https://github.com/openwrt/openwrt/pull/23271 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
65 lines
2.3 KiB
Diff
65 lines
2.3 KiB
Diff
From 4b1dde131a237455e41985fdc95306cd2f1b8a0a Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Fri, 9 May 2025 16:36:22 +0200
|
|
Subject: [PATCH 7/7] net: phylink: add .pcs_link_down PCS OP
|
|
|
|
Permit for PCS driver to define specific operation to torn down the link
|
|
between the MAC and the PCS.
|
|
|
|
This might be needed for some PCS that reset counter or require special
|
|
reset to correctly work if the link needs to be restored later.
|
|
|
|
On phylink_link_down() call, the additional phylink_pcs_link_down() will
|
|
be called before .mac_link_down to torn down the link.
|
|
|
|
PCS driver will need to define .pcs_link_down to make use of this.
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
---
|
|
drivers/net/phy/phylink.c | 8 ++++++++
|
|
include/linux/phylink.h | 2 ++
|
|
2 files changed, 10 insertions(+)
|
|
|
|
--- a/drivers/net/phy/phylink.c
|
|
+++ b/drivers/net/phy/phylink.c
|
|
@@ -1178,6 +1178,12 @@ static void phylink_pcs_link_up(struct p
|
|
pcs->ops->pcs_link_up(pcs, neg_mode, interface, speed, duplex);
|
|
}
|
|
|
|
+static void phylink_pcs_link_down(struct phylink_pcs *pcs)
|
|
+{
|
|
+ if (pcs && pcs->ops->pcs_link_down)
|
|
+ pcs->ops->pcs_link_down(pcs);
|
|
+}
|
|
+
|
|
/* Query inband for a specific interface mode, asking the MAC for the
|
|
* PCS which will be used to handle the interface mode.
|
|
*/
|
|
@@ -1817,6 +1823,8 @@ static void phylink_link_down(struct phy
|
|
|
|
if (ndev)
|
|
netif_carrier_off(ndev);
|
|
+ phylink_pcs_link_down(pl->pcs);
|
|
+
|
|
pl->mac_ops->mac_link_down(pl->config, pl->act_link_an_mode,
|
|
pl->cur_interface);
|
|
phylink_info(pl, "Link is Down\n");
|
|
--- a/include/linux/phylink.h
|
|
+++ b/include/linux/phylink.h
|
|
@@ -443,6 +443,7 @@ struct phylink_pcs {
|
|
* @pcs_an_restart: restart 802.3z BaseX autonegotiation.
|
|
* @pcs_link_up: program the PCS for the resolved link configuration
|
|
* (where necessary).
|
|
+ * @pcs_link_down: torn down link between MAC and PCS.
|
|
* @pcs_pre_init: configure PCS components necessary for MAC hardware
|
|
* initialization e.g. RX clock for stmmac.
|
|
*/
|
|
@@ -466,6 +467,7 @@ struct phylink_pcs_ops {
|
|
void (*pcs_an_restart)(struct phylink_pcs *pcs);
|
|
void (*pcs_link_up)(struct phylink_pcs *pcs, unsigned int neg_mode,
|
|
phy_interface_t interface, int speed, int duplex);
|
|
+ void (*pcs_link_down)(struct phylink_pcs *pcs);
|
|
int (*pcs_pre_init)(struct phylink_pcs *pcs);
|
|
};
|
|
|