xref: /openbmc/linux/drivers/net/phy/mdio_bus.c (revision 08283d30)
1 // SPDX-License-Identifier: GPL-2.0+
2 /* MDIO Bus interface
3  *
4  * Author: Andy Fleming
5  *
6  * Copyright (c) 2004 Freescale Semiconductor, Inc.
7  */
8 
9 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
10 
11 #include <linux/kernel.h>
12 #include <linux/string.h>
13 #include <linux/errno.h>
14 #include <linux/unistd.h>
15 #include <linux/slab.h>
16 #include <linux/interrupt.h>
17 #include <linux/init.h>
18 #include <linux/delay.h>
19 #include <linux/device.h>
20 #include <linux/gpio.h>
21 #include <linux/gpio/consumer.h>
22 #include <linux/of_device.h>
23 #include <linux/of_mdio.h>
24 #include <linux/of_gpio.h>
25 #include <linux/netdevice.h>
26 #include <linux/etherdevice.h>
27 #include <linux/reset.h>
28 #include <linux/skbuff.h>
29 #include <linux/spinlock.h>
30 #include <linux/mm.h>
31 #include <linux/module.h>
32 #include <linux/mii.h>
33 #include <linux/ethtool.h>
34 #include <linux/phy.h>
35 #include <linux/io.h>
36 #include <linux/uaccess.h>
37 
38 #define CREATE_TRACE_POINTS
39 #include <trace/events/mdio.h>
40 
41 #include "mdio-boardinfo.h"
42 
43 static int mdiobus_register_gpiod(struct mdio_device *mdiodev)
44 {
45 	int error;
46 
47 	/* Deassert the optional reset signal */
48 	mdiodev->reset_gpio = gpiod_get_optional(&mdiodev->dev,
49 						 "reset", GPIOD_OUT_LOW);
50 	error = PTR_ERR_OR_ZERO(mdiodev->reset_gpio);
51 	if (error)
52 		return error;
53 
54 	if (mdiodev->reset_gpio)
55 		gpiod_set_consumer_name(mdiodev->reset_gpio, "PHY reset");
56 
57 	return 0;
58 }
59 
60 static int mdiobus_register_reset(struct mdio_device *mdiodev)
61 {
62 	struct reset_control *reset = NULL;
63 
64 	if (mdiodev->dev.of_node)
65 		reset = devm_reset_control_get_exclusive(&mdiodev->dev,
66 							 "phy");
67 	if (PTR_ERR(reset) == -ENOENT ||
68 	    PTR_ERR(reset) == -ENOTSUPP)
69 		reset = NULL;
70 	else if (IS_ERR(reset))
71 		return PTR_ERR(reset);
72 
73 	mdiodev->reset_ctrl = reset;
74 
75 	return 0;
76 }
77 
78 int mdiobus_register_device(struct mdio_device *mdiodev)
79 {
80 	int err;
81 
82 	if (mdiodev->bus->mdio_map[mdiodev->addr])
83 		return -EBUSY;
84 
85 	if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY) {
86 		err = mdiobus_register_gpiod(mdiodev);
87 		if (err)
88 			return err;
89 
90 		err = mdiobus_register_reset(mdiodev);
91 		if (err)
92 			return err;
93 
94 		/* Assert the reset signal */
95 		mdio_device_reset(mdiodev, 1);
96 	}
97 
98 	mdiodev->bus->mdio_map[mdiodev->addr] = mdiodev;
99 
100 	return 0;
101 }
102 EXPORT_SYMBOL(mdiobus_register_device);
103 
104 int mdiobus_unregister_device(struct mdio_device *mdiodev)
105 {
106 	if (mdiodev->bus->mdio_map[mdiodev->addr] != mdiodev)
107 		return -EINVAL;
108 
109 	mdiodev->bus->mdio_map[mdiodev->addr] = NULL;
110 
111 	return 0;
112 }
113 EXPORT_SYMBOL(mdiobus_unregister_device);
114 
115 struct phy_device *mdiobus_get_phy(struct mii_bus *bus, int addr)
116 {
117 	struct mdio_device *mdiodev = bus->mdio_map[addr];
118 
119 	if (!mdiodev)
120 		return NULL;
121 
122 	if (!(mdiodev->flags & MDIO_DEVICE_FLAG_PHY))
123 		return NULL;
124 
125 	return container_of(mdiodev, struct phy_device, mdio);
126 }
127 EXPORT_SYMBOL(mdiobus_get_phy);
128 
129 bool mdiobus_is_registered_device(struct mii_bus *bus, int addr)
130 {
131 	return bus->mdio_map[addr];
132 }
133 EXPORT_SYMBOL(mdiobus_is_registered_device);
134 
135 /**
136  * mdiobus_alloc_size - allocate a mii_bus structure
137  * @size: extra amount of memory to allocate for private storage.
138  * If non-zero, then bus->priv is points to that memory.
139  *
140  * Description: called by a bus driver to allocate an mii_bus
141  * structure to fill in.
142  */
143 struct mii_bus *mdiobus_alloc_size(size_t size)
144 {
145 	struct mii_bus *bus;
146 	size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN);
147 	size_t alloc_size;
148 	int i;
149 
150 	/* If we alloc extra space, it should be aligned */
151 	if (size)
152 		alloc_size = aligned_size + size;
153 	else
154 		alloc_size = sizeof(*bus);
155 
156 	bus = kzalloc(alloc_size, GFP_KERNEL);
157 	if (!bus)
158 		return NULL;
159 
160 	bus->state = MDIOBUS_ALLOCATED;
161 	if (size)
162 		bus->priv = (void *)bus + aligned_size;
163 
164 	/* Initialise the interrupts to polling */
165 	for (i = 0; i < PHY_MAX_ADDR; i++)
166 		bus->irq[i] = PHY_POLL;
167 
168 	return bus;
169 }
170 EXPORT_SYMBOL(mdiobus_alloc_size);
171 
172 static void _devm_mdiobus_free(struct device *dev, void *res)
173 {
174 	mdiobus_free(*(struct mii_bus **)res);
175 }
176 
177 static int devm_mdiobus_match(struct device *dev, void *res, void *data)
178 {
179 	struct mii_bus **r = res;
180 
181 	if (WARN_ON(!r || !*r))
182 		return 0;
183 
184 	return *r == data;
185 }
186 
187 /**
188  * devm_mdiobus_alloc_size - Resource-managed mdiobus_alloc_size()
189  * @dev:		Device to allocate mii_bus for
190  * @sizeof_priv:	Space to allocate for private structure.
191  *
192  * Managed mdiobus_alloc_size. mii_bus allocated with this function is
193  * automatically freed on driver detach.
194  *
195  * If an mii_bus allocated with this function needs to be freed separately,
196  * devm_mdiobus_free() must be used.
197  *
198  * RETURNS:
199  * Pointer to allocated mii_bus on success, NULL on failure.
200  */
201 struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv)
202 {
203 	struct mii_bus **ptr, *bus;
204 
205 	ptr = devres_alloc(_devm_mdiobus_free, sizeof(*ptr), GFP_KERNEL);
206 	if (!ptr)
207 		return NULL;
208 
209 	/* use raw alloc_dr for kmalloc caller tracing */
210 	bus = mdiobus_alloc_size(sizeof_priv);
211 	if (bus) {
212 		*ptr = bus;
213 		devres_add(dev, ptr);
214 	} else {
215 		devres_free(ptr);
216 	}
217 
218 	return bus;
219 }
220 EXPORT_SYMBOL_GPL(devm_mdiobus_alloc_size);
221 
222 /**
223  * devm_mdiobus_free - Resource-managed mdiobus_free()
224  * @dev:		Device this mii_bus belongs to
225  * @bus:		the mii_bus associated with the device
226  *
227  * Free mii_bus allocated with devm_mdiobus_alloc_size().
228  */
229 void devm_mdiobus_free(struct device *dev, struct mii_bus *bus)
230 {
231 	int rc;
232 
233 	rc = devres_release(dev, _devm_mdiobus_free,
234 			    devm_mdiobus_match, bus);
235 	WARN_ON(rc);
236 }
237 EXPORT_SYMBOL_GPL(devm_mdiobus_free);
238 
239 /**
240  * mdiobus_release - mii_bus device release callback
241  * @d: the target struct device that contains the mii_bus
242  *
243  * Description: called when the last reference to an mii_bus is
244  * dropped, to free the underlying memory.
245  */
246 static void mdiobus_release(struct device *d)
247 {
248 	struct mii_bus *bus = to_mii_bus(d);
249 	BUG_ON(bus->state != MDIOBUS_RELEASED &&
250 	       /* for compatibility with error handling in drivers */
251 	       bus->state != MDIOBUS_ALLOCATED);
252 	kfree(bus);
253 }
254 
255 static struct class mdio_bus_class = {
256 	.name		= "mdio_bus",
257 	.dev_release	= mdiobus_release,
258 };
259 
260 #if IS_ENABLED(CONFIG_OF_MDIO)
261 /**
262  * of_mdio_find_bus - Given an mii_bus node, find the mii_bus.
263  * @mdio_bus_np: Pointer to the mii_bus.
264  *
265  * Returns a reference to the mii_bus, or NULL if none found.  The
266  * embedded struct device will have its reference count incremented,
267  * and this must be put once the bus is finished with.
268  *
269  * Because the association of a device_node and mii_bus is made via
270  * of_mdiobus_register(), the mii_bus cannot be found before it is
271  * registered with of_mdiobus_register().
272  *
273  */
274 struct mii_bus *of_mdio_find_bus(struct device_node *mdio_bus_np)
275 {
276 	struct device *d;
277 
278 	if (!mdio_bus_np)
279 		return NULL;
280 
281 	d = class_find_device_by_of_node(&mdio_bus_class, mdio_bus_np);
282 	return d ? to_mii_bus(d) : NULL;
283 }
284 EXPORT_SYMBOL(of_mdio_find_bus);
285 
286 /* Walk the list of subnodes of a mdio bus and look for a node that
287  * matches the mdio device's address with its 'reg' property. If
288  * found, set the of_node pointer for the mdio device. This allows
289  * auto-probed phy devices to be supplied with information passed in
290  * via DT.
291  */
292 static void of_mdiobus_link_mdiodev(struct mii_bus *bus,
293 				    struct mdio_device *mdiodev)
294 {
295 	struct device *dev = &mdiodev->dev;
296 	struct device_node *child;
297 
298 	if (dev->of_node || !bus->dev.of_node)
299 		return;
300 
301 	for_each_available_child_of_node(bus->dev.of_node, child) {
302 		int addr;
303 
304 		addr = of_mdio_parse_addr(dev, child);
305 		if (addr < 0)
306 			continue;
307 
308 		if (addr == mdiodev->addr) {
309 			dev->of_node = child;
310 			dev->fwnode = of_fwnode_handle(child);
311 			return;
312 		}
313 	}
314 }
315 #else /* !IS_ENABLED(CONFIG_OF_MDIO) */
316 static inline void of_mdiobus_link_mdiodev(struct mii_bus *mdio,
317 					   struct mdio_device *mdiodev)
318 {
319 }
320 #endif
321 
322 /**
323  * mdiobus_create_device_from_board_info - create a full MDIO device given
324  * a mdio_board_info structure
325  * @bus: MDIO bus to create the devices on
326  * @bi: mdio_board_info structure describing the devices
327  *
328  * Returns 0 on success or < 0 on error.
329  */
330 static int mdiobus_create_device(struct mii_bus *bus,
331 				 struct mdio_board_info *bi)
332 {
333 	struct mdio_device *mdiodev;
334 	int ret = 0;
335 
336 	mdiodev = mdio_device_create(bus, bi->mdio_addr);
337 	if (IS_ERR(mdiodev))
338 		return -ENODEV;
339 
340 	strncpy(mdiodev->modalias, bi->modalias,
341 		sizeof(mdiodev->modalias));
342 	mdiodev->bus_match = mdio_device_bus_match;
343 	mdiodev->dev.platform_data = (void *)bi->platform_data;
344 
345 	ret = mdio_device_register(mdiodev);
346 	if (ret)
347 		mdio_device_free(mdiodev);
348 
349 	return ret;
350 }
351 
352 /**
353  * __mdiobus_register - bring up all the PHYs on a given bus and attach them to bus
354  * @bus: target mii_bus
355  * @owner: module containing bus accessor functions
356  *
357  * Description: Called by a bus driver to bring up all the PHYs
358  *   on a given bus, and attach them to the bus. Drivers should use
359  *   mdiobus_register() rather than __mdiobus_register() unless they
360  *   need to pass a specific owner module. MDIO devices which are not
361  *   PHYs will not be brought up by this function. They are expected to
362  *   to be explicitly listed in DT and instantiated by of_mdiobus_register().
363  *
364  * Returns 0 on success or < 0 on error.
365  */
366 int __mdiobus_register(struct mii_bus *bus, struct module *owner)
367 {
368 	struct mdio_device *mdiodev;
369 	int i, err;
370 	struct gpio_desc *gpiod;
371 
372 	if (NULL == bus || NULL == bus->name ||
373 	    NULL == bus->read || NULL == bus->write)
374 		return -EINVAL;
375 
376 	BUG_ON(bus->state != MDIOBUS_ALLOCATED &&
377 	       bus->state != MDIOBUS_UNREGISTERED);
378 
379 	bus->owner = owner;
380 	bus->dev.parent = bus->parent;
381 	bus->dev.class = &mdio_bus_class;
382 	bus->dev.groups = NULL;
383 	dev_set_name(&bus->dev, "%s", bus->id);
384 
385 	err = device_register(&bus->dev);
386 	if (err) {
387 		pr_err("mii_bus %s failed to register\n", bus->id);
388 		return -EINVAL;
389 	}
390 
391 	mutex_init(&bus->mdio_lock);
392 
393 	/* de-assert bus level PHY GPIO reset */
394 	gpiod = devm_gpiod_get_optional(&bus->dev, "reset", GPIOD_OUT_LOW);
395 	if (IS_ERR(gpiod)) {
396 		dev_err(&bus->dev, "mii_bus %s couldn't get reset GPIO\n",
397 			bus->id);
398 		device_del(&bus->dev);
399 		return PTR_ERR(gpiod);
400 	} else	if (gpiod) {
401 		bus->reset_gpiod = gpiod;
402 
403 		gpiod_set_value_cansleep(gpiod, 1);
404 		udelay(bus->reset_delay_us);
405 		gpiod_set_value_cansleep(gpiod, 0);
406 	}
407 
408 	if (bus->reset)
409 		bus->reset(bus);
410 
411 	for (i = 0; i < PHY_MAX_ADDR; i++) {
412 		if ((bus->phy_mask & (1 << i)) == 0) {
413 			struct phy_device *phydev;
414 
415 			phydev = mdiobus_scan(bus, i);
416 			if (IS_ERR(phydev) && (PTR_ERR(phydev) != -ENODEV)) {
417 				err = PTR_ERR(phydev);
418 				goto error;
419 			}
420 		}
421 	}
422 
423 	mdiobus_setup_mdiodev_from_board_info(bus, mdiobus_create_device);
424 
425 	bus->state = MDIOBUS_REGISTERED;
426 	pr_info("%s: probed\n", bus->name);
427 	return 0;
428 
429 error:
430 	while (--i >= 0) {
431 		mdiodev = bus->mdio_map[i];
432 		if (!mdiodev)
433 			continue;
434 
435 		mdiodev->device_remove(mdiodev);
436 		mdiodev->device_free(mdiodev);
437 	}
438 
439 	/* Put PHYs in RESET to save power */
440 	if (bus->reset_gpiod)
441 		gpiod_set_value_cansleep(bus->reset_gpiod, 1);
442 
443 	device_del(&bus->dev);
444 	return err;
445 }
446 EXPORT_SYMBOL(__mdiobus_register);
447 
448 void mdiobus_unregister(struct mii_bus *bus)
449 {
450 	struct mdio_device *mdiodev;
451 	int i;
452 
453 	BUG_ON(bus->state != MDIOBUS_REGISTERED);
454 	bus->state = MDIOBUS_UNREGISTERED;
455 
456 	for (i = 0; i < PHY_MAX_ADDR; i++) {
457 		mdiodev = bus->mdio_map[i];
458 		if (!mdiodev)
459 			continue;
460 
461 		if (mdiodev->reset_gpio)
462 			gpiod_put(mdiodev->reset_gpio);
463 
464 		mdiodev->device_remove(mdiodev);
465 		mdiodev->device_free(mdiodev);
466 	}
467 
468 	/* Put PHYs in RESET to save power */
469 	if (bus->reset_gpiod)
470 		gpiod_set_value_cansleep(bus->reset_gpiod, 1);
471 
472 	device_del(&bus->dev);
473 }
474 EXPORT_SYMBOL(mdiobus_unregister);
475 
476 /**
477  * mdiobus_free - free a struct mii_bus
478  * @bus: mii_bus to free
479  *
480  * This function releases the reference to the underlying device
481  * object in the mii_bus.  If this is the last reference, the mii_bus
482  * will be freed.
483  */
484 void mdiobus_free(struct mii_bus *bus)
485 {
486 	/* For compatibility with error handling in drivers. */
487 	if (bus->state == MDIOBUS_ALLOCATED) {
488 		kfree(bus);
489 		return;
490 	}
491 
492 	BUG_ON(bus->state != MDIOBUS_UNREGISTERED);
493 	bus->state = MDIOBUS_RELEASED;
494 
495 	put_device(&bus->dev);
496 }
497 EXPORT_SYMBOL(mdiobus_free);
498 
499 /**
500  * mdiobus_scan - scan a bus for MDIO devices.
501  * @bus: mii_bus to scan
502  * @addr: address on bus to scan
503  *
504  * This function scans the MDIO bus, looking for devices which can be
505  * identified using a vendor/product ID in registers 2 and 3. Not all
506  * MDIO devices have such registers, but PHY devices typically
507  * do. Hence this function assumes anything found is a PHY, or can be
508  * treated as a PHY. Other MDIO devices, such as switches, will
509  * probably not be found during the scan.
510  */
511 struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr)
512 {
513 	struct phy_device *phydev;
514 	int err;
515 
516 	phydev = get_phy_device(bus, addr, false);
517 	if (IS_ERR(phydev))
518 		return phydev;
519 
520 	/*
521 	 * For DT, see if the auto-probed phy has a correspoding child
522 	 * in the bus node, and set the of_node pointer in this case.
523 	 */
524 	of_mdiobus_link_mdiodev(bus, &phydev->mdio);
525 
526 	err = phy_device_register(phydev);
527 	if (err) {
528 		phy_device_free(phydev);
529 		return ERR_PTR(-ENODEV);
530 	}
531 
532 	return phydev;
533 }
534 EXPORT_SYMBOL(mdiobus_scan);
535 
536 /**
537  * __mdiobus_read - Unlocked version of the mdiobus_read function
538  * @bus: the mii_bus struct
539  * @addr: the phy address
540  * @regnum: register number to read
541  *
542  * Read a MDIO bus register. Caller must hold the mdio bus lock.
543  *
544  * NOTE: MUST NOT be called from interrupt context.
545  */
546 int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum)
547 {
548 	int retval;
549 
550 	WARN_ON_ONCE(!mutex_is_locked(&bus->mdio_lock));
551 
552 	retval = bus->read(bus, addr, regnum);
553 
554 	trace_mdio_access(bus, 1, addr, regnum, retval, retval);
555 
556 	return retval;
557 }
558 EXPORT_SYMBOL(__mdiobus_read);
559 
560 /**
561  * __mdiobus_write - Unlocked version of the mdiobus_write function
562  * @bus: the mii_bus struct
563  * @addr: the phy address
564  * @regnum: register number to write
565  * @val: value to write to @regnum
566  *
567  * Write a MDIO bus register. Caller must hold the mdio bus lock.
568  *
569  * NOTE: MUST NOT be called from interrupt context.
570  */
571 int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val)
572 {
573 	int err;
574 
575 	WARN_ON_ONCE(!mutex_is_locked(&bus->mdio_lock));
576 
577 	err = bus->write(bus, addr, regnum, val);
578 
579 	trace_mdio_access(bus, 0, addr, regnum, val, err);
580 
581 	return err;
582 }
583 EXPORT_SYMBOL(__mdiobus_write);
584 
585 /**
586  * mdiobus_read_nested - Nested version of the mdiobus_read function
587  * @bus: the mii_bus struct
588  * @addr: the phy address
589  * @regnum: register number to read
590  *
591  * In case of nested MDIO bus access avoid lockdep false positives by
592  * using mutex_lock_nested().
593  *
594  * NOTE: MUST NOT be called from interrupt context,
595  * because the bus read/write functions may wait for an interrupt
596  * to conclude the operation.
597  */
598 int mdiobus_read_nested(struct mii_bus *bus, int addr, u32 regnum)
599 {
600 	int retval;
601 
602 	BUG_ON(in_interrupt());
603 
604 	mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED);
605 	retval = __mdiobus_read(bus, addr, regnum);
606 	mutex_unlock(&bus->mdio_lock);
607 
608 	return retval;
609 }
610 EXPORT_SYMBOL(mdiobus_read_nested);
611 
612 /**
613  * mdiobus_read - Convenience function for reading a given MII mgmt register
614  * @bus: the mii_bus struct
615  * @addr: the phy address
616  * @regnum: register number to read
617  *
618  * NOTE: MUST NOT be called from interrupt context,
619  * because the bus read/write functions may wait for an interrupt
620  * to conclude the operation.
621  */
622 int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum)
623 {
624 	int retval;
625 
626 	BUG_ON(in_interrupt());
627 
628 	mutex_lock(&bus->mdio_lock);
629 	retval = __mdiobus_read(bus, addr, regnum);
630 	mutex_unlock(&bus->mdio_lock);
631 
632 	return retval;
633 }
634 EXPORT_SYMBOL(mdiobus_read);
635 
636 /**
637  * mdiobus_write_nested - Nested version of the mdiobus_write function
638  * @bus: the mii_bus struct
639  * @addr: the phy address
640  * @regnum: register number to write
641  * @val: value to write to @regnum
642  *
643  * In case of nested MDIO bus access avoid lockdep false positives by
644  * using mutex_lock_nested().
645  *
646  * NOTE: MUST NOT be called from interrupt context,
647  * because the bus read/write functions may wait for an interrupt
648  * to conclude the operation.
649  */
650 int mdiobus_write_nested(struct mii_bus *bus, int addr, u32 regnum, u16 val)
651 {
652 	int err;
653 
654 	BUG_ON(in_interrupt());
655 
656 	mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED);
657 	err = __mdiobus_write(bus, addr, regnum, val);
658 	mutex_unlock(&bus->mdio_lock);
659 
660 	return err;
661 }
662 EXPORT_SYMBOL(mdiobus_write_nested);
663 
664 /**
665  * mdiobus_write - Convenience function for writing a given MII mgmt register
666  * @bus: the mii_bus struct
667  * @addr: the phy address
668  * @regnum: register number to write
669  * @val: value to write to @regnum
670  *
671  * NOTE: MUST NOT be called from interrupt context,
672  * because the bus read/write functions may wait for an interrupt
673  * to conclude the operation.
674  */
675 int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val)
676 {
677 	int err;
678 
679 	BUG_ON(in_interrupt());
680 
681 	mutex_lock(&bus->mdio_lock);
682 	err = __mdiobus_write(bus, addr, regnum, val);
683 	mutex_unlock(&bus->mdio_lock);
684 
685 	return err;
686 }
687 EXPORT_SYMBOL(mdiobus_write);
688 
689 /**
690  * mdio_bus_match - determine if given MDIO driver supports the given
691  *		    MDIO device
692  * @dev: target MDIO device
693  * @drv: given MDIO driver
694  *
695  * Description: Given a MDIO device, and a MDIO driver, return 1 if
696  *   the driver supports the device.  Otherwise, return 0. This may
697  *   require calling the devices own match function, since different classes
698  *   of MDIO devices have different match criteria.
699  */
700 static int mdio_bus_match(struct device *dev, struct device_driver *drv)
701 {
702 	struct mdio_device *mdio = to_mdio_device(dev);
703 
704 	if (of_driver_match_device(dev, drv))
705 		return 1;
706 
707 	if (mdio->bus_match)
708 		return mdio->bus_match(dev, drv);
709 
710 	return 0;
711 }
712 
713 static int mdio_uevent(struct device *dev, struct kobj_uevent_env *env)
714 {
715 	int rc;
716 
717 	/* Some devices have extra OF data and an OF-style MODALIAS */
718 	rc = of_device_uevent_modalias(dev, env);
719 	if (rc != -ENODEV)
720 		return rc;
721 
722 	return 0;
723 }
724 
725 struct bus_type mdio_bus_type = {
726 	.name		= "mdio_bus",
727 	.match		= mdio_bus_match,
728 	.uevent		= mdio_uevent,
729 };
730 EXPORT_SYMBOL(mdio_bus_type);
731 
732 int __init mdio_bus_init(void)
733 {
734 	int ret;
735 
736 	ret = class_register(&mdio_bus_class);
737 	if (!ret) {
738 		ret = bus_register(&mdio_bus_type);
739 		if (ret)
740 			class_unregister(&mdio_bus_class);
741 	}
742 
743 	return ret;
744 }
745 EXPORT_SYMBOL_GPL(mdio_bus_init);
746 
747 #if IS_ENABLED(CONFIG_PHYLIB)
748 void mdio_bus_exit(void)
749 {
750 	class_unregister(&mdio_bus_class);
751 	bus_unregister(&mdio_bus_type);
752 }
753 EXPORT_SYMBOL_GPL(mdio_bus_exit);
754 #else
755 module_init(mdio_bus_init);
756 /* no module_exit, intentional */
757 MODULE_LICENSE("GPL");
758 MODULE_DESCRIPTION("MDIO bus/device layer");
759 #endif
760