diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/fec_main.c')
| -rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 17 | 
1 files changed, 14 insertions, 3 deletions
| diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 3db882322b2b..f2065f9d02e6 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -38,6 +38,7 @@  #include <linux/in.h>  #include <linux/ip.h>  #include <net/ip.h> +#include <net/selftests.h>  #include <net/tso.h>  #include <linux/tcp.h>  #include <linux/udp.h> @@ -1665,6 +1666,7 @@ static void fec_get_mac(struct net_device *ndev)  {  	struct fec_enet_private *fep = netdev_priv(ndev);  	unsigned char *iap, tmpaddr[ETH_ALEN]; +	int ret;  	/*  	 * try to get mac address in following order: @@ -1680,9 +1682,9 @@ static void fec_get_mac(struct net_device *ndev)  	if (!is_valid_ether_addr(iap)) {  		struct device_node *np = fep->pdev->dev.of_node;  		if (np) { -			const char *mac = of_get_mac_address(np); -			if (!IS_ERR(mac)) -				iap = (unsigned char *) mac; +			ret = of_get_mac_address(np, tmpaddr); +			if (!ret) +				iap = tmpaddr;  		}  	} @@ -2048,6 +2050,8 @@ static int fec_enet_mii_probe(struct net_device *ndev)  	fep->link = 0;  	fep->full_duplex = 0; +	phy_dev->mac_managed_pm = 1; +  	phy_attached_info(phy_dev);  	return 0; @@ -2479,6 +2483,9 @@ static void fec_enet_get_strings(struct net_device *netdev,  			memcpy(data + i * ETH_GSTRING_LEN,  				fec_stats[i].name, ETH_GSTRING_LEN);  		break; +	case ETH_SS_TEST: +		net_selftest_get_strings(data); +		break;  	}  } @@ -2487,6 +2494,8 @@ static int fec_enet_get_sset_count(struct net_device *dev, int sset)  	switch (sset) {  	case ETH_SS_STATS:  		return ARRAY_SIZE(fec_stats); +	case ETH_SS_TEST: +		return net_selftest_get_count();  	default:  		return -EOPNOTSUPP;  	} @@ -2738,6 +2747,7 @@ static const struct ethtool_ops fec_enet_ethtool_ops = {  	.set_wol		= fec_enet_set_wol,  	.get_link_ksettings	= phy_ethtool_get_link_ksettings,  	.set_link_ksettings	= phy_ethtool_set_link_ksettings, +	.self_test		= net_selftest,  };  static int fec_enet_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd) @@ -3864,6 +3874,7 @@ static int __maybe_unused fec_resume(struct device *dev)  		netif_device_attach(ndev);  		netif_tx_unlock_bh(ndev);  		napi_enable(&fep->napi); +		phy_init_hw(ndev->phydev);  		phy_start(ndev->phydev);  	}  	rtnl_unlock(); | 
