Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[linux-drm-fsl-dcu.git] / drivers / net / phy / phy.c
1 /*
2  * drivers/net/phy/phy.c
3  *
4  * Framework for configuring and reading PHY devices
5  * Based on code in sungem_phy.c and gianfar_phy.c
6  *
7  * Author: Andy Fleming
8  *
9  * Copyright (c) 2004 Freescale Semiconductor, Inc.
10  * Copyright (c) 2006, 2007  Maciej W. Rozycki
11  *
12  * This program is free software; you can redistribute  it and/or modify it
13  * under  the terms of  the GNU General  Public License as published by the
14  * Free Software Foundation;  either version 2 of the  License, or (at your
15  * option) any later version.
16  *
17  */
18
19 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
20
21 #include <linux/kernel.h>
22 #include <linux/string.h>
23 #include <linux/errno.h>
24 #include <linux/unistd.h>
25 #include <linux/interrupt.h>
26 #include <linux/init.h>
27 #include <linux/delay.h>
28 #include <linux/netdevice.h>
29 #include <linux/etherdevice.h>
30 #include <linux/skbuff.h>
31 #include <linux/mm.h>
32 #include <linux/module.h>
33 #include <linux/mii.h>
34 #include <linux/ethtool.h>
35 #include <linux/phy.h>
36 #include <linux/timer.h>
37 #include <linux/workqueue.h>
38 #include <linux/mdio.h>
39
40 #include <linux/atomic.h>
41 #include <asm/io.h>
42 #include <asm/irq.h>
43 #include <asm/uaccess.h>
44
45 /**
46  * phy_print_status - Convenience function to print out the current phy status
47  * @phydev: the phy_device struct
48  */
49 void phy_print_status(struct phy_device *phydev)
50 {
51         if (phydev->link)
52                 pr_info("%s - Link is Up - %d/%s\n",
53                         dev_name(&phydev->dev),
54                         phydev->speed,
55                         DUPLEX_FULL == phydev->duplex ? "Full" : "Half");
56         else
57                 pr_info("%s - Link is Down\n", dev_name(&phydev->dev));
58 }
59 EXPORT_SYMBOL(phy_print_status);
60
61 /**
62  * phy_clear_interrupt - Ack the phy device's interrupt
63  * @phydev: the phy_device struct
64  *
65  * If the @phydev driver has an ack_interrupt function, call it to
66  * ack and clear the phy device's interrupt.
67  *
68  * Returns 0 on success on < 0 on error.
69  */
70 static int phy_clear_interrupt(struct phy_device *phydev)
71 {
72         int err = 0;
73
74         if (phydev->drv->ack_interrupt)
75                 err = phydev->drv->ack_interrupt(phydev);
76
77         return err;
78 }
79
80 /**
81  * phy_config_interrupt - configure the PHY device for the requested interrupts
82  * @phydev: the phy_device struct
83  * @interrupts: interrupt flags to configure for this @phydev
84  *
85  * Returns 0 on success on < 0 on error.
86  */
87 static int phy_config_interrupt(struct phy_device *phydev, u32 interrupts)
88 {
89         int err = 0;
90
91         phydev->interrupts = interrupts;
92         if (phydev->drv->config_intr)
93                 err = phydev->drv->config_intr(phydev);
94
95         return err;
96 }
97
98
99 /**
100  * phy_aneg_done - return auto-negotiation status
101  * @phydev: target phy_device struct
102  *
103  * Description: Reads the status register and returns 0 either if
104  *   auto-negotiation is incomplete, or if there was an error.
105  *   Returns BMSR_ANEGCOMPLETE if auto-negotiation is done.
106  */
107 static inline int phy_aneg_done(struct phy_device *phydev)
108 {
109         int retval;
110
111         retval = phy_read(phydev, MII_BMSR);
112
113         return (retval < 0) ? retval : (retval & BMSR_ANEGCOMPLETE);
114 }
115
116 /* A structure for mapping a particular speed and duplex
117  * combination to a particular SUPPORTED and ADVERTISED value */
118 struct phy_setting {
119         int speed;
120         int duplex;
121         u32 setting;
122 };
123
124 /* A mapping of all SUPPORTED settings to speed/duplex */
125 static const struct phy_setting settings[] = {
126         {
127                 .speed = 10000,
128                 .duplex = DUPLEX_FULL,
129                 .setting = SUPPORTED_10000baseT_Full,
130         },
131         {
132                 .speed = SPEED_1000,
133                 .duplex = DUPLEX_FULL,
134                 .setting = SUPPORTED_1000baseT_Full,
135         },
136         {
137                 .speed = SPEED_1000,
138                 .duplex = DUPLEX_HALF,
139                 .setting = SUPPORTED_1000baseT_Half,
140         },
141         {
142                 .speed = SPEED_100,
143                 .duplex = DUPLEX_FULL,
144                 .setting = SUPPORTED_100baseT_Full,
145         },
146         {
147                 .speed = SPEED_100,
148                 .duplex = DUPLEX_HALF,
149                 .setting = SUPPORTED_100baseT_Half,
150         },
151         {
152                 .speed = SPEED_10,
153                 .duplex = DUPLEX_FULL,
154                 .setting = SUPPORTED_10baseT_Full,
155         },
156         {
157                 .speed = SPEED_10,
158                 .duplex = DUPLEX_HALF,
159                 .setting = SUPPORTED_10baseT_Half,
160         },
161 };
162
163 #define MAX_NUM_SETTINGS ARRAY_SIZE(settings)
164
165 /**
166  * phy_find_setting - find a PHY settings array entry that matches speed & duplex
167  * @speed: speed to match
168  * @duplex: duplex to match
169  *
170  * Description: Searches the settings array for the setting which
171  *   matches the desired speed and duplex, and returns the index
172  *   of that setting.  Returns the index of the last setting if
173  *   none of the others match.
174  */
175 static inline int phy_find_setting(int speed, int duplex)
176 {
177         int idx = 0;
178
179         while (idx < ARRAY_SIZE(settings) &&
180                         (settings[idx].speed != speed ||
181                         settings[idx].duplex != duplex))
182                 idx++;
183
184         return idx < MAX_NUM_SETTINGS ? idx : MAX_NUM_SETTINGS - 1;
185 }
186
187 /**
188  * phy_find_valid - find a PHY setting that matches the requested features mask
189  * @idx: The first index in settings[] to search
190  * @features: A mask of the valid settings
191  *
192  * Description: Returns the index of the first valid setting less
193  *   than or equal to the one pointed to by idx, as determined by
194  *   the mask in features.  Returns the index of the last setting
195  *   if nothing else matches.
196  */
197 static inline int phy_find_valid(int idx, u32 features)
198 {
199         while (idx < MAX_NUM_SETTINGS && !(settings[idx].setting & features))
200                 idx++;
201
202         return idx < MAX_NUM_SETTINGS ? idx : MAX_NUM_SETTINGS - 1;
203 }
204
205 /**
206  * phy_sanitize_settings - make sure the PHY is set to supported speed and duplex
207  * @phydev: the target phy_device struct
208  *
209  * Description: Make sure the PHY is set to supported speeds and
210  *   duplexes.  Drop down by one in this order:  1000/FULL,
211  *   1000/HALF, 100/FULL, 100/HALF, 10/FULL, 10/HALF.
212  */
213 static void phy_sanitize_settings(struct phy_device *phydev)
214 {
215         u32 features = phydev->supported;
216         int idx;
217
218         /* Sanitize settings based on PHY capabilities */
219         if ((features & SUPPORTED_Autoneg) == 0)
220                 phydev->autoneg = AUTONEG_DISABLE;
221
222         idx = phy_find_valid(phy_find_setting(phydev->speed, phydev->duplex),
223                         features);
224
225         phydev->speed = settings[idx].speed;
226         phydev->duplex = settings[idx].duplex;
227 }
228
229 /**
230  * phy_ethtool_sset - generic ethtool sset function, handles all the details
231  * @phydev: target phy_device struct
232  * @cmd: ethtool_cmd
233  *
234  * A few notes about parameter checking:
235  * - We don't set port or transceiver, so we don't care what they
236  *   were set to.
237  * - phy_start_aneg() will make sure forced settings are sane, and
238  *   choose the next best ones from the ones selected, so we don't
239  *   care if ethtool tries to give us bad values.
240  */
241 int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd)
242 {
243         u32 speed = ethtool_cmd_speed(cmd);
244
245         if (cmd->phy_address != phydev->addr)
246                 return -EINVAL;
247
248         /* We make sure that we don't pass unsupported
249          * values in to the PHY */
250         cmd->advertising &= phydev->supported;
251
252         /* Verify the settings we care about. */
253         if (cmd->autoneg != AUTONEG_ENABLE && cmd->autoneg != AUTONEG_DISABLE)
254                 return -EINVAL;
255
256         if (cmd->autoneg == AUTONEG_ENABLE && cmd->advertising == 0)
257                 return -EINVAL;
258
259         if (cmd->autoneg == AUTONEG_DISABLE &&
260             ((speed != SPEED_1000 &&
261               speed != SPEED_100 &&
262               speed != SPEED_10) ||
263              (cmd->duplex != DUPLEX_HALF &&
264               cmd->duplex != DUPLEX_FULL)))
265                 return -EINVAL;
266
267         phydev->autoneg = cmd->autoneg;
268
269         phydev->speed = speed;
270
271         phydev->advertising = cmd->advertising;
272
273         if (AUTONEG_ENABLE == cmd->autoneg)
274                 phydev->advertising |= ADVERTISED_Autoneg;
275         else
276                 phydev->advertising &= ~ADVERTISED_Autoneg;
277
278         phydev->duplex = cmd->duplex;
279
280         /* Restart the PHY */
281         phy_start_aneg(phydev);
282
283         return 0;
284 }
285 EXPORT_SYMBOL(phy_ethtool_sset);
286
287 int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd)
288 {
289         cmd->supported = phydev->supported;
290
291         cmd->advertising = phydev->advertising;
292
293         ethtool_cmd_speed_set(cmd, phydev->speed);
294         cmd->duplex = phydev->duplex;
295         cmd->port = PORT_MII;
296         cmd->phy_address = phydev->addr;
297         cmd->transceiver = phy_is_internal(phydev) ?
298                 XCVR_INTERNAL : XCVR_EXTERNAL;
299         cmd->autoneg = phydev->autoneg;
300
301         return 0;
302 }
303 EXPORT_SYMBOL(phy_ethtool_gset);
304
305 /**
306  * phy_mii_ioctl - generic PHY MII ioctl interface
307  * @phydev: the phy_device struct
308  * @ifr: &struct ifreq for socket ioctl's
309  * @cmd: ioctl cmd to execute
310  *
311  * Note that this function is currently incompatible with the
312  * PHYCONTROL layer.  It changes registers without regard to
313  * current state.  Use at own risk.
314  */
315 int phy_mii_ioctl(struct phy_device *phydev,
316                 struct ifreq *ifr, int cmd)
317 {
318         struct mii_ioctl_data *mii_data = if_mii(ifr);
319         u16 val = mii_data->val_in;
320
321         switch (cmd) {
322         case SIOCGMIIPHY:
323                 mii_data->phy_id = phydev->addr;
324                 /* fall through */
325
326         case SIOCGMIIREG:
327                 mii_data->val_out = mdiobus_read(phydev->bus, mii_data->phy_id,
328                                                  mii_data->reg_num);
329                 break;
330
331         case SIOCSMIIREG:
332                 if (mii_data->phy_id == phydev->addr) {
333                         switch(mii_data->reg_num) {
334                         case MII_BMCR:
335                                 if ((val & (BMCR_RESET|BMCR_ANENABLE)) == 0)
336                                         phydev->autoneg = AUTONEG_DISABLE;
337                                 else
338                                         phydev->autoneg = AUTONEG_ENABLE;
339                                 if ((!phydev->autoneg) && (val & BMCR_FULLDPLX))
340                                         phydev->duplex = DUPLEX_FULL;
341                                 else
342                                         phydev->duplex = DUPLEX_HALF;
343                                 if ((!phydev->autoneg) &&
344                                                 (val & BMCR_SPEED1000))
345                                         phydev->speed = SPEED_1000;
346                                 else if ((!phydev->autoneg) &&
347                                                 (val & BMCR_SPEED100))
348                                         phydev->speed = SPEED_100;
349                                 break;
350                         case MII_ADVERTISE:
351                                 phydev->advertising = val;
352                                 break;
353                         default:
354                                 /* do nothing */
355                                 break;
356                         }
357                 }
358
359                 mdiobus_write(phydev->bus, mii_data->phy_id,
360                               mii_data->reg_num, val);
361
362                 if (mii_data->reg_num == MII_BMCR &&
363                     val & BMCR_RESET &&
364                     phydev->drv->config_init) {
365                         phy_scan_fixups(phydev);
366                         phydev->drv->config_init(phydev);
367                 }
368                 break;
369
370         case SIOCSHWTSTAMP:
371                 if (phydev->drv->hwtstamp)
372                         return phydev->drv->hwtstamp(phydev, ifr);
373                 /* fall through */
374
375         default:
376                 return -EOPNOTSUPP;
377         }
378
379         return 0;
380 }
381 EXPORT_SYMBOL(phy_mii_ioctl);
382
383 /**
384  * phy_start_aneg - start auto-negotiation for this PHY device
385  * @phydev: the phy_device struct
386  *
387  * Description: Sanitizes the settings (if we're not autonegotiating
388  *   them), and then calls the driver's config_aneg function.
389  *   If the PHYCONTROL Layer is operating, we change the state to
390  *   reflect the beginning of Auto-negotiation or forcing.
391  */
392 int phy_start_aneg(struct phy_device *phydev)
393 {
394         int err;
395
396         mutex_lock(&phydev->lock);
397
398         if (AUTONEG_DISABLE == phydev->autoneg)
399                 phy_sanitize_settings(phydev);
400
401         err = phydev->drv->config_aneg(phydev);
402
403         if (err < 0)
404                 goto out_unlock;
405
406         if (phydev->state != PHY_HALTED) {
407                 if (AUTONEG_ENABLE == phydev->autoneg) {
408                         phydev->state = PHY_AN;
409                         phydev->link_timeout = PHY_AN_TIMEOUT;
410                 } else {
411                         phydev->state = PHY_FORCING;
412                         phydev->link_timeout = PHY_FORCE_TIMEOUT;
413                 }
414         }
415
416 out_unlock:
417         mutex_unlock(&phydev->lock);
418         return err;
419 }
420 EXPORT_SYMBOL(phy_start_aneg);
421
422
423 /**
424  * phy_start_machine - start PHY state machine tracking
425  * @phydev: the phy_device struct
426  * @handler: callback function for state change notifications
427  *
428  * Description: The PHY infrastructure can run a state machine
429  *   which tracks whether the PHY is starting up, negotiating,
430  *   etc.  This function starts the timer which tracks the state
431  *   of the PHY.  If you want to be notified when the state changes,
432  *   pass in the callback @handler, otherwise, pass NULL.  If you
433  *   want to maintain your own state machine, do not call this
434  *   function.
435  */
436 void phy_start_machine(struct phy_device *phydev,
437                 void (*handler)(struct net_device *))
438 {
439         phydev->adjust_state = handler;
440
441         queue_delayed_work(system_power_efficient_wq, &phydev->state_queue, HZ);
442 }
443
444 /**
445  * phy_stop_machine - stop the PHY state machine tracking
446  * @phydev: target phy_device struct
447  *
448  * Description: Stops the state machine timer, sets the state to UP
449  *   (unless it wasn't up yet). This function must be called BEFORE
450  *   phy_detach.
451  */
452 void phy_stop_machine(struct phy_device *phydev)
453 {
454         cancel_delayed_work_sync(&phydev->state_queue);
455
456         mutex_lock(&phydev->lock);
457         if (phydev->state > PHY_UP)
458                 phydev->state = PHY_UP;
459         mutex_unlock(&phydev->lock);
460
461         phydev->adjust_state = NULL;
462 }
463
464 /**
465  * phy_error - enter HALTED state for this PHY device
466  * @phydev: target phy_device struct
467  *
468  * Moves the PHY to the HALTED state in response to a read
469  * or write error, and tells the controller the link is down.
470  * Must not be called from interrupt context, or while the
471  * phydev->lock is held.
472  */
473 static void phy_error(struct phy_device *phydev)
474 {
475         mutex_lock(&phydev->lock);
476         phydev->state = PHY_HALTED;
477         mutex_unlock(&phydev->lock);
478 }
479
480 /**
481  * phy_interrupt - PHY interrupt handler
482  * @irq: interrupt line
483  * @phy_dat: phy_device pointer
484  *
485  * Description: When a PHY interrupt occurs, the handler disables
486  * interrupts, and schedules a work task to clear the interrupt.
487  */
488 static irqreturn_t phy_interrupt(int irq, void *phy_dat)
489 {
490         struct phy_device *phydev = phy_dat;
491
492         if (PHY_HALTED == phydev->state)
493                 return IRQ_NONE;                /* It can't be ours.  */
494
495         /* The MDIO bus is not allowed to be written in interrupt
496          * context, so we need to disable the irq here.  A work
497          * queue will write the PHY to disable and clear the
498          * interrupt, and then reenable the irq line. */
499         disable_irq_nosync(irq);
500         atomic_inc(&phydev->irq_disable);
501
502         queue_work(system_power_efficient_wq, &phydev->phy_queue);
503
504         return IRQ_HANDLED;
505 }
506
507 /**
508  * phy_enable_interrupts - Enable the interrupts from the PHY side
509  * @phydev: target phy_device struct
510  */
511 static int phy_enable_interrupts(struct phy_device *phydev)
512 {
513         int err;
514
515         err = phy_clear_interrupt(phydev);
516
517         if (err < 0)
518                 return err;
519
520         err = phy_config_interrupt(phydev, PHY_INTERRUPT_ENABLED);
521
522         return err;
523 }
524
525 /**
526  * phy_disable_interrupts - Disable the PHY interrupts from the PHY side
527  * @phydev: target phy_device struct
528  */
529 static int phy_disable_interrupts(struct phy_device *phydev)
530 {
531         int err;
532
533         /* Disable PHY interrupts */
534         err = phy_config_interrupt(phydev, PHY_INTERRUPT_DISABLED);
535
536         if (err)
537                 goto phy_err;
538
539         /* Clear the interrupt */
540         err = phy_clear_interrupt(phydev);
541
542         if (err)
543                 goto phy_err;
544
545         return 0;
546
547 phy_err:
548         phy_error(phydev);
549
550         return err;
551 }
552
553 /**
554  * phy_start_interrupts - request and enable interrupts for a PHY device
555  * @phydev: target phy_device struct
556  *
557  * Description: Request the interrupt for the given PHY.
558  *   If this fails, then we set irq to PHY_POLL.
559  *   Otherwise, we enable the interrupts in the PHY.
560  *   This should only be called with a valid IRQ number.
561  *   Returns 0 on success or < 0 on error.
562  */
563 int phy_start_interrupts(struct phy_device *phydev)
564 {
565         int err = 0;
566
567         atomic_set(&phydev->irq_disable, 0);
568         if (request_irq(phydev->irq, phy_interrupt, 0, "phy_interrupt",
569                         phydev) < 0) {
570                 pr_warn("%s: Can't get IRQ %d (PHY)\n",
571                         phydev->bus->name, phydev->irq);
572                 phydev->irq = PHY_POLL;
573                 return 0;
574         }
575
576         err = phy_enable_interrupts(phydev);
577
578         return err;
579 }
580 EXPORT_SYMBOL(phy_start_interrupts);
581
582 /**
583  * phy_stop_interrupts - disable interrupts from a PHY device
584  * @phydev: target phy_device struct
585  */
586 int phy_stop_interrupts(struct phy_device *phydev)
587 {
588         int err;
589
590         err = phy_disable_interrupts(phydev);
591
592         if (err)
593                 phy_error(phydev);
594
595         free_irq(phydev->irq, phydev);
596
597         /*
598          * Cannot call flush_scheduled_work() here as desired because
599          * of rtnl_lock(), but we do not really care about what would
600          * be done, except from enable_irq(), so cancel any work
601          * possibly pending and take care of the matter below.
602          */
603         cancel_work_sync(&phydev->phy_queue);
604         /*
605          * If work indeed has been cancelled, disable_irq() will have
606          * been left unbalanced from phy_interrupt() and enable_irq()
607          * has to be called so that other devices on the line work.
608          */
609         while (atomic_dec_return(&phydev->irq_disable) >= 0)
610                 enable_irq(phydev->irq);
611
612         return err;
613 }
614 EXPORT_SYMBOL(phy_stop_interrupts);
615
616
617 /**
618  * phy_change - Scheduled by the phy_interrupt/timer to handle PHY changes
619  * @work: work_struct that describes the work to be done
620  */
621 void phy_change(struct work_struct *work)
622 {
623         int err;
624         struct phy_device *phydev =
625                 container_of(work, struct phy_device, phy_queue);
626
627         if (phydev->drv->did_interrupt &&
628             !phydev->drv->did_interrupt(phydev))
629                 goto ignore;
630
631         err = phy_disable_interrupts(phydev);
632
633         if (err)
634                 goto phy_err;
635
636         mutex_lock(&phydev->lock);
637         if ((PHY_RUNNING == phydev->state) || (PHY_NOLINK == phydev->state))
638                 phydev->state = PHY_CHANGELINK;
639         mutex_unlock(&phydev->lock);
640
641         atomic_dec(&phydev->irq_disable);
642         enable_irq(phydev->irq);
643
644         /* Reenable interrupts */
645         if (PHY_HALTED != phydev->state)
646                 err = phy_config_interrupt(phydev, PHY_INTERRUPT_ENABLED);
647
648         if (err)
649                 goto irq_enable_err;
650
651         /* reschedule state queue work to run as soon as possible */
652         cancel_delayed_work_sync(&phydev->state_queue);
653         queue_delayed_work(system_power_efficient_wq, &phydev->state_queue, 0);
654
655         return;
656
657 ignore:
658         atomic_dec(&phydev->irq_disable);
659         enable_irq(phydev->irq);
660         return;
661
662 irq_enable_err:
663         disable_irq(phydev->irq);
664         atomic_inc(&phydev->irq_disable);
665 phy_err:
666         phy_error(phydev);
667 }
668
669 /**
670  * phy_stop - Bring down the PHY link, and stop checking the status
671  * @phydev: target phy_device struct
672  */
673 void phy_stop(struct phy_device *phydev)
674 {
675         mutex_lock(&phydev->lock);
676
677         if (PHY_HALTED == phydev->state)
678                 goto out_unlock;
679
680         if (phy_interrupt_is_valid(phydev)) {
681                 /* Disable PHY Interrupts */
682                 phy_config_interrupt(phydev, PHY_INTERRUPT_DISABLED);
683
684                 /* Clear any pending interrupts */
685                 phy_clear_interrupt(phydev);
686         }
687
688         phydev->state = PHY_HALTED;
689
690 out_unlock:
691         mutex_unlock(&phydev->lock);
692
693         /*
694          * Cannot call flush_scheduled_work() here as desired because
695          * of rtnl_lock(), but PHY_HALTED shall guarantee phy_change()
696          * will not reenable interrupts.
697          */
698 }
699
700
701 /**
702  * phy_start - start or restart a PHY device
703  * @phydev: target phy_device struct
704  *
705  * Description: Indicates the attached device's readiness to
706  *   handle PHY-related work.  Used during startup to start the
707  *   PHY, and after a call to phy_stop() to resume operation.
708  *   Also used to indicate the MDIO bus has cleared an error
709  *   condition.
710  */
711 void phy_start(struct phy_device *phydev)
712 {
713         mutex_lock(&phydev->lock);
714
715         switch (phydev->state) {
716                 case PHY_STARTING:
717                         phydev->state = PHY_PENDING;
718                         break;
719                 case PHY_READY:
720                         phydev->state = PHY_UP;
721                         break;
722                 case PHY_HALTED:
723                         phydev->state = PHY_RESUMING;
724                 default:
725                         break;
726         }
727         mutex_unlock(&phydev->lock);
728 }
729 EXPORT_SYMBOL(phy_stop);
730 EXPORT_SYMBOL(phy_start);
731
732 /**
733  * phy_state_machine - Handle the state machine
734  * @work: work_struct that describes the work to be done
735  */
736 void phy_state_machine(struct work_struct *work)
737 {
738         struct delayed_work *dwork = to_delayed_work(work);
739         struct phy_device *phydev =
740                         container_of(dwork, struct phy_device, state_queue);
741         int needs_aneg = 0;
742         int err = 0;
743
744         mutex_lock(&phydev->lock);
745
746         if (phydev->adjust_state)
747                 phydev->adjust_state(phydev->attached_dev);
748
749         switch(phydev->state) {
750                 case PHY_DOWN:
751                 case PHY_STARTING:
752                 case PHY_READY:
753                 case PHY_PENDING:
754                         break;
755                 case PHY_UP:
756                         needs_aneg = 1;
757
758                         phydev->link_timeout = PHY_AN_TIMEOUT;
759
760                         break;
761                 case PHY_AN:
762                         err = phy_read_status(phydev);
763
764                         if (err < 0)
765                                 break;
766
767                         /* If the link is down, give up on
768                          * negotiation for now */
769                         if (!phydev->link) {
770                                 phydev->state = PHY_NOLINK;
771                                 netif_carrier_off(phydev->attached_dev);
772                                 phydev->adjust_link(phydev->attached_dev);
773                                 break;
774                         }
775
776                         /* Check if negotiation is done.  Break
777                          * if there's an error */
778                         err = phy_aneg_done(phydev);
779                         if (err < 0)
780                                 break;
781
782                         /* If AN is done, we're running */
783                         if (err > 0) {
784                                 phydev->state = PHY_RUNNING;
785                                 netif_carrier_on(phydev->attached_dev);
786                                 phydev->adjust_link(phydev->attached_dev);
787
788                         } else if (0 == phydev->link_timeout--) {
789                                 needs_aneg = 1;
790                                 /* If we have the magic_aneg bit,
791                                  * we try again */
792                                 if (phydev->drv->flags & PHY_HAS_MAGICANEG)
793                                         break;
794                         }
795                         break;
796                 case PHY_NOLINK:
797                         err = phy_read_status(phydev);
798
799                         if (err)
800                                 break;
801
802                         if (phydev->link) {
803                                 phydev->state = PHY_RUNNING;
804                                 netif_carrier_on(phydev->attached_dev);
805                                 phydev->adjust_link(phydev->attached_dev);
806                         }
807                         break;
808                 case PHY_FORCING:
809                         err = genphy_update_link(phydev);
810
811                         if (err)
812                                 break;
813
814                         if (phydev->link) {
815                                 phydev->state = PHY_RUNNING;
816                                 netif_carrier_on(phydev->attached_dev);
817                         } else {
818                                 if (0 == phydev->link_timeout--)
819                                         needs_aneg = 1;
820                         }
821
822                         phydev->adjust_link(phydev->attached_dev);
823                         break;
824                 case PHY_RUNNING:
825                         /* Only register a CHANGE if we are
826                          * polling or ignoring interrupts
827                          */
828                         if (!phy_interrupt_is_valid(phydev))
829                                 phydev->state = PHY_CHANGELINK;
830                         break;
831                 case PHY_CHANGELINK:
832                         err = phy_read_status(phydev);
833
834                         if (err)
835                                 break;
836
837                         if (phydev->link) {
838                                 phydev->state = PHY_RUNNING;
839                                 netif_carrier_on(phydev->attached_dev);
840                         } else {
841                                 phydev->state = PHY_NOLINK;
842                                 netif_carrier_off(phydev->attached_dev);
843                         }
844
845                         phydev->adjust_link(phydev->attached_dev);
846
847                         if (phy_interrupt_is_valid(phydev))
848                                 err = phy_config_interrupt(phydev,
849                                                 PHY_INTERRUPT_ENABLED);
850                         break;
851                 case PHY_HALTED:
852                         if (phydev->link) {
853                                 phydev->link = 0;
854                                 netif_carrier_off(phydev->attached_dev);
855                                 phydev->adjust_link(phydev->attached_dev);
856                         }
857                         break;
858                 case PHY_RESUMING:
859
860                         err = phy_clear_interrupt(phydev);
861
862                         if (err)
863                                 break;
864
865                         err = phy_config_interrupt(phydev,
866                                         PHY_INTERRUPT_ENABLED);
867
868                         if (err)
869                                 break;
870
871                         if (AUTONEG_ENABLE == phydev->autoneg) {
872                                 err = phy_aneg_done(phydev);
873                                 if (err < 0)
874                                         break;
875
876                                 /* err > 0 if AN is done.
877                                  * Otherwise, it's 0, and we're
878                                  * still waiting for AN */
879                                 if (err > 0) {
880                                         err = phy_read_status(phydev);
881                                         if (err)
882                                                 break;
883
884                                         if (phydev->link) {
885                                                 phydev->state = PHY_RUNNING;
886                                                 netif_carrier_on(phydev->attached_dev);
887                                         } else
888                                                 phydev->state = PHY_NOLINK;
889                                         phydev->adjust_link(phydev->attached_dev);
890                                 } else {
891                                         phydev->state = PHY_AN;
892                                         phydev->link_timeout = PHY_AN_TIMEOUT;
893                                 }
894                         } else {
895                                 err = phy_read_status(phydev);
896                                 if (err)
897                                         break;
898
899                                 if (phydev->link) {
900                                         phydev->state = PHY_RUNNING;
901                                         netif_carrier_on(phydev->attached_dev);
902                                 } else
903                                         phydev->state = PHY_NOLINK;
904                                 phydev->adjust_link(phydev->attached_dev);
905                         }
906                         break;
907         }
908
909         mutex_unlock(&phydev->lock);
910
911         if (needs_aneg)
912                 err = phy_start_aneg(phydev);
913
914         if (err < 0)
915                 phy_error(phydev);
916
917         queue_delayed_work(system_power_efficient_wq, &phydev->state_queue,
918                         PHY_STATE_TIME * HZ);
919 }
920
921 void phy_mac_interrupt(struct phy_device *phydev, int new_link)
922 {
923         cancel_work_sync(&phydev->phy_queue);
924         phydev->link = new_link;
925         schedule_work(&phydev->phy_queue);
926 }
927 EXPORT_SYMBOL(phy_mac_interrupt);
928
929 static inline void mmd_phy_indirect(struct mii_bus *bus, int prtad, int devad,
930                                     int addr)
931 {
932         /* Write the desired MMD Devad */
933         bus->write(bus, addr, MII_MMD_CTRL, devad);
934
935         /* Write the desired MMD register address */
936         bus->write(bus, addr, MII_MMD_DATA, prtad);
937
938         /* Select the Function : DATA with no post increment */
939         bus->write(bus, addr, MII_MMD_CTRL, (devad | MII_MMD_CTRL_NOINCR));
940 }
941
942 /**
943  * phy_read_mmd_indirect - reads data from the MMD registers
944  * @bus: the target MII bus
945  * @prtad: MMD Address
946  * @devad: MMD DEVAD
947  * @addr: PHY address on the MII bus
948  *
949  * Description: it reads data from the MMD registers (clause 22 to access to
950  * clause 45) of the specified phy address.
951  * To read these register we have:
952  * 1) Write reg 13 // DEVAD
953  * 2) Write reg 14 // MMD Address
954  * 3) Write reg 13 // MMD Data Command for MMD DEVAD
955  * 3) Read  reg 14 // Read MMD data
956  */
957 static int phy_read_mmd_indirect(struct mii_bus *bus, int prtad, int devad,
958                                  int addr)
959 {
960         u32 ret;
961
962         mmd_phy_indirect(bus, prtad, devad, addr);
963
964         /* Read the content of the MMD's selected register */
965         ret = bus->read(bus, addr, MII_MMD_DATA);
966
967         return ret;
968 }
969
970 /**
971  * phy_write_mmd_indirect - writes data to the MMD registers
972  * @bus: the target MII bus
973  * @prtad: MMD Address
974  * @devad: MMD DEVAD
975  * @addr: PHY address on the MII bus
976  * @data: data to write in the MMD register
977  *
978  * Description: Write data from the MMD registers of the specified
979  * phy address.
980  * To write these register we have:
981  * 1) Write reg 13 // DEVAD
982  * 2) Write reg 14 // MMD Address
983  * 3) Write reg 13 // MMD Data Command for MMD DEVAD
984  * 3) Write reg 14 // Write MMD data
985  */
986 static void phy_write_mmd_indirect(struct mii_bus *bus, int prtad, int devad,
987                                    int addr, u32 data)
988 {
989         mmd_phy_indirect(bus, prtad, devad, addr);
990
991         /* Write the data into MMD's selected register */
992         bus->write(bus, addr, MII_MMD_DATA, data);
993 }
994
995 /**
996  * phy_init_eee - init and check the EEE feature
997  * @phydev: target phy_device struct
998  * @clk_stop_enable: PHY may stop the clock during LPI
999  *
1000  * Description: it checks if the Energy-Efficient Ethernet (EEE)
1001  * is supported by looking at the MMD registers 3.20 and 7.60/61
1002  * and it programs the MMD register 3.0 setting the "Clock stop enable"
1003  * bit if required.
1004  */
1005 int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable)
1006 {
1007         int ret = -EPROTONOSUPPORT;
1008
1009         /* According to 802.3az,the EEE is supported only in full duplex-mode.
1010          * Also EEE feature is active when core is operating with MII, GMII
1011          * or RGMII.
1012          */
1013         if ((phydev->duplex == DUPLEX_FULL) &&
1014             ((phydev->interface == PHY_INTERFACE_MODE_MII) ||
1015             (phydev->interface == PHY_INTERFACE_MODE_GMII) ||
1016             (phydev->interface == PHY_INTERFACE_MODE_RGMII))) {
1017                 int eee_lp, eee_cap, eee_adv;
1018                 u32 lp, cap, adv;
1019                 int idx, status;
1020
1021                 /* Read phy status to properly get the right settings */
1022                 status = phy_read_status(phydev);
1023                 if (status)
1024                         return status;
1025
1026                 /* First check if the EEE ability is supported */
1027                 eee_cap = phy_read_mmd_indirect(phydev->bus, MDIO_PCS_EEE_ABLE,
1028                                                 MDIO_MMD_PCS, phydev->addr);
1029                 if (eee_cap < 0)
1030                         return eee_cap;
1031
1032                 cap = mmd_eee_cap_to_ethtool_sup_t(eee_cap);
1033                 if (!cap)
1034                         goto eee_exit;
1035
1036                 /* Check which link settings negotiated and verify it in
1037                  * the EEE advertising registers.
1038                  */
1039                 eee_lp = phy_read_mmd_indirect(phydev->bus, MDIO_AN_EEE_LPABLE,
1040                                                MDIO_MMD_AN, phydev->addr);
1041                 if (eee_lp < 0)
1042                         return eee_lp;
1043
1044                 eee_adv = phy_read_mmd_indirect(phydev->bus, MDIO_AN_EEE_ADV,
1045                                                 MDIO_MMD_AN, phydev->addr);
1046                 if (eee_adv < 0)
1047                         return eee_adv;
1048
1049                 adv = mmd_eee_adv_to_ethtool_adv_t(eee_adv);
1050                 lp = mmd_eee_adv_to_ethtool_adv_t(eee_lp);
1051                 idx = phy_find_setting(phydev->speed, phydev->duplex);
1052                 if (!(lp & adv & settings[idx].setting))
1053                         goto eee_exit;
1054
1055                 if (clk_stop_enable) {
1056                         /* Configure the PHY to stop receiving xMII
1057                          * clock while it is signaling LPI.
1058                          */
1059                         int val = phy_read_mmd_indirect(phydev->bus, MDIO_CTRL1,
1060                                                         MDIO_MMD_PCS,
1061                                                         phydev->addr);
1062                         if (val < 0)
1063                                 return val;
1064
1065                         val |= MDIO_PCS_CTRL1_CLKSTOP_EN;
1066                         phy_write_mmd_indirect(phydev->bus, MDIO_CTRL1,
1067                                                MDIO_MMD_PCS, phydev->addr, val);
1068                 }
1069
1070                 ret = 0; /* EEE supported */
1071         }
1072
1073 eee_exit:
1074         return ret;
1075 }
1076 EXPORT_SYMBOL(phy_init_eee);
1077
1078 /**
1079  * phy_get_eee_err - report the EEE wake error count
1080  * @phydev: target phy_device struct
1081  *
1082  * Description: it is to report the number of time where the PHY
1083  * failed to complete its normal wake sequence.
1084  */
1085 int phy_get_eee_err(struct phy_device *phydev)
1086 {
1087         return phy_read_mmd_indirect(phydev->bus, MDIO_PCS_EEE_WK_ERR,
1088                                      MDIO_MMD_PCS, phydev->addr);
1089
1090 }
1091 EXPORT_SYMBOL(phy_get_eee_err);
1092
1093 /**
1094  * phy_ethtool_get_eee - get EEE supported and status
1095  * @phydev: target phy_device struct
1096  * @data: ethtool_eee data
1097  *
1098  * Description: it reportes the Supported/Advertisement/LP Advertisement
1099  * capabilities.
1100  */
1101 int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data)
1102 {
1103         int val;
1104
1105         /* Get Supported EEE */
1106         val = phy_read_mmd_indirect(phydev->bus, MDIO_PCS_EEE_ABLE,
1107                                     MDIO_MMD_PCS, phydev->addr);
1108         if (val < 0)
1109                 return val;
1110         data->supported = mmd_eee_cap_to_ethtool_sup_t(val);
1111
1112         /* Get advertisement EEE */
1113         val = phy_read_mmd_indirect(phydev->bus, MDIO_AN_EEE_ADV,
1114                                     MDIO_MMD_AN, phydev->addr);
1115         if (val < 0)
1116                 return val;
1117         data->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
1118
1119         /* Get LP advertisement EEE */
1120         val = phy_read_mmd_indirect(phydev->bus, MDIO_AN_EEE_LPABLE,
1121                                     MDIO_MMD_AN, phydev->addr);
1122         if (val < 0)
1123                 return val;
1124         data->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
1125
1126         return 0;
1127 }
1128 EXPORT_SYMBOL(phy_ethtool_get_eee);
1129
1130 /**
1131  * phy_ethtool_set_eee - set EEE supported and status
1132  * @phydev: target phy_device struct
1133  * @data: ethtool_eee data
1134  *
1135  * Description: it is to program the Advertisement EEE register.
1136  */
1137 int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data)
1138 {
1139         int val;
1140
1141         val = ethtool_adv_to_mmd_eee_adv_t(data->advertised);
1142         phy_write_mmd_indirect(phydev->bus, MDIO_AN_EEE_ADV, MDIO_MMD_AN,
1143                                phydev->addr, val);
1144
1145         return 0;
1146 }
1147 EXPORT_SYMBOL(phy_ethtool_set_eee);
1148
1149 int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol)
1150 {
1151         if (phydev->drv->set_wol)
1152                 return phydev->drv->set_wol(phydev, wol);
1153
1154         return -EOPNOTSUPP;
1155 }
1156 EXPORT_SYMBOL(phy_ethtool_set_wol);
1157
1158 void phy_ethtool_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol)
1159 {
1160         if (phydev->drv->get_wol)
1161                 phydev->drv->get_wol(phydev, wol);
1162 }
1163 EXPORT_SYMBOL(phy_ethtool_get_wol);