Add support for speeds 10Mbps, 5Gbps, and 10Gbps. In addition don't
hardcode duplex but read it from the chip.

Signed-off-by: Andrew Lunn <and...@lunn.ch>
Signed-off-by: Heiner Kallweit <hkallwe...@gmail.com>
---
 drivers/net/phy/aquantia.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/aquantia.c b/drivers/net/phy/aquantia.c
index 482004efa..51ae3feea 100644
--- a/drivers/net/phy/aquantia.c
+++ b/drivers/net/phy/aquantia.c
@@ -133,6 +133,12 @@ static int aqr_read_status(struct phy_device *phydev)
        reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_STATUS1);
 
        switch (reg & MDIO_AN_TX_VEND_STATUS1_RATE_MASK) {
+       case MDIO_AN_TX_VEND_STATUS1_10GBASET:
+               phydev->speed = SPEED_10000;
+               break;
+       case MDIO_AN_TX_VEND_STATUS1_5000BASET:
+               phydev->speed = SPEED_5000;
+               break;
        case MDIO_AN_TX_VEND_STATUS1_2500BASET:
                phydev->speed = SPEED_2500;
                break;
@@ -142,11 +148,15 @@ static int aqr_read_status(struct phy_device *phydev)
        case MDIO_AN_TX_VEND_STATUS1_100BASETX:
                phydev->speed = SPEED_100;
                break;
+       case MDIO_AN_TX_VEND_STATUS1_10BASET:
+               phydev->speed = SPEED_10;
+               break;
        default:
-               phydev->speed = SPEED_10000;
+               phydev->speed = SPEED_UNKNOWN;
                break;
        }
-       phydev->duplex = DUPLEX_FULL;
+
+       phydev->duplex = !!(reg & MDIO_AN_TX_VEND_STATUS1_FULL_DUPLEX);
 
        return 0;
 }
-- 
2.20.1


Reply via email to