2 * drivers/net/phy/phy_device.c
4 * Framework for finding and configuring PHYs.
5 * Also contains generic PHY driver
9 * Copyright (c) 2004 Freescale Semiconductor, Inc.
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.
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
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>
32 #include <linux/module.h>
33 #include <linux/mii.h>
34 #include <linux/ethtool.h>
35 #include <linux/phy.h>
39 #include <asm/uaccess.h>
41 MODULE_DESCRIPTION("PHY library");
42 MODULE_AUTHOR("Andy Fleming");
43 MODULE_LICENSE("GPL");
45 void phy_device_free(struct phy_device *phydev)
47 put_device(&phydev->dev);
49 EXPORT_SYMBOL(phy_device_free);
51 static void phy_device_release(struct device *dev)
53 kfree(to_phy_device(dev));
56 static struct phy_driver genphy_driver;
57 extern int mdio_bus_init(void);
58 extern void mdio_bus_exit(void);
60 static LIST_HEAD(phy_fixup_list);
61 static DEFINE_MUTEX(phy_fixup_lock);
63 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
64 u32 flags, phy_interface_t interface);
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
73 * @run: The actual code to be run when a matching PHY is found
75 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
76 int (*run)(struct phy_device *))
78 struct phy_fixup *fixup;
80 fixup = kzalloc(sizeof(struct phy_fixup), GFP_KERNEL);
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;
89 mutex_lock(&phy_fixup_lock);
90 list_add_tail(&fixup->list, &phy_fixup_list);
91 mutex_unlock(&phy_fixup_lock);
95 EXPORT_SYMBOL(phy_register_fixup);
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 *))
101 return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
103 EXPORT_SYMBOL(phy_register_fixup_for_uid);
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 *))
109 return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
111 EXPORT_SYMBOL(phy_register_fixup_for_id);
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.
117 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
119 if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
120 if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
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)
131 /* Runs any matching fixups for this phydev */
132 int phy_scan_fixups(struct phy_device *phydev)
134 struct phy_fixup *fixup;
136 mutex_lock(&phy_fixup_lock);
137 list_for_each_entry(fixup, &phy_fixup_list, list) {
138 if (phy_needs_fixup(phydev, fixup)) {
141 err = fixup->run(phydev);
144 mutex_unlock(&phy_fixup_lock);
149 mutex_unlock(&phy_fixup_lock);
153 EXPORT_SYMBOL(phy_scan_fixups);
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)
158 struct phy_device *dev;
160 /* We allocate the device, and initialize the
162 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
165 return (struct phy_device*) PTR_ERR((void*)-ENOMEM);
167 dev->dev.release = phy_device_release;
171 dev->pause = dev->asym_pause = 0;
173 dev->interface = PHY_INTERFACE_MODE_GMII;
175 dev->autoneg = AUTONEG_ENABLE;
177 dev->is_c45 = is_c45;
179 dev->phy_id = phy_id;
181 dev->c45_ids = *c45_ids;
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);
188 dev->state = PHY_DOWN;
190 mutex_init(&dev->lock);
191 INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
192 INIT_WORK(&dev->phy_queue, phy_change);
194 /* Request the appropriate module unconditionally; don't
195 bother trying to do so only if it isn't already loaded,
196 because that gets complicated. A hotplug event would have
197 done an unconditional modprobe anyway.
198 We don't do normal hotplug because it won't work for MDIO
199 -- because it relies on the device staying around for long
200 enough for the driver to get loaded. With MDIO, the NIC
201 driver will get bored and give up as soon as it finds that
202 there's no driver _already_ loaded. */
203 request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
205 device_initialize(&dev->dev);
209 EXPORT_SYMBOL(phy_device_create);
212 * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs.
213 * @bus: the target MII bus
214 * @addr: PHY address on the MII bus
215 * @phy_id: where to store the ID retrieved.
216 * @c45_ids: where to store the c45 ID information.
218 * If the PHY devices-in-package appears to be valid, it and the
219 * corresponding identifiers are stored in @c45_ids, zero is stored
220 * in @phy_id. Otherwise 0xffffffff is stored in @phy_id. Returns
224 static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
225 struct phy_c45_device_ids *c45_ids) {
228 const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
230 /* Find first non-zero Devices In package. Device
231 * zero is reserved, so don't probe it.
234 i < num_ids && c45_ids->devices_in_package == 0;
236 reg_addr = MII_ADDR_C45 | i << 16 | 6;
237 phy_reg = mdiobus_read(bus, addr, reg_addr);
240 c45_ids->devices_in_package = (phy_reg & 0xffff) << 16;
242 reg_addr = MII_ADDR_C45 | i << 16 | 5;
243 phy_reg = mdiobus_read(bus, addr, reg_addr);
246 c45_ids->devices_in_package |= (phy_reg & 0xffff);
248 /* If mostly Fs, there is no device there,
249 * let's get out of here.
251 if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
252 *phy_id = 0xffffffff;
257 /* Now probe Device Identifiers for each device present. */
258 for (i = 1; i < num_ids; i++) {
259 if (!(c45_ids->devices_in_package & (1 << i)))
262 reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
263 phy_reg = mdiobus_read(bus, addr, reg_addr);
266 c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
268 reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2;
269 phy_reg = mdiobus_read(bus, addr, reg_addr);
272 c45_ids->device_ids[i] |= (phy_reg & 0xffff);
279 * get_phy_id - reads the specified addr for its ID.
280 * @bus: the target MII bus
281 * @addr: PHY address on the MII bus
282 * @phy_id: where to store the ID retrieved.
283 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
284 * @c45_ids: where to store the c45 ID information.
286 * Description: In the case of a 802.3-c22 PHY, reads the ID registers
287 * of the PHY at @addr on the @bus, stores it in @phy_id and returns
290 * In the case of a 802.3-c45 PHY, get_phy_c45_ids() is invoked, and
291 * its return value is in turn returned.
294 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
295 bool is_c45, struct phy_c45_device_ids *c45_ids)
300 return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
302 /* Grab the bits from PHYIR1, and put them
303 * in the upper half */
304 phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
309 *phy_id = (phy_reg & 0xffff) << 16;
311 /* Grab the bits from PHYIR2, and put them in the lower half */
312 phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
317 *phy_id |= (phy_reg & 0xffff);
323 * get_phy_device - reads the specified PHY device and returns its @phy_device struct
324 * @bus: the target MII bus
325 * @addr: PHY address on the MII bus
326 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
328 * Description: Reads the ID registers of the PHY at @addr on the
329 * @bus, then allocates and returns the phy_device to represent it.
331 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
333 struct phy_c45_device_ids c45_ids = {0};
334 struct phy_device *dev = NULL;
338 r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
342 /* If the phy_id is mostly Fs, there is no device there */
343 if ((phy_id & 0x1fffffff) == 0x1fffffff)
346 dev = phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
350 EXPORT_SYMBOL(get_phy_device);
353 * phy_device_register - Register the phy device on the MDIO bus
354 * @phydev: phy_device structure to be added to the MDIO bus
356 int phy_device_register(struct phy_device *phydev)
360 /* Don't register a phy if one is already registered at this
362 if (phydev->bus->phy_map[phydev->addr])
364 phydev->bus->phy_map[phydev->addr] = phydev;
366 /* Run all of the fixups for this PHY */
367 err = phy_init_hw(phydev);
369 pr_err("PHY %d failed to initialize\n", phydev->addr);
373 err = device_add(&phydev->dev);
375 pr_err("PHY %d failed to add\n", phydev->addr);
382 phydev->bus->phy_map[phydev->addr] = NULL;
385 EXPORT_SYMBOL(phy_device_register);
388 * phy_find_first - finds the first PHY device on the bus
389 * @bus: the target MII bus
391 struct phy_device *phy_find_first(struct mii_bus *bus)
395 for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
396 if (bus->phy_map[addr])
397 return bus->phy_map[addr];
401 EXPORT_SYMBOL(phy_find_first);
404 * phy_prepare_link - prepares the PHY layer to monitor link status
405 * @phydev: target phy_device struct
406 * @handler: callback function for link status change notifications
408 * Description: Tells the PHY infrastructure to handle the
409 * gory details on monitoring link status (whether through
410 * polling or an interrupt), and to call back to the
411 * connected device driver when the link status changes.
412 * If you want to monitor your own link state, don't call
415 static void phy_prepare_link(struct phy_device *phydev,
416 void (*handler)(struct net_device *))
418 phydev->adjust_link = handler;
422 * phy_connect_direct - connect an ethernet device to a specific phy_device
423 * @dev: the network device to connect
424 * @phydev: the pointer to the phy device
425 * @handler: callback function for state change notifications
426 * @interface: PHY device's interface
428 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
429 void (*handler)(struct net_device *),
430 phy_interface_t interface)
434 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
438 phy_prepare_link(phydev, handler);
439 phy_start_machine(phydev, NULL);
441 phy_start_interrupts(phydev);
445 EXPORT_SYMBOL(phy_connect_direct);
448 * phy_connect - connect an ethernet device to a PHY device
449 * @dev: the network device to connect
450 * @bus_id: the id string of the PHY device to connect
451 * @handler: callback function for state change notifications
452 * @interface: PHY device's interface
454 * Description: Convenience function for connecting ethernet
455 * devices to PHY devices. The default behavior is for
456 * the PHY infrastructure to handle everything, and only notify
457 * the connected driver when the link status changes. If you
458 * don't want, or can't use the provided functionality, you may
459 * choose to call only the subset of functions which provide
460 * the desired functionality.
462 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
463 void (*handler)(struct net_device *),
464 phy_interface_t interface)
466 struct phy_device *phydev;
470 /* Search the list of PHY devices on the mdio bus for the
471 * PHY with the requested name */
472 d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
474 pr_err("PHY %s not found\n", bus_id);
475 return ERR_PTR(-ENODEV);
477 phydev = to_phy_device(d);
479 rc = phy_connect_direct(dev, phydev, handler, interface);
485 EXPORT_SYMBOL(phy_connect);
488 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
489 * @phydev: target phy_device struct
491 void phy_disconnect(struct phy_device *phydev)
494 phy_stop_interrupts(phydev);
496 phy_stop_machine(phydev);
498 phydev->adjust_link = NULL;
502 EXPORT_SYMBOL(phy_disconnect);
505 * phy_poll_reset - Safely wait until a PHY reset has properly completed
506 * @phydev: The PHY device to poll
508 * Description: According to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as
509 * published in 2008, a PHY reset may take up to 0.5 seconds. The MII BMCR
510 * register must be polled until the BMCR_RESET bit clears.
512 * Furthermore, any attempts to write to PHY registers may have no effect
513 * or even generate MDIO bus errors until this is complete.
515 * Some PHYs (such as the Marvell 88E1111) don't entirely conform to the
516 * standard and do not fully reset after the BMCR_RESET bit is set, and may
517 * even *REQUIRE* a soft-reset to properly restart autonegotiation. In an
518 * effort to support such broken PHYs, this function is separate from the
519 * standard phy_init_hw() which will zero all the other bits in the BMCR
520 * and reapply all driver-specific and board-specific fixups.
522 static int phy_poll_reset(struct phy_device *phydev)
524 /* Poll until the reset bit clears (50ms per retry == 0.6 sec) */
525 unsigned int retries = 12;
530 ret = phy_read(phydev, MII_BMCR);
533 } while (ret & BMCR_RESET && --retries);
534 if (ret & BMCR_RESET)
538 * Some chips (smsc911x) may still need up to another 1ms after the
539 * BMCR_RESET bit is cleared before they are usable.
545 int phy_init_hw(struct phy_device *phydev)
549 if (!phydev->drv || !phydev->drv->config_init)
552 ret = phy_write(phydev, MII_BMCR, BMCR_RESET);
556 ret = phy_poll_reset(phydev);
560 ret = phy_scan_fixups(phydev);
564 return phydev->drv->config_init(phydev);
566 EXPORT_SYMBOL(phy_init_hw);
569 * phy_attach_direct - attach a network device to a given PHY device pointer
570 * @dev: network device to attach
571 * @phydev: Pointer to phy_device to attach
572 * @flags: PHY device's dev_flags
573 * @interface: PHY device's interface
575 * Description: Called by drivers to attach to a particular PHY
576 * device. The phy_device is found, and properly hooked up
577 * to the phy_driver. If no driver is attached, then the
578 * genphy_driver is used. The phy_device is given a ptr to
579 * the attaching device, and given a callback for link status
580 * change. The phy_device is returned to the attaching driver.
582 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
583 u32 flags, phy_interface_t interface)
585 struct device *d = &phydev->dev;
588 /* Assume that if there is no driver, that it doesn't
589 * exist, and we should use the genphy driver. */
590 if (NULL == d->driver) {
591 if (phydev->is_c45) {
592 pr_err("No driver for phy %x\n", phydev->phy_id);
596 d->driver = &genphy_driver.driver;
598 err = d->driver->probe(d);
600 err = device_bind_driver(d);
606 if (phydev->attached_dev) {
607 dev_err(&dev->dev, "PHY already attached\n");
611 phydev->attached_dev = dev;
612 dev->phydev = phydev;
614 phydev->dev_flags = flags;
616 phydev->interface = interface;
618 phydev->state = PHY_READY;
620 /* Do initial configuration here, now that
621 * we have certain key parameters
622 * (dev_flags and interface) */
623 err = phy_init_hw(phydev);
631 * phy_attach - attach a network device to a particular PHY device
632 * @dev: network device to attach
633 * @bus_id: Bus ID of PHY device to attach
634 * @interface: PHY device's interface
636 * Description: Same as phy_attach_direct() except that a PHY bus_id
637 * string is passed instead of a pointer to a struct phy_device.
639 struct phy_device *phy_attach(struct net_device *dev,
640 const char *bus_id, phy_interface_t interface)
642 struct bus_type *bus = &mdio_bus_type;
643 struct phy_device *phydev;
647 /* Search the list of PHY devices on the mdio bus for the
648 * PHY with the requested name */
649 d = bus_find_device_by_name(bus, NULL, bus_id);
651 pr_err("PHY %s not found\n", bus_id);
652 return ERR_PTR(-ENODEV);
654 phydev = to_phy_device(d);
656 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
662 EXPORT_SYMBOL(phy_attach);
665 * phy_detach - detach a PHY device from its network device
666 * @phydev: target phy_device struct
668 void phy_detach(struct phy_device *phydev)
670 phydev->attached_dev->phydev = NULL;
671 phydev->attached_dev = NULL;
673 /* If the device had no specific driver before (i.e. - it
674 * was using the generic driver), we unbind the device
675 * from the generic driver so that there's a chance a
676 * real driver could be loaded */
677 if (phydev->dev.driver == &genphy_driver.driver)
678 device_release_driver(&phydev->dev);
680 EXPORT_SYMBOL(phy_detach);
683 /* Generic PHY support and helper functions */
686 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
687 * @phydev: target phy_device struct
689 * Description: Writes MII_ADVERTISE with the appropriate values,
690 * after sanitizing the values to make sure we only advertise
691 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement
692 * hasn't changed, and > 0 if it has changed.
694 static int genphy_config_advert(struct phy_device *phydev)
698 int err, changed = 0;
700 /* Only allow advertising what
701 * this PHY supports */
702 phydev->advertising &= phydev->supported;
703 advertise = phydev->advertising;
705 /* Setup standard advertisement */
706 oldadv = adv = phy_read(phydev, MII_ADVERTISE);
711 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
712 ADVERTISE_PAUSE_ASYM);
713 adv |= ethtool_adv_to_mii_adv_t(advertise);
716 err = phy_write(phydev, MII_ADVERTISE, adv);
723 /* Configure gigabit if it's supported */
724 if (phydev->supported & (SUPPORTED_1000baseT_Half |
725 SUPPORTED_1000baseT_Full)) {
726 oldadv = adv = phy_read(phydev, MII_CTRL1000);
731 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
732 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
735 err = phy_write(phydev, MII_CTRL1000, adv);
747 * genphy_setup_forced - configures/forces speed/duplex from @phydev
748 * @phydev: target phy_device struct
750 * Description: Configures MII_BMCR to force speed/duplex
751 * to the values in phydev. Assumes that the values are valid.
752 * Please see phy_sanitize_settings().
754 int genphy_setup_forced(struct phy_device *phydev)
759 phydev->pause = phydev->asym_pause = 0;
761 if (SPEED_1000 == phydev->speed)
762 ctl |= BMCR_SPEED1000;
763 else if (SPEED_100 == phydev->speed)
764 ctl |= BMCR_SPEED100;
766 if (DUPLEX_FULL == phydev->duplex)
767 ctl |= BMCR_FULLDPLX;
769 err = phy_write(phydev, MII_BMCR, ctl);
773 EXPORT_SYMBOL(genphy_setup_forced);
776 * genphy_restart_aneg - Enable and Restart Autonegotiation
777 * @phydev: target phy_device struct
779 int genphy_restart_aneg(struct phy_device *phydev)
783 ctl = phy_read(phydev, MII_BMCR);
788 ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
790 /* Don't isolate the PHY if we're negotiating */
791 ctl &= ~(BMCR_ISOLATE);
793 ctl = phy_write(phydev, MII_BMCR, ctl);
797 EXPORT_SYMBOL(genphy_restart_aneg);
801 * genphy_config_aneg - restart auto-negotiation or write BMCR
802 * @phydev: target phy_device struct
804 * Description: If auto-negotiation is enabled, we configure the
805 * advertising, and then restart auto-negotiation. If it is not
806 * enabled, then we write the BMCR.
808 int genphy_config_aneg(struct phy_device *phydev)
812 if (AUTONEG_ENABLE != phydev->autoneg)
813 return genphy_setup_forced(phydev);
815 result = genphy_config_advert(phydev);
817 if (result < 0) /* error */
821 /* Advertisement hasn't changed, but maybe aneg was never on to
822 * begin with? Or maybe phy was isolated? */
823 int ctl = phy_read(phydev, MII_BMCR);
828 if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
829 result = 1; /* do restart aneg */
832 /* Only restart aneg if we are advertising something different
833 * than we were before. */
835 result = genphy_restart_aneg(phydev);
839 EXPORT_SYMBOL(genphy_config_aneg);
842 * genphy_update_link - update link status in @phydev
843 * @phydev: target phy_device struct
845 * Description: Update the value in phydev->link to reflect the
846 * current link value. In order to do this, we need to read
847 * the status register twice, keeping the second value.
849 int genphy_update_link(struct phy_device *phydev)
854 status = phy_read(phydev, MII_BMSR);
859 /* Read link and autonegotiation status */
860 status = phy_read(phydev, MII_BMSR);
865 if ((status & BMSR_LSTATUS) == 0)
872 EXPORT_SYMBOL(genphy_update_link);
875 * genphy_read_status - check the link status and update current link state
876 * @phydev: target phy_device struct
878 * Description: Check the link, then figure out the current state
879 * by comparing what we advertise with what the link partner
880 * advertises. Start by checking the gigabit possibilities,
881 * then move on to 10/100.
883 int genphy_read_status(struct phy_device *phydev)
890 /* Update the link, but return if there
892 err = genphy_update_link(phydev);
896 phydev->lp_advertising = 0;
898 if (AUTONEG_ENABLE == phydev->autoneg) {
899 if (phydev->supported & (SUPPORTED_1000baseT_Half
900 | SUPPORTED_1000baseT_Full)) {
901 lpagb = phy_read(phydev, MII_STAT1000);
906 adv = phy_read(phydev, MII_CTRL1000);
911 phydev->lp_advertising =
912 mii_stat1000_to_ethtool_lpa_t(lpagb);
916 lpa = phy_read(phydev, MII_LPA);
921 phydev->lp_advertising |= mii_lpa_to_ethtool_lpa_t(lpa);
923 adv = phy_read(phydev, MII_ADVERTISE);
930 phydev->speed = SPEED_10;
931 phydev->duplex = DUPLEX_HALF;
932 phydev->pause = phydev->asym_pause = 0;
934 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
935 phydev->speed = SPEED_1000;
937 if (lpagb & LPA_1000FULL)
938 phydev->duplex = DUPLEX_FULL;
939 } else if (lpa & (LPA_100FULL | LPA_100HALF)) {
940 phydev->speed = SPEED_100;
942 if (lpa & LPA_100FULL)
943 phydev->duplex = DUPLEX_FULL;
945 if (lpa & LPA_10FULL)
946 phydev->duplex = DUPLEX_FULL;
948 if (phydev->duplex == DUPLEX_FULL){
949 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
950 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
953 int bmcr = phy_read(phydev, MII_BMCR);
957 if (bmcr & BMCR_FULLDPLX)
958 phydev->duplex = DUPLEX_FULL;
960 phydev->duplex = DUPLEX_HALF;
962 if (bmcr & BMCR_SPEED1000)
963 phydev->speed = SPEED_1000;
964 else if (bmcr & BMCR_SPEED100)
965 phydev->speed = SPEED_100;
967 phydev->speed = SPEED_10;
969 phydev->pause = phydev->asym_pause = 0;
974 EXPORT_SYMBOL(genphy_read_status);
976 static int genphy_config_init(struct phy_device *phydev)
981 /* For now, I'll claim that the generic driver supports
982 * all possible port types */
983 features = (SUPPORTED_TP | SUPPORTED_MII
984 | SUPPORTED_AUI | SUPPORTED_FIBRE |
987 /* Do we support autonegotiation? */
988 val = phy_read(phydev, MII_BMSR);
993 if (val & BMSR_ANEGCAPABLE)
994 features |= SUPPORTED_Autoneg;
996 if (val & BMSR_100FULL)
997 features |= SUPPORTED_100baseT_Full;
998 if (val & BMSR_100HALF)
999 features |= SUPPORTED_100baseT_Half;
1000 if (val & BMSR_10FULL)
1001 features |= SUPPORTED_10baseT_Full;
1002 if (val & BMSR_10HALF)
1003 features |= SUPPORTED_10baseT_Half;
1005 if (val & BMSR_ESTATEN) {
1006 val = phy_read(phydev, MII_ESTATUS);
1011 if (val & ESTATUS_1000_TFULL)
1012 features |= SUPPORTED_1000baseT_Full;
1013 if (val & ESTATUS_1000_THALF)
1014 features |= SUPPORTED_1000baseT_Half;
1017 phydev->supported = features;
1018 phydev->advertising = features;
1022 int genphy_suspend(struct phy_device *phydev)
1026 mutex_lock(&phydev->lock);
1028 value = phy_read(phydev, MII_BMCR);
1029 phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
1031 mutex_unlock(&phydev->lock);
1035 EXPORT_SYMBOL(genphy_suspend);
1037 int genphy_resume(struct phy_device *phydev)
1041 mutex_lock(&phydev->lock);
1043 value = phy_read(phydev, MII_BMCR);
1044 phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
1046 mutex_unlock(&phydev->lock);
1050 EXPORT_SYMBOL(genphy_resume);
1053 * phy_probe - probe and init a PHY device
1054 * @dev: device to probe and init
1056 * Description: Take care of setting up the phy_device structure,
1057 * set the state to READY (the driver's init function should
1058 * set it to STARTING if needed).
1060 static int phy_probe(struct device *dev)
1062 struct phy_device *phydev;
1063 struct phy_driver *phydrv;
1064 struct device_driver *drv;
1067 phydev = to_phy_device(dev);
1069 drv = phydev->dev.driver;
1070 phydrv = to_phy_driver(drv);
1071 phydev->drv = phydrv;
1073 /* Disable the interrupt if the PHY doesn't support it
1074 * but the interrupt is still a valid one
1076 if (!(phydrv->flags & PHY_HAS_INTERRUPT) &&
1077 phy_interrupt_is_valid(phydev))
1078 phydev->irq = PHY_POLL;
1080 if (phydrv->flags & PHY_IS_INTERNAL)
1081 phydev->is_internal = true;
1083 mutex_lock(&phydev->lock);
1085 /* Start out supporting everything. Eventually,
1086 * a controller will attach, and may modify one
1087 * or both of these values */
1088 phydev->supported = phydrv->features;
1089 phydev->advertising = phydrv->features;
1091 /* Set the state to READY by default */
1092 phydev->state = PHY_READY;
1094 if (phydev->drv->probe)
1095 err = phydev->drv->probe(phydev);
1097 mutex_unlock(&phydev->lock);
1103 static int phy_remove(struct device *dev)
1105 struct phy_device *phydev;
1107 phydev = to_phy_device(dev);
1109 mutex_lock(&phydev->lock);
1110 phydev->state = PHY_DOWN;
1111 mutex_unlock(&phydev->lock);
1113 if (phydev->drv->remove)
1114 phydev->drv->remove(phydev);
1121 * phy_driver_register - register a phy_driver with the PHY layer
1122 * @new_driver: new phy_driver to register
1124 int phy_driver_register(struct phy_driver *new_driver)
1128 new_driver->driver.name = new_driver->name;
1129 new_driver->driver.bus = &mdio_bus_type;
1130 new_driver->driver.probe = phy_probe;
1131 new_driver->driver.remove = phy_remove;
1133 retval = driver_register(&new_driver->driver);
1136 pr_err("%s: Error %d in registering driver\n",
1137 new_driver->name, retval);
1142 pr_debug("%s: Registered new driver\n", new_driver->name);
1146 EXPORT_SYMBOL(phy_driver_register);
1148 int phy_drivers_register(struct phy_driver *new_driver, int n)
1152 for (i = 0; i < n; i++) {
1153 ret = phy_driver_register(new_driver + i);
1156 phy_driver_unregister(new_driver + i);
1162 EXPORT_SYMBOL(phy_drivers_register);
1164 void phy_driver_unregister(struct phy_driver *drv)
1166 driver_unregister(&drv->driver);
1168 EXPORT_SYMBOL(phy_driver_unregister);
1170 void phy_drivers_unregister(struct phy_driver *drv, int n)
1173 for (i = 0; i < n; i++) {
1174 phy_driver_unregister(drv + i);
1177 EXPORT_SYMBOL(phy_drivers_unregister);
1179 static struct phy_driver genphy_driver = {
1180 .phy_id = 0xffffffff,
1181 .phy_id_mask = 0xffffffff,
1182 .name = "Generic PHY",
1183 .config_init = genphy_config_init,
1185 .config_aneg = genphy_config_aneg,
1186 .read_status = genphy_read_status,
1187 .suspend = genphy_suspend,
1188 .resume = genphy_resume,
1189 .driver = {.owner= THIS_MODULE, },
1192 static int __init phy_init(void)
1196 rc = mdio_bus_init();
1200 rc = phy_driver_register(&genphy_driver);
1207 static void __exit phy_exit(void)
1209 phy_driver_unregister(&genphy_driver);
1213 subsys_initcall(phy_init);
1214 module_exit(phy_exit);