Skip to content

Commit e635a3c

Browse files
ahduyckNipaLocal
authored andcommitted
net: phy: Add interface types for 50G and 100G
Add support for 802.3cd based interface types 50GBASE-R and 100GBASE-P. This choice in naming is based on section 135 of the 802.3-2022 IEEE Standard. In addition it is adding support for what I am referring to as LAUI which is based on annex 135C of the IEEE Standard, and shares many similarities with the 25/50G consortium. The main difference between the two is that IEEE spec refers to LAUI as the AUI before the RS(544/514) FEC, whereas the 25/50G use this lane and frequency combination after going through RS(528/514), Base-R or no FEC at all. Signed-off-by: Alexander Duyck <[email protected]> Signed-off-by: NipaLocal <nipa@local>
1 parent eac4828 commit e635a3c

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed

drivers/net/phy/phy-core.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ int phy_interface_num_ports(phy_interface_t interface)
142142
case PHY_INTERFACE_MODE_RXAUI:
143143
case PHY_INTERFACE_MODE_XAUI:
144144
case PHY_INTERFACE_MODE_1000BASEKX:
145+
case PHY_INTERFACE_MODE_50GBASER:
146+
case PHY_INTERFACE_MODE_LAUI:
147+
case PHY_INTERFACE_MODE_100GBASEP:
145148
return 1;
146149
case PHY_INTERFACE_MODE_QSGMII:
147150
case PHY_INTERFACE_MODE_QUSGMII:

drivers/net/phy/phy_caps.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,15 @@ unsigned long phy_caps_from_interface(phy_interface_t interface)
351351
link_caps |= BIT(LINK_CAPA_40000FD);
352352
break;
353353

354+
case PHY_INTERFACE_MODE_50GBASER:
355+
case PHY_INTERFACE_MODE_LAUI:
356+
link_caps |= BIT(LINK_CAPA_50000FD);
357+
break;
358+
359+
case PHY_INTERFACE_MODE_100GBASEP:
360+
link_caps |= BIT(LINK_CAPA_100000FD);
361+
break;
362+
354363
case PHY_INTERFACE_MODE_INTERNAL:
355364
link_caps |= LINK_CAPA_ALL;
356365
break;

drivers/net/phy/phylink.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,9 @@ do { \
127127
#endif
128128

129129
static const phy_interface_t phylink_sfp_interface_preference[] = {
130+
PHY_INTERFACE_MODE_100GBASEP,
131+
PHY_INTERFACE_MODE_50GBASER,
132+
PHY_INTERFACE_MODE_LAUI,
130133
PHY_INTERFACE_MODE_25GBASER,
131134
PHY_INTERFACE_MODE_USXGMII,
132135
PHY_INTERFACE_MODE_10GBASER,
@@ -274,6 +277,13 @@ static int phylink_interface_max_speed(phy_interface_t interface)
274277
case PHY_INTERFACE_MODE_XLGMII:
275278
return SPEED_40000;
276279

280+
case PHY_INTERFACE_MODE_50GBASER:
281+
case PHY_INTERFACE_MODE_LAUI:
282+
return SPEED_50000;
283+
284+
case PHY_INTERFACE_MODE_100GBASEP:
285+
return SPEED_100000;
286+
277287
case PHY_INTERFACE_MODE_INTERNAL:
278288
case PHY_INTERFACE_MODE_NA:
279289
case PHY_INTERFACE_MODE_MAX:
@@ -798,6 +808,9 @@ static int phylink_parse_mode(struct phylink *pl,
798808
case PHY_INTERFACE_MODE_10GKR:
799809
case PHY_INTERFACE_MODE_10GBASER:
800810
case PHY_INTERFACE_MODE_XLGMII:
811+
case PHY_INTERFACE_MODE_50GBASER:
812+
case PHY_INTERFACE_MODE_LAUI:
813+
case PHY_INTERFACE_MODE_100GBASEP:
801814
caps = ~(MAC_SYM_PAUSE | MAC_ASYM_PAUSE);
802815
caps = phylink_get_capabilities(pl->link_config.interface, caps,
803816
RATE_MATCH_NONE);

include/linux/phy.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ extern const int phy_basic_ports_array[3];
103103
* @PHY_INTERFACE_MODE_QUSGMII: Quad Universal SGMII
104104
* @PHY_INTERFACE_MODE_1000BASEKX: 1000Base-KX - with Clause 73 AN
105105
* @PHY_INTERFACE_MODE_10G_QXGMII: 10G-QXGMII - 4 ports over 10G USXGMII
106+
* @PHY_INTERFACE_MODE_50GBASER: 50GBase-R - with Clause 134 FEC
107+
* @PHY_INTERFACE_MODE_LAUI: 50 Gigabit Attachment Unit Interface
108+
* @PHY_INTERFACE_MODE_100GBASEP: 100GBase-P - with Clause 134 FEC
106109
* @PHY_INTERFACE_MODE_MAX: Book keeping
107110
*
108111
* Describes the interface between the MAC and PHY.
@@ -144,6 +147,9 @@ typedef enum {
144147
PHY_INTERFACE_MODE_QUSGMII,
145148
PHY_INTERFACE_MODE_1000BASEKX,
146149
PHY_INTERFACE_MODE_10G_QXGMII,
150+
PHY_INTERFACE_MODE_50GBASER,
151+
PHY_INTERFACE_MODE_LAUI,
152+
PHY_INTERFACE_MODE_100GBASEP,
147153
PHY_INTERFACE_MODE_MAX,
148154
} phy_interface_t;
149155

@@ -260,6 +266,12 @@ static inline const char *phy_modes(phy_interface_t interface)
260266
return "qusgmii";
261267
case PHY_INTERFACE_MODE_10G_QXGMII:
262268
return "10g-qxgmii";
269+
case PHY_INTERFACE_MODE_50GBASER:
270+
return "50gbase-r";
271+
case PHY_INTERFACE_MODE_LAUI:
272+
return "laui";
273+
case PHY_INTERFACE_MODE_100GBASEP:
274+
return "100gbase-p";
263275
default:
264276
return "unknown";
265277
}

0 commit comments

Comments
 (0)