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