mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 23:12:32 +00:00
61 lines
2.3 KiB
Diff
61 lines
2.3 KiB
Diff
|
From 1a7aa058bc92f0edae7a0d1ef1a7b05aec0c643a Mon Sep 17 00:00:00 2001
|
||
|
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
||
|
Date: Fri, 24 Nov 2023 12:27:52 +0000
|
||
|
Subject: [PATCH 1/7] net: phy: add possible interfaces
|
||
|
|
||
|
Add a possible_interfaces member to struct phy_device to indicate which
|
||
|
interfaces a clause 45 PHY may switch between depending on the media.
|
||
|
This must be populated by the PHY driver by the time the .config_init()
|
||
|
method completes according to the PHYs host-side configuration.
|
||
|
|
||
|
For example, the Marvell 88x3310 PHY can switch between 10GBASE-R,
|
||
|
5GBASE-R, 2500BASE-X, and SGMII on the host side depending on the media
|
||
|
side speed, so all these interface modes are set in the
|
||
|
possible_interfaces member.
|
||
|
|
||
|
This allows phylib users (such as phylink) to know in advance which
|
||
|
interface modes to expect, which allows them to appropriately restrict
|
||
|
the advertised link modes according to the capabilities of other parts
|
||
|
of the link.
|
||
|
|
||
|
Tested-by: Luo Jie <quic_luoj@quicinc.com>
|
||
|
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||
|
Link: https://lore.kernel.org/r/E1r6VHk-00DDLN-I7@rmk-PC.armlinux.org.uk
|
||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||
|
---
|
||
|
drivers/net/phy/phy_device.c | 2 ++
|
||
|
include/linux/phy.h | 3 +++
|
||
|
2 files changed, 5 insertions(+)
|
||
|
|
||
|
--- a/drivers/net/phy/phy_device.c
|
||
|
+++ b/drivers/net/phy/phy_device.c
|
||
|
@@ -1247,6 +1247,8 @@ int phy_init_hw(struct phy_device *phyde
|
||
|
if (ret < 0)
|
||
|
return ret;
|
||
|
|
||
|
+ phy_interface_zero(phydev->possible_interfaces);
|
||
|
+
|
||
|
if (phydev->drv->config_init) {
|
||
|
ret = phydev->drv->config_init(phydev);
|
||
|
if (ret < 0)
|
||
|
--- a/include/linux/phy.h
|
||
|
+++ b/include/linux/phy.h
|
||
|
@@ -609,6 +609,8 @@ struct macsec_ops;
|
||
|
* @irq_rerun: Flag indicating interrupts occurred while PHY was suspended,
|
||
|
* requiring a rerun of the interrupt handler after resume
|
||
|
* @interface: enum phy_interface_t value
|
||
|
+ * @possible_interfaces: bitmap if interface modes that the attached PHY
|
||
|
+ * will switch between depending on media speed.
|
||
|
* @skb: Netlink message for cable diagnostics
|
||
|
* @nest: Netlink nest used for cable diagnostics
|
||
|
* @ehdr: nNtlink header for cable diagnostics
|
||
|
@@ -678,6 +680,7 @@ struct phy_device {
|
||
|
u32 dev_flags;
|
||
|
|
||
|
phy_interface_t interface;
|
||
|
+ DECLARE_PHY_INTERFACE_MASK(possible_interfaces);
|
||
|
|
||
|
/*
|
||
|
* forced speed & duplex (no autoneg)
|