* [PATCH net-next 0/2] Introduce PHY mode 10G-QXGMII
@ 2024-06-12 9:53 Luo Jie
2024-06-12 9:53 ` [PATCH net-next 1/2] net: phy: introduce core support for phy-mode = "10g-qxgmii" Luo Jie
2024-06-12 9:53 ` [PATCH net-next 2/2] dt-bindings: net: ethernet-controller: add 10g-qxgmii mode Luo Jie
0 siblings, 2 replies; 5+ messages in thread
From: Luo Jie @ 2024-06-12 9:53 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, andrew,
hkallweit1, linux, corbet, vladimir.oltean
Cc: netdev, devicetree, linux-kernel, linux-doc
This patch series adds 10G-QXGMII mode for PHY driver. The patch
series is split from the QCA8084 PHY driver patch series below.
https://lore.kernel.org/all/20231215074005.26976-1-quic_luoj@quicinc.com/
Per Andrew Lunn’s advice, submitting this patch series for acceptance
as they already include the necessary 'Reviewed-by:' tags. This way,
they need not wait for QCA8084 series patches to conclude review.
Vladimir Oltean (2):
net: phy: introduce core support for phy-mode = "10g-qxgmii"
dt-bindings: net: ethernet-controller: add 10g-qxgmii mode
.../devicetree/bindings/net/ethernet-controller.yaml | 1 +
Documentation/networking/phy.rst | 6 ++++++
drivers/net/phy/phy-core.c | 1 +
drivers/net/phy/phylink.c | 12 ++++++++++--
include/linux/phy.h | 4 ++++
include/linux/phylink.h | 1 +
6 files changed, 23 insertions(+), 2 deletions(-)
base-commit: 91579c93a9b207725559e3199870419afd50220f
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next 1/2] net: phy: introduce core support for phy-mode = "10g-qxgmii"
2024-06-12 9:53 [PATCH net-next 0/2] Introduce PHY mode 10G-QXGMII Luo Jie
@ 2024-06-12 9:53 ` Luo Jie
2024-06-13 7:54 ` Russell King (Oracle)
2024-06-12 9:53 ` [PATCH net-next 2/2] dt-bindings: net: ethernet-controller: add 10g-qxgmii mode Luo Jie
1 sibling, 1 reply; 5+ messages in thread
From: Luo Jie @ 2024-06-12 9:53 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, andrew,
hkallweit1, linux, corbet, vladimir.oltean
Cc: netdev, devicetree, linux-kernel, linux-doc, Russell King
From: Vladimir Oltean <vladimir.oltean@nxp.com>
10G-QXGMII is a MAC-to-PHY interface defined by the USXGMII multiport
specification. It uses the same signaling as USXGMII, but it multiplexes
4 ports over the link, resulting in a maximum speed of 2.5G per port.
Some in-tree SoCs like the NXP LS1028A use "usxgmii" when they mean
either the single-port USXGMII or the quad-port 10G-QXGMII variant, and
they could get away just fine with that thus far. But there is a need to
distinguish between the 2 as far as SerDes drivers are concerned.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
Documentation/networking/phy.rst | 6 ++++++
drivers/net/phy/phy-core.c | 1 +
drivers/net/phy/phylink.c | 12 ++++++++++--
include/linux/phy.h | 4 ++++
include/linux/phylink.h | 1 +
5 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/Documentation/networking/phy.rst b/Documentation/networking/phy.rst
index 1283240d7620..f64641417c54 100644
--- a/Documentation/networking/phy.rst
+++ b/Documentation/networking/phy.rst
@@ -327,6 +327,12 @@ Some of the interface modes are described below:
This is the Penta SGMII mode, it is similar to QSGMII but it combines 5
SGMII lines into a single link compared to 4 on QSGMII.
+``PHY_INTERFACE_MODE_10G_QXGMII``
+ Represents the 10G-QXGMII PHY-MAC interface as defined by the Cisco USXGMII
+ Multiport Copper Interface document. It supports 4 ports over a 10.3125 GHz
+ SerDes lane, each port having speeds of 2.5G / 1G / 100M / 10M achieved
+ through symbol replication. The PCS expects the standard USXGMII code word.
+
Pause frames / flow control
===========================
diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
index 15f349e5995a..a235ea2264a7 100644
--- a/drivers/net/phy/phy-core.c
+++ b/drivers/net/phy/phy-core.c
@@ -141,6 +141,7 @@ int phy_interface_num_ports(phy_interface_t interface)
return 1;
case PHY_INTERFACE_MODE_QSGMII:
case PHY_INTERFACE_MODE_QUSGMII:
+ case PHY_INTERFACE_MODE_10G_QXGMII:
return 4;
case PHY_INTERFACE_MODE_PSGMII:
return 5;
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 02427378acfd..bc07edb008f5 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -231,6 +231,7 @@ static int phylink_interface_max_speed(phy_interface_t interface)
return SPEED_1000;
case PHY_INTERFACE_MODE_2500BASEX:
+ case PHY_INTERFACE_MODE_10G_QXGMII:
return SPEED_2500;
case PHY_INTERFACE_MODE_5GBASER:
@@ -500,7 +501,11 @@ static unsigned long phylink_get_capabilities(phy_interface_t interface,
switch (interface) {
case PHY_INTERFACE_MODE_USXGMII:
- caps |= MAC_10000FD | MAC_5000FD | MAC_2500FD;
+ caps |= MAC_10000FD | MAC_5000FD;
+ fallthrough;
+
+ case PHY_INTERFACE_MODE_10G_QXGMII:
+ caps |= MAC_2500FD;
fallthrough;
case PHY_INTERFACE_MODE_RGMII_TXID:
@@ -926,6 +931,7 @@ static int phylink_parse_mode(struct phylink *pl,
case PHY_INTERFACE_MODE_5GBASER:
case PHY_INTERFACE_MODE_25GBASER:
case PHY_INTERFACE_MODE_USXGMII:
+ case PHY_INTERFACE_MODE_10G_QXGMII:
case PHY_INTERFACE_MODE_10GKR:
case PHY_INTERFACE_MODE_10GBASER:
case PHY_INTERFACE_MODE_XLGMII:
@@ -1124,6 +1130,7 @@ static unsigned int phylink_pcs_neg_mode(unsigned int mode,
case PHY_INTERFACE_MODE_QSGMII:
case PHY_INTERFACE_MODE_QUSGMII:
case PHY_INTERFACE_MODE_USXGMII:
+ case PHY_INTERFACE_MODE_10G_QXGMII:
/* These protocols are designed for use with a PHY which
* communicates its negotiation result back to the MAC via
* inband communication. Note: there exist PHYs that run
@@ -1865,7 +1872,8 @@ static int phylink_validate_phy(struct phylink *pl, struct phy_device *phy,
if (phy->is_c45 && state->rate_matching == RATE_MATCH_NONE &&
state->interface != PHY_INTERFACE_MODE_RXAUI &&
state->interface != PHY_INTERFACE_MODE_XAUI &&
- state->interface != PHY_INTERFACE_MODE_USXGMII)
+ state->interface != PHY_INTERFACE_MODE_USXGMII &&
+ state->interface != PHY_INTERFACE_MODE_10G_QXGMII)
state->interface = PHY_INTERFACE_MODE_NA;
return phylink_validate(pl, supported, state);
diff --git a/include/linux/phy.h b/include/linux/phy.h
index e6e83304558e..205fccfc0f60 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -128,6 +128,7 @@ extern const int phy_10gbit_features_array[1];
* @PHY_INTERFACE_MODE_10GKR: 10GBASE-KR - with Clause 73 AN
* @PHY_INTERFACE_MODE_QUSGMII: Quad Universal SGMII
* @PHY_INTERFACE_MODE_1000BASEKX: 1000Base-KX - with Clause 73 AN
+ * @PHY_INTERFACE_MODE_10G_QXGMII: 10G-QXGMII - 4 ports over 10G USXGMII
* @PHY_INTERFACE_MODE_MAX: Book keeping
*
* Describes the interface between the MAC and PHY.
@@ -168,6 +169,7 @@ typedef enum {
PHY_INTERFACE_MODE_10GKR,
PHY_INTERFACE_MODE_QUSGMII,
PHY_INTERFACE_MODE_1000BASEKX,
+ PHY_INTERFACE_MODE_10G_QXGMII,
PHY_INTERFACE_MODE_MAX,
} phy_interface_t;
@@ -289,6 +291,8 @@ static inline const char *phy_modes(phy_interface_t interface)
return "100base-x";
case PHY_INTERFACE_MODE_QUSGMII:
return "qusgmii";
+ case PHY_INTERFACE_MODE_10G_QXGMII:
+ return "10g-qxgmii";
default:
return "unknown";
}
diff --git a/include/linux/phylink.h b/include/linux/phylink.h
index a30a692acc32..2381e07429a2 100644
--- a/include/linux/phylink.h
+++ b/include/linux/phylink.h
@@ -654,6 +654,7 @@ static inline int phylink_get_link_timer_ns(phy_interface_t interface)
case PHY_INTERFACE_MODE_SGMII:
case PHY_INTERFACE_MODE_QSGMII:
case PHY_INTERFACE_MODE_USXGMII:
+ case PHY_INTERFACE_MODE_10G_QXGMII:
return 1600000;
case PHY_INTERFACE_MODE_1000BASEX:
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next 2/2] dt-bindings: net: ethernet-controller: add 10g-qxgmii mode
2024-06-12 9:53 [PATCH net-next 0/2] Introduce PHY mode 10G-QXGMII Luo Jie
2024-06-12 9:53 ` [PATCH net-next 1/2] net: phy: introduce core support for phy-mode = "10g-qxgmii" Luo Jie
@ 2024-06-12 9:53 ` Luo Jie
1 sibling, 0 replies; 5+ messages in thread
From: Luo Jie @ 2024-06-12 9:53 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, andrew,
hkallweit1, linux, corbet, vladimir.oltean
Cc: netdev, devicetree, linux-kernel, linux-doc, Conor Dooley
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Add the new interface mode 10g-qxgmii, which is similar to
usxgmii but extend to 4 channels to support maximum of 4
ports with the link speed 10M/100M/1G/2.5G.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
Documentation/devicetree/bindings/net/ethernet-controller.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/net/ethernet-controller.yaml b/Documentation/devicetree/bindings/net/ethernet-controller.yaml
index b2785b03139f..45819b235800 100644
--- a/Documentation/devicetree/bindings/net/ethernet-controller.yaml
+++ b/Documentation/devicetree/bindings/net/ethernet-controller.yaml
@@ -103,6 +103,7 @@ properties:
- usxgmii
- 10gbase-r
- 25gbase-r
+ - 10g-qxgmii
phy-mode:
$ref: "#/properties/phy-connection-type"
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next 1/2] net: phy: introduce core support for phy-mode = "10g-qxgmii"
2024-06-12 9:53 ` [PATCH net-next 1/2] net: phy: introduce core support for phy-mode = "10g-qxgmii" Luo Jie
@ 2024-06-13 7:54 ` Russell King (Oracle)
2024-06-14 11:42 ` Jie Luo
0 siblings, 1 reply; 5+ messages in thread
From: Russell King (Oracle) @ 2024-06-13 7:54 UTC (permalink / raw)
To: Luo Jie
Cc: davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, andrew,
hkallweit1, corbet, vladimir.oltean, netdev, devicetree,
linux-kernel, linux-doc
On Wed, Jun 12, 2024 at 05:53:16PM +0800, Luo Jie wrote:
> @@ -1865,7 +1872,8 @@ static int phylink_validate_phy(struct phylink *pl, struct phy_device *phy,
> if (phy->is_c45 && state->rate_matching == RATE_MATCH_NONE &&
> state->interface != PHY_INTERFACE_MODE_RXAUI &&
> state->interface != PHY_INTERFACE_MODE_XAUI &&
> - state->interface != PHY_INTERFACE_MODE_USXGMII)
> + state->interface != PHY_INTERFACE_MODE_USXGMII &&
> + state->interface != PHY_INTERFACE_MODE_10G_QXGMII)
> state->interface = PHY_INTERFACE_MODE_NA;
It would be better, rather than extending this workaround, instead to
have the PHY driver set phy->possible_interfaces in its .config_init
method. phy->possible_interfaces should be the set of interfaces that
the PHY _will_ use given its configuration for the different media
speeds. I think that means just PHY_INTERFACE_MODE_10G_QXGMII for
your configuration.
Thanks.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next 1/2] net: phy: introduce core support for phy-mode = "10g-qxgmii"
2024-06-13 7:54 ` Russell King (Oracle)
@ 2024-06-14 11:42 ` Jie Luo
0 siblings, 0 replies; 5+ messages in thread
From: Jie Luo @ 2024-06-14 11:42 UTC (permalink / raw)
To: Russell King (Oracle)
Cc: davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, andrew,
hkallweit1, corbet, vladimir.oltean, netdev, devicetree,
linux-kernel, linux-doc
On 6/13/2024 3:54 PM, Russell King (Oracle) wrote:
> On Wed, Jun 12, 2024 at 05:53:16PM +0800, Luo Jie wrote:
>> @@ -1865,7 +1872,8 @@ static int phylink_validate_phy(struct phylink *pl, struct phy_device *phy,
>> if (phy->is_c45 && state->rate_matching == RATE_MATCH_NONE &&
>> state->interface != PHY_INTERFACE_MODE_RXAUI &&
>> state->interface != PHY_INTERFACE_MODE_XAUI &&
>> - state->interface != PHY_INTERFACE_MODE_USXGMII)
>> + state->interface != PHY_INTERFACE_MODE_USXGMII &&
>> + state->interface != PHY_INTERFACE_MODE_10G_QXGMII)
>> state->interface = PHY_INTERFACE_MODE_NA;
>
> It would be better, rather than extending this workaround, instead to
> have the PHY driver set phy->possible_interfaces in its .config_init
> method. phy->possible_interfaces should be the set of interfaces that
> the PHY _will_ use given its configuration for the different media
> speeds. I think that means just PHY_INTERFACE_MODE_10G_QXGMII for
> your configuration.
>
> Thanks.
>
Hi Russell,
Yes, for QCA8084(pure PHY chip), only PHY_INTERFACE_MODE_10G_QXGMII will
be set to the phy->possible_interfaces when it works on the interface
mode PHY_INTERFACE_MODE_10G_QXGMII.
I will push a new patch series to remove PHY_INTERFACE_MODE_10G_QXGMII
from this work-around validation here.
Thanks,
Jie
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-06-14 11:43 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-12 9:53 [PATCH net-next 0/2] Introduce PHY mode 10G-QXGMII Luo Jie
2024-06-12 9:53 ` [PATCH net-next 1/2] net: phy: introduce core support for phy-mode = "10g-qxgmii" Luo Jie
2024-06-13 7:54 ` Russell King (Oracle)
2024-06-14 11:42 ` Jie Luo
2024-06-12 9:53 ` [PATCH net-next 2/2] dt-bindings: net: ethernet-controller: add 10g-qxgmii mode Luo Jie
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.