Merge tag 'for-3.7' of git://openrisc.net/jonas/linux
[deliverable/linux.git] / drivers / net / phy / phy_device.c
1 /*
2 * drivers/net/phy/phy_device.c
3 *
4 * Framework for finding and configuring PHYs.
5 * Also contains generic PHY driver
6 *
7 * Author: Andy Fleming
8 *
9 * Copyright (c) 2004 Freescale Semiconductor, Inc.
10 *
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the
13 * Free Software Foundation; either version 2 of the License, or (at your
14 * option) any later version.
15 *
16 */
17
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19
20 #include <linux/kernel.h>
21 #include <linux/string.h>
22 #include <linux/errno.h>
23 #include <linux/unistd.h>
24 #include <linux/slab.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
37 #include <asm/io.h>
38 #include <asm/irq.h>
39 #include <asm/uaccess.h>
40
41 MODULE_DESCRIPTION("PHY library");
42 MODULE_AUTHOR("Andy Fleming");
43 MODULE_LICENSE("GPL");
44
45 void phy_device_free(struct phy_device *phydev)
46 {
47 kfree(phydev);
48 }
49 EXPORT_SYMBOL(phy_device_free);
50
51 static void phy_device_release(struct device *dev)
52 {
53 phy_device_free(to_phy_device(dev));
54 }
55
56 static struct phy_driver genphy_driver;
57 extern int mdio_bus_init(void);
58 extern void mdio_bus_exit(void);
59
60 static LIST_HEAD(phy_fixup_list);
61 static DEFINE_MUTEX(phy_fixup_lock);
62
63 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
64 u32 flags, phy_interface_t interface);
65
66 /*
67 * Creates a new phy_fixup and adds it to the list
68 * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID)
69 * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
70 * It can also be PHY_ANY_UID
71 * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
72 * comparison
73 * @run: The actual code to be run when a matching PHY is found
74 */
75 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
76 int (*run)(struct phy_device *))
77 {
78 struct phy_fixup *fixup;
79
80 fixup = kzalloc(sizeof(struct phy_fixup), GFP_KERNEL);
81 if (!fixup)
82 return -ENOMEM;
83
84 strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
85 fixup->phy_uid = phy_uid;
86 fixup->phy_uid_mask = phy_uid_mask;
87 fixup->run = run;
88
89 mutex_lock(&phy_fixup_lock);
90 list_add_tail(&fixup->list, &phy_fixup_list);
91 mutex_unlock(&phy_fixup_lock);
92
93 return 0;
94 }
95 EXPORT_SYMBOL(phy_register_fixup);
96
97 /* Registers a fixup to be run on any PHY with the UID in phy_uid */
98 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
99 int (*run)(struct phy_device *))
100 {
101 return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
102 }
103 EXPORT_SYMBOL(phy_register_fixup_for_uid);
104
105 /* Registers a fixup to be run on the PHY with id string bus_id */
106 int phy_register_fixup_for_id(const char *bus_id,
107 int (*run)(struct phy_device *))
108 {
109 return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
110 }
111 EXPORT_SYMBOL(phy_register_fixup_for_id);
112
113 /*
114 * Returns 1 if fixup matches phydev in bus_id and phy_uid.
115 * Fixups can be set to match any in one or more fields.
116 */
117 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
118 {
119 if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
120 if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
121 return 0;
122
123 if ((fixup->phy_uid & fixup->phy_uid_mask) !=
124 (phydev->phy_id & fixup->phy_uid_mask))
125 if (fixup->phy_uid != PHY_ANY_UID)
126 return 0;
127
128 return 1;
129 }
130
131 /* Runs any matching fixups for this phydev */
132 int phy_scan_fixups(struct phy_device *phydev)
133 {
134 struct phy_fixup *fixup;
135
136 mutex_lock(&phy_fixup_lock);
137 list_for_each_entry(fixup, &phy_fixup_list, list) {
138 if (phy_needs_fixup(phydev, fixup)) {
139 int err;
140
141 err = fixup->run(phydev);
142
143 if (err < 0) {
144 mutex_unlock(&phy_fixup_lock);
145 return err;
146 }
147 }
148 }
149 mutex_unlock(&phy_fixup_lock);
150
151 return 0;
152 }
153 EXPORT_SYMBOL(phy_scan_fixups);
154
155 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
156 bool is_c45, struct phy_c45_device_ids *c45_ids)
157 {
158 struct phy_device *dev;
159
160 /* We allocate the device, and initialize the
161 * default values */
162 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
163
164 if (NULL == dev)
165 return (struct phy_device*) PTR_ERR((void*)-ENOMEM);
166
167 dev->dev.release = phy_device_release;
168
169 dev->speed = 0;
170 dev->duplex = -1;
171 dev->pause = dev->asym_pause = 0;
172 dev->link = 1;
173 dev->interface = PHY_INTERFACE_MODE_GMII;
174
175 dev->autoneg = AUTONEG_ENABLE;
176
177 dev->is_c45 = is_c45;
178 dev->addr = addr;
179 dev->phy_id = phy_id;
180 if (c45_ids)
181 dev->c45_ids = *c45_ids;
182 dev->bus = bus;
183 dev->dev.parent = bus->parent;
184 dev->dev.bus = &mdio_bus_type;
185 dev->irq = bus->irq != NULL ? bus->irq[addr] : PHY_POLL;
186 dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
187
188 dev->state = PHY_DOWN;
189
190 mutex_init(&dev->lock);
191 INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
192
193 /* Request the appropriate module unconditionally; don't
194 bother trying to do so only if it isn't already loaded,
195 because that gets complicated. A hotplug event would have
196 done an unconditional modprobe anyway.
197 We don't do normal hotplug because it won't work for MDIO
198 -- because it relies on the device staying around for long
199 enough for the driver to get loaded. With MDIO, the NIC
200 driver will get bored and give up as soon as it finds that
201 there's no driver _already_ loaded. */
202 request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
203
204 return dev;
205 }
206 EXPORT_SYMBOL(phy_device_create);
207
208 /**
209 * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs.
210 * @bus: the target MII bus
211 * @addr: PHY address on the MII bus
212 * @phy_id: where to store the ID retrieved.
213 * @c45_ids: where to store the c45 ID information.
214 *
215 * If the PHY devices-in-package appears to be valid, it and the
216 * corresponding identifiers are stored in @c45_ids, zero is stored
217 * in @phy_id. Otherwise 0xffffffff is stored in @phy_id. Returns
218 * zero on success.
219 *
220 */
221 static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
222 struct phy_c45_device_ids *c45_ids) {
223 int phy_reg;
224 int i, reg_addr;
225 const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
226
227 /* Find first non-zero Devices In package. Device
228 * zero is reserved, so don't probe it.
229 */
230 for (i = 1;
231 i < num_ids && c45_ids->devices_in_package == 0;
232 i++) {
233 reg_addr = MII_ADDR_C45 | i << 16 | 6;
234 phy_reg = mdiobus_read(bus, addr, reg_addr);
235 if (phy_reg < 0)
236 return -EIO;
237 c45_ids->devices_in_package = (phy_reg & 0xffff) << 16;
238
239 reg_addr = MII_ADDR_C45 | i << 16 | 5;
240 phy_reg = mdiobus_read(bus, addr, reg_addr);
241 if (phy_reg < 0)
242 return -EIO;
243 c45_ids->devices_in_package |= (phy_reg & 0xffff);
244
245 /* If mostly Fs, there is no device there,
246 * let's get out of here.
247 */
248 if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
249 *phy_id = 0xffffffff;
250 return 0;
251 }
252 }
253
254 /* Now probe Device Identifiers for each device present. */
255 for (i = 1; i < num_ids; i++) {
256 if (!(c45_ids->devices_in_package & (1 << i)))
257 continue;
258
259 reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
260 phy_reg = mdiobus_read(bus, addr, reg_addr);
261 if (phy_reg < 0)
262 return -EIO;
263 c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
264
265 reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2;
266 phy_reg = mdiobus_read(bus, addr, reg_addr);
267 if (phy_reg < 0)
268 return -EIO;
269 c45_ids->device_ids[i] |= (phy_reg & 0xffff);
270 }
271 *phy_id = 0;
272 return 0;
273 }
274
275 /**
276 * get_phy_id - reads the specified addr for its ID.
277 * @bus: the target MII bus
278 * @addr: PHY address on the MII bus
279 * @phy_id: where to store the ID retrieved.
280 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
281 * @c45_ids: where to store the c45 ID information.
282 *
283 * Description: In the case of a 802.3-c22 PHY, reads the ID registers
284 * of the PHY at @addr on the @bus, stores it in @phy_id and returns
285 * zero on success.
286 *
287 * In the case of a 802.3-c45 PHY, get_phy_c45_ids() is invoked, and
288 * its return value is in turn returned.
289 *
290 */
291 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
292 bool is_c45, struct phy_c45_device_ids *c45_ids)
293 {
294 int phy_reg;
295
296 if (is_c45)
297 return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
298
299 /* Grab the bits from PHYIR1, and put them
300 * in the upper half */
301 phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
302
303 if (phy_reg < 0)
304 return -EIO;
305
306 *phy_id = (phy_reg & 0xffff) << 16;
307
308 /* Grab the bits from PHYIR2, and put them in the lower half */
309 phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
310
311 if (phy_reg < 0)
312 return -EIO;
313
314 *phy_id |= (phy_reg & 0xffff);
315
316 return 0;
317 }
318
319 /**
320 * get_phy_device - reads the specified PHY device and returns its @phy_device struct
321 * @bus: the target MII bus
322 * @addr: PHY address on the MII bus
323 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
324 *
325 * Description: Reads the ID registers of the PHY at @addr on the
326 * @bus, then allocates and returns the phy_device to represent it.
327 */
328 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
329 {
330 struct phy_c45_device_ids c45_ids = {0};
331 struct phy_device *dev = NULL;
332 u32 phy_id = 0;
333 int r;
334
335 r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
336 if (r)
337 return ERR_PTR(r);
338
339 /* If the phy_id is mostly Fs, there is no device there */
340 if ((phy_id & 0x1fffffff) == 0x1fffffff)
341 return NULL;
342
343 dev = phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
344
345 return dev;
346 }
347 EXPORT_SYMBOL(get_phy_device);
348
349 /**
350 * phy_device_register - Register the phy device on the MDIO bus
351 * @phydev: phy_device structure to be added to the MDIO bus
352 */
353 int phy_device_register(struct phy_device *phydev)
354 {
355 int err;
356
357 /* Don't register a phy if one is already registered at this
358 * address */
359 if (phydev->bus->phy_map[phydev->addr])
360 return -EINVAL;
361 phydev->bus->phy_map[phydev->addr] = phydev;
362
363 /* Run all of the fixups for this PHY */
364 phy_scan_fixups(phydev);
365
366 err = device_register(&phydev->dev);
367 if (err) {
368 pr_err("phy %d failed to register\n", phydev->addr);
369 goto out;
370 }
371
372 return 0;
373
374 out:
375 phydev->bus->phy_map[phydev->addr] = NULL;
376 return err;
377 }
378 EXPORT_SYMBOL(phy_device_register);
379
380 /**
381 * phy_find_first - finds the first PHY device on the bus
382 * @bus: the target MII bus
383 */
384 struct phy_device *phy_find_first(struct mii_bus *bus)
385 {
386 int addr;
387
388 for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
389 if (bus->phy_map[addr])
390 return bus->phy_map[addr];
391 }
392 return NULL;
393 }
394 EXPORT_SYMBOL(phy_find_first);
395
396 /**
397 * phy_prepare_link - prepares the PHY layer to monitor link status
398 * @phydev: target phy_device struct
399 * @handler: callback function for link status change notifications
400 *
401 * Description: Tells the PHY infrastructure to handle the
402 * gory details on monitoring link status (whether through
403 * polling or an interrupt), and to call back to the
404 * connected device driver when the link status changes.
405 * If you want to monitor your own link state, don't call
406 * this function.
407 */
408 static void phy_prepare_link(struct phy_device *phydev,
409 void (*handler)(struct net_device *))
410 {
411 phydev->adjust_link = handler;
412 }
413
414 /**
415 * phy_connect_direct - connect an ethernet device to a specific phy_device
416 * @dev: the network device to connect
417 * @phydev: the pointer to the phy device
418 * @handler: callback function for state change notifications
419 * @flags: PHY device's dev_flags
420 * @interface: PHY device's interface
421 */
422 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
423 void (*handler)(struct net_device *), u32 flags,
424 phy_interface_t interface)
425 {
426 int rc;
427
428 rc = phy_attach_direct(dev, phydev, flags, interface);
429 if (rc)
430 return rc;
431
432 phy_prepare_link(phydev, handler);
433 phy_start_machine(phydev, NULL);
434 if (phydev->irq > 0)
435 phy_start_interrupts(phydev);
436
437 return 0;
438 }
439 EXPORT_SYMBOL(phy_connect_direct);
440
441 /**
442 * phy_connect - connect an ethernet device to a PHY device
443 * @dev: the network device to connect
444 * @bus_id: the id string of the PHY device to connect
445 * @handler: callback function for state change notifications
446 * @flags: PHY device's dev_flags
447 * @interface: PHY device's interface
448 *
449 * Description: Convenience function for connecting ethernet
450 * devices to PHY devices. The default behavior is for
451 * the PHY infrastructure to handle everything, and only notify
452 * the connected driver when the link status changes. If you
453 * don't want, or can't use the provided functionality, you may
454 * choose to call only the subset of functions which provide
455 * the desired functionality.
456 */
457 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
458 void (*handler)(struct net_device *), u32 flags,
459 phy_interface_t interface)
460 {
461 struct phy_device *phydev;
462 struct device *d;
463 int rc;
464
465 /* Search the list of PHY devices on the mdio bus for the
466 * PHY with the requested name */
467 d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
468 if (!d) {
469 pr_err("PHY %s not found\n", bus_id);
470 return ERR_PTR(-ENODEV);
471 }
472 phydev = to_phy_device(d);
473
474 rc = phy_connect_direct(dev, phydev, handler, flags, interface);
475 if (rc)
476 return ERR_PTR(rc);
477
478 return phydev;
479 }
480 EXPORT_SYMBOL(phy_connect);
481
482 /**
483 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
484 * @phydev: target phy_device struct
485 */
486 void phy_disconnect(struct phy_device *phydev)
487 {
488 if (phydev->irq > 0)
489 phy_stop_interrupts(phydev);
490
491 phy_stop_machine(phydev);
492
493 phydev->adjust_link = NULL;
494
495 phy_detach(phydev);
496 }
497 EXPORT_SYMBOL(phy_disconnect);
498
499 int phy_init_hw(struct phy_device *phydev)
500 {
501 int ret;
502
503 if (!phydev->drv || !phydev->drv->config_init)
504 return 0;
505
506 ret = phy_scan_fixups(phydev);
507 if (ret < 0)
508 return ret;
509
510 return phydev->drv->config_init(phydev);
511 }
512
513 /**
514 * phy_attach_direct - attach a network device to a given PHY device pointer
515 * @dev: network device to attach
516 * @phydev: Pointer to phy_device to attach
517 * @flags: PHY device's dev_flags
518 * @interface: PHY device's interface
519 *
520 * Description: Called by drivers to attach to a particular PHY
521 * device. The phy_device is found, and properly hooked up
522 * to the phy_driver. If no driver is attached, then the
523 * genphy_driver is used. The phy_device is given a ptr to
524 * the attaching device, and given a callback for link status
525 * change. The phy_device is returned to the attaching driver.
526 */
527 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
528 u32 flags, phy_interface_t interface)
529 {
530 struct device *d = &phydev->dev;
531 int err;
532
533 /* Assume that if there is no driver, that it doesn't
534 * exist, and we should use the genphy driver. */
535 if (NULL == d->driver) {
536 if (phydev->is_c45) {
537 pr_err("No driver for phy %x\n", phydev->phy_id);
538 return -ENODEV;
539 }
540
541 d->driver = &genphy_driver.driver;
542
543 err = d->driver->probe(d);
544 if (err >= 0)
545 err = device_bind_driver(d);
546
547 if (err)
548 return err;
549 }
550
551 if (phydev->attached_dev) {
552 dev_err(&dev->dev, "PHY already attached\n");
553 return -EBUSY;
554 }
555
556 phydev->attached_dev = dev;
557 dev->phydev = phydev;
558
559 phydev->dev_flags = flags;
560
561 phydev->interface = interface;
562
563 phydev->state = PHY_READY;
564
565 /* Do initial configuration here, now that
566 * we have certain key parameters
567 * (dev_flags and interface) */
568 err = phy_init_hw(phydev);
569 if (err)
570 phy_detach(phydev);
571
572 return err;
573 }
574
575 /**
576 * phy_attach - attach a network device to a particular PHY device
577 * @dev: network device to attach
578 * @bus_id: Bus ID of PHY device to attach
579 * @flags: PHY device's dev_flags
580 * @interface: PHY device's interface
581 *
582 * Description: Same as phy_attach_direct() except that a PHY bus_id
583 * string is passed instead of a pointer to a struct phy_device.
584 */
585 struct phy_device *phy_attach(struct net_device *dev,
586 const char *bus_id, u32 flags, phy_interface_t interface)
587 {
588 struct bus_type *bus = &mdio_bus_type;
589 struct phy_device *phydev;
590 struct device *d;
591 int rc;
592
593 /* Search the list of PHY devices on the mdio bus for the
594 * PHY with the requested name */
595 d = bus_find_device_by_name(bus, NULL, bus_id);
596 if (!d) {
597 pr_err("PHY %s not found\n", bus_id);
598 return ERR_PTR(-ENODEV);
599 }
600 phydev = to_phy_device(d);
601
602 rc = phy_attach_direct(dev, phydev, flags, interface);
603 if (rc)
604 return ERR_PTR(rc);
605
606 return phydev;
607 }
608 EXPORT_SYMBOL(phy_attach);
609
610 /**
611 * phy_detach - detach a PHY device from its network device
612 * @phydev: target phy_device struct
613 */
614 void phy_detach(struct phy_device *phydev)
615 {
616 phydev->attached_dev->phydev = NULL;
617 phydev->attached_dev = NULL;
618
619 /* If the device had no specific driver before (i.e. - it
620 * was using the generic driver), we unbind the device
621 * from the generic driver so that there's a chance a
622 * real driver could be loaded */
623 if (phydev->dev.driver == &genphy_driver.driver)
624 device_release_driver(&phydev->dev);
625 }
626 EXPORT_SYMBOL(phy_detach);
627
628
629 /* Generic PHY support and helper functions */
630
631 /**
632 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
633 * @phydev: target phy_device struct
634 *
635 * Description: Writes MII_ADVERTISE with the appropriate values,
636 * after sanitizing the values to make sure we only advertise
637 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement
638 * hasn't changed, and > 0 if it has changed.
639 */
640 static int genphy_config_advert(struct phy_device *phydev)
641 {
642 u32 advertise;
643 int oldadv, adv;
644 int err, changed = 0;
645
646 /* Only allow advertising what
647 * this PHY supports */
648 phydev->advertising &= phydev->supported;
649 advertise = phydev->advertising;
650
651 /* Setup standard advertisement */
652 oldadv = adv = phy_read(phydev, MII_ADVERTISE);
653
654 if (adv < 0)
655 return adv;
656
657 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
658 ADVERTISE_PAUSE_ASYM);
659 adv |= ethtool_adv_to_mii_adv_t(advertise);
660
661 if (adv != oldadv) {
662 err = phy_write(phydev, MII_ADVERTISE, adv);
663
664 if (err < 0)
665 return err;
666 changed = 1;
667 }
668
669 /* Configure gigabit if it's supported */
670 if (phydev->supported & (SUPPORTED_1000baseT_Half |
671 SUPPORTED_1000baseT_Full)) {
672 oldadv = adv = phy_read(phydev, MII_CTRL1000);
673
674 if (adv < 0)
675 return adv;
676
677 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
678 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
679
680 if (adv != oldadv) {
681 err = phy_write(phydev, MII_CTRL1000, adv);
682
683 if (err < 0)
684 return err;
685 changed = 1;
686 }
687 }
688
689 return changed;
690 }
691
692 /**
693 * genphy_setup_forced - configures/forces speed/duplex from @phydev
694 * @phydev: target phy_device struct
695 *
696 * Description: Configures MII_BMCR to force speed/duplex
697 * to the values in phydev. Assumes that the values are valid.
698 * Please see phy_sanitize_settings().
699 */
700 static int genphy_setup_forced(struct phy_device *phydev)
701 {
702 int err;
703 int ctl = 0;
704
705 phydev->pause = phydev->asym_pause = 0;
706
707 if (SPEED_1000 == phydev->speed)
708 ctl |= BMCR_SPEED1000;
709 else if (SPEED_100 == phydev->speed)
710 ctl |= BMCR_SPEED100;
711
712 if (DUPLEX_FULL == phydev->duplex)
713 ctl |= BMCR_FULLDPLX;
714
715 err = phy_write(phydev, MII_BMCR, ctl);
716
717 return err;
718 }
719
720
721 /**
722 * genphy_restart_aneg - Enable and Restart Autonegotiation
723 * @phydev: target phy_device struct
724 */
725 int genphy_restart_aneg(struct phy_device *phydev)
726 {
727 int ctl;
728
729 ctl = phy_read(phydev, MII_BMCR);
730
731 if (ctl < 0)
732 return ctl;
733
734 ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
735
736 /* Don't isolate the PHY if we're negotiating */
737 ctl &= ~(BMCR_ISOLATE);
738
739 ctl = phy_write(phydev, MII_BMCR, ctl);
740
741 return ctl;
742 }
743 EXPORT_SYMBOL(genphy_restart_aneg);
744
745
746 /**
747 * genphy_config_aneg - restart auto-negotiation or write BMCR
748 * @phydev: target phy_device struct
749 *
750 * Description: If auto-negotiation is enabled, we configure the
751 * advertising, and then restart auto-negotiation. If it is not
752 * enabled, then we write the BMCR.
753 */
754 int genphy_config_aneg(struct phy_device *phydev)
755 {
756 int result;
757
758 if (AUTONEG_ENABLE != phydev->autoneg)
759 return genphy_setup_forced(phydev);
760
761 result = genphy_config_advert(phydev);
762
763 if (result < 0) /* error */
764 return result;
765
766 if (result == 0) {
767 /* Advertisement hasn't changed, but maybe aneg was never on to
768 * begin with? Or maybe phy was isolated? */
769 int ctl = phy_read(phydev, MII_BMCR);
770
771 if (ctl < 0)
772 return ctl;
773
774 if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
775 result = 1; /* do restart aneg */
776 }
777
778 /* Only restart aneg if we are advertising something different
779 * than we were before. */
780 if (result > 0)
781 result = genphy_restart_aneg(phydev);
782
783 return result;
784 }
785 EXPORT_SYMBOL(genphy_config_aneg);
786
787 /**
788 * genphy_update_link - update link status in @phydev
789 * @phydev: target phy_device struct
790 *
791 * Description: Update the value in phydev->link to reflect the
792 * current link value. In order to do this, we need to read
793 * the status register twice, keeping the second value.
794 */
795 int genphy_update_link(struct phy_device *phydev)
796 {
797 int status;
798
799 /* Do a fake read */
800 status = phy_read(phydev, MII_BMSR);
801
802 if (status < 0)
803 return status;
804
805 /* Read link and autonegotiation status */
806 status = phy_read(phydev, MII_BMSR);
807
808 if (status < 0)
809 return status;
810
811 if ((status & BMSR_LSTATUS) == 0)
812 phydev->link = 0;
813 else
814 phydev->link = 1;
815
816 return 0;
817 }
818 EXPORT_SYMBOL(genphy_update_link);
819
820 /**
821 * genphy_read_status - check the link status and update current link state
822 * @phydev: target phy_device struct
823 *
824 * Description: Check the link, then figure out the current state
825 * by comparing what we advertise with what the link partner
826 * advertises. Start by checking the gigabit possibilities,
827 * then move on to 10/100.
828 */
829 int genphy_read_status(struct phy_device *phydev)
830 {
831 int adv;
832 int err;
833 int lpa;
834 int lpagb = 0;
835
836 /* Update the link, but return if there
837 * was an error */
838 err = genphy_update_link(phydev);
839 if (err)
840 return err;
841
842 if (AUTONEG_ENABLE == phydev->autoneg) {
843 if (phydev->supported & (SUPPORTED_1000baseT_Half
844 | SUPPORTED_1000baseT_Full)) {
845 lpagb = phy_read(phydev, MII_STAT1000);
846
847 if (lpagb < 0)
848 return lpagb;
849
850 adv = phy_read(phydev, MII_CTRL1000);
851
852 if (adv < 0)
853 return adv;
854
855 lpagb &= adv << 2;
856 }
857
858 lpa = phy_read(phydev, MII_LPA);
859
860 if (lpa < 0)
861 return lpa;
862
863 adv = phy_read(phydev, MII_ADVERTISE);
864
865 if (adv < 0)
866 return adv;
867
868 lpa &= adv;
869
870 phydev->speed = SPEED_10;
871 phydev->duplex = DUPLEX_HALF;
872 phydev->pause = phydev->asym_pause = 0;
873
874 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
875 phydev->speed = SPEED_1000;
876
877 if (lpagb & LPA_1000FULL)
878 phydev->duplex = DUPLEX_FULL;
879 } else if (lpa & (LPA_100FULL | LPA_100HALF)) {
880 phydev->speed = SPEED_100;
881
882 if (lpa & LPA_100FULL)
883 phydev->duplex = DUPLEX_FULL;
884 } else
885 if (lpa & LPA_10FULL)
886 phydev->duplex = DUPLEX_FULL;
887
888 if (phydev->duplex == DUPLEX_FULL){
889 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
890 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
891 }
892 } else {
893 int bmcr = phy_read(phydev, MII_BMCR);
894 if (bmcr < 0)
895 return bmcr;
896
897 if (bmcr & BMCR_FULLDPLX)
898 phydev->duplex = DUPLEX_FULL;
899 else
900 phydev->duplex = DUPLEX_HALF;
901
902 if (bmcr & BMCR_SPEED1000)
903 phydev->speed = SPEED_1000;
904 else if (bmcr & BMCR_SPEED100)
905 phydev->speed = SPEED_100;
906 else
907 phydev->speed = SPEED_10;
908
909 phydev->pause = phydev->asym_pause = 0;
910 }
911
912 return 0;
913 }
914 EXPORT_SYMBOL(genphy_read_status);
915
916 static int genphy_config_init(struct phy_device *phydev)
917 {
918 int val;
919 u32 features;
920
921 /* For now, I'll claim that the generic driver supports
922 * all possible port types */
923 features = (SUPPORTED_TP | SUPPORTED_MII
924 | SUPPORTED_AUI | SUPPORTED_FIBRE |
925 SUPPORTED_BNC);
926
927 /* Do we support autonegotiation? */
928 val = phy_read(phydev, MII_BMSR);
929
930 if (val < 0)
931 return val;
932
933 if (val & BMSR_ANEGCAPABLE)
934 features |= SUPPORTED_Autoneg;
935
936 if (val & BMSR_100FULL)
937 features |= SUPPORTED_100baseT_Full;
938 if (val & BMSR_100HALF)
939 features |= SUPPORTED_100baseT_Half;
940 if (val & BMSR_10FULL)
941 features |= SUPPORTED_10baseT_Full;
942 if (val & BMSR_10HALF)
943 features |= SUPPORTED_10baseT_Half;
944
945 if (val & BMSR_ESTATEN) {
946 val = phy_read(phydev, MII_ESTATUS);
947
948 if (val < 0)
949 return val;
950
951 if (val & ESTATUS_1000_TFULL)
952 features |= SUPPORTED_1000baseT_Full;
953 if (val & ESTATUS_1000_THALF)
954 features |= SUPPORTED_1000baseT_Half;
955 }
956
957 phydev->supported = features;
958 phydev->advertising = features;
959
960 return 0;
961 }
962 int genphy_suspend(struct phy_device *phydev)
963 {
964 int value;
965
966 mutex_lock(&phydev->lock);
967
968 value = phy_read(phydev, MII_BMCR);
969 phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
970
971 mutex_unlock(&phydev->lock);
972
973 return 0;
974 }
975 EXPORT_SYMBOL(genphy_suspend);
976
977 int genphy_resume(struct phy_device *phydev)
978 {
979 int value;
980
981 mutex_lock(&phydev->lock);
982
983 value = phy_read(phydev, MII_BMCR);
984 phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
985
986 mutex_unlock(&phydev->lock);
987
988 return 0;
989 }
990 EXPORT_SYMBOL(genphy_resume);
991
992 /**
993 * phy_probe - probe and init a PHY device
994 * @dev: device to probe and init
995 *
996 * Description: Take care of setting up the phy_device structure,
997 * set the state to READY (the driver's init function should
998 * set it to STARTING if needed).
999 */
1000 static int phy_probe(struct device *dev)
1001 {
1002 struct phy_device *phydev;
1003 struct phy_driver *phydrv;
1004 struct device_driver *drv;
1005 int err = 0;
1006
1007 phydev = to_phy_device(dev);
1008
1009 drv = phydev->dev.driver;
1010 phydrv = to_phy_driver(drv);
1011 phydev->drv = phydrv;
1012
1013 /* Disable the interrupt if the PHY doesn't support it */
1014 if (!(phydrv->flags & PHY_HAS_INTERRUPT))
1015 phydev->irq = PHY_POLL;
1016
1017 mutex_lock(&phydev->lock);
1018
1019 /* Start out supporting everything. Eventually,
1020 * a controller will attach, and may modify one
1021 * or both of these values */
1022 phydev->supported = phydrv->features;
1023 phydev->advertising = phydrv->features;
1024
1025 /* Set the state to READY by default */
1026 phydev->state = PHY_READY;
1027
1028 if (phydev->drv->probe)
1029 err = phydev->drv->probe(phydev);
1030
1031 mutex_unlock(&phydev->lock);
1032
1033 return err;
1034
1035 }
1036
1037 static int phy_remove(struct device *dev)
1038 {
1039 struct phy_device *phydev;
1040
1041 phydev = to_phy_device(dev);
1042
1043 mutex_lock(&phydev->lock);
1044 phydev->state = PHY_DOWN;
1045 mutex_unlock(&phydev->lock);
1046
1047 if (phydev->drv->remove)
1048 phydev->drv->remove(phydev);
1049 phydev->drv = NULL;
1050
1051 return 0;
1052 }
1053
1054 /**
1055 * phy_driver_register - register a phy_driver with the PHY layer
1056 * @new_driver: new phy_driver to register
1057 */
1058 int phy_driver_register(struct phy_driver *new_driver)
1059 {
1060 int retval;
1061
1062 new_driver->driver.name = new_driver->name;
1063 new_driver->driver.bus = &mdio_bus_type;
1064 new_driver->driver.probe = phy_probe;
1065 new_driver->driver.remove = phy_remove;
1066
1067 retval = driver_register(&new_driver->driver);
1068
1069 if (retval) {
1070 pr_err("%s: Error %d in registering driver\n",
1071 new_driver->name, retval);
1072
1073 return retval;
1074 }
1075
1076 pr_debug("%s: Registered new driver\n", new_driver->name);
1077
1078 return 0;
1079 }
1080 EXPORT_SYMBOL(phy_driver_register);
1081
1082 int phy_drivers_register(struct phy_driver *new_driver, int n)
1083 {
1084 int i, ret = 0;
1085
1086 for (i = 0; i < n; i++) {
1087 ret = phy_driver_register(new_driver + i);
1088 if (ret) {
1089 while (i-- > 0)
1090 phy_driver_unregister(new_driver + i);
1091 break;
1092 }
1093 }
1094 return ret;
1095 }
1096 EXPORT_SYMBOL(phy_drivers_register);
1097
1098 void phy_driver_unregister(struct phy_driver *drv)
1099 {
1100 driver_unregister(&drv->driver);
1101 }
1102 EXPORT_SYMBOL(phy_driver_unregister);
1103
1104 void phy_drivers_unregister(struct phy_driver *drv, int n)
1105 {
1106 int i;
1107 for (i = 0; i < n; i++) {
1108 phy_driver_unregister(drv + i);
1109 }
1110 }
1111 EXPORT_SYMBOL(phy_drivers_unregister);
1112
1113 static struct phy_driver genphy_driver = {
1114 .phy_id = 0xffffffff,
1115 .phy_id_mask = 0xffffffff,
1116 .name = "Generic PHY",
1117 .config_init = genphy_config_init,
1118 .features = 0,
1119 .config_aneg = genphy_config_aneg,
1120 .read_status = genphy_read_status,
1121 .suspend = genphy_suspend,
1122 .resume = genphy_resume,
1123 .driver = {.owner= THIS_MODULE, },
1124 };
1125
1126 static int __init phy_init(void)
1127 {
1128 int rc;
1129
1130 rc = mdio_bus_init();
1131 if (rc)
1132 return rc;
1133
1134 rc = phy_driver_register(&genphy_driver);
1135 if (rc)
1136 mdio_bus_exit();
1137
1138 return rc;
1139 }
1140
1141 static void __exit phy_exit(void)
1142 {
1143 phy_driver_unregister(&genphy_driver);
1144 mdio_bus_exit();
1145 }
1146
1147 subsys_initcall(phy_init);
1148 module_exit(phy_exit);
This page took 0.0851460000000001 seconds and 5 git commands to generate.