1 /* 2 * drivers/net/phy/mdio_bus.c 3 * 4 * MDIO Bus interface 5 * 6 * Author: Andy Fleming 7 * 8 * Copyright (c) 2004 Freescale Semiconductor, Inc. 9 * 10 * This program is free software; you can redistribute it and/or modify it 11 * under the terms of the GNU General Public License as published by the 12 * Free Software Foundation; either version 2 of the License, or (at your 13 * option) any later version. 14 * 15 */ 16 17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 18 19 #include <linux/kernel.h> 20 #include <linux/string.h> 21 #include <linux/errno.h> 22 #include <linux/unistd.h> 23 #include <linux/slab.h> 24 #include <linux/interrupt.h> 25 #include <linux/init.h> 26 #include <linux/delay.h> 27 #include <linux/device.h> 28 #include <linux/of_device.h> 29 #include <linux/netdevice.h> 30 #include <linux/etherdevice.h> 31 #include <linux/skbuff.h> 32 #include <linux/spinlock.h> 33 #include <linux/mm.h> 34 #include <linux/module.h> 35 #include <linux/mii.h> 36 #include <linux/ethtool.h> 37 #include <linux/phy.h> 38 39 #include <asm/io.h> 40 #include <asm/irq.h> 41 #include <asm/uaccess.h> 42 43 /** 44 * mdiobus_alloc_size - allocate a mii_bus structure 45 * @size: extra amount of memory to allocate for private storage. 46 * If non-zero, then bus->priv is points to that memory. 47 * 48 * Description: called by a bus driver to allocate an mii_bus 49 * structure to fill in. 50 */ 51 struct mii_bus *mdiobus_alloc_size(size_t size) 52 { 53 struct mii_bus *bus; 54 size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN); 55 size_t alloc_size; 56 57 /* If we alloc extra space, it should be aligned */ 58 if (size) 59 alloc_size = aligned_size + size; 60 else 61 alloc_size = sizeof(*bus); 62 63 bus = kzalloc(alloc_size, GFP_KERNEL); 64 if (bus) { 65 bus->state = MDIOBUS_ALLOCATED; 66 if (size) 67 bus->priv = (void *)bus + aligned_size; 68 } 69 70 return bus; 71 } 72 EXPORT_SYMBOL(mdiobus_alloc_size); 73 74 /** 75 * mdiobus_release - mii_bus device release callback 76 * @d: the target struct device that contains the mii_bus 77 * 78 * Description: called when the last reference to an mii_bus is 79 * dropped, to free the underlying memory. 80 */ 81 static void mdiobus_release(struct device *d) 82 { 83 struct mii_bus *bus = to_mii_bus(d); 84 BUG_ON(bus->state != MDIOBUS_RELEASED && 85 /* for compatibility with error handling in drivers */ 86 bus->state != MDIOBUS_ALLOCATED); 87 kfree(bus); 88 } 89 90 static struct class mdio_bus_class = { 91 .name = "mdio_bus", 92 .dev_release = mdiobus_release, 93 }; 94 95 #if IS_ENABLED(CONFIG_OF_MDIO) 96 /* Helper function for of_mdio_find_bus */ 97 static int of_mdio_bus_match(struct device *dev, void *mdio_bus_np) 98 { 99 return dev->of_node == mdio_bus_np; 100 } 101 /** 102 * of_mdio_find_bus - Given an mii_bus node, find the mii_bus. 103 * @mdio_bus_np: Pointer to the mii_bus. 104 * 105 * Returns a pointer to the mii_bus, or NULL if none found. 106 * 107 * Because the association of a device_node and mii_bus is made via 108 * of_mdiobus_register(), the mii_bus cannot be found before it is 109 * registered with of_mdiobus_register(). 110 * 111 */ 112 struct mii_bus *of_mdio_find_bus(struct device_node *mdio_bus_np) 113 { 114 struct device *d; 115 116 if (!mdio_bus_np) 117 return NULL; 118 119 d = class_find_device(&mdio_bus_class, NULL, mdio_bus_np, 120 of_mdio_bus_match); 121 122 return d ? to_mii_bus(d) : NULL; 123 } 124 EXPORT_SYMBOL(of_mdio_find_bus); 125 #endif 126 127 /** 128 * mdiobus_register - bring up all the PHYs on a given bus and attach them to bus 129 * @bus: target mii_bus 130 * 131 * Description: Called by a bus driver to bring up all the PHYs 132 * on a given bus, and attach them to the bus. 133 * 134 * Returns 0 on success or < 0 on error. 135 */ 136 int mdiobus_register(struct mii_bus *bus) 137 { 138 int i, err; 139 140 if (NULL == bus || NULL == bus->name || 141 NULL == bus->read || 142 NULL == bus->write) 143 return -EINVAL; 144 145 BUG_ON(bus->state != MDIOBUS_ALLOCATED && 146 bus->state != MDIOBUS_UNREGISTERED); 147 148 bus->dev.parent = bus->parent; 149 bus->dev.class = &mdio_bus_class; 150 bus->dev.groups = NULL; 151 dev_set_name(&bus->dev, "%s", bus->id); 152 153 err = device_register(&bus->dev); 154 if (err) { 155 pr_err("mii_bus %s failed to register\n", bus->id); 156 return -EINVAL; 157 } 158 159 mutex_init(&bus->mdio_lock); 160 161 if (bus->reset) 162 bus->reset(bus); 163 164 for (i = 0; i < PHY_MAX_ADDR; i++) { 165 if ((bus->phy_mask & (1 << i)) == 0) { 166 struct phy_device *phydev; 167 168 phydev = mdiobus_scan(bus, i); 169 if (IS_ERR(phydev)) { 170 err = PTR_ERR(phydev); 171 goto error; 172 } 173 } 174 } 175 176 bus->state = MDIOBUS_REGISTERED; 177 pr_info("%s: probed\n", bus->name); 178 return 0; 179 180 error: 181 while (--i >= 0) { 182 if (bus->phy_map[i]) 183 device_unregister(&bus->phy_map[i]->dev); 184 } 185 device_del(&bus->dev); 186 return err; 187 } 188 EXPORT_SYMBOL(mdiobus_register); 189 190 void mdiobus_unregister(struct mii_bus *bus) 191 { 192 int i; 193 194 BUG_ON(bus->state != MDIOBUS_REGISTERED); 195 bus->state = MDIOBUS_UNREGISTERED; 196 197 device_del(&bus->dev); 198 for (i = 0; i < PHY_MAX_ADDR; i++) { 199 if (bus->phy_map[i]) 200 device_unregister(&bus->phy_map[i]->dev); 201 bus->phy_map[i] = NULL; 202 } 203 } 204 EXPORT_SYMBOL(mdiobus_unregister); 205 206 /** 207 * mdiobus_free - free a struct mii_bus 208 * @bus: mii_bus to free 209 * 210 * This function releases the reference to the underlying device 211 * object in the mii_bus. If this is the last reference, the mii_bus 212 * will be freed. 213 */ 214 void mdiobus_free(struct mii_bus *bus) 215 { 216 /* 217 * For compatibility with error handling in drivers. 218 */ 219 if (bus->state == MDIOBUS_ALLOCATED) { 220 kfree(bus); 221 return; 222 } 223 224 BUG_ON(bus->state != MDIOBUS_UNREGISTERED); 225 bus->state = MDIOBUS_RELEASED; 226 227 put_device(&bus->dev); 228 } 229 EXPORT_SYMBOL(mdiobus_free); 230 231 struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr) 232 { 233 struct phy_device *phydev; 234 int err; 235 236 phydev = get_phy_device(bus, addr, false); 237 if (IS_ERR(phydev) || phydev == NULL) 238 return phydev; 239 240 err = phy_device_register(phydev); 241 if (err) { 242 phy_device_free(phydev); 243 return NULL; 244 } 245 246 return phydev; 247 } 248 EXPORT_SYMBOL(mdiobus_scan); 249 250 /** 251 * mdiobus_read - Convenience function for reading a given MII mgmt register 252 * @bus: the mii_bus struct 253 * @addr: the phy address 254 * @regnum: register number to read 255 * 256 * NOTE: MUST NOT be called from interrupt context, 257 * because the bus read/write functions may wait for an interrupt 258 * to conclude the operation. 259 */ 260 int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum) 261 { 262 int retval; 263 264 BUG_ON(in_interrupt()); 265 266 mutex_lock(&bus->mdio_lock); 267 retval = bus->read(bus, addr, regnum); 268 mutex_unlock(&bus->mdio_lock); 269 270 return retval; 271 } 272 EXPORT_SYMBOL(mdiobus_read); 273 274 /** 275 * mdiobus_write - Convenience function for writing a given MII mgmt register 276 * @bus: the mii_bus struct 277 * @addr: the phy address 278 * @regnum: register number to write 279 * @val: value to write to @regnum 280 * 281 * NOTE: MUST NOT be called from interrupt context, 282 * because the bus read/write functions may wait for an interrupt 283 * to conclude the operation. 284 */ 285 int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val) 286 { 287 int err; 288 289 BUG_ON(in_interrupt()); 290 291 mutex_lock(&bus->mdio_lock); 292 err = bus->write(bus, addr, regnum, val); 293 mutex_unlock(&bus->mdio_lock); 294 295 return err; 296 } 297 EXPORT_SYMBOL(mdiobus_write); 298 299 /** 300 * mdio_bus_match - determine if given PHY driver supports the given PHY device 301 * @dev: target PHY device 302 * @drv: given PHY driver 303 * 304 * Description: Given a PHY device, and a PHY driver, return 1 if 305 * the driver supports the device. Otherwise, return 0. 306 */ 307 static int mdio_bus_match(struct device *dev, struct device_driver *drv) 308 { 309 struct phy_device *phydev = to_phy_device(dev); 310 struct phy_driver *phydrv = to_phy_driver(drv); 311 312 if (of_driver_match_device(dev, drv)) 313 return 1; 314 315 if (phydrv->match_phy_device) 316 return phydrv->match_phy_device(phydev); 317 318 return ((phydrv->phy_id & phydrv->phy_id_mask) == 319 (phydev->phy_id & phydrv->phy_id_mask)); 320 } 321 322 #ifdef CONFIG_PM 323 324 static bool mdio_bus_phy_may_suspend(struct phy_device *phydev) 325 { 326 struct device_driver *drv = phydev->dev.driver; 327 struct phy_driver *phydrv = to_phy_driver(drv); 328 struct net_device *netdev = phydev->attached_dev; 329 330 if (!drv || !phydrv->suspend) 331 return false; 332 333 /* PHY not attached? May suspend. */ 334 if (!netdev) 335 return true; 336 337 /* 338 * Don't suspend PHY if the attched netdev parent may wakeup. 339 * The parent may point to a PCI device, as in tg3 driver. 340 */ 341 if (netdev->dev.parent && device_may_wakeup(netdev->dev.parent)) 342 return false; 343 344 /* 345 * Also don't suspend PHY if the netdev itself may wakeup. This 346 * is the case for devices w/o underlaying pwr. mgmt. aware bus, 347 * e.g. SoC devices. 348 */ 349 if (device_may_wakeup(&netdev->dev)) 350 return false; 351 352 return true; 353 } 354 355 static int mdio_bus_suspend(struct device *dev) 356 { 357 struct phy_driver *phydrv = to_phy_driver(dev->driver); 358 struct phy_device *phydev = to_phy_device(dev); 359 360 /* 361 * We must stop the state machine manually, otherwise it stops out of 362 * control, possibly with the phydev->lock held. Upon resume, netdev 363 * may call phy routines that try to grab the same lock, and that may 364 * lead to a deadlock. 365 */ 366 if (phydev->attached_dev && phydev->adjust_link) 367 phy_stop_machine(phydev); 368 369 if (!mdio_bus_phy_may_suspend(phydev)) 370 return 0; 371 372 return phydrv->suspend(phydev); 373 } 374 375 static int mdio_bus_resume(struct device *dev) 376 { 377 struct phy_driver *phydrv = to_phy_driver(dev->driver); 378 struct phy_device *phydev = to_phy_device(dev); 379 int ret; 380 381 if (!mdio_bus_phy_may_suspend(phydev)) 382 goto no_resume; 383 384 ret = phydrv->resume(phydev); 385 if (ret < 0) 386 return ret; 387 388 no_resume: 389 if (phydev->attached_dev && phydev->adjust_link) 390 phy_start_machine(phydev, NULL); 391 392 return 0; 393 } 394 395 static int mdio_bus_restore(struct device *dev) 396 { 397 struct phy_device *phydev = to_phy_device(dev); 398 struct net_device *netdev = phydev->attached_dev; 399 int ret; 400 401 if (!netdev) 402 return 0; 403 404 ret = phy_init_hw(phydev); 405 if (ret < 0) 406 return ret; 407 408 /* The PHY needs to renegotiate. */ 409 phydev->link = 0; 410 phydev->state = PHY_UP; 411 412 phy_start_machine(phydev, NULL); 413 414 return 0; 415 } 416 417 static struct dev_pm_ops mdio_bus_pm_ops = { 418 .suspend = mdio_bus_suspend, 419 .resume = mdio_bus_resume, 420 .freeze = mdio_bus_suspend, 421 .thaw = mdio_bus_resume, 422 .restore = mdio_bus_restore, 423 }; 424 425 #define MDIO_BUS_PM_OPS (&mdio_bus_pm_ops) 426 427 #else 428 429 #define MDIO_BUS_PM_OPS NULL 430 431 #endif /* CONFIG_PM */ 432 433 struct bus_type mdio_bus_type = { 434 .name = "mdio_bus", 435 .match = mdio_bus_match, 436 .pm = MDIO_BUS_PM_OPS, 437 }; 438 EXPORT_SYMBOL(mdio_bus_type); 439 440 int __init mdio_bus_init(void) 441 { 442 int ret; 443 444 ret = class_register(&mdio_bus_class); 445 if (!ret) { 446 ret = bus_register(&mdio_bus_type); 447 if (ret) 448 class_unregister(&mdio_bus_class); 449 } 450 451 return ret; 452 } 453 454 void mdio_bus_exit(void) 455 { 456 class_unregister(&mdio_bus_class); 457 bus_unregister(&mdio_bus_type); 458 } 459