1 /* MDIO Bus interface 2 * 3 * Author: Andy Fleming 4 * 5 * Copyright (c) 2004 Freescale Semiconductor, Inc. 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License as published by the 9 * Free Software Foundation; either version 2 of the License, or (at your 10 * option) any later version. 11 * 12 */ 13 14 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 15 16 #include <linux/kernel.h> 17 #include <linux/string.h> 18 #include <linux/errno.h> 19 #include <linux/unistd.h> 20 #include <linux/slab.h> 21 #include <linux/interrupt.h> 22 #include <linux/init.h> 23 #include <linux/delay.h> 24 #include <linux/device.h> 25 #include <linux/of_device.h> 26 #include <linux/of_mdio.h> 27 #include <linux/netdevice.h> 28 #include <linux/etherdevice.h> 29 #include <linux/skbuff.h> 30 #include <linux/spinlock.h> 31 #include <linux/mm.h> 32 #include <linux/module.h> 33 #include <linux/mii.h> 34 #include <linux/ethtool.h> 35 #include <linux/phy.h> 36 #include <linux/io.h> 37 #include <linux/uaccess.h> 38 39 #include <asm/irq.h> 40 41 /** 42 * mdiobus_alloc_size - allocate a mii_bus structure 43 * @size: extra amount of memory to allocate for private storage. 44 * If non-zero, then bus->priv is points to that memory. 45 * 46 * Description: called by a bus driver to allocate an mii_bus 47 * structure to fill in. 48 */ 49 struct mii_bus *mdiobus_alloc_size(size_t size) 50 { 51 struct mii_bus *bus; 52 size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN); 53 size_t alloc_size; 54 55 /* If we alloc extra space, it should be aligned */ 56 if (size) 57 alloc_size = aligned_size + size; 58 else 59 alloc_size = sizeof(*bus); 60 61 bus = kzalloc(alloc_size, GFP_KERNEL); 62 if (bus) { 63 bus->state = MDIOBUS_ALLOCATED; 64 if (size) 65 bus->priv = (void *)bus + aligned_size; 66 } 67 68 return bus; 69 } 70 EXPORT_SYMBOL(mdiobus_alloc_size); 71 72 static void _devm_mdiobus_free(struct device *dev, void *res) 73 { 74 mdiobus_free(*(struct mii_bus **)res); 75 } 76 77 static int devm_mdiobus_match(struct device *dev, void *res, void *data) 78 { 79 struct mii_bus **r = res; 80 81 if (WARN_ON(!r || !*r)) 82 return 0; 83 84 return *r == data; 85 } 86 87 /** 88 * devm_mdiobus_alloc_size - Resource-managed mdiobus_alloc_size() 89 * @dev: Device to allocate mii_bus for 90 * @sizeof_priv: Space to allocate for private structure. 91 * 92 * Managed mdiobus_alloc_size. mii_bus allocated with this function is 93 * automatically freed on driver detach. 94 * 95 * If an mii_bus allocated with this function needs to be freed separately, 96 * devm_mdiobus_free() must be used. 97 * 98 * RETURNS: 99 * Pointer to allocated mii_bus on success, NULL on failure. 100 */ 101 struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv) 102 { 103 struct mii_bus **ptr, *bus; 104 105 ptr = devres_alloc(_devm_mdiobus_free, sizeof(*ptr), GFP_KERNEL); 106 if (!ptr) 107 return NULL; 108 109 /* use raw alloc_dr for kmalloc caller tracing */ 110 bus = mdiobus_alloc_size(sizeof_priv); 111 if (bus) { 112 *ptr = bus; 113 devres_add(dev, ptr); 114 } else { 115 devres_free(ptr); 116 } 117 118 return bus; 119 } 120 EXPORT_SYMBOL_GPL(devm_mdiobus_alloc_size); 121 122 /** 123 * devm_mdiobus_free - Resource-managed mdiobus_free() 124 * @dev: Device this mii_bus belongs to 125 * @bus: the mii_bus associated with the device 126 * 127 * Free mii_bus allocated with devm_mdiobus_alloc_size(). 128 */ 129 void devm_mdiobus_free(struct device *dev, struct mii_bus *bus) 130 { 131 int rc; 132 133 rc = devres_release(dev, _devm_mdiobus_free, 134 devm_mdiobus_match, bus); 135 WARN_ON(rc); 136 } 137 EXPORT_SYMBOL_GPL(devm_mdiobus_free); 138 139 /** 140 * mdiobus_release - mii_bus device release callback 141 * @d: the target struct device that contains the mii_bus 142 * 143 * Description: called when the last reference to an mii_bus is 144 * dropped, to free the underlying memory. 145 */ 146 static void mdiobus_release(struct device *d) 147 { 148 struct mii_bus *bus = to_mii_bus(d); 149 BUG_ON(bus->state != MDIOBUS_RELEASED && 150 /* for compatibility with error handling in drivers */ 151 bus->state != MDIOBUS_ALLOCATED); 152 kfree(bus); 153 } 154 155 static struct class mdio_bus_class = { 156 .name = "mdio_bus", 157 .dev_release = mdiobus_release, 158 }; 159 160 #if IS_ENABLED(CONFIG_OF_MDIO) 161 /* Helper function for of_mdio_find_bus */ 162 static int of_mdio_bus_match(struct device *dev, const void *mdio_bus_np) 163 { 164 return dev->of_node == mdio_bus_np; 165 } 166 /** 167 * of_mdio_find_bus - Given an mii_bus node, find the mii_bus. 168 * @mdio_bus_np: Pointer to the mii_bus. 169 * 170 * Returns a reference to the mii_bus, or NULL if none found. The 171 * embedded struct device will have its reference count incremented, 172 * and this must be put once the bus is finished with. 173 * 174 * Because the association of a device_node and mii_bus is made via 175 * of_mdiobus_register(), the mii_bus cannot be found before it is 176 * registered with of_mdiobus_register(). 177 * 178 */ 179 struct mii_bus *of_mdio_find_bus(struct device_node *mdio_bus_np) 180 { 181 struct device *d; 182 183 if (!mdio_bus_np) 184 return NULL; 185 186 d = class_find_device(&mdio_bus_class, NULL, mdio_bus_np, 187 of_mdio_bus_match); 188 189 return d ? to_mii_bus(d) : NULL; 190 } 191 EXPORT_SYMBOL(of_mdio_find_bus); 192 193 /* Walk the list of subnodes of a mdio bus and look for a node that matches the 194 * phy's address with its 'reg' property. If found, set the of_node pointer for 195 * the phy. This allows auto-probed pyh devices to be supplied with information 196 * passed in via DT. 197 */ 198 static void of_mdiobus_link_phydev(struct mii_bus *mdio, 199 struct phy_device *phydev) 200 { 201 struct device *dev = &phydev->dev; 202 struct device_node *child; 203 204 if (dev->of_node || !mdio->dev.of_node) 205 return; 206 207 for_each_available_child_of_node(mdio->dev.of_node, child) { 208 int addr; 209 int ret; 210 211 ret = of_property_read_u32(child, "reg", &addr); 212 if (ret < 0) { 213 dev_err(dev, "%s has invalid PHY address\n", 214 child->full_name); 215 continue; 216 } 217 218 /* A PHY must have a reg property in the range [0-31] */ 219 if (addr >= PHY_MAX_ADDR) { 220 dev_err(dev, "%s PHY address %i is too large\n", 221 child->full_name, addr); 222 continue; 223 } 224 225 if (addr == phydev->addr) { 226 dev->of_node = child; 227 return; 228 } 229 } 230 } 231 #else /* !IS_ENABLED(CONFIG_OF_MDIO) */ 232 static inline void of_mdiobus_link_phydev(struct mii_bus *mdio, 233 struct phy_device *phydev) 234 { 235 } 236 #endif 237 238 /** 239 * __mdiobus_register - bring up all the PHYs on a given bus and attach them to bus 240 * @bus: target mii_bus 241 * @owner: module containing bus accessor functions 242 * 243 * Description: Called by a bus driver to bring up all the PHYs 244 * on a given bus, and attach them to the bus. Drivers should use 245 * mdiobus_register() rather than __mdiobus_register() unless they 246 * need to pass a specific owner module. 247 * 248 * Returns 0 on success or < 0 on error. 249 */ 250 int __mdiobus_register(struct mii_bus *bus, struct module *owner) 251 { 252 int i, err; 253 254 if (NULL == bus || NULL == bus->name || 255 NULL == bus->read || NULL == bus->write) 256 return -EINVAL; 257 258 BUG_ON(bus->state != MDIOBUS_ALLOCATED && 259 bus->state != MDIOBUS_UNREGISTERED); 260 261 bus->owner = owner; 262 bus->dev.parent = bus->parent; 263 bus->dev.class = &mdio_bus_class; 264 bus->dev.groups = NULL; 265 dev_set_name(&bus->dev, "%s", bus->id); 266 267 err = device_register(&bus->dev); 268 if (err) { 269 pr_err("mii_bus %s failed to register\n", bus->id); 270 put_device(&bus->dev); 271 return -EINVAL; 272 } 273 274 mutex_init(&bus->mdio_lock); 275 276 if (bus->reset) 277 bus->reset(bus); 278 279 for (i = 0; i < PHY_MAX_ADDR; i++) { 280 if ((bus->phy_mask & (1 << i)) == 0) { 281 struct phy_device *phydev; 282 283 phydev = mdiobus_scan(bus, i); 284 if (IS_ERR(phydev)) { 285 err = PTR_ERR(phydev); 286 goto error; 287 } 288 } 289 } 290 291 bus->state = MDIOBUS_REGISTERED; 292 pr_info("%s: probed\n", bus->name); 293 return 0; 294 295 error: 296 while (--i >= 0) { 297 struct phy_device *phydev = bus->phy_map[i]; 298 if (phydev) { 299 phy_device_remove(phydev); 300 phy_device_free(phydev); 301 } 302 } 303 device_del(&bus->dev); 304 return err; 305 } 306 EXPORT_SYMBOL(__mdiobus_register); 307 308 void mdiobus_unregister(struct mii_bus *bus) 309 { 310 int i; 311 312 BUG_ON(bus->state != MDIOBUS_REGISTERED); 313 bus->state = MDIOBUS_UNREGISTERED; 314 315 for (i = 0; i < PHY_MAX_ADDR; i++) { 316 struct phy_device *phydev = bus->phy_map[i]; 317 if (phydev) { 318 phy_device_remove(phydev); 319 phy_device_free(phydev); 320 } 321 } 322 device_del(&bus->dev); 323 } 324 EXPORT_SYMBOL(mdiobus_unregister); 325 326 /** 327 * mdiobus_free - free a struct mii_bus 328 * @bus: mii_bus to free 329 * 330 * This function releases the reference to the underlying device 331 * object in the mii_bus. If this is the last reference, the mii_bus 332 * will be freed. 333 */ 334 void mdiobus_free(struct mii_bus *bus) 335 { 336 /* For compatibility with error handling in drivers. */ 337 if (bus->state == MDIOBUS_ALLOCATED) { 338 kfree(bus); 339 return; 340 } 341 342 BUG_ON(bus->state != MDIOBUS_UNREGISTERED); 343 bus->state = MDIOBUS_RELEASED; 344 345 put_device(&bus->dev); 346 } 347 EXPORT_SYMBOL(mdiobus_free); 348 349 struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr) 350 { 351 struct phy_device *phydev; 352 int err; 353 354 phydev = get_phy_device(bus, addr, false); 355 if (IS_ERR(phydev) || phydev == NULL) 356 return phydev; 357 358 /* 359 * For DT, see if the auto-probed phy has a correspoding child 360 * in the bus node, and set the of_node pointer in this case. 361 */ 362 of_mdiobus_link_phydev(bus, phydev); 363 364 err = phy_device_register(phydev); 365 if (err) { 366 phy_device_free(phydev); 367 return NULL; 368 } 369 370 return phydev; 371 } 372 EXPORT_SYMBOL(mdiobus_scan); 373 374 /** 375 * mdiobus_read - Convenience function for reading a given MII mgmt register 376 * @bus: the mii_bus struct 377 * @addr: the phy address 378 * @regnum: register number to read 379 * 380 * NOTE: MUST NOT be called from interrupt context, 381 * because the bus read/write functions may wait for an interrupt 382 * to conclude the operation. 383 */ 384 int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum) 385 { 386 int retval; 387 388 BUG_ON(in_interrupt()); 389 390 mutex_lock(&bus->mdio_lock); 391 retval = bus->read(bus, addr, regnum); 392 mutex_unlock(&bus->mdio_lock); 393 394 return retval; 395 } 396 EXPORT_SYMBOL(mdiobus_read); 397 398 /** 399 * mdiobus_write - Convenience function for writing a given MII mgmt register 400 * @bus: the mii_bus struct 401 * @addr: the phy address 402 * @regnum: register number to write 403 * @val: value to write to @regnum 404 * 405 * NOTE: MUST NOT be called from interrupt context, 406 * because the bus read/write functions may wait for an interrupt 407 * to conclude the operation. 408 */ 409 int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val) 410 { 411 int err; 412 413 BUG_ON(in_interrupt()); 414 415 mutex_lock(&bus->mdio_lock); 416 err = bus->write(bus, addr, regnum, val); 417 mutex_unlock(&bus->mdio_lock); 418 419 return err; 420 } 421 EXPORT_SYMBOL(mdiobus_write); 422 423 /** 424 * mdio_bus_match - determine if given PHY driver supports the given PHY device 425 * @dev: target PHY device 426 * @drv: given PHY driver 427 * 428 * Description: Given a PHY device, and a PHY driver, return 1 if 429 * the driver supports the device. Otherwise, return 0. 430 */ 431 static int mdio_bus_match(struct device *dev, struct device_driver *drv) 432 { 433 struct phy_device *phydev = to_phy_device(dev); 434 struct phy_driver *phydrv = to_phy_driver(drv); 435 const int num_ids = ARRAY_SIZE(phydev->c45_ids.device_ids); 436 int i; 437 438 if (of_driver_match_device(dev, drv)) 439 return 1; 440 441 if (phydrv->match_phy_device) 442 return phydrv->match_phy_device(phydev); 443 444 if (phydev->is_c45) { 445 for (i = 1; i < num_ids; i++) { 446 if (!(phydev->c45_ids.devices_in_package & (1 << i))) 447 continue; 448 449 if ((phydrv->phy_id & phydrv->phy_id_mask) == 450 (phydev->c45_ids.device_ids[i] & 451 phydrv->phy_id_mask)) 452 return 1; 453 } 454 return 0; 455 } else { 456 return (phydrv->phy_id & phydrv->phy_id_mask) == 457 (phydev->phy_id & phydrv->phy_id_mask); 458 } 459 } 460 461 #ifdef CONFIG_PM 462 463 static bool mdio_bus_phy_may_suspend(struct phy_device *phydev) 464 { 465 struct device_driver *drv = phydev->dev.driver; 466 struct phy_driver *phydrv = to_phy_driver(drv); 467 struct net_device *netdev = phydev->attached_dev; 468 469 if (!drv || !phydrv->suspend) 470 return false; 471 472 /* PHY not attached? May suspend if the PHY has not already been 473 * suspended as part of a prior call to phy_disconnect() -> 474 * phy_detach() -> phy_suspend() because the parent netdev might be the 475 * MDIO bus driver and clock gated at this point. 476 */ 477 if (!netdev) 478 return !phydev->suspended; 479 480 /* Don't suspend PHY if the attched netdev parent may wakeup. 481 * The parent may point to a PCI device, as in tg3 driver. 482 */ 483 if (netdev->dev.parent && device_may_wakeup(netdev->dev.parent)) 484 return false; 485 486 /* Also don't suspend PHY if the netdev itself may wakeup. This 487 * is the case for devices w/o underlaying pwr. mgmt. aware bus, 488 * e.g. SoC devices. 489 */ 490 if (device_may_wakeup(&netdev->dev)) 491 return false; 492 493 return true; 494 } 495 496 static int mdio_bus_suspend(struct device *dev) 497 { 498 struct phy_device *phydev = to_phy_device(dev); 499 500 /* We must stop the state machine manually, otherwise it stops out of 501 * control, possibly with the phydev->lock held. Upon resume, netdev 502 * may call phy routines that try to grab the same lock, and that may 503 * lead to a deadlock. 504 */ 505 if (phydev->attached_dev && phydev->adjust_link) 506 phy_stop_machine(phydev); 507 508 if (!mdio_bus_phy_may_suspend(phydev)) 509 return 0; 510 511 return phy_suspend(phydev); 512 } 513 514 static int mdio_bus_resume(struct device *dev) 515 { 516 struct phy_device *phydev = to_phy_device(dev); 517 int ret; 518 519 if (!mdio_bus_phy_may_suspend(phydev)) 520 goto no_resume; 521 522 ret = phy_resume(phydev); 523 if (ret < 0) 524 return ret; 525 526 no_resume: 527 if (phydev->attached_dev && phydev->adjust_link) 528 phy_start_machine(phydev); 529 530 return 0; 531 } 532 533 static int mdio_bus_restore(struct device *dev) 534 { 535 struct phy_device *phydev = to_phy_device(dev); 536 struct net_device *netdev = phydev->attached_dev; 537 int ret; 538 539 if (!netdev) 540 return 0; 541 542 ret = phy_init_hw(phydev); 543 if (ret < 0) 544 return ret; 545 546 /* The PHY needs to renegotiate. */ 547 phydev->link = 0; 548 phydev->state = PHY_UP; 549 550 phy_start_machine(phydev); 551 552 return 0; 553 } 554 555 static const struct dev_pm_ops mdio_bus_pm_ops = { 556 .suspend = mdio_bus_suspend, 557 .resume = mdio_bus_resume, 558 .freeze = mdio_bus_suspend, 559 .thaw = mdio_bus_resume, 560 .restore = mdio_bus_restore, 561 }; 562 563 #define MDIO_BUS_PM_OPS (&mdio_bus_pm_ops) 564 565 #else 566 567 #define MDIO_BUS_PM_OPS NULL 568 569 #endif /* CONFIG_PM */ 570 571 static ssize_t 572 phy_id_show(struct device *dev, struct device_attribute *attr, char *buf) 573 { 574 struct phy_device *phydev = to_phy_device(dev); 575 576 return sprintf(buf, "0x%.8lx\n", (unsigned long)phydev->phy_id); 577 } 578 static DEVICE_ATTR_RO(phy_id); 579 580 static ssize_t 581 phy_interface_show(struct device *dev, struct device_attribute *attr, char *buf) 582 { 583 struct phy_device *phydev = to_phy_device(dev); 584 const char *mode = NULL; 585 586 if (phy_is_internal(phydev)) 587 mode = "internal"; 588 else 589 mode = phy_modes(phydev->interface); 590 591 return sprintf(buf, "%s\n", mode); 592 } 593 static DEVICE_ATTR_RO(phy_interface); 594 595 static ssize_t 596 phy_has_fixups_show(struct device *dev, struct device_attribute *attr, char *buf) 597 { 598 struct phy_device *phydev = to_phy_device(dev); 599 600 return sprintf(buf, "%d\n", phydev->has_fixups); 601 } 602 static DEVICE_ATTR_RO(phy_has_fixups); 603 604 static struct attribute *mdio_dev_attrs[] = { 605 &dev_attr_phy_id.attr, 606 &dev_attr_phy_interface.attr, 607 &dev_attr_phy_has_fixups.attr, 608 NULL, 609 }; 610 ATTRIBUTE_GROUPS(mdio_dev); 611 612 struct bus_type mdio_bus_type = { 613 .name = "mdio_bus", 614 .match = mdio_bus_match, 615 .pm = MDIO_BUS_PM_OPS, 616 .dev_groups = mdio_dev_groups, 617 }; 618 EXPORT_SYMBOL(mdio_bus_type); 619 620 int __init mdio_bus_init(void) 621 { 622 int ret; 623 624 ret = class_register(&mdio_bus_class); 625 if (!ret) { 626 ret = bus_register(&mdio_bus_type); 627 if (ret) 628 class_unregister(&mdio_bus_class); 629 } 630 631 return ret; 632 } 633 634 void mdio_bus_exit(void) 635 { 636 class_unregister(&mdio_bus_class); 637 bus_unregister(&mdio_bus_type); 638 } 639