[openwrt/openwrt] ipq40xx: net: ethernet: edma: use generic ksettings functions

LEDE Commits lede-commits at lists.infradead.org
Wed Dec 23 10:36:35 EST 2020


ynezz pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/9d69505194145e20eeab73c646d9fa03dc5831e8

commit 9d69505194145e20eeab73c646d9fa03dc5831e8
Author: Robert Marko <robert.marko at sartura.hr>
AuthorDate: Thu Nov 26 13:41:54 2020 +0100

    ipq40xx: net: ethernet: edma: use generic ksettings functions
    
    Since we now have a proper PHY driver for QCA807x and AR803x has already
    been supported properly there is no need for the driver to be poking
    on PHY registers for ethtool ops.
    
    So, lets simply use the generic
    phy_ethtool_ksettings_get/phy_ethtool_ksettings_set functions.
    
    This also has the advantage of properly populating stuff other than
    speeds like, transceiver type, MDI-X etc.
    
    ethtool before:
    root at OpenWrt:/# ethtool eth1
    Settings for eth1:
            Supported ports: [ TP MII ]
            Supported link modes:   10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Supported pause frame use: Symmetric Receive-only
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Advertised pause frame use: Symmetric Receive-only
            Advertised auto-negotiation: Yes
            Advertised FEC modes: Not reported
            Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                                 100baseT/Half 100baseT/Full
                                                 1000baseT/Full
            Link partner advertised pause frame use: No
            Link partner advertised auto-negotiation: No
            Link partner advertised FEC modes: Not reported
            Speed: 1000Mb/s
            Duplex: Full
            Port: Twisted Pair
            PHYAD: 4
            Transceiver: internal
            Auto-negotiation: on
            MDI-X: Unknown
            Supports Wake-on: d
            Wake-on: d
            Current message level: 0x00000000 (0)
    
            Link detected: yes
    
    ethtool after:
    root at OpenWrt:/# ethtool eth1
    Settings for eth1:
            Supported ports: [ TP MII ]
            Supported link modes:   10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Supported pause frame use: Symmetric Receive-only
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Advertised pause frame use: Symmetric Receive-only
            Advertised auto-negotiation: Yes
            Advertised FEC modes: Not reported
            Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                                 100baseT/Half 100baseT/Full
                                                 1000baseT/Full
            Link partner advertised pause frame use: Symmetric Receive-only
            Link partner advertised auto-negotiation: Yes
            Link partner advertised FEC modes: Not reported
            Speed: 1000Mb/s
            Duplex: Full
            Port: Twisted Pair
            PHYAD: 4
            Transceiver: external
            Auto-negotiation: on
            MDI-X: off (auto)
            Supports Wake-on: d
            Wake-on: d
            Current message level: 0x00000000 (0)
    
            Link detected: yes
    
    Signed-off-by: Robert Marko <robert.marko at sartura.hr>
---
 .../net/ethernet/qualcomm/essedma/edma_ethtool.c   | 62 +++-------------------
 1 file changed, 6 insertions(+), 56 deletions(-)

diff --git a/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_ethtool.c b/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_ethtool.c
index 1270e20a90..ac5cb50961 100644
--- a/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_ethtool.c
+++ b/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_ethtool.c
@@ -186,55 +186,15 @@ static int edma_get_settings(struct net_device *netdev,
 	struct edma_adapter *adapter = netdev_priv(netdev);
 
 	if (adapter->poll_required) {
-		struct phy_device *phydev = NULL;
-		uint16_t phyreg;
-
 		if ((adapter->forced_speed != SPEED_UNKNOWN)
 			&& !(adapter->poll_required))
 			return -EPERM;
 
-		phydev = adapter->phydev;
-
-		linkmode_copy(cmd->link_modes.advertising, phydev->advertising);
-		linkmode_copy(cmd->link_modes.supported, phydev->supported);
-
-		cmd->base.autoneg = phydev->autoneg;
-
-		if (adapter->link_state == __EDMA_LINKDOWN) {
-			cmd->base.speed =  SPEED_UNKNOWN;
-			cmd->base.duplex = DUPLEX_UNKNOWN;
-		} else {
-			cmd->base.speed = phydev->speed;
-			cmd->base.duplex = phydev->duplex;
-		}
-
-		cmd->base.phy_address = adapter->phy_mdio_addr;
-
-		phyreg = (uint16_t)phy_read(adapter->phydev, MII_LPA);
-		if (phyreg & LPA_10HALF)
-			linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, 
-								cmd->link_modes.lp_advertising);
-
-		if (phyreg & LPA_10FULL)
-			linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, 
-								cmd->link_modes.lp_advertising);
-
-		if (phyreg & LPA_100HALF)
-			linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, 
-								cmd->link_modes.lp_advertising);
-
-		if (phyreg & LPA_100FULL)
-			linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 
-								cmd->link_modes.lp_advertising);
-
-		phyreg = (uint16_t)phy_read(adapter->phydev, MII_STAT1000);
-		if (phyreg & LPA_1000HALF)
-			linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT, 
-								cmd->link_modes.lp_advertising);
-
-		if (phyreg & LPA_1000FULL)
-			linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, 
-								cmd->link_modes.lp_advertising);
+		phy_ethtool_ksettings_get(adapter->phydev, cmd);
+		if (linkmode_test_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, adapter->phydev->advertising))
+			cmd->base.port = PORT_FIBRE;
+		else
+			cmd->base.port = PORT_TP;
 	} else {
 		/* If the speed/duplex for this GMAC is forced and we
 		 * are not polling for link state changes, return the
@@ -272,22 +232,12 @@ static int edma_set_settings(struct net_device *netdev,
 			    const struct ethtool_link_ksettings *cmd)
 {
 	struct edma_adapter *adapter = netdev_priv(netdev);
-	struct phy_device *phydev = NULL;
 
 	if ((adapter->forced_speed != SPEED_UNKNOWN) &&
 	     !adapter->poll_required)
 		return -EPERM;
 
-	phydev = adapter->phydev;
-	linkmode_copy(phydev->advertising, cmd->link_modes.advertising);
-	linkmode_copy(phydev->supported, cmd->link_modes.supported);
-	phydev->autoneg = cmd->base.autoneg;
-	phydev->speed = cmd->base.speed;
-	phydev->duplex = cmd->base.duplex;
-
-	genphy_config_aneg(phydev);
-
-	return 0;
+	return phy_ethtool_ksettings_set(adapter->phydev, cmd);
 }
 
 /* edma_get_coalesce



More information about the lede-commits mailing list