1 // SPDX-License-Identifier: GPL-2.0+
6 * Copyright (c) 2004 Freescale Semiconductor, Inc.
9 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
11 #include <linux/delay.h>
12 #include <linux/device.h>
13 #include <linux/errno.h>
14 #include <linux/etherdevice.h>
15 #include <linux/ethtool.h>
16 #include <linux/gpio.h>
17 #include <linux/gpio/consumer.h>
18 #include <linux/init.h>
19 #include <linux/interrupt.h>
21 #include <linux/kernel.h>
22 #include <linux/mii.h>
24 #include <linux/module.h>
25 #include <linux/netdevice.h>
26 #include <linux/of_device.h>
27 #include <linux/of_gpio.h>
28 #include <linux/of_mdio.h>
29 #include <linux/phy.h>
30 #include <linux/reset.h>
31 #include <linux/skbuff.h>
32 #include <linux/slab.h>
33 #include <linux/spinlock.h>
34 #include <linux/string.h>
35 #include <linux/uaccess.h>
36 #include <linux/unistd.h>
38 #define CREATE_TRACE_POINTS
39 #include <trace/events/mdio.h>
41 #include "mdio-boardinfo.h"
43 static int mdiobus_register_gpiod(struct mdio_device
*mdiodev
)
45 /* Deassert the optional reset signal */
46 mdiodev
->reset_gpio
= gpiod_get_optional(&mdiodev
->dev
,
47 "reset", GPIOD_OUT_LOW
);
48 if (IS_ERR(mdiodev
->reset_gpio
))
49 return PTR_ERR(mdiodev
->reset_gpio
);
51 if (mdiodev
->reset_gpio
)
52 gpiod_set_consumer_name(mdiodev
->reset_gpio
, "PHY reset");
57 static int mdiobus_register_reset(struct mdio_device
*mdiodev
)
59 struct reset_control
*reset
;
61 reset
= reset_control_get_optional_exclusive(&mdiodev
->dev
, "phy");
63 return PTR_ERR(reset
);
65 mdiodev
->reset_ctrl
= reset
;
70 int mdiobus_register_device(struct mdio_device
*mdiodev
)
74 if (mdiodev
->bus
->mdio_map
[mdiodev
->addr
])
77 if (mdiodev
->flags
& MDIO_DEVICE_FLAG_PHY
) {
78 err
= mdiobus_register_gpiod(mdiodev
);
82 err
= mdiobus_register_reset(mdiodev
);
86 /* Assert the reset signal */
87 mdio_device_reset(mdiodev
, 1);
90 mdiodev
->bus
->mdio_map
[mdiodev
->addr
] = mdiodev
;
94 EXPORT_SYMBOL(mdiobus_register_device
);
96 int mdiobus_unregister_device(struct mdio_device
*mdiodev
)
98 if (mdiodev
->bus
->mdio_map
[mdiodev
->addr
] != mdiodev
)
101 reset_control_put(mdiodev
->reset_ctrl
);
103 mdiodev
->bus
->mdio_map
[mdiodev
->addr
] = NULL
;
107 EXPORT_SYMBOL(mdiobus_unregister_device
);
109 struct phy_device
*mdiobus_get_phy(struct mii_bus
*bus
, int addr
)
111 struct mdio_device
*mdiodev
= bus
->mdio_map
[addr
];
116 if (!(mdiodev
->flags
& MDIO_DEVICE_FLAG_PHY
))
119 return container_of(mdiodev
, struct phy_device
, mdio
);
121 EXPORT_SYMBOL(mdiobus_get_phy
);
123 bool mdiobus_is_registered_device(struct mii_bus
*bus
, int addr
)
125 return bus
->mdio_map
[addr
];
127 EXPORT_SYMBOL(mdiobus_is_registered_device
);
130 * mdiobus_alloc_size - allocate a mii_bus structure
131 * @size: extra amount of memory to allocate for private storage.
132 * If non-zero, then bus->priv is points to that memory.
134 * Description: called by a bus driver to allocate an mii_bus
135 * structure to fill in.
137 struct mii_bus
*mdiobus_alloc_size(size_t size
)
140 size_t aligned_size
= ALIGN(sizeof(*bus
), NETDEV_ALIGN
);
144 /* If we alloc extra space, it should be aligned */
146 alloc_size
= aligned_size
+ size
;
148 alloc_size
= sizeof(*bus
);
150 bus
= kzalloc(alloc_size
, GFP_KERNEL
);
154 bus
->state
= MDIOBUS_ALLOCATED
;
156 bus
->priv
= (void *)bus
+ aligned_size
;
158 /* Initialise the interrupts to polling and 64-bit seqcounts */
159 for (i
= 0; i
< PHY_MAX_ADDR
; i
++) {
160 bus
->irq
[i
] = PHY_POLL
;
161 u64_stats_init(&bus
->stats
[i
].syncp
);
166 EXPORT_SYMBOL(mdiobus_alloc_size
);
169 * mdiobus_release - mii_bus device release callback
170 * @d: the target struct device that contains the mii_bus
172 * Description: called when the last reference to an mii_bus is
173 * dropped, to free the underlying memory.
175 static void mdiobus_release(struct device
*d
)
177 struct mii_bus
*bus
= to_mii_bus(d
);
178 BUG_ON(bus
->state
!= MDIOBUS_RELEASED
&&
179 /* for compatibility with error handling in drivers */
180 bus
->state
!= MDIOBUS_ALLOCATED
);
184 struct mdio_bus_stat_attr
{
186 unsigned int field_offset
;
189 static u64
mdio_bus_get_stat(struct mdio_bus_stats
*s
, unsigned int offset
)
191 const char *p
= (const char *)s
+ offset
;
196 start
= u64_stats_fetch_begin(&s
->syncp
);
197 val
= u64_stats_read((const u64_stats_t
*)p
);
198 } while (u64_stats_fetch_retry(&s
->syncp
, start
));
203 static u64
mdio_bus_get_global_stat(struct mii_bus
*bus
, unsigned int offset
)
208 for (i
= 0; i
< PHY_MAX_ADDR
; i
++)
209 val
+= mdio_bus_get_stat(&bus
->stats
[i
], offset
);
214 static ssize_t
mdio_bus_stat_field_show(struct device
*dev
,
215 struct device_attribute
*attr
,
218 struct mii_bus
*bus
= to_mii_bus(dev
);
219 struct mdio_bus_stat_attr
*sattr
;
220 struct dev_ext_attribute
*eattr
;
223 eattr
= container_of(attr
, struct dev_ext_attribute
, attr
);
227 val
= mdio_bus_get_global_stat(bus
, sattr
->field_offset
);
229 val
= mdio_bus_get_stat(&bus
->stats
[sattr
->addr
],
230 sattr
->field_offset
);
232 return sprintf(buf
, "%llu\n", val
);
235 static ssize_t
mdio_bus_device_stat_field_show(struct device
*dev
,
236 struct device_attribute
*attr
,
239 struct mdio_device
*mdiodev
= to_mdio_device(dev
);
240 struct mii_bus
*bus
= mdiodev
->bus
;
241 struct mdio_bus_stat_attr
*sattr
;
242 struct dev_ext_attribute
*eattr
;
243 int addr
= mdiodev
->addr
;
246 eattr
= container_of(attr
, struct dev_ext_attribute
, attr
);
249 val
= mdio_bus_get_stat(&bus
->stats
[addr
], sattr
->field_offset
);
251 return sprintf(buf
, "%llu\n", val
);
254 #define MDIO_BUS_STATS_ATTR_DECL(field, file) \
255 static struct dev_ext_attribute dev_attr_mdio_bus_##field = { \
256 .attr = { .attr = { .name = file, .mode = 0444 }, \
257 .show = mdio_bus_stat_field_show, \
259 .var = &((struct mdio_bus_stat_attr) { \
260 -1, offsetof(struct mdio_bus_stats, field) \
263 static struct dev_ext_attribute dev_attr_mdio_bus_device_##field = { \
264 .attr = { .attr = { .name = file, .mode = 0444 }, \
265 .show = mdio_bus_device_stat_field_show, \
267 .var = &((struct mdio_bus_stat_attr) { \
268 -1, offsetof(struct mdio_bus_stats, field) \
272 #define MDIO_BUS_STATS_ATTR(field) \
273 MDIO_BUS_STATS_ATTR_DECL(field, __stringify(field))
275 MDIO_BUS_STATS_ATTR(transfers
);
276 MDIO_BUS_STATS_ATTR(errors
);
277 MDIO_BUS_STATS_ATTR(writes
);
278 MDIO_BUS_STATS_ATTR(reads
);
280 #define MDIO_BUS_STATS_ADDR_ATTR_DECL(field, addr, file) \
281 static struct dev_ext_attribute dev_attr_mdio_bus_addr_##field##_##addr = { \
282 .attr = { .attr = { .name = file, .mode = 0444 }, \
283 .show = mdio_bus_stat_field_show, \
285 .var = &((struct mdio_bus_stat_attr) { \
286 addr, offsetof(struct mdio_bus_stats, field) \
290 #define MDIO_BUS_STATS_ADDR_ATTR(field, addr) \
291 MDIO_BUS_STATS_ADDR_ATTR_DECL(field, addr, \
292 __stringify(field) "_" __stringify(addr))
294 #define MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(addr) \
295 MDIO_BUS_STATS_ADDR_ATTR(transfers, addr); \
296 MDIO_BUS_STATS_ADDR_ATTR(errors, addr); \
297 MDIO_BUS_STATS_ADDR_ATTR(writes, addr); \
298 MDIO_BUS_STATS_ADDR_ATTR(reads, addr) \
300 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(0);
301 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(1);
302 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(2);
303 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(3);
304 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(4);
305 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(5);
306 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(6);
307 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(7);
308 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(8);
309 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(9);
310 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(10);
311 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(11);
312 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(12);
313 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(13);
314 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(14);
315 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(15);
316 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(16);
317 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(17);
318 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(18);
319 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(19);
320 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(20);
321 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(21);
322 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(22);
323 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(23);
324 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(24);
325 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(25);
326 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(26);
327 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(27);
328 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(28);
329 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(29);
330 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(30);
331 MDIO_BUS_STATS_ADDR_ATTR_GROUP_DECL(31);
333 #define MDIO_BUS_STATS_ADDR_ATTR_GROUP(addr) \
334 &dev_attr_mdio_bus_addr_transfers_##addr.attr.attr, \
335 &dev_attr_mdio_bus_addr_errors_##addr.attr.attr, \
336 &dev_attr_mdio_bus_addr_writes_##addr.attr.attr, \
337 &dev_attr_mdio_bus_addr_reads_##addr.attr.attr \
339 static struct attribute *mdio_bus_statistics_attrs[] = {
340 &dev_attr_mdio_bus_transfers
.attr
.attr
,
341 &dev_attr_mdio_bus_errors
.attr
.attr
,
342 &dev_attr_mdio_bus_writes
.attr
.attr
,
343 &dev_attr_mdio_bus_reads
.attr
.attr
,
344 MDIO_BUS_STATS_ADDR_ATTR_GROUP(0),
345 MDIO_BUS_STATS_ADDR_ATTR_GROUP(1),
346 MDIO_BUS_STATS_ADDR_ATTR_GROUP(2),
347 MDIO_BUS_STATS_ADDR_ATTR_GROUP(3),
348 MDIO_BUS_STATS_ADDR_ATTR_GROUP(4),
349 MDIO_BUS_STATS_ADDR_ATTR_GROUP(5),
350 MDIO_BUS_STATS_ADDR_ATTR_GROUP(6),
351 MDIO_BUS_STATS_ADDR_ATTR_GROUP(7),
352 MDIO_BUS_STATS_ADDR_ATTR_GROUP(8),
353 MDIO_BUS_STATS_ADDR_ATTR_GROUP(9),
354 MDIO_BUS_STATS_ADDR_ATTR_GROUP(10),
355 MDIO_BUS_STATS_ADDR_ATTR_GROUP(11),
356 MDIO_BUS_STATS_ADDR_ATTR_GROUP(12),
357 MDIO_BUS_STATS_ADDR_ATTR_GROUP(13),
358 MDIO_BUS_STATS_ADDR_ATTR_GROUP(14),
359 MDIO_BUS_STATS_ADDR_ATTR_GROUP(15),
360 MDIO_BUS_STATS_ADDR_ATTR_GROUP(16),
361 MDIO_BUS_STATS_ADDR_ATTR_GROUP(17),
362 MDIO_BUS_STATS_ADDR_ATTR_GROUP(18),
363 MDIO_BUS_STATS_ADDR_ATTR_GROUP(19),
364 MDIO_BUS_STATS_ADDR_ATTR_GROUP(20),
365 MDIO_BUS_STATS_ADDR_ATTR_GROUP(21),
366 MDIO_BUS_STATS_ADDR_ATTR_GROUP(22),
367 MDIO_BUS_STATS_ADDR_ATTR_GROUP(23),
368 MDIO_BUS_STATS_ADDR_ATTR_GROUP(24),
369 MDIO_BUS_STATS_ADDR_ATTR_GROUP(25),
370 MDIO_BUS_STATS_ADDR_ATTR_GROUP(26),
371 MDIO_BUS_STATS_ADDR_ATTR_GROUP(27),
372 MDIO_BUS_STATS_ADDR_ATTR_GROUP(28),
373 MDIO_BUS_STATS_ADDR_ATTR_GROUP(29),
374 MDIO_BUS_STATS_ADDR_ATTR_GROUP(30),
375 MDIO_BUS_STATS_ADDR_ATTR_GROUP(31),
379 static const struct attribute_group mdio_bus_statistics_group
= {
380 .name
= "statistics",
381 .attrs
= mdio_bus_statistics_attrs
,
384 static const struct attribute_group
*mdio_bus_groups
[] = {
385 &mdio_bus_statistics_group
,
389 static struct class mdio_bus_class
= {
391 .dev_release
= mdiobus_release
,
392 .dev_groups
= mdio_bus_groups
,
396 * mdio_find_bus - Given the name of a mdiobus, find the mii_bus.
397 * @mdio_name: The name of a mdiobus.
399 * Returns a reference to the mii_bus, or NULL if none found. The
400 * embedded struct device will have its reference count incremented,
401 * and this must be put_deviced'ed once the bus is finished with.
403 struct mii_bus
*mdio_find_bus(const char *mdio_name
)
407 d
= class_find_device_by_name(&mdio_bus_class
, mdio_name
);
408 return d
? to_mii_bus(d
) : NULL
;
410 EXPORT_SYMBOL(mdio_find_bus
);
412 #if IS_ENABLED(CONFIG_OF_MDIO)
414 * of_mdio_find_bus - Given an mii_bus node, find the mii_bus.
415 * @mdio_bus_np: Pointer to the mii_bus.
417 * Returns a reference to the mii_bus, or NULL if none found. The
418 * embedded struct device will have its reference count incremented,
419 * and this must be put once the bus is finished with.
421 * Because the association of a device_node and mii_bus is made via
422 * of_mdiobus_register(), the mii_bus cannot be found before it is
423 * registered with of_mdiobus_register().
426 struct mii_bus
*of_mdio_find_bus(struct device_node
*mdio_bus_np
)
433 d
= class_find_device_by_of_node(&mdio_bus_class
, mdio_bus_np
);
434 return d
? to_mii_bus(d
) : NULL
;
436 EXPORT_SYMBOL(of_mdio_find_bus
);
438 /* Walk the list of subnodes of a mdio bus and look for a node that
439 * matches the mdio device's address with its 'reg' property. If
440 * found, set the of_node pointer for the mdio device. This allows
441 * auto-probed phy devices to be supplied with information passed in
444 static void of_mdiobus_link_mdiodev(struct mii_bus
*bus
,
445 struct mdio_device
*mdiodev
)
447 struct device
*dev
= &mdiodev
->dev
;
448 struct device_node
*child
;
450 if (dev
->of_node
|| !bus
->dev
.of_node
)
453 for_each_available_child_of_node(bus
->dev
.of_node
, child
) {
456 addr
= of_mdio_parse_addr(dev
, child
);
460 if (addr
== mdiodev
->addr
) {
461 dev
->of_node
= child
;
462 dev
->fwnode
= of_fwnode_handle(child
);
467 #else /* !IS_ENABLED(CONFIG_OF_MDIO) */
468 static inline void of_mdiobus_link_mdiodev(struct mii_bus
*mdio
,
469 struct mdio_device
*mdiodev
)
475 * mdiobus_create_device - create a full MDIO device given
476 * a mdio_board_info structure
477 * @bus: MDIO bus to create the devices on
478 * @bi: mdio_board_info structure describing the devices
480 * Returns 0 on success or < 0 on error.
482 static int mdiobus_create_device(struct mii_bus
*bus
,
483 struct mdio_board_info
*bi
)
485 struct mdio_device
*mdiodev
;
488 mdiodev
= mdio_device_create(bus
, bi
->mdio_addr
);
492 strncpy(mdiodev
->modalias
, bi
->modalias
,
493 sizeof(mdiodev
->modalias
));
494 mdiodev
->bus_match
= mdio_device_bus_match
;
495 mdiodev
->dev
.platform_data
= (void *)bi
->platform_data
;
497 ret
= mdio_device_register(mdiodev
);
499 mdio_device_free(mdiodev
);
505 * __mdiobus_register - bring up all the PHYs on a given bus and attach them to bus
506 * @bus: target mii_bus
507 * @owner: module containing bus accessor functions
509 * Description: Called by a bus driver to bring up all the PHYs
510 * on a given bus, and attach them to the bus. Drivers should use
511 * mdiobus_register() rather than __mdiobus_register() unless they
512 * need to pass a specific owner module. MDIO devices which are not
513 * PHYs will not be brought up by this function. They are expected to
514 * to be explicitly listed in DT and instantiated by of_mdiobus_register().
516 * Returns 0 on success or < 0 on error.
518 int __mdiobus_register(struct mii_bus
*bus
, struct module
*owner
)
520 struct mdio_device
*mdiodev
;
522 struct gpio_desc
*gpiod
;
524 if (NULL
== bus
|| NULL
== bus
->name
||
525 NULL
== bus
->read
|| NULL
== bus
->write
)
528 BUG_ON(bus
->state
!= MDIOBUS_ALLOCATED
&&
529 bus
->state
!= MDIOBUS_UNREGISTERED
);
532 bus
->dev
.parent
= bus
->parent
;
533 bus
->dev
.class = &mdio_bus_class
;
534 bus
->dev
.groups
= NULL
;
535 dev_set_name(&bus
->dev
, "%s", bus
->id
);
537 err
= device_register(&bus
->dev
);
539 pr_err("mii_bus %s failed to register\n", bus
->id
);
543 mutex_init(&bus
->mdio_lock
);
544 mutex_init(&bus
->shared_lock
);
546 /* de-assert bus level PHY GPIO reset */
547 gpiod
= devm_gpiod_get_optional(&bus
->dev
, "reset", GPIOD_OUT_LOW
);
549 err
= dev_err_probe(&bus
->dev
, PTR_ERR(gpiod
),
550 "mii_bus %s couldn't get reset GPIO\n",
552 device_del(&bus
->dev
);
555 bus
->reset_gpiod
= gpiod
;
557 gpiod_set_value_cansleep(gpiod
, 1);
558 fsleep(bus
->reset_delay_us
);
559 gpiod_set_value_cansleep(gpiod
, 0);
560 if (bus
->reset_post_delay_us
> 0)
561 fsleep(bus
->reset_post_delay_us
);
565 err
= bus
->reset(bus
);
567 goto error_reset_gpiod
;
570 for (i
= 0; i
< PHY_MAX_ADDR
; i
++) {
571 if ((bus
->phy_mask
& (1 << i
)) == 0) {
572 struct phy_device
*phydev
;
574 phydev
= mdiobus_scan(bus
, i
);
575 if (IS_ERR(phydev
) && (PTR_ERR(phydev
) != -ENODEV
)) {
576 err
= PTR_ERR(phydev
);
582 mdiobus_setup_mdiodev_from_board_info(bus
, mdiobus_create_device
);
584 bus
->state
= MDIOBUS_REGISTERED
;
585 pr_info("%s: probed\n", bus
->name
);
590 mdiodev
= bus
->mdio_map
[i
];
594 mdiodev
->device_remove(mdiodev
);
595 mdiodev
->device_free(mdiodev
);
598 /* Put PHYs in RESET to save power */
599 if (bus
->reset_gpiod
)
600 gpiod_set_value_cansleep(bus
->reset_gpiod
, 1);
602 device_del(&bus
->dev
);
605 EXPORT_SYMBOL(__mdiobus_register
);
607 void mdiobus_unregister(struct mii_bus
*bus
)
609 struct mdio_device
*mdiodev
;
612 BUG_ON(bus
->state
!= MDIOBUS_REGISTERED
);
613 bus
->state
= MDIOBUS_UNREGISTERED
;
615 for (i
= 0; i
< PHY_MAX_ADDR
; i
++) {
616 mdiodev
= bus
->mdio_map
[i
];
620 if (mdiodev
->reset_gpio
)
621 gpiod_put(mdiodev
->reset_gpio
);
623 mdiodev
->device_remove(mdiodev
);
624 mdiodev
->device_free(mdiodev
);
627 /* Put PHYs in RESET to save power */
628 if (bus
->reset_gpiod
)
629 gpiod_set_value_cansleep(bus
->reset_gpiod
, 1);
631 device_del(&bus
->dev
);
633 EXPORT_SYMBOL(mdiobus_unregister
);
636 * mdiobus_free - free a struct mii_bus
637 * @bus: mii_bus to free
639 * This function releases the reference to the underlying device
640 * object in the mii_bus. If this is the last reference, the mii_bus
643 void mdiobus_free(struct mii_bus
*bus
)
645 /* For compatibility with error handling in drivers. */
646 if (bus
->state
== MDIOBUS_ALLOCATED
) {
651 BUG_ON(bus
->state
!= MDIOBUS_UNREGISTERED
);
652 bus
->state
= MDIOBUS_RELEASED
;
654 put_device(&bus
->dev
);
656 EXPORT_SYMBOL(mdiobus_free
);
659 * mdiobus_scan - scan a bus for MDIO devices.
660 * @bus: mii_bus to scan
661 * @addr: address on bus to scan
663 * This function scans the MDIO bus, looking for devices which can be
664 * identified using a vendor/product ID in registers 2 and 3. Not all
665 * MDIO devices have such registers, but PHY devices typically
666 * do. Hence this function assumes anything found is a PHY, or can be
667 * treated as a PHY. Other MDIO devices, such as switches, will
668 * probably not be found during the scan.
670 struct phy_device
*mdiobus_scan(struct mii_bus
*bus
, int addr
)
672 struct phy_device
*phydev
= ERR_PTR(-ENODEV
);
675 switch (bus
->probe_capabilities
) {
678 phydev
= get_phy_device(bus
, addr
, false);
681 phydev
= get_phy_device(bus
, addr
, true);
683 case MDIOBUS_C22_C45
:
684 phydev
= get_phy_device(bus
, addr
, false);
686 phydev
= get_phy_device(bus
, addr
, true);
694 * For DT, see if the auto-probed phy has a correspoding child
695 * in the bus node, and set the of_node pointer in this case.
697 of_mdiobus_link_mdiodev(bus
, &phydev
->mdio
);
699 err
= phy_device_register(phydev
);
701 phy_device_free(phydev
);
702 return ERR_PTR(-ENODEV
);
707 EXPORT_SYMBOL(mdiobus_scan
);
709 static void mdiobus_stats_acct(struct mdio_bus_stats
*stats
, bool op
, int ret
)
712 u64_stats_update_begin(&stats
->syncp
);
714 u64_stats_inc(&stats
->transfers
);
716 u64_stats_inc(&stats
->errors
);
721 u64_stats_inc(&stats
->reads
);
723 u64_stats_inc(&stats
->writes
);
725 u64_stats_update_end(&stats
->syncp
);
730 * __mdiobus_read - Unlocked version of the mdiobus_read function
731 * @bus: the mii_bus struct
732 * @addr: the phy address
733 * @regnum: register number to read
735 * Read a MDIO bus register. Caller must hold the mdio bus lock.
737 * NOTE: MUST NOT be called from interrupt context.
739 int __mdiobus_read(struct mii_bus
*bus
, int addr
, u32 regnum
)
743 WARN_ON_ONCE(!mutex_is_locked(&bus
->mdio_lock
));
745 retval
= bus
->read(bus
, addr
, regnum
);
747 trace_mdio_access(bus
, 1, addr
, regnum
, retval
, retval
);
748 mdiobus_stats_acct(&bus
->stats
[addr
], true, retval
);
752 EXPORT_SYMBOL(__mdiobus_read
);
755 * __mdiobus_write - Unlocked version of the mdiobus_write function
756 * @bus: the mii_bus struct
757 * @addr: the phy address
758 * @regnum: register number to write
759 * @val: value to write to @regnum
761 * Write a MDIO bus register. Caller must hold the mdio bus lock.
763 * NOTE: MUST NOT be called from interrupt context.
765 int __mdiobus_write(struct mii_bus
*bus
, int addr
, u32 regnum
, u16 val
)
769 WARN_ON_ONCE(!mutex_is_locked(&bus
->mdio_lock
));
771 err
= bus
->write(bus
, addr
, regnum
, val
);
773 trace_mdio_access(bus
, 0, addr
, regnum
, val
, err
);
774 mdiobus_stats_acct(&bus
->stats
[addr
], false, err
);
778 EXPORT_SYMBOL(__mdiobus_write
);
781 * __mdiobus_modify_changed - Unlocked version of the mdiobus_modify function
782 * @bus: the mii_bus struct
783 * @addr: the phy address
784 * @regnum: register number to modify
785 * @mask: bit mask of bits to clear
786 * @set: bit mask of bits to set
788 * Read, modify, and if any change, write the register value back to the
789 * device. Any error returns a negative number.
791 * NOTE: MUST NOT be called from interrupt context.
793 int __mdiobus_modify_changed(struct mii_bus
*bus
, int addr
, u32 regnum
,
798 ret
= __mdiobus_read(bus
, addr
, regnum
);
802 new = (ret
& ~mask
) | set
;
806 ret
= __mdiobus_write(bus
, addr
, regnum
, new);
808 return ret
< 0 ? ret
: 1;
810 EXPORT_SYMBOL_GPL(__mdiobus_modify_changed
);
813 * mdiobus_read_nested - Nested version of the mdiobus_read function
814 * @bus: the mii_bus struct
815 * @addr: the phy address
816 * @regnum: register number to read
818 * In case of nested MDIO bus access avoid lockdep false positives by
819 * using mutex_lock_nested().
821 * NOTE: MUST NOT be called from interrupt context,
822 * because the bus read/write functions may wait for an interrupt
823 * to conclude the operation.
825 int mdiobus_read_nested(struct mii_bus
*bus
, int addr
, u32 regnum
)
829 mutex_lock_nested(&bus
->mdio_lock
, MDIO_MUTEX_NESTED
);
830 retval
= __mdiobus_read(bus
, addr
, regnum
);
831 mutex_unlock(&bus
->mdio_lock
);
835 EXPORT_SYMBOL(mdiobus_read_nested
);
838 * mdiobus_read - Convenience function for reading a given MII mgmt register
839 * @bus: the mii_bus struct
840 * @addr: the phy address
841 * @regnum: register number to read
843 * NOTE: MUST NOT be called from interrupt context,
844 * because the bus read/write functions may wait for an interrupt
845 * to conclude the operation.
847 int mdiobus_read(struct mii_bus
*bus
, int addr
, u32 regnum
)
851 mutex_lock(&bus
->mdio_lock
);
852 retval
= __mdiobus_read(bus
, addr
, regnum
);
853 mutex_unlock(&bus
->mdio_lock
);
857 EXPORT_SYMBOL(mdiobus_read
);
860 * mdiobus_write_nested - Nested version of the mdiobus_write function
861 * @bus: the mii_bus struct
862 * @addr: the phy address
863 * @regnum: register number to write
864 * @val: value to write to @regnum
866 * In case of nested MDIO bus access avoid lockdep false positives by
867 * using mutex_lock_nested().
869 * NOTE: MUST NOT be called from interrupt context,
870 * because the bus read/write functions may wait for an interrupt
871 * to conclude the operation.
873 int mdiobus_write_nested(struct mii_bus
*bus
, int addr
, u32 regnum
, u16 val
)
877 mutex_lock_nested(&bus
->mdio_lock
, MDIO_MUTEX_NESTED
);
878 err
= __mdiobus_write(bus
, addr
, regnum
, val
);
879 mutex_unlock(&bus
->mdio_lock
);
883 EXPORT_SYMBOL(mdiobus_write_nested
);
886 * mdiobus_write - Convenience function for writing a given MII mgmt register
887 * @bus: the mii_bus struct
888 * @addr: the phy address
889 * @regnum: register number to write
890 * @val: value to write to @regnum
892 * NOTE: MUST NOT be called from interrupt context,
893 * because the bus read/write functions may wait for an interrupt
894 * to conclude the operation.
896 int mdiobus_write(struct mii_bus
*bus
, int addr
, u32 regnum
, u16 val
)
900 mutex_lock(&bus
->mdio_lock
);
901 err
= __mdiobus_write(bus
, addr
, regnum
, val
);
902 mutex_unlock(&bus
->mdio_lock
);
906 EXPORT_SYMBOL(mdiobus_write
);
909 * mdiobus_modify - Convenience function for modifying a given mdio device
911 * @bus: the mii_bus struct
912 * @addr: the phy address
913 * @regnum: register number to write
914 * @mask: bit mask of bits to clear
915 * @set: bit mask of bits to set
917 int mdiobus_modify(struct mii_bus
*bus
, int addr
, u32 regnum
, u16 mask
, u16 set
)
921 mutex_lock(&bus
->mdio_lock
);
922 err
= __mdiobus_modify_changed(bus
, addr
, regnum
, mask
, set
);
923 mutex_unlock(&bus
->mdio_lock
);
925 return err
< 0 ? err
: 0;
927 EXPORT_SYMBOL_GPL(mdiobus_modify
);
930 * mdio_bus_match - determine if given MDIO driver supports the given
932 * @dev: target MDIO device
933 * @drv: given MDIO driver
935 * Description: Given a MDIO device, and a MDIO driver, return 1 if
936 * the driver supports the device. Otherwise, return 0. This may
937 * require calling the devices own match function, since different classes
938 * of MDIO devices have different match criteria.
940 static int mdio_bus_match(struct device
*dev
, struct device_driver
*drv
)
942 struct mdio_device
*mdio
= to_mdio_device(dev
);
944 if (of_driver_match_device(dev
, drv
))
948 return mdio
->bus_match(dev
, drv
);
953 static int mdio_uevent(struct device
*dev
, struct kobj_uevent_env
*env
)
957 /* Some devices have extra OF data and an OF-style MODALIAS */
958 rc
= of_device_uevent_modalias(dev
, env
);
965 static struct attribute
*mdio_bus_device_statistics_attrs
[] = {
966 &dev_attr_mdio_bus_device_transfers
.attr
.attr
,
967 &dev_attr_mdio_bus_device_errors
.attr
.attr
,
968 &dev_attr_mdio_bus_device_writes
.attr
.attr
,
969 &dev_attr_mdio_bus_device_reads
.attr
.attr
,
973 static const struct attribute_group mdio_bus_device_statistics_group
= {
974 .name
= "statistics",
975 .attrs
= mdio_bus_device_statistics_attrs
,
978 static const struct attribute_group
*mdio_bus_dev_groups
[] = {
979 &mdio_bus_device_statistics_group
,
983 struct bus_type mdio_bus_type
= {
985 .dev_groups
= mdio_bus_dev_groups
,
986 .match
= mdio_bus_match
,
987 .uevent
= mdio_uevent
,
989 EXPORT_SYMBOL(mdio_bus_type
);
991 int __init
mdio_bus_init(void)
995 ret
= class_register(&mdio_bus_class
);
997 ret
= bus_register(&mdio_bus_type
);
999 class_unregister(&mdio_bus_class
);
1004 EXPORT_SYMBOL_GPL(mdio_bus_init
);
1006 #if IS_ENABLED(CONFIG_PHYLIB)
1007 void mdio_bus_exit(void)
1009 class_unregister(&mdio_bus_class
);
1010 bus_unregister(&mdio_bus_type
);
1012 EXPORT_SYMBOL_GPL(mdio_bus_exit
);
1014 module_init(mdio_bus_init
);
1015 /* no module_exit, intentional */
1016 MODULE_LICENSE("GPL");
1017 MODULE_DESCRIPTION("MDIO bus/device layer");