mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2025-12-07 05:04:00 -05:00
Backport phylink patches for PCS/PHY caps OPs. This makes it easier to align future generic PCS patch and permit supporting special PHY that needs specific tune if "in-band" mode is enabled (for example Aeonsemi PHYs) This is also mainly using the upstream version of the Mediatek patch 739-net-add-negotiation-of-in-band-capabilities. All affected patch automatically refreshed. Link: https://github.com/openwrt/openwrt/pull/20461 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
63 lines
2.4 KiB
Diff
63 lines
2.4 KiB
Diff
From d4169f0c7665afb8d8adb5e1b1df3db88517d0ad Mon Sep 17 00:00:00 2001
|
|
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
|
Date: Tue, 3 Dec 2024 15:31:38 +0000
|
|
Subject: [PATCH 11/13] net: mvpp2: implement pcs_inband_caps() method
|
|
|
|
Report the PCS in-band capabilities to phylink for Marvell PP2
|
|
interfaces.
|
|
|
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
|
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
|
Link: https://patch.msgid.link/E1tIUsE-006IUh-E7@rmk-PC.armlinux.org.uk
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
.../net/ethernet/marvell/mvpp2/mvpp2_main.c | 25 ++++++++++++-------
|
|
1 file changed, 16 insertions(+), 9 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
|
|
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
|
|
@@ -6237,19 +6237,26 @@ static const struct phylink_pcs_ops mvpp
|
|
.pcs_config = mvpp2_xlg_pcs_config,
|
|
};
|
|
|
|
-static int mvpp2_gmac_pcs_validate(struct phylink_pcs *pcs,
|
|
- unsigned long *supported,
|
|
- const struct phylink_link_state *state)
|
|
+static unsigned int mvpp2_gmac_pcs_inband_caps(struct phylink_pcs *pcs,
|
|
+ phy_interface_t interface)
|
|
{
|
|
- /* When in 802.3z mode, we must have AN enabled:
|
|
+ /* When operating in an 802.3z mode, we must have AN enabled:
|
|
* Bit 2 Field InBandAnEn In-band Auto-Negotiation enable. ...
|
|
* When <PortType> = 1 (1000BASE-X) this field must be set to 1.
|
|
+ * Therefore, inband is "required".
|
|
*/
|
|
- if (phy_interface_mode_is_8023z(state->interface) &&
|
|
- !phylink_test(state->advertising, Autoneg))
|
|
- return -EINVAL;
|
|
+ if (phy_interface_mode_is_8023z(interface))
|
|
+ return LINK_INBAND_ENABLE;
|
|
|
|
- return 0;
|
|
+ /* SGMII and RGMII can be configured to use inband signalling of the
|
|
+ * AN result. Indicate these as "possible".
|
|
+ */
|
|
+ if (interface == PHY_INTERFACE_MODE_SGMII ||
|
|
+ phy_interface_mode_is_rgmii(interface))
|
|
+ return LINK_INBAND_DISABLE | LINK_INBAND_ENABLE;
|
|
+
|
|
+ /* For any other modes, indicate that inband is not supported. */
|
|
+ return LINK_INBAND_DISABLE;
|
|
}
|
|
|
|
static void mvpp2_gmac_pcs_get_state(struct phylink_pcs *pcs,
|
|
@@ -6356,7 +6363,7 @@ static void mvpp2_gmac_pcs_an_restart(st
|
|
}
|
|
|
|
static const struct phylink_pcs_ops mvpp2_phylink_gmac_pcs_ops = {
|
|
- .pcs_validate = mvpp2_gmac_pcs_validate,
|
|
+ .pcs_inband_caps = mvpp2_gmac_pcs_inband_caps,
|
|
.pcs_get_state = mvpp2_gmac_pcs_get_state,
|
|
.pcs_config = mvpp2_gmac_pcs_config,
|
|
.pcs_an_restart = mvpp2_gmac_pcs_an_restart,
|