@@ -1457,30 +1457,6 @@ void phy_mac_interrupt(struct phy_device *phydev)
14571457}
14581458EXPORT_SYMBOL (phy_mac_interrupt );
14591459
1460- static void mmd_eee_adv_to_linkmode (unsigned long * advertising , u16 eee_adv )
1461- {
1462- linkmode_zero (advertising );
1463-
1464- if (eee_adv & MDIO_EEE_100TX )
1465- linkmode_set_bit (ETHTOOL_LINK_MODE_100baseT_Full_BIT ,
1466- advertising );
1467- if (eee_adv & MDIO_EEE_1000T )
1468- linkmode_set_bit (ETHTOOL_LINK_MODE_1000baseT_Full_BIT ,
1469- advertising );
1470- if (eee_adv & MDIO_EEE_10GT )
1471- linkmode_set_bit (ETHTOOL_LINK_MODE_10000baseT_Full_BIT ,
1472- advertising );
1473- if (eee_adv & MDIO_EEE_1000KX )
1474- linkmode_set_bit (ETHTOOL_LINK_MODE_1000baseKX_Full_BIT ,
1475- advertising );
1476- if (eee_adv & MDIO_EEE_10GKX4 )
1477- linkmode_set_bit (ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT ,
1478- advertising );
1479- if (eee_adv & MDIO_EEE_10GKR )
1480- linkmode_set_bit (ETHTOOL_LINK_MODE_10000baseKR_Full_BIT ,
1481- advertising );
1482- }
1483-
14841460/**
14851461 * phy_init_eee - init and check the EEE feature
14861462 * @phydev: target phy_device struct
@@ -1493,62 +1469,25 @@ static void mmd_eee_adv_to_linkmode(unsigned long *advertising, u16 eee_adv)
14931469 */
14941470int phy_init_eee (struct phy_device * phydev , bool clk_stop_enable )
14951471{
1472+ int ret ;
1473+
14961474 if (!phydev -> drv )
14971475 return - EIO ;
14981476
1499- /* According to 802.3az,the EEE is supported only in full duplex-mode.
1500- */
1501- if (phydev -> duplex == DUPLEX_FULL ) {
1502- __ETHTOOL_DECLARE_LINK_MODE_MASK (common );
1503- __ETHTOOL_DECLARE_LINK_MODE_MASK (lp );
1504- __ETHTOOL_DECLARE_LINK_MODE_MASK (adv );
1505- int eee_lp , eee_cap , eee_adv ;
1506- int status ;
1507- u32 cap ;
1508-
1509- /* Read phy status to properly get the right settings */
1510- status = phy_read_status (phydev );
1511- if (status )
1512- return status ;
1513-
1514- /* First check if the EEE ability is supported */
1515- eee_cap = phy_read_mmd (phydev , MDIO_MMD_PCS , MDIO_PCS_EEE_ABLE );
1516- if (eee_cap <= 0 )
1517- goto eee_exit_err ;
1518-
1519- cap = mmd_eee_cap_to_ethtool_sup_t (eee_cap );
1520- if (!cap )
1521- goto eee_exit_err ;
1522-
1523- /* Check which link settings negotiated and verify it in
1524- * the EEE advertising registers.
1525- */
1526- eee_lp = phy_read_mmd (phydev , MDIO_MMD_AN , MDIO_AN_EEE_LPABLE );
1527- if (eee_lp <= 0 )
1528- goto eee_exit_err ;
1529-
1530- eee_adv = phy_read_mmd (phydev , MDIO_MMD_AN , MDIO_AN_EEE_ADV );
1531- if (eee_adv <= 0 )
1532- goto eee_exit_err ;
1533-
1534- mmd_eee_adv_to_linkmode (adv , eee_adv );
1535- mmd_eee_adv_to_linkmode (lp , eee_lp );
1536- linkmode_and (common , adv , lp );
1537-
1538- if (!phy_check_valid (phydev -> speed , phydev -> duplex , common ))
1539- goto eee_exit_err ;
1477+ ret = genphy_c45_eee_is_active (phydev , NULL , NULL , NULL );
1478+ if (ret < 0 )
1479+ return ret ;
1480+ if (!ret )
1481+ return - EPROTONOSUPPORT ;
15401482
1541- if (clk_stop_enable )
1542- /* Configure the PHY to stop receiving xMII
1543- * clock while it is signaling LPI.
1544- */
1545- phy_set_bits_mmd (phydev , MDIO_MMD_PCS , MDIO_CTRL1 ,
1546- MDIO_PCS_CTRL1_CLKSTOP_EN );
1483+ if (clk_stop_enable )
1484+ /* Configure the PHY to stop receiving xMII
1485+ * clock while it is signaling LPI.
1486+ */
1487+ ret = phy_set_bits_mmd (phydev , MDIO_MMD_PCS , MDIO_CTRL1 ,
1488+ MDIO_PCS_CTRL1_CLKSTOP_EN );
15471489
1548- return 0 ; /* EEE supported */
1549- }
1550- eee_exit_err :
1551- return - EPROTONOSUPPORT ;
1490+ return ret < 0 ? ret : 0 ;
15521491}
15531492EXPORT_SYMBOL (phy_init_eee );
15541493
0 commit comments