Commit 05ad5d45 authored by Sean Anderson's avatar Sean Anderson Committed by David S. Miller

net: phy: Add 1000BASE-KX interface mode

Add 1000BASE-KX interface mode. This 1G backplane ethernet as described in
clause 70. Clause 73 autonegotiation is mandatory, and only full duplex
operation is supported.

Although at the PMA level this interface mode is identical to
1000BASE-X, it uses a different form of in-band autonegation. This
justifies a separate interface mode, since the interface mode (along
with the MLO_AN_* autonegotiation mode) sets the type of autonegotiation
which will be used on a link. This results in more than just electrical
differences between the link modes.

With regard to 1000BASE-X, 1000BASE-KX holds a similar position to
SGMII: same signaling, but different autonegotiation. PCS drivers
(which typically handle in-band autonegotiation) may only support
1000BASE-X, and not 1000BASE-KX. Similarly, the phy mode is used to
configure serdes phys with phy_set_mode_ext. Due to the different
electrical standards (SFI or XFI vs Clause 70), they will likely want to
use different configuration. Adding a phy interface mode for
1000BASE-KX helps simplify configuration in these areas.
Signed-off-by: default avatarSean Anderson <sean.anderson@seco.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ab526eaa
...@@ -317,6 +317,12 @@ Some of the interface modes are described below: ...@@ -317,6 +317,12 @@ Some of the interface modes are described below:
PTP-enabled PHYs. This mode isn't compatible with QSGMII, but offers the PTP-enabled PHYs. This mode isn't compatible with QSGMII, but offers the
same capabilities in terms of link speed and negociation. same capabilities in terms of link speed and negociation.
``PHY_INTERFACE_MODE_1000BASEKX``
This is 1000BASE-X as defined by IEEE 802.3 Clause 36 with Clause 73
autonegotiation. Generally, it will be used with a Clause 70 PMD. To
contrast with the 1000BASE-X phy mode used for Clause 38 and 39 PMDs, this
interface mode has different autonegotiation and only supports full duplex.
Pause frames / flow control Pause frames / flow control
=========================== ===========================
......
...@@ -114,6 +114,7 @@ int phy_interface_num_ports(phy_interface_t interface) ...@@ -114,6 +114,7 @@ int phy_interface_num_ports(phy_interface_t interface)
case PHY_INTERFACE_MODE_100BASEX: case PHY_INTERFACE_MODE_100BASEX:
case PHY_INTERFACE_MODE_RXAUI: case PHY_INTERFACE_MODE_RXAUI:
case PHY_INTERFACE_MODE_XAUI: case PHY_INTERFACE_MODE_XAUI:
case PHY_INTERFACE_MODE_1000BASEKX:
return 1; return 1;
case PHY_INTERFACE_MODE_QSGMII: case PHY_INTERFACE_MODE_QSGMII:
case PHY_INTERFACE_MODE_QUSGMII: case PHY_INTERFACE_MODE_QUSGMII:
......
...@@ -345,6 +345,7 @@ void phylink_get_linkmodes(unsigned long *linkmodes, phy_interface_t interface, ...@@ -345,6 +345,7 @@ void phylink_get_linkmodes(unsigned long *linkmodes, phy_interface_t interface,
case PHY_INTERFACE_MODE_1000BASEX: case PHY_INTERFACE_MODE_1000BASEX:
caps |= MAC_1000HD; caps |= MAC_1000HD;
fallthrough; fallthrough;
case PHY_INTERFACE_MODE_1000BASEKX:
case PHY_INTERFACE_MODE_TRGMII: case PHY_INTERFACE_MODE_TRGMII:
caps |= MAC_1000FD; caps |= MAC_1000FD;
break; break;
......
...@@ -116,6 +116,7 @@ extern const int phy_10gbit_features_array[1]; ...@@ -116,6 +116,7 @@ extern const int phy_10gbit_features_array[1];
* @PHY_INTERFACE_MODE_USXGMII: Universal Serial 10GE MII * @PHY_INTERFACE_MODE_USXGMII: Universal Serial 10GE MII
* @PHY_INTERFACE_MODE_10GKR: 10GBASE-KR - with Clause 73 AN * @PHY_INTERFACE_MODE_10GKR: 10GBASE-KR - with Clause 73 AN
* @PHY_INTERFACE_MODE_QUSGMII: Quad Universal SGMII * @PHY_INTERFACE_MODE_QUSGMII: Quad Universal SGMII
* @PHY_INTERFACE_MODE_1000BASEKX: 1000Base-KX - with Clause 73 AN
* @PHY_INTERFACE_MODE_MAX: Book keeping * @PHY_INTERFACE_MODE_MAX: Book keeping
* *
* Describes the interface between the MAC and PHY. * Describes the interface between the MAC and PHY.
...@@ -154,6 +155,7 @@ typedef enum { ...@@ -154,6 +155,7 @@ typedef enum {
/* 10GBASE-KR - with Clause 73 AN */ /* 10GBASE-KR - with Clause 73 AN */
PHY_INTERFACE_MODE_10GKR, PHY_INTERFACE_MODE_10GKR,
PHY_INTERFACE_MODE_QUSGMII, PHY_INTERFACE_MODE_QUSGMII,
PHY_INTERFACE_MODE_1000BASEKX,
PHY_INTERFACE_MODE_MAX, PHY_INTERFACE_MODE_MAX,
} phy_interface_t; } phy_interface_t;
...@@ -251,6 +253,8 @@ static inline const char *phy_modes(phy_interface_t interface) ...@@ -251,6 +253,8 @@ static inline const char *phy_modes(phy_interface_t interface)
return "trgmii"; return "trgmii";
case PHY_INTERFACE_MODE_1000BASEX: case PHY_INTERFACE_MODE_1000BASEX:
return "1000base-x"; return "1000base-x";
case PHY_INTERFACE_MODE_1000BASEKX:
return "1000base-kx";
case PHY_INTERFACE_MODE_2500BASEX: case PHY_INTERFACE_MODE_2500BASEX:
return "2500base-x"; return "2500base-x";
case PHY_INTERFACE_MODE_5GBASER: case PHY_INTERFACE_MODE_5GBASER:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment