net: phy: aquantia: inform about proprietary 1000Base-T2 mode being in use
authorHeiner Kallweit <hkallweit1@gmail.com>
Sun, 24 Mar 2019 10:09:41 +0000 (11:09 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Mar 2019 18:33:43 +0000 (11:33 -0700)
The AQCS109 supports a proprietary 2-pair 1Gbps mode. The standard
registers don't allow to tell between 1000BaseT and 1000BaseT2.
Add reporting this proprietary mode based on a vendor register.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/aquantia_main.c

index 9f20e9b..ae6a76d 100644 (file)
 #define VEND1_GLOBAL_RSVD_STAT1_FW_BUILD_ID    GENMASK(7, 4)
 #define VEND1_GLOBAL_RSVD_STAT1_PROV_ID                GENMASK(3, 0)
 
+#define VEND1_GLOBAL_RSVD_STAT9                        0xc88d
+#define VEND1_GLOBAL_RSVD_STAT9_MODE           GENMASK(7, 0)
+#define VEND1_GLOBAL_RSVD_STAT9_1000BT2                0x23
+
 #define VEND1_GLOBAL_INT_STD_STATUS            0xfc00
 #define VEND1_GLOBAL_INT_VEND_STATUS           0xfc01
 
@@ -433,7 +437,7 @@ static void aqr107_link_change_notify(struct phy_device *phydev)
 {
        u8 fw_major, fw_minor;
        bool downshift, short_reach, afr;
-       int val;
+       int mode, val;
 
        if (phydev->state != PHY_RUNNING || phydev->autoneg == AUTONEG_DISABLE)
                return;
@@ -464,6 +468,14 @@ static void aqr107_link_change_notify(struct phy_device *phydev)
                   short_reach ? ", short reach mode" : "",
                   downshift ? ", fast-retrain downshift advertised" : "",
                   afr ? ", fast reframe advertised" : "");
+
+       val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_RSVD_STAT9);
+       if (val < 0)
+               return;
+
+       mode = FIELD_GET(VEND1_GLOBAL_RSVD_STAT9_MODE, val);
+       if (mode == VEND1_GLOBAL_RSVD_STAT9_1000BT2)
+               phydev_info(phydev, "Aquantia 1000Base-T2 mode active\n");
 }
 
 static struct phy_driver aqr_driver[] = {