Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: phy: Introduce PSGMII PHY interface mode

The PSGMII interface is similar to QSGMII. The main difference
is that the PSGMII interface combines five SGMII lines into a
single link while in QSGMII only four lines are combined.

Similarly to the QSGMII, this interface mode might also needs
special handling within the MAC driver.

It is commonly used by Qualcomm with their QCA807x PHY series and
modern WiSoC-s.

Add definitions for the PHY layer to allow to express this type
of connection between the MAC and PHY.

Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Gabor Juhos and committed by
David S. Miller
83b5f025 de875d35

+13
+4
Documentation/networking/phy.rst
··· 323 323 contrast with the 1000BASE-X phy mode used for Clause 38 and 39 PMDs, this 324 324 interface mode has different autonegotiation and only supports full duplex. 325 325 326 + ``PHY_INTERFACE_MODE_PSGMII`` 327 + This is the Penta SGMII mode, it is similar to QSGMII but it combines 5 328 + SGMII lines into a single link compared to 4 on QSGMII. 329 + 326 330 Pause frames / flow control 327 331 =========================== 328 332
+2
drivers/net/phy/phy-core.c
··· 142 142 case PHY_INTERFACE_MODE_QSGMII: 143 143 case PHY_INTERFACE_MODE_QUSGMII: 144 144 return 4; 145 + case PHY_INTERFACE_MODE_PSGMII: 146 + return 5; 145 147 case PHY_INTERFACE_MODE_MAX: 146 148 WARN_ONCE(1, "PHY_INTERFACE_MODE_MAX isn't a valid interface mode"); 147 149 return 0;
+3
drivers/net/phy/phylink.c
··· 210 210 case PHY_INTERFACE_MODE_RGMII_RXID: 211 211 case PHY_INTERFACE_MODE_RGMII_ID: 212 212 case PHY_INTERFACE_MODE_RGMII: 213 + case PHY_INTERFACE_MODE_PSGMII: 213 214 case PHY_INTERFACE_MODE_QSGMII: 214 215 case PHY_INTERFACE_MODE_QUSGMII: 215 216 case PHY_INTERFACE_MODE_SGMII: ··· 476 475 case PHY_INTERFACE_MODE_RGMII_RXID: 477 476 case PHY_INTERFACE_MODE_RGMII_ID: 478 477 case PHY_INTERFACE_MODE_RGMII: 478 + case PHY_INTERFACE_MODE_PSGMII: 479 479 case PHY_INTERFACE_MODE_QSGMII: 480 480 case PHY_INTERFACE_MODE_QUSGMII: 481 481 case PHY_INTERFACE_MODE_SGMII: ··· 870 868 871 869 switch (pl->link_config.interface) { 872 870 case PHY_INTERFACE_MODE_SGMII: 871 + case PHY_INTERFACE_MODE_PSGMII: 873 872 case PHY_INTERFACE_MODE_QSGMII: 874 873 case PHY_INTERFACE_MODE_QUSGMII: 875 874 case PHY_INTERFACE_MODE_RGMII:
+4
include/linux/phy.h
··· 110 110 * @PHY_INTERFACE_MODE_XGMII: 10 gigabit media-independent interface 111 111 * @PHY_INTERFACE_MODE_XLGMII:40 gigabit media-independent interface 112 112 * @PHY_INTERFACE_MODE_MOCA: Multimedia over Coax 113 + * @PHY_INTERFACE_MODE_PSGMII: Penta SGMII 113 114 * @PHY_INTERFACE_MODE_QSGMII: Quad SGMII 114 115 * @PHY_INTERFACE_MODE_TRGMII: Turbo RGMII 115 116 * @PHY_INTERFACE_MODE_100BASEX: 100 BaseX ··· 148 147 PHY_INTERFACE_MODE_XGMII, 149 148 PHY_INTERFACE_MODE_XLGMII, 150 149 PHY_INTERFACE_MODE_MOCA, 150 + PHY_INTERFACE_MODE_PSGMII, 151 151 PHY_INTERFACE_MODE_QSGMII, 152 152 PHY_INTERFACE_MODE_TRGMII, 153 153 PHY_INTERFACE_MODE_100BASEX, ··· 256 254 return "xlgmii"; 257 255 case PHY_INTERFACE_MODE_MOCA: 258 256 return "moca"; 257 + case PHY_INTERFACE_MODE_PSGMII: 258 + return "psgmii"; 259 259 case PHY_INTERFACE_MODE_QSGMII: 260 260 return "qsgmii"; 261 261 case PHY_INTERFACE_MODE_TRGMII: