1  // SPDX-License-Identifier: GPL-2.0+
2  /* Framework for configuring and reading PHY devices
3   * Based on code in sungem_phy.c and gianfar_phy.c
4   *
5   * Author: Andy Fleming
6   *
7   * Copyright (c) 2004 Freescale Semiconductor, Inc.
8   * Copyright (c) 2006, 2007  Maciej W. Rozycki
9   */
10  
11  #include <linux/kernel.h>
12  #include <linux/string.h>
13  #include <linux/errno.h>
14  #include <linux/unistd.h>
15  #include <linux/interrupt.h>
16  #include <linux/delay.h>
17  #include <linux/netdevice.h>
18  #include <linux/netlink.h>
19  #include <linux/etherdevice.h>
20  #include <linux/skbuff.h>
21  #include <linux/mm.h>
22  #include <linux/module.h>
23  #include <linux/mii.h>
24  #include <linux/ethtool.h>
25  #include <linux/ethtool_netlink.h>
26  #include <linux/phy.h>
27  #include <linux/phy_led_triggers.h>
28  #include <linux/sfp.h>
29  #include <linux/workqueue.h>
30  #include <linux/mdio.h>
31  #include <linux/io.h>
32  #include <linux/uaccess.h>
33  #include <linux/atomic.h>
34  #include <net/netlink.h>
35  #include <net/genetlink.h>
36  #include <net/sock.h>
37  
38  #define PHY_STATE_TIME	HZ
39  
40  #define PHY_STATE_STR(_state)			\
41  	case PHY_##_state:			\
42  		return __stringify(_state);	\
43  
phy_state_to_str(enum phy_state st)44  static const char *phy_state_to_str(enum phy_state st)
45  {
46  	switch (st) {
47  	PHY_STATE_STR(DOWN)
48  	PHY_STATE_STR(READY)
49  	PHY_STATE_STR(UP)
50  	PHY_STATE_STR(RUNNING)
51  	PHY_STATE_STR(NOLINK)
52  	PHY_STATE_STR(CABLETEST)
53  	PHY_STATE_STR(HALTED)
54  	}
55  
56  	return NULL;
57  }
58  
phy_link_up(struct phy_device * phydev)59  static void phy_link_up(struct phy_device *phydev)
60  {
61  	phydev->phy_link_change(phydev, true);
62  	phy_led_trigger_change_speed(phydev);
63  }
64  
phy_link_down(struct phy_device * phydev)65  static void phy_link_down(struct phy_device *phydev)
66  {
67  	phydev->phy_link_change(phydev, false);
68  	phy_led_trigger_change_speed(phydev);
69  }
70  
phy_pause_str(struct phy_device * phydev)71  static const char *phy_pause_str(struct phy_device *phydev)
72  {
73  	bool local_pause, local_asym_pause;
74  
75  	if (phydev->autoneg == AUTONEG_DISABLE)
76  		goto no_pause;
77  
78  	local_pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
79  					phydev->advertising);
80  	local_asym_pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
81  					     phydev->advertising);
82  
83  	if (local_pause && phydev->pause)
84  		return "rx/tx";
85  
86  	if (local_asym_pause && phydev->asym_pause) {
87  		if (local_pause)
88  			return "rx";
89  		if (phydev->pause)
90  			return "tx";
91  	}
92  
93  no_pause:
94  	return "off";
95  }
96  
97  /**
98   * phy_print_status - Convenience function to print out the current phy status
99   * @phydev: the phy_device struct
100   */
phy_print_status(struct phy_device * phydev)101  void phy_print_status(struct phy_device *phydev)
102  {
103  	if (phydev->link) {
104  		netdev_info(phydev->attached_dev,
105  			"Link is Up - %s/%s %s- flow control %s\n",
106  			phy_speed_to_str(phydev->speed),
107  			phy_duplex_to_str(phydev->duplex),
108  			phydev->downshifted_rate ? "(downshifted) " : "",
109  			phy_pause_str(phydev));
110  	} else	{
111  		netdev_info(phydev->attached_dev, "Link is Down\n");
112  	}
113  }
114  EXPORT_SYMBOL(phy_print_status);
115  
116  /**
117   * phy_config_interrupt - configure the PHY device for the requested interrupts
118   * @phydev: the phy_device struct
119   * @interrupts: interrupt flags to configure for this @phydev
120   *
121   * Returns 0 on success or < 0 on error.
122   */
phy_config_interrupt(struct phy_device * phydev,bool interrupts)123  static int phy_config_interrupt(struct phy_device *phydev, bool interrupts)
124  {
125  	phydev->interrupts = interrupts ? 1 : 0;
126  	if (phydev->drv->config_intr)
127  		return phydev->drv->config_intr(phydev);
128  
129  	return 0;
130  }
131  
132  /**
133   * phy_restart_aneg - restart auto-negotiation
134   * @phydev: target phy_device struct
135   *
136   * Restart the autonegotiation on @phydev.  Returns >= 0 on success or
137   * negative errno on error.
138   */
phy_restart_aneg(struct phy_device * phydev)139  int phy_restart_aneg(struct phy_device *phydev)
140  {
141  	int ret;
142  
143  	if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0)))
144  		ret = genphy_c45_restart_aneg(phydev);
145  	else
146  		ret = genphy_restart_aneg(phydev);
147  
148  	return ret;
149  }
150  EXPORT_SYMBOL_GPL(phy_restart_aneg);
151  
152  /**
153   * phy_aneg_done - return auto-negotiation status
154   * @phydev: target phy_device struct
155   *
156   * Description: Return the auto-negotiation status from this @phydev
157   * Returns > 0 on success or < 0 on error. 0 means that auto-negotiation
158   * is still pending.
159   */
phy_aneg_done(struct phy_device * phydev)160  int phy_aneg_done(struct phy_device *phydev)
161  {
162  	if (phydev->drv && phydev->drv->aneg_done)
163  		return phydev->drv->aneg_done(phydev);
164  	else if (phydev->is_c45)
165  		return genphy_c45_aneg_done(phydev);
166  	else
167  		return genphy_aneg_done(phydev);
168  }
169  EXPORT_SYMBOL(phy_aneg_done);
170  
171  /**
172   * phy_find_valid - find a PHY setting that matches the requested parameters
173   * @speed: desired speed
174   * @duplex: desired duplex
175   * @supported: mask of supported link modes
176   *
177   * Locate a supported phy setting that is, in priority order:
178   * - an exact match for the specified speed and duplex mode
179   * - a match for the specified speed, or slower speed
180   * - the slowest supported speed
181   * Returns the matched phy_setting entry, or %NULL if no supported phy
182   * settings were found.
183   */
184  static const struct phy_setting *
phy_find_valid(int speed,int duplex,unsigned long * supported)185  phy_find_valid(int speed, int duplex, unsigned long *supported)
186  {
187  	return phy_lookup_setting(speed, duplex, supported, false);
188  }
189  
190  /**
191   * phy_supported_speeds - return all speeds currently supported by a phy device
192   * @phy: The phy device to return supported speeds of.
193   * @speeds: buffer to store supported speeds in.
194   * @size:   size of speeds buffer.
195   *
196   * Description: Returns the number of supported speeds, and fills the speeds
197   * buffer with the supported speeds. If speeds buffer is too small to contain
198   * all currently supported speeds, will return as many speeds as can fit.
199   */
phy_supported_speeds(struct phy_device * phy,unsigned int * speeds,unsigned int size)200  unsigned int phy_supported_speeds(struct phy_device *phy,
201  				  unsigned int *speeds,
202  				  unsigned int size)
203  {
204  	return phy_speeds(speeds, size, phy->supported);
205  }
206  
207  /**
208   * phy_check_valid - check if there is a valid PHY setting which matches
209   *		     speed, duplex, and feature mask
210   * @speed: speed to match
211   * @duplex: duplex to match
212   * @features: A mask of the valid settings
213   *
214   * Description: Returns true if there is a valid setting, false otherwise.
215   */
phy_check_valid(int speed,int duplex,unsigned long * features)216  static inline bool phy_check_valid(int speed, int duplex,
217  				   unsigned long *features)
218  {
219  	return !!phy_lookup_setting(speed, duplex, features, true);
220  }
221  
222  /**
223   * phy_sanitize_settings - make sure the PHY is set to supported speed and duplex
224   * @phydev: the target phy_device struct
225   *
226   * Description: Make sure the PHY is set to supported speeds and
227   *   duplexes.  Drop down by one in this order:  1000/FULL,
228   *   1000/HALF, 100/FULL, 100/HALF, 10/FULL, 10/HALF.
229   */
phy_sanitize_settings(struct phy_device * phydev)230  static void phy_sanitize_settings(struct phy_device *phydev)
231  {
232  	const struct phy_setting *setting;
233  
234  	setting = phy_find_valid(phydev->speed, phydev->duplex,
235  				 phydev->supported);
236  	if (setting) {
237  		phydev->speed = setting->speed;
238  		phydev->duplex = setting->duplex;
239  	} else {
240  		/* We failed to find anything (no supported speeds?) */
241  		phydev->speed = SPEED_UNKNOWN;
242  		phydev->duplex = DUPLEX_UNKNOWN;
243  	}
244  }
245  
phy_ethtool_ksettings_get(struct phy_device * phydev,struct ethtool_link_ksettings * cmd)246  void phy_ethtool_ksettings_get(struct phy_device *phydev,
247  			       struct ethtool_link_ksettings *cmd)
248  {
249  	mutex_lock(&phydev->lock);
250  	linkmode_copy(cmd->link_modes.supported, phydev->supported);
251  	linkmode_copy(cmd->link_modes.advertising, phydev->advertising);
252  	linkmode_copy(cmd->link_modes.lp_advertising, phydev->lp_advertising);
253  
254  	cmd->base.speed = phydev->speed;
255  	cmd->base.duplex = phydev->duplex;
256  	cmd->base.master_slave_cfg = phydev->master_slave_get;
257  	cmd->base.master_slave_state = phydev->master_slave_state;
258  	if (phydev->interface == PHY_INTERFACE_MODE_MOCA)
259  		cmd->base.port = PORT_BNC;
260  	else
261  		cmd->base.port = phydev->port;
262  	cmd->base.transceiver = phy_is_internal(phydev) ?
263  				XCVR_INTERNAL : XCVR_EXTERNAL;
264  	cmd->base.phy_address = phydev->mdio.addr;
265  	cmd->base.autoneg = phydev->autoneg;
266  	cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl;
267  	cmd->base.eth_tp_mdix = phydev->mdix;
268  	mutex_unlock(&phydev->lock);
269  }
270  EXPORT_SYMBOL(phy_ethtool_ksettings_get);
271  
272  /**
273   * phy_mii_ioctl - generic PHY MII ioctl interface
274   * @phydev: the phy_device struct
275   * @ifr: &struct ifreq for socket ioctl's
276   * @cmd: ioctl cmd to execute
277   *
278   * Note that this function is currently incompatible with the
279   * PHYCONTROL layer.  It changes registers without regard to
280   * current state.  Use at own risk.
281   */
phy_mii_ioctl(struct phy_device * phydev,struct ifreq * ifr,int cmd)282  int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd)
283  {
284  	struct mii_ioctl_data *mii_data = if_mii(ifr);
285  	u16 val = mii_data->val_in;
286  	bool change_autoneg = false;
287  	int prtad, devad;
288  
289  	switch (cmd) {
290  	case SIOCGMIIPHY:
291  		mii_data->phy_id = phydev->mdio.addr;
292  		fallthrough;
293  
294  	case SIOCGMIIREG:
295  		if (mdio_phy_id_is_c45(mii_data->phy_id)) {
296  			prtad = mdio_phy_id_prtad(mii_data->phy_id);
297  			devad = mdio_phy_id_devad(mii_data->phy_id);
298  			devad = mdiobus_c45_addr(devad, mii_data->reg_num);
299  		} else {
300  			prtad = mii_data->phy_id;
301  			devad = mii_data->reg_num;
302  		}
303  		mii_data->val_out = mdiobus_read(phydev->mdio.bus, prtad,
304  						 devad);
305  		return 0;
306  
307  	case SIOCSMIIREG:
308  		if (mdio_phy_id_is_c45(mii_data->phy_id)) {
309  			prtad = mdio_phy_id_prtad(mii_data->phy_id);
310  			devad = mdio_phy_id_devad(mii_data->phy_id);
311  			devad = mdiobus_c45_addr(devad, mii_data->reg_num);
312  		} else {
313  			prtad = mii_data->phy_id;
314  			devad = mii_data->reg_num;
315  		}
316  		if (prtad == phydev->mdio.addr) {
317  			switch (devad) {
318  			case MII_BMCR:
319  				if ((val & (BMCR_RESET | BMCR_ANENABLE)) == 0) {
320  					if (phydev->autoneg == AUTONEG_ENABLE)
321  						change_autoneg = true;
322  					phydev->autoneg = AUTONEG_DISABLE;
323  					if (val & BMCR_FULLDPLX)
324  						phydev->duplex = DUPLEX_FULL;
325  					else
326  						phydev->duplex = DUPLEX_HALF;
327  					if (val & BMCR_SPEED1000)
328  						phydev->speed = SPEED_1000;
329  					else if (val & BMCR_SPEED100)
330  						phydev->speed = SPEED_100;
331  					else phydev->speed = SPEED_10;
332  				} else {
333  					if (phydev->autoneg == AUTONEG_DISABLE)
334  						change_autoneg = true;
335  					phydev->autoneg = AUTONEG_ENABLE;
336  				}
337  				break;
338  			case MII_ADVERTISE:
339  				mii_adv_mod_linkmode_adv_t(phydev->advertising,
340  							   val);
341  				change_autoneg = true;
342  				break;
343  			case MII_CTRL1000:
344  				mii_ctrl1000_mod_linkmode_adv_t(phydev->advertising,
345  							        val);
346  				change_autoneg = true;
347  				break;
348  			default:
349  				/* do nothing */
350  				break;
351  			}
352  		}
353  
354  		mdiobus_write(phydev->mdio.bus, prtad, devad, val);
355  
356  		if (prtad == phydev->mdio.addr &&
357  		    devad == MII_BMCR &&
358  		    val & BMCR_RESET)
359  			return phy_init_hw(phydev);
360  
361  		if (change_autoneg)
362  			return phy_start_aneg(phydev);
363  
364  		return 0;
365  
366  	case SIOCSHWTSTAMP:
367  		if (phydev->mii_ts && phydev->mii_ts->hwtstamp)
368  			return phydev->mii_ts->hwtstamp(phydev->mii_ts, ifr);
369  		fallthrough;
370  
371  	default:
372  		return -EOPNOTSUPP;
373  	}
374  }
375  EXPORT_SYMBOL(phy_mii_ioctl);
376  
377  /**
378   * phy_do_ioctl - generic ndo_eth_ioctl implementation
379   * @dev: the net_device struct
380   * @ifr: &struct ifreq for socket ioctl's
381   * @cmd: ioctl cmd to execute
382   */
phy_do_ioctl(struct net_device * dev,struct ifreq * ifr,int cmd)383  int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
384  {
385  	if (!dev->phydev)
386  		return -ENODEV;
387  
388  	return phy_mii_ioctl(dev->phydev, ifr, cmd);
389  }
390  EXPORT_SYMBOL(phy_do_ioctl);
391  
392  /**
393   * phy_do_ioctl_running - generic ndo_eth_ioctl implementation but test first
394   *
395   * @dev: the net_device struct
396   * @ifr: &struct ifreq for socket ioctl's
397   * @cmd: ioctl cmd to execute
398   *
399   * Same as phy_do_ioctl, but ensures that net_device is running before
400   * handling the ioctl.
401   */
phy_do_ioctl_running(struct net_device * dev,struct ifreq * ifr,int cmd)402  int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd)
403  {
404  	if (!netif_running(dev))
405  		return -ENODEV;
406  
407  	return phy_do_ioctl(dev, ifr, cmd);
408  }
409  EXPORT_SYMBOL(phy_do_ioctl_running);
410  
411  /**
412   * phy_queue_state_machine - Trigger the state machine to run soon
413   *
414   * @phydev: the phy_device struct
415   * @jiffies: Run the state machine after these jiffies
416   */
phy_queue_state_machine(struct phy_device * phydev,unsigned long jiffies)417  void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies)
418  {
419  	mod_delayed_work(system_power_efficient_wq, &phydev->state_queue,
420  			 jiffies);
421  }
422  EXPORT_SYMBOL(phy_queue_state_machine);
423  
424  /**
425   * phy_trigger_machine - Trigger the state machine to run now
426   *
427   * @phydev: the phy_device struct
428   */
phy_trigger_machine(struct phy_device * phydev)429  void phy_trigger_machine(struct phy_device *phydev)
430  {
431  	phy_queue_state_machine(phydev, 0);
432  }
433  EXPORT_SYMBOL(phy_trigger_machine);
434  
phy_abort_cable_test(struct phy_device * phydev)435  static void phy_abort_cable_test(struct phy_device *phydev)
436  {
437  	int err;
438  
439  	ethnl_cable_test_finished(phydev);
440  
441  	err = phy_init_hw(phydev);
442  	if (err)
443  		phydev_err(phydev, "Error while aborting cable test");
444  }
445  
446  /**
447   * phy_ethtool_get_strings - Get the statistic counter names
448   *
449   * @phydev: the phy_device struct
450   * @data: Where to put the strings
451   */
phy_ethtool_get_strings(struct phy_device * phydev,u8 * data)452  int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data)
453  {
454  	if (!phydev->drv)
455  		return -EIO;
456  
457  	mutex_lock(&phydev->lock);
458  	phydev->drv->get_strings(phydev, data);
459  	mutex_unlock(&phydev->lock);
460  
461  	return 0;
462  }
463  EXPORT_SYMBOL(phy_ethtool_get_strings);
464  
465  /**
466   * phy_ethtool_get_sset_count - Get the number of statistic counters
467   *
468   * @phydev: the phy_device struct
469   */
phy_ethtool_get_sset_count(struct phy_device * phydev)470  int phy_ethtool_get_sset_count(struct phy_device *phydev)
471  {
472  	int ret;
473  
474  	if (!phydev->drv)
475  		return -EIO;
476  
477  	if (phydev->drv->get_sset_count &&
478  	    phydev->drv->get_strings &&
479  	    phydev->drv->get_stats) {
480  		mutex_lock(&phydev->lock);
481  		ret = phydev->drv->get_sset_count(phydev);
482  		mutex_unlock(&phydev->lock);
483  
484  		return ret;
485  	}
486  
487  	return -EOPNOTSUPP;
488  }
489  EXPORT_SYMBOL(phy_ethtool_get_sset_count);
490  
491  /**
492   * phy_ethtool_get_stats - Get the statistic counters
493   *
494   * @phydev: the phy_device struct
495   * @stats: What counters to get
496   * @data: Where to store the counters
497   */
phy_ethtool_get_stats(struct phy_device * phydev,struct ethtool_stats * stats,u64 * data)498  int phy_ethtool_get_stats(struct phy_device *phydev,
499  			  struct ethtool_stats *stats, u64 *data)
500  {
501  	if (!phydev->drv)
502  		return -EIO;
503  
504  	mutex_lock(&phydev->lock);
505  	phydev->drv->get_stats(phydev, stats, data);
506  	mutex_unlock(&phydev->lock);
507  
508  	return 0;
509  }
510  EXPORT_SYMBOL(phy_ethtool_get_stats);
511  
512  /**
513   * phy_start_cable_test - Start a cable test
514   *
515   * @phydev: the phy_device struct
516   * @extack: extack for reporting useful error messages
517   */
phy_start_cable_test(struct phy_device * phydev,struct netlink_ext_ack * extack)518  int phy_start_cable_test(struct phy_device *phydev,
519  			 struct netlink_ext_ack *extack)
520  {
521  	struct net_device *dev = phydev->attached_dev;
522  	int err = -ENOMEM;
523  
524  	if (!(phydev->drv &&
525  	      phydev->drv->cable_test_start &&
526  	      phydev->drv->cable_test_get_status)) {
527  		NL_SET_ERR_MSG(extack,
528  			       "PHY driver does not support cable testing");
529  		return -EOPNOTSUPP;
530  	}
531  
532  	mutex_lock(&phydev->lock);
533  	if (phydev->state == PHY_CABLETEST) {
534  		NL_SET_ERR_MSG(extack,
535  			       "PHY already performing a test");
536  		err = -EBUSY;
537  		goto out;
538  	}
539  
540  	if (phydev->state < PHY_UP ||
541  	    phydev->state > PHY_CABLETEST) {
542  		NL_SET_ERR_MSG(extack,
543  			       "PHY not configured. Try setting interface up");
544  		err = -EBUSY;
545  		goto out;
546  	}
547  
548  	err = ethnl_cable_test_alloc(phydev, ETHTOOL_MSG_CABLE_TEST_NTF);
549  	if (err)
550  		goto out;
551  
552  	/* Mark the carrier down until the test is complete */
553  	phy_link_down(phydev);
554  
555  	netif_testing_on(dev);
556  	err = phydev->drv->cable_test_start(phydev);
557  	if (err) {
558  		netif_testing_off(dev);
559  		phy_link_up(phydev);
560  		goto out_free;
561  	}
562  
563  	phydev->state = PHY_CABLETEST;
564  
565  	if (phy_polling_mode(phydev))
566  		phy_trigger_machine(phydev);
567  
568  	mutex_unlock(&phydev->lock);
569  
570  	return 0;
571  
572  out_free:
573  	ethnl_cable_test_free(phydev);
574  out:
575  	mutex_unlock(&phydev->lock);
576  
577  	return err;
578  }
579  EXPORT_SYMBOL(phy_start_cable_test);
580  
581  /**
582   * phy_start_cable_test_tdr - Start a raw TDR cable test
583   *
584   * @phydev: the phy_device struct
585   * @extack: extack for reporting useful error messages
586   * @config: Configuration of the test to run
587   */
phy_start_cable_test_tdr(struct phy_device * phydev,struct netlink_ext_ack * extack,const struct phy_tdr_config * config)588  int phy_start_cable_test_tdr(struct phy_device *phydev,
589  			     struct netlink_ext_ack *extack,
590  			     const struct phy_tdr_config *config)
591  {
592  	struct net_device *dev = phydev->attached_dev;
593  	int err = -ENOMEM;
594  
595  	if (!(phydev->drv &&
596  	      phydev->drv->cable_test_tdr_start &&
597  	      phydev->drv->cable_test_get_status)) {
598  		NL_SET_ERR_MSG(extack,
599  			       "PHY driver does not support cable test TDR");
600  		return -EOPNOTSUPP;
601  	}
602  
603  	mutex_lock(&phydev->lock);
604  	if (phydev->state == PHY_CABLETEST) {
605  		NL_SET_ERR_MSG(extack,
606  			       "PHY already performing a test");
607  		err = -EBUSY;
608  		goto out;
609  	}
610  
611  	if (phydev->state < PHY_UP ||
612  	    phydev->state > PHY_CABLETEST) {
613  		NL_SET_ERR_MSG(extack,
614  			       "PHY not configured. Try setting interface up");
615  		err = -EBUSY;
616  		goto out;
617  	}
618  
619  	err = ethnl_cable_test_alloc(phydev, ETHTOOL_MSG_CABLE_TEST_TDR_NTF);
620  	if (err)
621  		goto out;
622  
623  	/* Mark the carrier down until the test is complete */
624  	phy_link_down(phydev);
625  
626  	netif_testing_on(dev);
627  	err = phydev->drv->cable_test_tdr_start(phydev, config);
628  	if (err) {
629  		netif_testing_off(dev);
630  		phy_link_up(phydev);
631  		goto out_free;
632  	}
633  
634  	phydev->state = PHY_CABLETEST;
635  
636  	if (phy_polling_mode(phydev))
637  		phy_trigger_machine(phydev);
638  
639  	mutex_unlock(&phydev->lock);
640  
641  	return 0;
642  
643  out_free:
644  	ethnl_cable_test_free(phydev);
645  out:
646  	mutex_unlock(&phydev->lock);
647  
648  	return err;
649  }
650  EXPORT_SYMBOL(phy_start_cable_test_tdr);
651  
phy_config_aneg(struct phy_device * phydev)652  int phy_config_aneg(struct phy_device *phydev)
653  {
654  	if (phydev->drv->config_aneg)
655  		return phydev->drv->config_aneg(phydev);
656  
657  	/* Clause 45 PHYs that don't implement Clause 22 registers are not
658  	 * allowed to call genphy_config_aneg()
659  	 */
660  	if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0)))
661  		return genphy_c45_config_aneg(phydev);
662  
663  	return genphy_config_aneg(phydev);
664  }
665  EXPORT_SYMBOL(phy_config_aneg);
666  
667  /**
668   * phy_check_link_status - check link status and set state accordingly
669   * @phydev: the phy_device struct
670   *
671   * Description: Check for link and whether autoneg was triggered / is running
672   * and set state accordingly
673   */
phy_check_link_status(struct phy_device * phydev)674  static int phy_check_link_status(struct phy_device *phydev)
675  {
676  	int err;
677  
678  	lockdep_assert_held(&phydev->lock);
679  
680  	/* Keep previous state if loopback is enabled because some PHYs
681  	 * report that Link is Down when loopback is enabled.
682  	 */
683  	if (phydev->loopback_enabled)
684  		return 0;
685  
686  	err = phy_read_status(phydev);
687  	if (err)
688  		return err;
689  
690  	if (phydev->link && phydev->state != PHY_RUNNING) {
691  		phy_check_downshift(phydev);
692  		phydev->state = PHY_RUNNING;
693  		phy_link_up(phydev);
694  	} else if (!phydev->link && phydev->state != PHY_NOLINK) {
695  		phydev->state = PHY_NOLINK;
696  		phy_link_down(phydev);
697  	}
698  
699  	return 0;
700  }
701  
702  /**
703   * _phy_start_aneg - start auto-negotiation for this PHY device
704   * @phydev: the phy_device struct
705   *
706   * Description: Sanitizes the settings (if we're not autonegotiating
707   *   them), and then calls the driver's config_aneg function.
708   *   If the PHYCONTROL Layer is operating, we change the state to
709   *   reflect the beginning of Auto-negotiation or forcing.
710   */
_phy_start_aneg(struct phy_device * phydev)711  static int _phy_start_aneg(struct phy_device *phydev)
712  {
713  	int err;
714  
715  	lockdep_assert_held(&phydev->lock);
716  
717  	if (!phydev->drv)
718  		return -EIO;
719  
720  	if (AUTONEG_DISABLE == phydev->autoneg)
721  		phy_sanitize_settings(phydev);
722  
723  	err = phy_config_aneg(phydev);
724  	if (err < 0)
725  		return err;
726  
727  	if (phy_is_started(phydev))
728  		err = phy_check_link_status(phydev);
729  
730  	return err;
731  }
732  
733  /**
734   * phy_start_aneg - start auto-negotiation for this PHY device
735   * @phydev: the phy_device struct
736   *
737   * Description: Sanitizes the settings (if we're not autonegotiating
738   *   them), and then calls the driver's config_aneg function.
739   *   If the PHYCONTROL Layer is operating, we change the state to
740   *   reflect the beginning of Auto-negotiation or forcing.
741   */
phy_start_aneg(struct phy_device * phydev)742  int phy_start_aneg(struct phy_device *phydev)
743  {
744  	int err;
745  
746  	mutex_lock(&phydev->lock);
747  	err = _phy_start_aneg(phydev);
748  	mutex_unlock(&phydev->lock);
749  
750  	return err;
751  }
752  EXPORT_SYMBOL(phy_start_aneg);
753  
phy_poll_aneg_done(struct phy_device * phydev)754  static int phy_poll_aneg_done(struct phy_device *phydev)
755  {
756  	unsigned int retries = 100;
757  	int ret;
758  
759  	do {
760  		msleep(100);
761  		ret = phy_aneg_done(phydev);
762  	} while (!ret && --retries);
763  
764  	if (!ret)
765  		return -ETIMEDOUT;
766  
767  	return ret < 0 ? ret : 0;
768  }
769  
phy_ethtool_ksettings_set(struct phy_device * phydev,const struct ethtool_link_ksettings * cmd)770  int phy_ethtool_ksettings_set(struct phy_device *phydev,
771  			      const struct ethtool_link_ksettings *cmd)
772  {
773  	__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
774  	u8 autoneg = cmd->base.autoneg;
775  	u8 duplex = cmd->base.duplex;
776  	u32 speed = cmd->base.speed;
777  
778  	if (cmd->base.phy_address != phydev->mdio.addr)
779  		return -EINVAL;
780  
781  	linkmode_copy(advertising, cmd->link_modes.advertising);
782  
783  	/* We make sure that we don't pass unsupported values in to the PHY */
784  	linkmode_and(advertising, advertising, phydev->supported);
785  
786  	/* Verify the settings we care about. */
787  	if (autoneg != AUTONEG_ENABLE && autoneg != AUTONEG_DISABLE)
788  		return -EINVAL;
789  
790  	if (autoneg == AUTONEG_ENABLE && linkmode_empty(advertising))
791  		return -EINVAL;
792  
793  	if (autoneg == AUTONEG_DISABLE &&
794  	    ((speed != SPEED_1000 &&
795  	      speed != SPEED_100 &&
796  	      speed != SPEED_10) ||
797  	     (duplex != DUPLEX_HALF &&
798  	      duplex != DUPLEX_FULL)))
799  		return -EINVAL;
800  
801  	mutex_lock(&phydev->lock);
802  	phydev->autoneg = autoneg;
803  
804  	if (autoneg == AUTONEG_DISABLE) {
805  		phydev->speed = speed;
806  		phydev->duplex = duplex;
807  	}
808  
809  	linkmode_copy(phydev->advertising, advertising);
810  
811  	linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
812  			 phydev->advertising, autoneg == AUTONEG_ENABLE);
813  
814  	phydev->master_slave_set = cmd->base.master_slave_cfg;
815  	phydev->mdix_ctrl = cmd->base.eth_tp_mdix_ctrl;
816  
817  	/* Restart the PHY */
818  	if (phy_is_started(phydev)) {
819  		phydev->state = PHY_UP;
820  		phy_trigger_machine(phydev);
821  	} else {
822  		_phy_start_aneg(phydev);
823  	}
824  
825  	mutex_unlock(&phydev->lock);
826  	return 0;
827  }
828  EXPORT_SYMBOL(phy_ethtool_ksettings_set);
829  
830  /**
831   * phy_speed_down - set speed to lowest speed supported by both link partners
832   * @phydev: the phy_device struct
833   * @sync: perform action synchronously
834   *
835   * Description: Typically used to save energy when waiting for a WoL packet
836   *
837   * WARNING: Setting sync to false may cause the system being unable to suspend
838   * in case the PHY generates an interrupt when finishing the autonegotiation.
839   * This interrupt may wake up the system immediately after suspend.
840   * Therefore use sync = false only if you're sure it's safe with the respective
841   * network chip.
842   */
phy_speed_down(struct phy_device * phydev,bool sync)843  int phy_speed_down(struct phy_device *phydev, bool sync)
844  {
845  	__ETHTOOL_DECLARE_LINK_MODE_MASK(adv_tmp);
846  	int ret;
847  
848  	if (phydev->autoneg != AUTONEG_ENABLE)
849  		return 0;
850  
851  	linkmode_copy(adv_tmp, phydev->advertising);
852  
853  	ret = phy_speed_down_core(phydev);
854  	if (ret)
855  		return ret;
856  
857  	linkmode_copy(phydev->adv_old, adv_tmp);
858  
859  	if (linkmode_equal(phydev->advertising, adv_tmp))
860  		return 0;
861  
862  	ret = phy_config_aneg(phydev);
863  	if (ret)
864  		return ret;
865  
866  	return sync ? phy_poll_aneg_done(phydev) : 0;
867  }
868  EXPORT_SYMBOL_GPL(phy_speed_down);
869  
870  /**
871   * phy_speed_up - (re)set advertised speeds to all supported speeds
872   * @phydev: the phy_device struct
873   *
874   * Description: Used to revert the effect of phy_speed_down
875   */
phy_speed_up(struct phy_device * phydev)876  int phy_speed_up(struct phy_device *phydev)
877  {
878  	__ETHTOOL_DECLARE_LINK_MODE_MASK(adv_tmp);
879  
880  	if (phydev->autoneg != AUTONEG_ENABLE)
881  		return 0;
882  
883  	if (linkmode_empty(phydev->adv_old))
884  		return 0;
885  
886  	linkmode_copy(adv_tmp, phydev->advertising);
887  	linkmode_copy(phydev->advertising, phydev->adv_old);
888  	linkmode_zero(phydev->adv_old);
889  
890  	if (linkmode_equal(phydev->advertising, adv_tmp))
891  		return 0;
892  
893  	return phy_config_aneg(phydev);
894  }
895  EXPORT_SYMBOL_GPL(phy_speed_up);
896  
897  /**
898   * phy_start_machine - start PHY state machine tracking
899   * @phydev: the phy_device struct
900   *
901   * Description: The PHY infrastructure can run a state machine
902   *   which tracks whether the PHY is starting up, negotiating,
903   *   etc.  This function starts the delayed workqueue which tracks
904   *   the state of the PHY. If you want to maintain your own state machine,
905   *   do not call this function.
906   */
phy_start_machine(struct phy_device * phydev)907  void phy_start_machine(struct phy_device *phydev)
908  {
909  	phy_trigger_machine(phydev);
910  }
911  EXPORT_SYMBOL_GPL(phy_start_machine);
912  
913  /**
914   * phy_stop_machine - stop the PHY state machine tracking
915   * @phydev: target phy_device struct
916   *
917   * Description: Stops the state machine delayed workqueue, sets the
918   *   state to UP (unless it wasn't up yet). This function must be
919   *   called BEFORE phy_detach.
920   */
phy_stop_machine(struct phy_device * phydev)921  void phy_stop_machine(struct phy_device *phydev)
922  {
923  	cancel_delayed_work_sync(&phydev->state_queue);
924  
925  	mutex_lock(&phydev->lock);
926  	if (phy_is_started(phydev))
927  		phydev->state = PHY_UP;
928  	mutex_unlock(&phydev->lock);
929  }
930  
931  /**
932   * phy_error - enter HALTED state for this PHY device
933   * @phydev: target phy_device struct
934   *
935   * Moves the PHY to the HALTED state in response to a read
936   * or write error, and tells the controller the link is down.
937   * Must not be called from interrupt context, or while the
938   * phydev->lock is held.
939   */
phy_error(struct phy_device * phydev)940  void phy_error(struct phy_device *phydev)
941  {
942  	WARN_ON(1);
943  
944  	mutex_lock(&phydev->lock);
945  	phydev->state = PHY_HALTED;
946  	mutex_unlock(&phydev->lock);
947  
948  	phy_trigger_machine(phydev);
949  }
950  EXPORT_SYMBOL(phy_error);
951  
952  /**
953   * phy_disable_interrupts - Disable the PHY interrupts from the PHY side
954   * @phydev: target phy_device struct
955   */
phy_disable_interrupts(struct phy_device * phydev)956  int phy_disable_interrupts(struct phy_device *phydev)
957  {
958  	/* Disable PHY interrupts */
959  	return phy_config_interrupt(phydev, PHY_INTERRUPT_DISABLED);
960  }
961  
962  /**
963   * phy_interrupt - PHY interrupt handler
964   * @irq: interrupt line
965   * @phy_dat: phy_device pointer
966   *
967   * Description: Handle PHY interrupt
968   */
phy_interrupt(int irq,void * phy_dat)969  static irqreturn_t phy_interrupt(int irq, void *phy_dat)
970  {
971  	struct phy_device *phydev = phy_dat;
972  	struct phy_driver *drv = phydev->drv;
973  
974  	return drv->handle_interrupt(phydev);
975  }
976  
977  /**
978   * phy_enable_interrupts - Enable the interrupts from the PHY side
979   * @phydev: target phy_device struct
980   */
phy_enable_interrupts(struct phy_device * phydev)981  static int phy_enable_interrupts(struct phy_device *phydev)
982  {
983  	return phy_config_interrupt(phydev, PHY_INTERRUPT_ENABLED);
984  }
985  
986  /**
987   * phy_request_interrupt - request and enable interrupt for a PHY device
988   * @phydev: target phy_device struct
989   *
990   * Description: Request and enable the interrupt for the given PHY.
991   *   If this fails, then we set irq to PHY_POLL.
992   *   This should only be called with a valid IRQ number.
993   */
phy_request_interrupt(struct phy_device * phydev)994  void phy_request_interrupt(struct phy_device *phydev)
995  {
996  	int err;
997  
998  	err = request_threaded_irq(phydev->irq, NULL, phy_interrupt,
999  				   IRQF_ONESHOT | IRQF_SHARED,
1000  				   phydev_name(phydev), phydev);
1001  	if (err) {
1002  		phydev_warn(phydev, "Error %d requesting IRQ %d, falling back to polling\n",
1003  			    err, phydev->irq);
1004  		phydev->irq = PHY_POLL;
1005  	} else {
1006  		if (phy_enable_interrupts(phydev)) {
1007  			phydev_warn(phydev, "Can't enable interrupt, falling back to polling\n");
1008  			phy_free_interrupt(phydev);
1009  			phydev->irq = PHY_POLL;
1010  		}
1011  	}
1012  }
1013  EXPORT_SYMBOL(phy_request_interrupt);
1014  
1015  /**
1016   * phy_free_interrupt - disable and free interrupt for a PHY device
1017   * @phydev: target phy_device struct
1018   *
1019   * Description: Disable and free the interrupt for the given PHY.
1020   *   This should only be called with a valid IRQ number.
1021   */
phy_free_interrupt(struct phy_device * phydev)1022  void phy_free_interrupt(struct phy_device *phydev)
1023  {
1024  	phy_disable_interrupts(phydev);
1025  	free_irq(phydev->irq, phydev);
1026  }
1027  EXPORT_SYMBOL(phy_free_interrupt);
1028  
1029  /**
1030   * phy_stop - Bring down the PHY link, and stop checking the status
1031   * @phydev: target phy_device struct
1032   */
phy_stop(struct phy_device * phydev)1033  void phy_stop(struct phy_device *phydev)
1034  {
1035  	struct net_device *dev = phydev->attached_dev;
1036  
1037  	if (!phy_is_started(phydev) && phydev->state != PHY_DOWN) {
1038  		WARN(1, "called from state %s\n",
1039  		     phy_state_to_str(phydev->state));
1040  		return;
1041  	}
1042  
1043  	mutex_lock(&phydev->lock);
1044  
1045  	if (phydev->state == PHY_CABLETEST) {
1046  		phy_abort_cable_test(phydev);
1047  		netif_testing_off(dev);
1048  	}
1049  
1050  	if (phydev->sfp_bus)
1051  		sfp_upstream_stop(phydev->sfp_bus);
1052  
1053  	phydev->state = PHY_HALTED;
1054  
1055  	mutex_unlock(&phydev->lock);
1056  
1057  	phy_state_machine(&phydev->state_queue.work);
1058  	phy_stop_machine(phydev);
1059  
1060  	/* Cannot call flush_scheduled_work() here as desired because
1061  	 * of rtnl_lock(), but PHY_HALTED shall guarantee irq handler
1062  	 * will not reenable interrupts.
1063  	 */
1064  }
1065  EXPORT_SYMBOL(phy_stop);
1066  
1067  /**
1068   * phy_start - start or restart a PHY device
1069   * @phydev: target phy_device struct
1070   *
1071   * Description: Indicates the attached device's readiness to
1072   *   handle PHY-related work.  Used during startup to start the
1073   *   PHY, and after a call to phy_stop() to resume operation.
1074   *   Also used to indicate the MDIO bus has cleared an error
1075   *   condition.
1076   */
phy_start(struct phy_device * phydev)1077  void phy_start(struct phy_device *phydev)
1078  {
1079  	mutex_lock(&phydev->lock);
1080  
1081  	if (phydev->state != PHY_READY && phydev->state != PHY_HALTED) {
1082  		WARN(1, "called from state %s\n",
1083  		     phy_state_to_str(phydev->state));
1084  		goto out;
1085  	}
1086  
1087  	if (phydev->sfp_bus)
1088  		sfp_upstream_start(phydev->sfp_bus);
1089  
1090  	/* if phy was suspended, bring the physical link up again */
1091  	__phy_resume(phydev);
1092  
1093  	phydev->state = PHY_UP;
1094  
1095  	phy_start_machine(phydev);
1096  out:
1097  	mutex_unlock(&phydev->lock);
1098  }
1099  EXPORT_SYMBOL(phy_start);
1100  
1101  /**
1102   * phy_state_machine - Handle the state machine
1103   * @work: work_struct that describes the work to be done
1104   */
phy_state_machine(struct work_struct * work)1105  void phy_state_machine(struct work_struct *work)
1106  {
1107  	struct delayed_work *dwork = to_delayed_work(work);
1108  	struct phy_device *phydev =
1109  			container_of(dwork, struct phy_device, state_queue);
1110  	struct net_device *dev = phydev->attached_dev;
1111  	bool needs_aneg = false, do_suspend = false;
1112  	enum phy_state old_state;
1113  	bool finished = false;
1114  	int err = 0;
1115  
1116  	mutex_lock(&phydev->lock);
1117  
1118  	old_state = phydev->state;
1119  
1120  	switch (phydev->state) {
1121  	case PHY_DOWN:
1122  	case PHY_READY:
1123  		break;
1124  	case PHY_UP:
1125  		needs_aneg = true;
1126  
1127  		break;
1128  	case PHY_NOLINK:
1129  	case PHY_RUNNING:
1130  		err = phy_check_link_status(phydev);
1131  		break;
1132  	case PHY_CABLETEST:
1133  		err = phydev->drv->cable_test_get_status(phydev, &finished);
1134  		if (err) {
1135  			phy_abort_cable_test(phydev);
1136  			netif_testing_off(dev);
1137  			needs_aneg = true;
1138  			phydev->state = PHY_UP;
1139  			break;
1140  		}
1141  
1142  		if (finished) {
1143  			ethnl_cable_test_finished(phydev);
1144  			netif_testing_off(dev);
1145  			needs_aneg = true;
1146  			phydev->state = PHY_UP;
1147  		}
1148  		break;
1149  	case PHY_HALTED:
1150  		if (phydev->link) {
1151  			phydev->link = 0;
1152  			phy_link_down(phydev);
1153  		}
1154  		do_suspend = true;
1155  		break;
1156  	}
1157  
1158  	mutex_unlock(&phydev->lock);
1159  
1160  	if (needs_aneg)
1161  		err = phy_start_aneg(phydev);
1162  	else if (do_suspend)
1163  		phy_suspend(phydev);
1164  
1165  	if (err == -ENODEV)
1166  		return;
1167  
1168  	if (err < 0)
1169  		phy_error(phydev);
1170  
1171  	if (old_state != phydev->state) {
1172  		phydev_dbg(phydev, "PHY state change %s -> %s\n",
1173  			   phy_state_to_str(old_state),
1174  			   phy_state_to_str(phydev->state));
1175  		if (phydev->drv && phydev->drv->link_change_notify)
1176  			phydev->drv->link_change_notify(phydev);
1177  	}
1178  
1179  	/* Only re-schedule a PHY state machine change if we are polling the
1180  	 * PHY, if PHY_MAC_INTERRUPT is set, then we will be moving
1181  	 * between states from phy_mac_interrupt().
1182  	 *
1183  	 * In state PHY_HALTED the PHY gets suspended, so rescheduling the
1184  	 * state machine would be pointless and possibly error prone when
1185  	 * called from phy_disconnect() synchronously.
1186  	 */
1187  	mutex_lock(&phydev->lock);
1188  	if (phy_polling_mode(phydev) && phy_is_started(phydev))
1189  		phy_queue_state_machine(phydev, PHY_STATE_TIME);
1190  	mutex_unlock(&phydev->lock);
1191  }
1192  
1193  /**
1194   * phy_mac_interrupt - MAC says the link has changed
1195   * @phydev: phy_device struct with changed link
1196   *
1197   * The MAC layer is able to indicate there has been a change in the PHY link
1198   * status. Trigger the state machine and work a work queue.
1199   */
phy_mac_interrupt(struct phy_device * phydev)1200  void phy_mac_interrupt(struct phy_device *phydev)
1201  {
1202  	/* Trigger a state machine change */
1203  	phy_trigger_machine(phydev);
1204  }
1205  EXPORT_SYMBOL(phy_mac_interrupt);
1206  
mmd_eee_adv_to_linkmode(unsigned long * advertising,u16 eee_adv)1207  static void mmd_eee_adv_to_linkmode(unsigned long *advertising, u16 eee_adv)
1208  {
1209  	linkmode_zero(advertising);
1210  
1211  	if (eee_adv & MDIO_EEE_100TX)
1212  		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
1213  				 advertising);
1214  	if (eee_adv & MDIO_EEE_1000T)
1215  		linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
1216  				 advertising);
1217  	if (eee_adv & MDIO_EEE_10GT)
1218  		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
1219  				 advertising);
1220  	if (eee_adv & MDIO_EEE_1000KX)
1221  		linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
1222  				 advertising);
1223  	if (eee_adv & MDIO_EEE_10GKX4)
1224  		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT,
1225  				 advertising);
1226  	if (eee_adv & MDIO_EEE_10GKR)
1227  		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
1228  				 advertising);
1229  }
1230  
1231  /**
1232   * phy_init_eee - init and check the EEE feature
1233   * @phydev: target phy_device struct
1234   * @clk_stop_enable: PHY may stop the clock during LPI
1235   *
1236   * Description: it checks if the Energy-Efficient Ethernet (EEE)
1237   * is supported by looking at the MMD registers 3.20 and 7.60/61
1238   * and it programs the MMD register 3.0 setting the "Clock stop enable"
1239   * bit if required.
1240   */
phy_init_eee(struct phy_device * phydev,bool clk_stop_enable)1241  int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable)
1242  {
1243  	if (!phydev->drv)
1244  		return -EIO;
1245  
1246  	/* According to 802.3az,the EEE is supported only in full duplex-mode.
1247  	 */
1248  	if (phydev->duplex == DUPLEX_FULL) {
1249  		__ETHTOOL_DECLARE_LINK_MODE_MASK(common);
1250  		__ETHTOOL_DECLARE_LINK_MODE_MASK(lp);
1251  		__ETHTOOL_DECLARE_LINK_MODE_MASK(adv);
1252  		int eee_lp, eee_cap, eee_adv;
1253  		int status;
1254  		u32 cap;
1255  
1256  		/* Read phy status to properly get the right settings */
1257  		status = phy_read_status(phydev);
1258  		if (status)
1259  			return status;
1260  
1261  		/* First check if the EEE ability is supported */
1262  		eee_cap = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE);
1263  		if (eee_cap <= 0)
1264  			goto eee_exit_err;
1265  
1266  		cap = mmd_eee_cap_to_ethtool_sup_t(eee_cap);
1267  		if (!cap)
1268  			goto eee_exit_err;
1269  
1270  		/* Check which link settings negotiated and verify it in
1271  		 * the EEE advertising registers.
1272  		 */
1273  		eee_lp = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE);
1274  		if (eee_lp <= 0)
1275  			goto eee_exit_err;
1276  
1277  		eee_adv = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV);
1278  		if (eee_adv <= 0)
1279  			goto eee_exit_err;
1280  
1281  		mmd_eee_adv_to_linkmode(adv, eee_adv);
1282  		mmd_eee_adv_to_linkmode(lp, eee_lp);
1283  		linkmode_and(common, adv, lp);
1284  
1285  		if (!phy_check_valid(phydev->speed, phydev->duplex, common))
1286  			goto eee_exit_err;
1287  
1288  		if (clk_stop_enable)
1289  			/* Configure the PHY to stop receiving xMII
1290  			 * clock while it is signaling LPI.
1291  			 */
1292  			phy_set_bits_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1,
1293  					 MDIO_PCS_CTRL1_CLKSTOP_EN);
1294  
1295  		return 0; /* EEE supported */
1296  	}
1297  eee_exit_err:
1298  	return -EPROTONOSUPPORT;
1299  }
1300  EXPORT_SYMBOL(phy_init_eee);
1301  
1302  /**
1303   * phy_get_eee_err - report the EEE wake error count
1304   * @phydev: target phy_device struct
1305   *
1306   * Description: it is to report the number of time where the PHY
1307   * failed to complete its normal wake sequence.
1308   */
phy_get_eee_err(struct phy_device * phydev)1309  int phy_get_eee_err(struct phy_device *phydev)
1310  {
1311  	if (!phydev->drv)
1312  		return -EIO;
1313  
1314  	return phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_WK_ERR);
1315  }
1316  EXPORT_SYMBOL(phy_get_eee_err);
1317  
1318  /**
1319   * phy_ethtool_get_eee - get EEE supported and status
1320   * @phydev: target phy_device struct
1321   * @data: ethtool_eee data
1322   *
1323   * Description: it reportes the Supported/Advertisement/LP Advertisement
1324   * capabilities.
1325   */
phy_ethtool_get_eee(struct phy_device * phydev,struct ethtool_eee * data)1326  int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data)
1327  {
1328  	int val;
1329  
1330  	if (!phydev->drv)
1331  		return -EIO;
1332  
1333  	/* Get Supported EEE */
1334  	val = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE);
1335  	if (val < 0)
1336  		return val;
1337  	data->supported = mmd_eee_cap_to_ethtool_sup_t(val);
1338  
1339  	/* Get advertisement EEE */
1340  	val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV);
1341  	if (val < 0)
1342  		return val;
1343  	data->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
1344  	data->eee_enabled = !!data->advertised;
1345  
1346  	/* Get LP advertisement EEE */
1347  	val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE);
1348  	if (val < 0)
1349  		return val;
1350  	data->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
1351  
1352  	data->eee_active = !!(data->advertised & data->lp_advertised);
1353  
1354  	return 0;
1355  }
1356  EXPORT_SYMBOL(phy_ethtool_get_eee);
1357  
1358  /**
1359   * phy_ethtool_set_eee - set EEE supported and status
1360   * @phydev: target phy_device struct
1361   * @data: ethtool_eee data
1362   *
1363   * Description: it is to program the Advertisement EEE register.
1364   */
phy_ethtool_set_eee(struct phy_device * phydev,struct ethtool_eee * data)1365  int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data)
1366  {
1367  	int cap, old_adv, adv = 0, ret;
1368  
1369  	if (!phydev->drv)
1370  		return -EIO;
1371  
1372  	/* Get Supported EEE */
1373  	cap = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE);
1374  	if (cap < 0)
1375  		return cap;
1376  
1377  	old_adv = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV);
1378  	if (old_adv < 0)
1379  		return old_adv;
1380  
1381  	if (data->eee_enabled) {
1382  		adv = !data->advertised ? cap :
1383  		      ethtool_adv_to_mmd_eee_adv_t(data->advertised) & cap;
1384  		/* Mask prohibited EEE modes */
1385  		adv &= ~phydev->eee_broken_modes;
1386  	}
1387  
1388  	if (old_adv != adv) {
1389  		ret = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, adv);
1390  		if (ret < 0)
1391  			return ret;
1392  
1393  		/* Restart autonegotiation so the new modes get sent to the
1394  		 * link partner.
1395  		 */
1396  		if (phydev->autoneg == AUTONEG_ENABLE) {
1397  			ret = phy_restart_aneg(phydev);
1398  			if (ret < 0)
1399  				return ret;
1400  		}
1401  	}
1402  
1403  	return 0;
1404  }
1405  EXPORT_SYMBOL(phy_ethtool_set_eee);
1406  
1407  /**
1408   * phy_ethtool_set_wol - Configure Wake On LAN
1409   *
1410   * @phydev: target phy_device struct
1411   * @wol: Configuration requested
1412   */
phy_ethtool_set_wol(struct phy_device * phydev,struct ethtool_wolinfo * wol)1413  int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol)
1414  {
1415  	if (phydev->drv && phydev->drv->set_wol)
1416  		return phydev->drv->set_wol(phydev, wol);
1417  
1418  	return -EOPNOTSUPP;
1419  }
1420  EXPORT_SYMBOL(phy_ethtool_set_wol);
1421  
1422  /**
1423   * phy_ethtool_get_wol - Get the current Wake On LAN configuration
1424   *
1425   * @phydev: target phy_device struct
1426   * @wol: Store the current configuration here
1427   */
phy_ethtool_get_wol(struct phy_device * phydev,struct ethtool_wolinfo * wol)1428  void phy_ethtool_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol)
1429  {
1430  	if (phydev->drv && phydev->drv->get_wol)
1431  		phydev->drv->get_wol(phydev, wol);
1432  }
1433  EXPORT_SYMBOL(phy_ethtool_get_wol);
1434  
phy_ethtool_get_link_ksettings(struct net_device * ndev,struct ethtool_link_ksettings * cmd)1435  int phy_ethtool_get_link_ksettings(struct net_device *ndev,
1436  				   struct ethtool_link_ksettings *cmd)
1437  {
1438  	struct phy_device *phydev = ndev->phydev;
1439  
1440  	if (!phydev)
1441  		return -ENODEV;
1442  
1443  	phy_ethtool_ksettings_get(phydev, cmd);
1444  
1445  	return 0;
1446  }
1447  EXPORT_SYMBOL(phy_ethtool_get_link_ksettings);
1448  
phy_ethtool_set_link_ksettings(struct net_device * ndev,const struct ethtool_link_ksettings * cmd)1449  int phy_ethtool_set_link_ksettings(struct net_device *ndev,
1450  				   const struct ethtool_link_ksettings *cmd)
1451  {
1452  	struct phy_device *phydev = ndev->phydev;
1453  
1454  	if (!phydev)
1455  		return -ENODEV;
1456  
1457  	return phy_ethtool_ksettings_set(phydev, cmd);
1458  }
1459  EXPORT_SYMBOL(phy_ethtool_set_link_ksettings);
1460  
1461  /**
1462   * phy_ethtool_nway_reset - Restart auto negotiation
1463   * @ndev: Network device to restart autoneg for
1464   */
phy_ethtool_nway_reset(struct net_device * ndev)1465  int phy_ethtool_nway_reset(struct net_device *ndev)
1466  {
1467  	struct phy_device *phydev = ndev->phydev;
1468  
1469  	if (!phydev)
1470  		return -ENODEV;
1471  
1472  	if (!phydev->drv)
1473  		return -EIO;
1474  
1475  	return phy_restart_aneg(phydev);
1476  }
1477  EXPORT_SYMBOL(phy_ethtool_nway_reset);
1478