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