1/* Framework for finding and configuring PHYs.
2 * Also contains generic PHY driver
3 *
4 * Author: Andy Fleming
5 *
6 * Copyright (c) 2004 Freescale Semiconductor, Inc.
7 *
8 * This program is free software; you can redistribute  it and/or modify it
9 * under  the terms of  the GNU General  Public License as published by the
10 * Free Software Foundation;  either version 2 of the  License, or (at your
11 * option) any later version.
12 *
13 */
14
15#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16
17#include <linux/kernel.h>
18#include <linux/string.h>
19#include <linux/errno.h>
20#include <linux/unistd.h>
21#include <linux/slab.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/mdio.h>
34#include <linux/io.h>
35#include <linux/uaccess.h>
36#include <linux/of.h>
37
38#include <asm/irq.h>
39
40MODULE_DESCRIPTION("PHY library");
41MODULE_AUTHOR("Andy Fleming");
42MODULE_LICENSE("GPL");
43
44void phy_device_free(struct phy_device *phydev)
45{
46	put_device(&phydev->dev);
47}
48EXPORT_SYMBOL(phy_device_free);
49
50static void phy_device_release(struct device *dev)
51{
52	kfree(to_phy_device(dev));
53}
54
55enum genphy_driver {
56	GENPHY_DRV_1G,
57	GENPHY_DRV_10G,
58	GENPHY_DRV_MAX
59};
60
61static struct phy_driver genphy_driver[GENPHY_DRV_MAX];
62
63static LIST_HEAD(phy_fixup_list);
64static DEFINE_MUTEX(phy_fixup_lock);
65
66/**
67 * phy_register_fixup - 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 */
75int 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 = kzalloc(sizeof(*fixup), GFP_KERNEL);
79
80	if (!fixup)
81		return -ENOMEM;
82
83	strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
84	fixup->phy_uid = phy_uid;
85	fixup->phy_uid_mask = phy_uid_mask;
86	fixup->run = run;
87
88	mutex_lock(&phy_fixup_lock);
89	list_add_tail(&fixup->list, &phy_fixup_list);
90	mutex_unlock(&phy_fixup_lock);
91
92	return 0;
93}
94EXPORT_SYMBOL(phy_register_fixup);
95
96/* Registers a fixup to be run on any PHY with the UID in phy_uid */
97int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
98			       int (*run)(struct phy_device *))
99{
100	return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
101}
102EXPORT_SYMBOL(phy_register_fixup_for_uid);
103
104/* Registers a fixup to be run on the PHY with id string bus_id */
105int phy_register_fixup_for_id(const char *bus_id,
106			      int (*run)(struct phy_device *))
107{
108	return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
109}
110EXPORT_SYMBOL(phy_register_fixup_for_id);
111
112/* Returns 1 if fixup matches phydev in bus_id and phy_uid.
113 * Fixups can be set to match any in one or more fields.
114 */
115static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
116{
117	if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
118		if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
119			return 0;
120
121	if ((fixup->phy_uid & fixup->phy_uid_mask) !=
122	    (phydev->phy_id & fixup->phy_uid_mask))
123		if (fixup->phy_uid != PHY_ANY_UID)
124			return 0;
125
126	return 1;
127}
128
129/* Runs any matching fixups for this phydev */
130static int phy_scan_fixups(struct phy_device *phydev)
131{
132	struct phy_fixup *fixup;
133
134	mutex_lock(&phy_fixup_lock);
135	list_for_each_entry(fixup, &phy_fixup_list, list) {
136		if (phy_needs_fixup(phydev, fixup)) {
137			int err = fixup->run(phydev);
138
139			if (err < 0) {
140				mutex_unlock(&phy_fixup_lock);
141				return err;
142			}
143			phydev->has_fixups = true;
144		}
145	}
146	mutex_unlock(&phy_fixup_lock);
147
148	return 0;
149}
150
151struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
152				     bool is_c45,
153				     struct phy_c45_device_ids *c45_ids)
154{
155	struct phy_device *dev;
156
157	/* We allocate the device, and initialize the default values */
158	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
159	if (!dev)
160		return ERR_PTR(-ENOMEM);
161
162	dev->dev.release = phy_device_release;
163
164	dev->speed = 0;
165	dev->duplex = -1;
166	dev->pause = 0;
167	dev->asym_pause = 0;
168	dev->link = 1;
169	dev->interface = PHY_INTERFACE_MODE_GMII;
170
171	dev->autoneg = AUTONEG_ENABLE;
172
173	dev->is_c45 = is_c45;
174	dev->addr = addr;
175	dev->phy_id = phy_id;
176	if (c45_ids)
177		dev->c45_ids = *c45_ids;
178	dev->bus = bus;
179	dev->dev.parent = &bus->dev;
180	dev->dev.bus = &mdio_bus_type;
181	dev->irq = bus->irq ? bus->irq[addr] : PHY_POLL;
182	dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
183
184	dev->state = PHY_DOWN;
185
186	mutex_init(&dev->lock);
187	INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
188	INIT_WORK(&dev->phy_queue, phy_change);
189
190	/* Request the appropriate module unconditionally; don't
191	 * bother trying to do so only if it isn't already loaded,
192	 * because that gets complicated. A hotplug event would have
193	 * done an unconditional modprobe anyway.
194	 * We don't do normal hotplug because it won't work for MDIO
195	 * -- because it relies on the device staying around for long
196	 * enough for the driver to get loaded. With MDIO, the NIC
197	 * driver will get bored and give up as soon as it finds that
198	 * there's no driver _already_ loaded.
199	 */
200	request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
201
202	device_initialize(&dev->dev);
203
204	return dev;
205}
206EXPORT_SYMBOL(phy_device_create);
207
208/* get_phy_c45_devs_in_pkg - reads a MMD's devices in package registers.
209 * @bus: the target MII bus
210 * @addr: PHY address on the MII bus
211 * @dev_addr: MMD address in the PHY.
212 * @devices_in_package: where to store the devices in package information.
213 *
214 * Description: reads devices in package registers of a MMD at @dev_addr
215 * from PHY at @addr on @bus.
216 *
217 * Returns: 0 on success, -EIO on failure.
218 */
219static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
220				   u32 *devices_in_package)
221{
222	int phy_reg, reg_addr;
223
224	reg_addr = MII_ADDR_C45 | dev_addr << 16 | MDIO_DEVS2;
225	phy_reg = mdiobus_read(bus, addr, reg_addr);
226	if (phy_reg < 0)
227		return -EIO;
228	*devices_in_package = (phy_reg & 0xffff) << 16;
229
230	reg_addr = MII_ADDR_C45 | dev_addr << 16 | MDIO_DEVS1;
231	phy_reg = mdiobus_read(bus, addr, reg_addr);
232	if (phy_reg < 0)
233		return -EIO;
234	*devices_in_package |= (phy_reg & 0xffff);
235
236	return 0;
237}
238
239/**
240 * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs.
241 * @bus: the target MII bus
242 * @addr: PHY address on the MII bus
243 * @phy_id: where to store the ID retrieved.
244 * @c45_ids: where to store the c45 ID information.
245 *
246 *   If the PHY devices-in-package appears to be valid, it and the
247 *   corresponding identifiers are stored in @c45_ids, zero is stored
248 *   in @phy_id.  Otherwise 0xffffffff is stored in @phy_id.  Returns
249 *   zero on success.
250 *
251 */
252static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
253			   struct phy_c45_device_ids *c45_ids) {
254	int phy_reg;
255	int i, reg_addr;
256	const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
257	u32 *devs = &c45_ids->devices_in_package;
258
259	/* Find first non-zero Devices In package. Device zero is reserved
260	 * for 802.3 c45 complied PHYs, so don't probe it at first.
261	 */
262	for (i = 1; i < num_ids && *devs == 0; i++) {
263		phy_reg = get_phy_c45_devs_in_pkg(bus, addr, i, devs);
264		if (phy_reg < 0)
265			return -EIO;
266
267		if ((*devs & 0x1fffffff) == 0x1fffffff) {
268			/*  If mostly Fs, there is no device there,
269			 *  then let's continue to probe more, as some
270			 *  10G PHYs have zero Devices In package,
271			 *  e.g. Cortina CS4315/CS4340 PHY.
272			 */
273			phy_reg = get_phy_c45_devs_in_pkg(bus, addr, 0, devs);
274			if (phy_reg < 0)
275				return -EIO;
276			/* no device there, let's get out of here */
277			if ((*devs & 0x1fffffff) == 0x1fffffff) {
278				*phy_id = 0xffffffff;
279				return 0;
280			} else {
281				break;
282			}
283		}
284	}
285
286	/* Now probe Device Identifiers for each device present. */
287	for (i = 1; i < num_ids; i++) {
288		if (!(c45_ids->devices_in_package & (1 << i)))
289			continue;
290
291		reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
292		phy_reg = mdiobus_read(bus, addr, reg_addr);
293		if (phy_reg < 0)
294			return -EIO;
295		c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
296
297		reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2;
298		phy_reg = mdiobus_read(bus, addr, reg_addr);
299		if (phy_reg < 0)
300			return -EIO;
301		c45_ids->device_ids[i] |= (phy_reg & 0xffff);
302	}
303	*phy_id = 0;
304	return 0;
305}
306
307/**
308 * get_phy_id - reads the specified addr for its ID.
309 * @bus: the target MII bus
310 * @addr: PHY address on the MII bus
311 * @phy_id: where to store the ID retrieved.
312 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
313 * @c45_ids: where to store the c45 ID information.
314 *
315 * Description: In the case of a 802.3-c22 PHY, reads the ID registers
316 *   of the PHY at @addr on the @bus, stores it in @phy_id and returns
317 *   zero on success.
318 *
319 *   In the case of a 802.3-c45 PHY, get_phy_c45_ids() is invoked, and
320 *   its return value is in turn returned.
321 *
322 */
323static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
324		      bool is_c45, struct phy_c45_device_ids *c45_ids)
325{
326	int phy_reg;
327
328	if (is_c45)
329		return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
330
331	/* Grab the bits from PHYIR1, and put them in the upper half */
332	phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
333	if (phy_reg < 0)
334		return -EIO;
335
336	*phy_id = (phy_reg & 0xffff) << 16;
337
338	/* Grab the bits from PHYIR2, and put them in the lower half */
339	phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
340	if (phy_reg < 0)
341		return -EIO;
342
343	*phy_id |= (phy_reg & 0xffff);
344
345	return 0;
346}
347
348/**
349 * get_phy_device - reads the specified PHY device and returns its @phy_device
350 *		    struct
351 * @bus: the target MII bus
352 * @addr: PHY address on the MII bus
353 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
354 *
355 * Description: Reads the ID registers of the PHY at @addr on the
356 *   @bus, then allocates and returns the phy_device to represent it.
357 */
358struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
359{
360	struct phy_c45_device_ids c45_ids = {0};
361	u32 phy_id = 0;
362	int r;
363
364	r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
365	if (r)
366		return ERR_PTR(r);
367
368	/* If the phy_id is mostly Fs, there is no device there */
369	if ((phy_id & 0x1fffffff) == 0x1fffffff)
370		return NULL;
371
372	return phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
373}
374EXPORT_SYMBOL(get_phy_device);
375
376/**
377 * phy_device_register - Register the phy device on the MDIO bus
378 * @phydev: phy_device structure to be added to the MDIO bus
379 */
380int phy_device_register(struct phy_device *phydev)
381{
382	int err;
383
384	/* Don't register a phy if one is already registered at this address */
385	if (phydev->bus->phy_map[phydev->addr])
386		return -EINVAL;
387	phydev->bus->phy_map[phydev->addr] = phydev;
388
389	/* Run all of the fixups for this PHY */
390	err = phy_scan_fixups(phydev);
391	if (err) {
392		pr_err("PHY %d failed to initialize\n", phydev->addr);
393		goto out;
394	}
395
396	err = device_add(&phydev->dev);
397	if (err) {
398		pr_err("PHY %d failed to add\n", phydev->addr);
399		goto out;
400	}
401
402	return 0;
403
404 out:
405	phydev->bus->phy_map[phydev->addr] = NULL;
406	return err;
407}
408EXPORT_SYMBOL(phy_device_register);
409
410/**
411 * phy_device_remove - Remove a previously registered phy device from the MDIO bus
412 * @phydev: phy_device structure to remove
413 *
414 * This doesn't free the phy_device itself, it merely reverses the effects
415 * of phy_device_register(). Use phy_device_free() to free the device
416 * after calling this function.
417 */
418void phy_device_remove(struct phy_device *phydev)
419{
420	struct mii_bus *bus = phydev->bus;
421	int addr = phydev->addr;
422
423	device_del(&phydev->dev);
424	bus->phy_map[addr] = NULL;
425}
426EXPORT_SYMBOL(phy_device_remove);
427
428/**
429 * phy_find_first - finds the first PHY device on the bus
430 * @bus: the target MII bus
431 */
432struct phy_device *phy_find_first(struct mii_bus *bus)
433{
434	int addr;
435
436	for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
437		if (bus->phy_map[addr])
438			return bus->phy_map[addr];
439	}
440	return NULL;
441}
442EXPORT_SYMBOL(phy_find_first);
443
444/**
445 * phy_prepare_link - prepares the PHY layer to monitor link status
446 * @phydev: target phy_device struct
447 * @handler: callback function for link status change notifications
448 *
449 * Description: Tells the PHY infrastructure to handle the
450 *   gory details on monitoring link status (whether through
451 *   polling or an interrupt), and to call back to the
452 *   connected device driver when the link status changes.
453 *   If you want to monitor your own link state, don't call
454 *   this function.
455 */
456static void phy_prepare_link(struct phy_device *phydev,
457			     void (*handler)(struct net_device *))
458{
459	phydev->adjust_link = handler;
460}
461
462/**
463 * phy_connect_direct - connect an ethernet device to a specific phy_device
464 * @dev: the network device to connect
465 * @phydev: the pointer to the phy device
466 * @handler: callback function for state change notifications
467 * @interface: PHY device's interface
468 */
469int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
470		       void (*handler)(struct net_device *),
471		       phy_interface_t interface)
472{
473	int rc;
474
475	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
476	if (rc)
477		return rc;
478
479	phy_prepare_link(phydev, handler);
480	phy_start_machine(phydev);
481	if (phydev->irq > 0)
482		phy_start_interrupts(phydev);
483
484	return 0;
485}
486EXPORT_SYMBOL(phy_connect_direct);
487
488/**
489 * phy_connect - connect an ethernet device to a PHY device
490 * @dev: the network device to connect
491 * @bus_id: the id string of the PHY device to connect
492 * @handler: callback function for state change notifications
493 * @interface: PHY device's interface
494 *
495 * Description: Convenience function for connecting ethernet
496 *   devices to PHY devices.  The default behavior is for
497 *   the PHY infrastructure to handle everything, and only notify
498 *   the connected driver when the link status changes.  If you
499 *   don't want, or can't use the provided functionality, you may
500 *   choose to call only the subset of functions which provide
501 *   the desired functionality.
502 */
503struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
504			       void (*handler)(struct net_device *),
505			       phy_interface_t interface)
506{
507	struct phy_device *phydev;
508	struct device *d;
509	int rc;
510
511	/* Search the list of PHY devices on the mdio bus for the
512	 * PHY with the requested name
513	 */
514	d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
515	if (!d) {
516		pr_err("PHY %s not found\n", bus_id);
517		return ERR_PTR(-ENODEV);
518	}
519	phydev = to_phy_device(d);
520
521	rc = phy_connect_direct(dev, phydev, handler, interface);
522	if (rc)
523		return ERR_PTR(rc);
524
525	return phydev;
526}
527EXPORT_SYMBOL(phy_connect);
528
529/**
530 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY
531 *		    device
532 * @phydev: target phy_device struct
533 */
534void phy_disconnect(struct phy_device *phydev)
535{
536	if (phydev->irq > 0)
537		phy_stop_interrupts(phydev);
538
539	phy_stop_machine(phydev);
540
541	phydev->adjust_link = NULL;
542
543	phy_detach(phydev);
544}
545EXPORT_SYMBOL(phy_disconnect);
546
547/**
548 * phy_poll_reset - Safely wait until a PHY reset has properly completed
549 * @phydev: The PHY device to poll
550 *
551 * Description: According to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as
552 *   published in 2008, a PHY reset may take up to 0.5 seconds.  The MII BMCR
553 *   register must be polled until the BMCR_RESET bit clears.
554 *
555 *   Furthermore, any attempts to write to PHY registers may have no effect
556 *   or even generate MDIO bus errors until this is complete.
557 *
558 *   Some PHYs (such as the Marvell 88E1111) don't entirely conform to the
559 *   standard and do not fully reset after the BMCR_RESET bit is set, and may
560 *   even *REQUIRE* a soft-reset to properly restart autonegotiation.  In an
561 *   effort to support such broken PHYs, this function is separate from the
562 *   standard phy_init_hw() which will zero all the other bits in the BMCR
563 *   and reapply all driver-specific and board-specific fixups.
564 */
565static int phy_poll_reset(struct phy_device *phydev)
566{
567	/* Poll until the reset bit clears (50ms per retry == 0.6 sec) */
568	unsigned int retries = 12;
569	int ret;
570
571	do {
572		msleep(50);
573		ret = phy_read(phydev, MII_BMCR);
574		if (ret < 0)
575			return ret;
576	} while (ret & BMCR_RESET && --retries);
577	if (ret & BMCR_RESET)
578		return -ETIMEDOUT;
579
580	/* Some chips (smsc911x) may still need up to another 1ms after the
581	 * BMCR_RESET bit is cleared before they are usable.
582	 */
583	msleep(1);
584	return 0;
585}
586
587int phy_init_hw(struct phy_device *phydev)
588{
589	int ret = 0;
590
591	if (!phydev->drv || !phydev->drv->config_init)
592		return 0;
593
594	if (phydev->drv->soft_reset)
595		ret = phydev->drv->soft_reset(phydev);
596	else
597		ret = genphy_soft_reset(phydev);
598
599	if (ret < 0)
600		return ret;
601
602	ret = phy_scan_fixups(phydev);
603	if (ret < 0)
604		return ret;
605
606	return phydev->drv->config_init(phydev);
607}
608EXPORT_SYMBOL(phy_init_hw);
609
610/**
611 * phy_attach_direct - attach a network device to a given PHY device pointer
612 * @dev: network device to attach
613 * @phydev: Pointer to phy_device to attach
614 * @flags: PHY device's dev_flags
615 * @interface: PHY device's interface
616 *
617 * Description: Called by drivers to attach to a particular PHY
618 *     device. The phy_device is found, and properly hooked up
619 *     to the phy_driver.  If no driver is attached, then a
620 *     generic driver is used.  The phy_device is given a ptr to
621 *     the attaching device, and given a callback for link status
622 *     change.  The phy_device is returned to the attaching driver.
623 *     This function takes a reference on the phy device.
624 */
625int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
626		      u32 flags, phy_interface_t interface)
627{
628	struct mii_bus *bus = phydev->bus;
629	struct device *d = &phydev->dev;
630	int err;
631
632	if (!try_module_get(bus->owner)) {
633		dev_err(&dev->dev, "failed to get the bus module\n");
634		return -EIO;
635	}
636
637	get_device(d);
638
639	/* Assume that if there is no driver, that it doesn't
640	 * exist, and we should use the genphy driver.
641	 */
642	if (!d->driver) {
643		if (phydev->is_c45)
644			d->driver = &genphy_driver[GENPHY_DRV_10G].driver;
645		else
646			d->driver = &genphy_driver[GENPHY_DRV_1G].driver;
647
648		err = d->driver->probe(d);
649		if (err >= 0)
650			err = device_bind_driver(d);
651
652		if (err)
653			goto error;
654	}
655
656	if (phydev->attached_dev) {
657		dev_err(&dev->dev, "PHY already attached\n");
658		err = -EBUSY;
659		goto error;
660	}
661
662	phydev->attached_dev = dev;
663	dev->phydev = phydev;
664
665	phydev->dev_flags = flags;
666
667	phydev->interface = interface;
668
669	phydev->state = PHY_READY;
670
671	/* Do initial configuration here, now that
672	 * we have certain key parameters
673	 * (dev_flags and interface)
674	 */
675	err = phy_init_hw(phydev);
676	if (err)
677		phy_detach(phydev);
678	else
679		phy_resume(phydev);
680
681	return err;
682
683error:
684	put_device(d);
685	module_put(bus->owner);
686	return err;
687}
688EXPORT_SYMBOL(phy_attach_direct);
689
690/**
691 * phy_attach - attach a network device to a particular PHY device
692 * @dev: network device to attach
693 * @bus_id: Bus ID of PHY device to attach
694 * @interface: PHY device's interface
695 *
696 * Description: Same as phy_attach_direct() except that a PHY bus_id
697 *     string is passed instead of a pointer to a struct phy_device.
698 */
699struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
700			      phy_interface_t interface)
701{
702	struct bus_type *bus = &mdio_bus_type;
703	struct phy_device *phydev;
704	struct device *d;
705	int rc;
706
707	/* Search the list of PHY devices on the mdio bus for the
708	 * PHY with the requested name
709	 */
710	d = bus_find_device_by_name(bus, NULL, bus_id);
711	if (!d) {
712		pr_err("PHY %s not found\n", bus_id);
713		return ERR_PTR(-ENODEV);
714	}
715	phydev = to_phy_device(d);
716
717	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
718	if (rc)
719		return ERR_PTR(rc);
720
721	return phydev;
722}
723EXPORT_SYMBOL(phy_attach);
724
725/**
726 * phy_detach - detach a PHY device from its network device
727 * @phydev: target phy_device struct
728 *
729 * This detaches the phy device from its network device and the phy
730 * driver, and drops the reference count taken in phy_attach_direct().
731 */
732void phy_detach(struct phy_device *phydev)
733{
734	struct mii_bus *bus;
735	int i;
736
737	phydev->attached_dev->phydev = NULL;
738	phydev->attached_dev = NULL;
739	phy_suspend(phydev);
740
741	/* If the device had no specific driver before (i.e. - it
742	 * was using the generic driver), we unbind the device
743	 * from the generic driver so that there's a chance a
744	 * real driver could be loaded
745	 */
746	for (i = 0; i < ARRAY_SIZE(genphy_driver); i++) {
747		if (phydev->dev.driver == &genphy_driver[i].driver) {
748			device_release_driver(&phydev->dev);
749			break;
750		}
751	}
752
753	/*
754	 * The phydev might go away on the put_device() below, so avoid
755	 * a use-after-free bug by reading the underlying bus first.
756	 */
757	bus = phydev->bus;
758
759	put_device(&phydev->dev);
760	module_put(bus->owner);
761}
762EXPORT_SYMBOL(phy_detach);
763
764int phy_suspend(struct phy_device *phydev)
765{
766	struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
767	struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
768	int ret = 0;
769
770	/* If the device has WOL enabled, we cannot suspend the PHY */
771	phy_ethtool_get_wol(phydev, &wol);
772	if (wol.wolopts)
773		return -EBUSY;
774
775	if (phydrv->suspend)
776		ret = phydrv->suspend(phydev);
777
778	if (ret)
779		return ret;
780
781	phydev->suspended = true;
782
783	return ret;
784}
785EXPORT_SYMBOL(phy_suspend);
786
787int phy_resume(struct phy_device *phydev)
788{
789	struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
790	int ret = 0;
791
792	if (phydrv->resume)
793		ret = phydrv->resume(phydev);
794
795	if (ret)
796		return ret;
797
798	phydev->suspended = false;
799
800	return ret;
801}
802EXPORT_SYMBOL(phy_resume);
803
804/* Generic PHY support and helper functions */
805
806/**
807 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
808 * @phydev: target phy_device struct
809 *
810 * Description: Writes MII_ADVERTISE with the appropriate values,
811 *   after sanitizing the values to make sure we only advertise
812 *   what is supported.  Returns < 0 on error, 0 if the PHY's advertisement
813 *   hasn't changed, and > 0 if it has changed.
814 */
815static int genphy_config_advert(struct phy_device *phydev)
816{
817	u32 advertise;
818	int oldadv, adv, bmsr;
819	int err, changed = 0;
820
821	/* Only allow advertising what this PHY supports */
822	phydev->advertising &= phydev->supported;
823	advertise = phydev->advertising;
824
825	/* Setup standard advertisement */
826	adv = phy_read(phydev, MII_ADVERTISE);
827	if (adv < 0)
828		return adv;
829
830	oldadv = adv;
831	adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
832		 ADVERTISE_PAUSE_ASYM);
833	adv |= ethtool_adv_to_mii_adv_t(advertise);
834
835	if (adv != oldadv) {
836		err = phy_write(phydev, MII_ADVERTISE, adv);
837
838		if (err < 0)
839			return err;
840		changed = 1;
841	}
842
843	bmsr = phy_read(phydev, MII_BMSR);
844	if (bmsr < 0)
845		return bmsr;
846
847	/* Per 802.3-2008, Section 22.2.4.2.16 Extended status all
848	 * 1000Mbits/sec capable PHYs shall have the BMSR_ESTATEN bit set to a
849	 * logical 1.
850	 */
851	if (!(bmsr & BMSR_ESTATEN))
852		return changed;
853
854	/* Configure gigabit if it's supported */
855	adv = phy_read(phydev, MII_CTRL1000);
856	if (adv < 0)
857		return adv;
858
859	oldadv = adv;
860	adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
861
862	if (phydev->supported & (SUPPORTED_1000baseT_Half |
863				 SUPPORTED_1000baseT_Full)) {
864		adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
865	}
866
867	if (adv != oldadv)
868		changed = 1;
869
870	err = phy_write(phydev, MII_CTRL1000, adv);
871	if (err < 0)
872		return err;
873
874	return changed;
875}
876
877/**
878 * genphy_setup_forced - configures/forces speed/duplex from @phydev
879 * @phydev: target phy_device struct
880 *
881 * Description: Configures MII_BMCR to force speed/duplex
882 *   to the values in phydev. Assumes that the values are valid.
883 *   Please see phy_sanitize_settings().
884 */
885int genphy_setup_forced(struct phy_device *phydev)
886{
887	int ctl = 0;
888
889	phydev->pause = 0;
890	phydev->asym_pause = 0;
891
892	if (SPEED_1000 == phydev->speed)
893		ctl |= BMCR_SPEED1000;
894	else if (SPEED_100 == phydev->speed)
895		ctl |= BMCR_SPEED100;
896
897	if (DUPLEX_FULL == phydev->duplex)
898		ctl |= BMCR_FULLDPLX;
899
900	return phy_write(phydev, MII_BMCR, ctl);
901}
902EXPORT_SYMBOL(genphy_setup_forced);
903
904/**
905 * genphy_restart_aneg - Enable and Restart Autonegotiation
906 * @phydev: target phy_device struct
907 */
908int genphy_restart_aneg(struct phy_device *phydev)
909{
910	int ctl = phy_read(phydev, MII_BMCR);
911
912	if (ctl < 0)
913		return ctl;
914
915	ctl |= BMCR_ANENABLE | BMCR_ANRESTART;
916
917	/* Don't isolate the PHY if we're negotiating */
918	ctl &= ~BMCR_ISOLATE;
919
920	return phy_write(phydev, MII_BMCR, ctl);
921}
922EXPORT_SYMBOL(genphy_restart_aneg);
923
924/**
925 * genphy_config_aneg - restart auto-negotiation or write BMCR
926 * @phydev: target phy_device struct
927 *
928 * Description: If auto-negotiation is enabled, we configure the
929 *   advertising, and then restart auto-negotiation.  If it is not
930 *   enabled, then we write the BMCR.
931 */
932int genphy_config_aneg(struct phy_device *phydev)
933{
934	int result;
935
936	if (AUTONEG_ENABLE != phydev->autoneg)
937		return genphy_setup_forced(phydev);
938
939	result = genphy_config_advert(phydev);
940	if (result < 0) /* error */
941		return result;
942	if (result == 0) {
943		/* Advertisement hasn't changed, but maybe aneg was never on to
944		 * begin with?  Or maybe phy was isolated?
945		 */
946		int ctl = phy_read(phydev, MII_BMCR);
947
948		if (ctl < 0)
949			return ctl;
950
951		if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
952			result = 1; /* do restart aneg */
953	}
954
955	/* Only restart aneg if we are advertising something different
956	 * than we were before.
957	 */
958	if (result > 0)
959		result = genphy_restart_aneg(phydev);
960
961	return result;
962}
963EXPORT_SYMBOL(genphy_config_aneg);
964
965/**
966 * genphy_aneg_done - return auto-negotiation status
967 * @phydev: target phy_device struct
968 *
969 * Description: Reads the status register and returns 0 either if
970 *   auto-negotiation is incomplete, or if there was an error.
971 *   Returns BMSR_ANEGCOMPLETE if auto-negotiation is done.
972 */
973int genphy_aneg_done(struct phy_device *phydev)
974{
975	int retval = phy_read(phydev, MII_BMSR);
976
977	return (retval < 0) ? retval : (retval & BMSR_ANEGCOMPLETE);
978}
979EXPORT_SYMBOL(genphy_aneg_done);
980
981static int gen10g_config_aneg(struct phy_device *phydev)
982{
983	return 0;
984}
985
986/**
987 * genphy_update_link - update link status in @phydev
988 * @phydev: target phy_device struct
989 *
990 * Description: Update the value in phydev->link to reflect the
991 *   current link value.  In order to do this, we need to read
992 *   the status register twice, keeping the second value.
993 */
994int genphy_update_link(struct phy_device *phydev)
995{
996	int status;
997
998	/* Do a fake read */
999	status = phy_read(phydev, MII_BMSR);
1000	if (status < 0)
1001		return status;
1002
1003	/* Read link and autonegotiation status */
1004	status = phy_read(phydev, MII_BMSR);
1005	if (status < 0)
1006		return status;
1007
1008	if ((status & BMSR_LSTATUS) == 0)
1009		phydev->link = 0;
1010	else
1011		phydev->link = 1;
1012
1013	return 0;
1014}
1015EXPORT_SYMBOL(genphy_update_link);
1016
1017/**
1018 * genphy_read_status - check the link status and update current link state
1019 * @phydev: target phy_device struct
1020 *
1021 * Description: Check the link, then figure out the current state
1022 *   by comparing what we advertise with what the link partner
1023 *   advertises.  Start by checking the gigabit possibilities,
1024 *   then move on to 10/100.
1025 */
1026int genphy_read_status(struct phy_device *phydev)
1027{
1028	int adv;
1029	int err;
1030	int lpa;
1031	int lpagb = 0;
1032	int common_adv;
1033	int common_adv_gb = 0;
1034
1035	/* Update the link, but return if there was an error */
1036	err = genphy_update_link(phydev);
1037	if (err)
1038		return err;
1039
1040	phydev->lp_advertising = 0;
1041
1042	if (AUTONEG_ENABLE == phydev->autoneg) {
1043		if (phydev->supported & (SUPPORTED_1000baseT_Half
1044					| SUPPORTED_1000baseT_Full)) {
1045			lpagb = phy_read(phydev, MII_STAT1000);
1046			if (lpagb < 0)
1047				return lpagb;
1048
1049			adv = phy_read(phydev, MII_CTRL1000);
1050			if (adv < 0)
1051				return adv;
1052
1053			phydev->lp_advertising =
1054				mii_stat1000_to_ethtool_lpa_t(lpagb);
1055			common_adv_gb = lpagb & adv << 2;
1056		}
1057
1058		lpa = phy_read(phydev, MII_LPA);
1059		if (lpa < 0)
1060			return lpa;
1061
1062		phydev->lp_advertising |= mii_lpa_to_ethtool_lpa_t(lpa);
1063
1064		adv = phy_read(phydev, MII_ADVERTISE);
1065		if (adv < 0)
1066			return adv;
1067
1068		common_adv = lpa & adv;
1069
1070		phydev->speed = SPEED_10;
1071		phydev->duplex = DUPLEX_HALF;
1072		phydev->pause = 0;
1073		phydev->asym_pause = 0;
1074
1075		if (common_adv_gb & (LPA_1000FULL | LPA_1000HALF)) {
1076			phydev->speed = SPEED_1000;
1077
1078			if (common_adv_gb & LPA_1000FULL)
1079				phydev->duplex = DUPLEX_FULL;
1080		} else if (common_adv & (LPA_100FULL | LPA_100HALF)) {
1081			phydev->speed = SPEED_100;
1082
1083			if (common_adv & LPA_100FULL)
1084				phydev->duplex = DUPLEX_FULL;
1085		} else
1086			if (common_adv & LPA_10FULL)
1087				phydev->duplex = DUPLEX_FULL;
1088
1089		if (phydev->duplex == DUPLEX_FULL) {
1090			phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
1091			phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
1092		}
1093	} else {
1094		int bmcr = phy_read(phydev, MII_BMCR);
1095
1096		if (bmcr < 0)
1097			return bmcr;
1098
1099		if (bmcr & BMCR_FULLDPLX)
1100			phydev->duplex = DUPLEX_FULL;
1101		else
1102			phydev->duplex = DUPLEX_HALF;
1103
1104		if (bmcr & BMCR_SPEED1000)
1105			phydev->speed = SPEED_1000;
1106		else if (bmcr & BMCR_SPEED100)
1107			phydev->speed = SPEED_100;
1108		else
1109			phydev->speed = SPEED_10;
1110
1111		phydev->pause = 0;
1112		phydev->asym_pause = 0;
1113	}
1114
1115	return 0;
1116}
1117EXPORT_SYMBOL(genphy_read_status);
1118
1119static int gen10g_read_status(struct phy_device *phydev)
1120{
1121	int devad, reg;
1122	u32 mmd_mask = phydev->c45_ids.devices_in_package;
1123
1124	phydev->link = 1;
1125
1126	/* For now just lie and say it's 10G all the time */
1127	phydev->speed = SPEED_10000;
1128	phydev->duplex = DUPLEX_FULL;
1129
1130	for (devad = 0; mmd_mask; devad++, mmd_mask = mmd_mask >> 1) {
1131		if (!(mmd_mask & 1))
1132			continue;
1133
1134		/* Read twice because link state is latched and a
1135		 * read moves the current state into the register
1136		 */
1137		phy_read_mmd(phydev, devad, MDIO_STAT1);
1138		reg = phy_read_mmd(phydev, devad, MDIO_STAT1);
1139		if (reg < 0 || !(reg & MDIO_STAT1_LSTATUS))
1140			phydev->link = 0;
1141	}
1142
1143	return 0;
1144}
1145
1146/**
1147 * genphy_soft_reset - software reset the PHY via BMCR_RESET bit
1148 * @phydev: target phy_device struct
1149 *
1150 * Description: Perform a software PHY reset using the standard
1151 * BMCR_RESET bit and poll for the reset bit to be cleared.
1152 *
1153 * Returns: 0 on success, < 0 on failure
1154 */
1155int genphy_soft_reset(struct phy_device *phydev)
1156{
1157	int ret;
1158
1159	ret = phy_write(phydev, MII_BMCR, BMCR_RESET);
1160	if (ret < 0)
1161		return ret;
1162
1163	return phy_poll_reset(phydev);
1164}
1165EXPORT_SYMBOL(genphy_soft_reset);
1166
1167int genphy_config_init(struct phy_device *phydev)
1168{
1169	int val;
1170	u32 features;
1171
1172	features = (SUPPORTED_TP | SUPPORTED_MII
1173			| SUPPORTED_AUI | SUPPORTED_FIBRE |
1174			SUPPORTED_BNC);
1175
1176	/* Do we support autonegotiation? */
1177	val = phy_read(phydev, MII_BMSR);
1178	if (val < 0)
1179		return val;
1180
1181	if (val & BMSR_ANEGCAPABLE)
1182		features |= SUPPORTED_Autoneg;
1183
1184	if (val & BMSR_100FULL)
1185		features |= SUPPORTED_100baseT_Full;
1186	if (val & BMSR_100HALF)
1187		features |= SUPPORTED_100baseT_Half;
1188	if (val & BMSR_10FULL)
1189		features |= SUPPORTED_10baseT_Full;
1190	if (val & BMSR_10HALF)
1191		features |= SUPPORTED_10baseT_Half;
1192
1193	if (val & BMSR_ESTATEN) {
1194		val = phy_read(phydev, MII_ESTATUS);
1195		if (val < 0)
1196			return val;
1197
1198		if (val & ESTATUS_1000_TFULL)
1199			features |= SUPPORTED_1000baseT_Full;
1200		if (val & ESTATUS_1000_THALF)
1201			features |= SUPPORTED_1000baseT_Half;
1202	}
1203
1204	phydev->supported &= features;
1205	phydev->advertising &= features;
1206
1207	return 0;
1208}
1209
1210static int gen10g_soft_reset(struct phy_device *phydev)
1211{
1212	/* Do nothing for now */
1213	return 0;
1214}
1215EXPORT_SYMBOL(genphy_config_init);
1216
1217static int gen10g_config_init(struct phy_device *phydev)
1218{
1219	/* Temporarily just say we support everything */
1220	phydev->supported = SUPPORTED_10000baseT_Full;
1221	phydev->advertising = SUPPORTED_10000baseT_Full;
1222
1223	return 0;
1224}
1225
1226int genphy_suspend(struct phy_device *phydev)
1227{
1228	int value;
1229
1230	mutex_lock(&phydev->lock);
1231
1232	value = phy_read(phydev, MII_BMCR);
1233	phy_write(phydev, MII_BMCR, value | BMCR_PDOWN);
1234
1235	mutex_unlock(&phydev->lock);
1236
1237	return 0;
1238}
1239EXPORT_SYMBOL(genphy_suspend);
1240
1241static int gen10g_suspend(struct phy_device *phydev)
1242{
1243	return 0;
1244}
1245
1246int genphy_resume(struct phy_device *phydev)
1247{
1248	int value;
1249
1250	mutex_lock(&phydev->lock);
1251
1252	value = phy_read(phydev, MII_BMCR);
1253	phy_write(phydev, MII_BMCR, value & ~BMCR_PDOWN);
1254
1255	mutex_unlock(&phydev->lock);
1256
1257	return 0;
1258}
1259EXPORT_SYMBOL(genphy_resume);
1260
1261static int gen10g_resume(struct phy_device *phydev)
1262{
1263	return 0;
1264}
1265
1266static int __set_phy_supported(struct phy_device *phydev, u32 max_speed)
1267{
1268	/* The default values for phydev->supported are provided by the PHY
1269	 * driver "features" member, we want to reset to sane defaults first
1270	 * before supporting higher speeds.
1271	 */
1272	phydev->supported &= PHY_DEFAULT_FEATURES;
1273
1274	switch (max_speed) {
1275	default:
1276		return -ENOTSUPP;
1277	case SPEED_1000:
1278		phydev->supported |= PHY_1000BT_FEATURES;
1279		/* fall through */
1280	case SPEED_100:
1281		phydev->supported |= PHY_100BT_FEATURES;
1282		/* fall through */
1283	case SPEED_10:
1284		phydev->supported |= PHY_10BT_FEATURES;
1285	}
1286
1287	return 0;
1288}
1289
1290int phy_set_max_speed(struct phy_device *phydev, u32 max_speed)
1291{
1292	int err;
1293
1294	err = __set_phy_supported(phydev, max_speed);
1295	if (err)
1296		return err;
1297
1298	phydev->advertising = phydev->supported;
1299
1300	return 0;
1301}
1302EXPORT_SYMBOL(phy_set_max_speed);
1303
1304static void of_set_phy_supported(struct phy_device *phydev)
1305{
1306	struct device_node *node = phydev->dev.of_node;
1307	u32 max_speed;
1308
1309	if (!IS_ENABLED(CONFIG_OF_MDIO))
1310		return;
1311
1312	if (!node)
1313		return;
1314
1315	if (!of_property_read_u32(node, "max-speed", &max_speed))
1316		__set_phy_supported(phydev, max_speed);
1317}
1318
1319/**
1320 * phy_probe - probe and init a PHY device
1321 * @dev: device to probe and init
1322 *
1323 * Description: Take care of setting up the phy_device structure,
1324 *   set the state to READY (the driver's init function should
1325 *   set it to STARTING if needed).
1326 */
1327static int phy_probe(struct device *dev)
1328{
1329	struct phy_device *phydev = to_phy_device(dev);
1330	struct device_driver *drv = phydev->dev.driver;
1331	struct phy_driver *phydrv = to_phy_driver(drv);
1332	int err = 0;
1333
1334	phydev->drv = phydrv;
1335
1336	/* Disable the interrupt if the PHY doesn't support it
1337	 * but the interrupt is still a valid one
1338	 */
1339	if (!(phydrv->flags & PHY_HAS_INTERRUPT) &&
1340	    phy_interrupt_is_valid(phydev))
1341		phydev->irq = PHY_POLL;
1342
1343	if (phydrv->flags & PHY_IS_INTERNAL)
1344		phydev->is_internal = true;
1345
1346	mutex_lock(&phydev->lock);
1347
1348	/* Start out supporting everything. Eventually,
1349	 * a controller will attach, and may modify one
1350	 * or both of these values
1351	 */
1352	phydev->supported = phydrv->features;
1353	of_set_phy_supported(phydev);
1354	phydev->advertising = phydev->supported;
1355
1356	/* Set the state to READY by default */
1357	phydev->state = PHY_READY;
1358
1359	if (phydev->drv->probe)
1360		err = phydev->drv->probe(phydev);
1361
1362	mutex_unlock(&phydev->lock);
1363
1364	return err;
1365}
1366
1367static int phy_remove(struct device *dev)
1368{
1369	struct phy_device *phydev = to_phy_device(dev);
1370
1371	mutex_lock(&phydev->lock);
1372	phydev->state = PHY_DOWN;
1373	mutex_unlock(&phydev->lock);
1374
1375	if (phydev->drv->remove)
1376		phydev->drv->remove(phydev);
1377	phydev->drv = NULL;
1378
1379	return 0;
1380}
1381
1382/**
1383 * phy_driver_register - register a phy_driver with the PHY layer
1384 * @new_driver: new phy_driver to register
1385 */
1386int phy_driver_register(struct phy_driver *new_driver)
1387{
1388	int retval;
1389
1390	new_driver->driver.name = new_driver->name;
1391	new_driver->driver.bus = &mdio_bus_type;
1392	new_driver->driver.probe = phy_probe;
1393	new_driver->driver.remove = phy_remove;
1394
1395	retval = driver_register(&new_driver->driver);
1396	if (retval) {
1397		pr_err("%s: Error %d in registering driver\n",
1398		       new_driver->name, retval);
1399
1400		return retval;
1401	}
1402
1403	pr_debug("%s: Registered new driver\n", new_driver->name);
1404
1405	return 0;
1406}
1407EXPORT_SYMBOL(phy_driver_register);
1408
1409int phy_drivers_register(struct phy_driver *new_driver, int n)
1410{
1411	int i, ret = 0;
1412
1413	for (i = 0; i < n; i++) {
1414		ret = phy_driver_register(new_driver + i);
1415		if (ret) {
1416			while (i-- > 0)
1417				phy_driver_unregister(new_driver + i);
1418			break;
1419		}
1420	}
1421	return ret;
1422}
1423EXPORT_SYMBOL(phy_drivers_register);
1424
1425void phy_driver_unregister(struct phy_driver *drv)
1426{
1427	driver_unregister(&drv->driver);
1428}
1429EXPORT_SYMBOL(phy_driver_unregister);
1430
1431void phy_drivers_unregister(struct phy_driver *drv, int n)
1432{
1433	int i;
1434
1435	for (i = 0; i < n; i++)
1436		phy_driver_unregister(drv + i);
1437}
1438EXPORT_SYMBOL(phy_drivers_unregister);
1439
1440static struct phy_driver genphy_driver[] = {
1441{
1442	.phy_id		= 0xffffffff,
1443	.phy_id_mask	= 0xffffffff,
1444	.name		= "Generic PHY",
1445	.soft_reset	= genphy_soft_reset,
1446	.config_init	= genphy_config_init,
1447	.features	= PHY_GBIT_FEATURES | SUPPORTED_MII |
1448			  SUPPORTED_AUI | SUPPORTED_FIBRE |
1449			  SUPPORTED_BNC,
1450	.config_aneg	= genphy_config_aneg,
1451	.aneg_done	= genphy_aneg_done,
1452	.read_status	= genphy_read_status,
1453	.suspend	= genphy_suspend,
1454	.resume		= genphy_resume,
1455	.driver		= { .owner = THIS_MODULE, },
1456}, {
1457	.phy_id         = 0xffffffff,
1458	.phy_id_mask    = 0xffffffff,
1459	.name           = "Generic 10G PHY",
1460	.soft_reset	= gen10g_soft_reset,
1461	.config_init    = gen10g_config_init,
1462	.features       = 0,
1463	.config_aneg    = gen10g_config_aneg,
1464	.read_status    = gen10g_read_status,
1465	.suspend        = gen10g_suspend,
1466	.resume         = gen10g_resume,
1467	.driver         = {.owner = THIS_MODULE, },
1468} };
1469
1470static int __init phy_init(void)
1471{
1472	int rc;
1473
1474	rc = mdio_bus_init();
1475	if (rc)
1476		return rc;
1477
1478	rc = phy_drivers_register(genphy_driver,
1479				  ARRAY_SIZE(genphy_driver));
1480	if (rc)
1481		mdio_bus_exit();
1482
1483	return rc;
1484}
1485
1486static void __exit phy_exit(void)
1487{
1488	phy_drivers_unregister(genphy_driver,
1489			       ARRAY_SIZE(genphy_driver));
1490	mdio_bus_exit();
1491}
1492
1493subsys_initcall(phy_init);
1494module_exit(phy_exit);
1495