net: phy: Add detection of 1000BaseX link mode support
authorRobert Hancock <hancock@sedsystems.ca>
Tue, 4 Jun 2019 22:15:01 +0000 (16:15 -0600)
committerDavid S. Miller <davem@davemloft.net>
Thu, 6 Jun 2019 20:48:51 +0000 (13:48 -0700)
Add 1000BaseX to the link modes which are detected based on the
MII_ESTATUS register as per 802.3 Clause 22. This allows PHYs which
support 1000BaseX to work properly with drivers using phylink.

Previously 1000BaseX support was not detected, and if that was the only
mode the PHY indicated support for, phylink would refuse to attach it
due to the list of supported modes being empty.

Signed-off-by: Robert Hancock <hancock@sedsystems.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy_device.c
include/uapi/linux/mii.h

index 2c879ba01f35078c2bf2b97a0baf108acff48549..03c885ec1f9818965b0a186d8eebceb6024fd70b 100644 (file)
@@ -1930,6 +1930,9 @@ int genphy_config_init(struct phy_device *phydev)
                if (val & ESTATUS_1000_THALF)
                        linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
                                         features);
+               if (val & ESTATUS_1000_XFULL)
+                       linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
+                                        features);
        }
 
        linkmode_and(phydev->supported, phydev->supported, features);
index a506216591d65b590c868c7f26e8b1355d9c4742..51b48e4be1f26261bdd75e9ec7b99f226b976bb6 100644 (file)
 #define EXPANSION_MFAULTS      0x0010  /* Multiple faults detected    */
 #define EXPANSION_RESV         0xffe0  /* Unused...                   */
 
+#define ESTATUS_1000_XFULL     0x8000  /* Can do 1000BaseX Full       */
+#define ESTATUS_1000_XHALF     0x4000  /* Can do 1000BaseX Half       */
 #define ESTATUS_1000_TFULL     0x2000  /* Can do 1000BT Full          */
 #define ESTATUS_1000_THALF     0x1000  /* Can do 1000BT Half          */