1 /* 2 * drivers/net/phy/phy_device.c 3 * 4 * Framework for finding and configuring PHYs. 5 * Also contains generic PHY driver 6 * 7 * Author: Andy Fleming 8 * 9 * Copyright (c) 2004 Freescale Semiconductor, Inc. 10 * 11 * This program is free software; you can redistribute it and/or modify it 12 * under the terms of the GNU General Public License as published by the 13 * Free Software Foundation; either version 2 of the License, or (at your 14 * option) any later version. 15 * 16 */ 17 18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 19 20 #include <linux/kernel.h> 21 #include <linux/string.h> 22 #include <linux/errno.h> 23 #include <linux/unistd.h> 24 #include <linux/slab.h> 25 #include <linux/interrupt.h> 26 #include <linux/init.h> 27 #include <linux/delay.h> 28 #include <linux/netdevice.h> 29 #include <linux/etherdevice.h> 30 #include <linux/skbuff.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 37 #include <asm/io.h> 38 #include <asm/irq.h> 39 #include <asm/uaccess.h> 40 41 MODULE_DESCRIPTION("PHY library"); 42 MODULE_AUTHOR("Andy Fleming"); 43 MODULE_LICENSE("GPL"); 44 45 void phy_device_free(struct phy_device *phydev) 46 { 47 put_device(&phydev->dev); 48 } 49 EXPORT_SYMBOL(phy_device_free); 50 51 static void phy_device_release(struct device *dev) 52 { 53 kfree(to_phy_device(dev)); 54 } 55 56 static struct phy_driver genphy_driver; 57 extern int mdio_bus_init(void); 58 extern void mdio_bus_exit(void); 59 60 static LIST_HEAD(phy_fixup_list); 61 static DEFINE_MUTEX(phy_fixup_lock); 62 63 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, 64 u32 flags, phy_interface_t interface); 65 66 /* 67 * Creates a new phy_fixup and adds it to the list 68 * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID) 69 * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY) 70 * It can also be PHY_ANY_UID 71 * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before 72 * comparison 73 * @run: The actual code to be run when a matching PHY is found 74 */ 75 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, 76 int (*run)(struct phy_device *)) 77 { 78 struct phy_fixup *fixup; 79 80 fixup = kzalloc(sizeof(struct phy_fixup), GFP_KERNEL); 81 if (!fixup) 82 return -ENOMEM; 83 84 strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id)); 85 fixup->phy_uid = phy_uid; 86 fixup->phy_uid_mask = phy_uid_mask; 87 fixup->run = run; 88 89 mutex_lock(&phy_fixup_lock); 90 list_add_tail(&fixup->list, &phy_fixup_list); 91 mutex_unlock(&phy_fixup_lock); 92 93 return 0; 94 } 95 EXPORT_SYMBOL(phy_register_fixup); 96 97 /* Registers a fixup to be run on any PHY with the UID in phy_uid */ 98 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask, 99 int (*run)(struct phy_device *)) 100 { 101 return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run); 102 } 103 EXPORT_SYMBOL(phy_register_fixup_for_uid); 104 105 /* Registers a fixup to be run on the PHY with id string bus_id */ 106 int phy_register_fixup_for_id(const char *bus_id, 107 int (*run)(struct phy_device *)) 108 { 109 return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run); 110 } 111 EXPORT_SYMBOL(phy_register_fixup_for_id); 112 113 /* 114 * Returns 1 if fixup matches phydev in bus_id and phy_uid. 115 * Fixups can be set to match any in one or more fields. 116 */ 117 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup) 118 { 119 if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0) 120 if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0) 121 return 0; 122 123 if ((fixup->phy_uid & fixup->phy_uid_mask) != 124 (phydev->phy_id & fixup->phy_uid_mask)) 125 if (fixup->phy_uid != PHY_ANY_UID) 126 return 0; 127 128 return 1; 129 } 130 131 /* Runs any matching fixups for this phydev */ 132 int phy_scan_fixups(struct phy_device *phydev) 133 { 134 struct phy_fixup *fixup; 135 136 mutex_lock(&phy_fixup_lock); 137 list_for_each_entry(fixup, &phy_fixup_list, list) { 138 if (phy_needs_fixup(phydev, fixup)) { 139 int err; 140 141 err = fixup->run(phydev); 142 143 if (err < 0) { 144 mutex_unlock(&phy_fixup_lock); 145 return err; 146 } 147 } 148 } 149 mutex_unlock(&phy_fixup_lock); 150 151 return 0; 152 } 153 EXPORT_SYMBOL(phy_scan_fixups); 154 155 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id, 156 bool is_c45, struct phy_c45_device_ids *c45_ids) 157 { 158 struct phy_device *dev; 159 160 /* We allocate the device, and initialize the 161 * default values */ 162 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 163 164 if (NULL == dev) 165 return (struct phy_device*) PTR_ERR((void*)-ENOMEM); 166 167 dev->dev.release = phy_device_release; 168 169 dev->speed = 0; 170 dev->duplex = -1; 171 dev->pause = dev->asym_pause = 0; 172 dev->link = 1; 173 dev->interface = PHY_INTERFACE_MODE_GMII; 174 175 dev->autoneg = AUTONEG_ENABLE; 176 177 dev->is_c45 = is_c45; 178 dev->addr = addr; 179 dev->phy_id = phy_id; 180 if (c45_ids) 181 dev->c45_ids = *c45_ids; 182 dev->bus = bus; 183 dev->dev.parent = bus->parent; 184 dev->dev.bus = &mdio_bus_type; 185 dev->irq = bus->irq != NULL ? bus->irq[addr] : PHY_POLL; 186 dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr); 187 188 dev->state = PHY_DOWN; 189 190 mutex_init(&dev->lock); 191 INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine); 192 193 /* Request the appropriate module unconditionally; don't 194 bother trying to do so only if it isn't already loaded, 195 because that gets complicated. A hotplug event would have 196 done an unconditional modprobe anyway. 197 We don't do normal hotplug because it won't work for MDIO 198 -- because it relies on the device staying around for long 199 enough for the driver to get loaded. With MDIO, the NIC 200 driver will get bored and give up as soon as it finds that 201 there's no driver _already_ loaded. */ 202 request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id)); 203 204 device_initialize(&dev->dev); 205 206 return dev; 207 } 208 EXPORT_SYMBOL(phy_device_create); 209 210 /** 211 * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs. 212 * @bus: the target MII bus 213 * @addr: PHY address on the MII bus 214 * @phy_id: where to store the ID retrieved. 215 * @c45_ids: where to store the c45 ID information. 216 * 217 * If the PHY devices-in-package appears to be valid, it and the 218 * corresponding identifiers are stored in @c45_ids, zero is stored 219 * in @phy_id. Otherwise 0xffffffff is stored in @phy_id. Returns 220 * zero on success. 221 * 222 */ 223 static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id, 224 struct phy_c45_device_ids *c45_ids) { 225 int phy_reg; 226 int i, reg_addr; 227 const int num_ids = ARRAY_SIZE(c45_ids->device_ids); 228 229 /* Find first non-zero Devices In package. Device 230 * zero is reserved, so don't probe it. 231 */ 232 for (i = 1; 233 i < num_ids && c45_ids->devices_in_package == 0; 234 i++) { 235 reg_addr = MII_ADDR_C45 | i << 16 | 6; 236 phy_reg = mdiobus_read(bus, addr, reg_addr); 237 if (phy_reg < 0) 238 return -EIO; 239 c45_ids->devices_in_package = (phy_reg & 0xffff) << 16; 240 241 reg_addr = MII_ADDR_C45 | i << 16 | 5; 242 phy_reg = mdiobus_read(bus, addr, reg_addr); 243 if (phy_reg < 0) 244 return -EIO; 245 c45_ids->devices_in_package |= (phy_reg & 0xffff); 246 247 /* If mostly Fs, there is no device there, 248 * let's get out of here. 249 */ 250 if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) { 251 *phy_id = 0xffffffff; 252 return 0; 253 } 254 } 255 256 /* Now probe Device Identifiers for each device present. */ 257 for (i = 1; i < num_ids; i++) { 258 if (!(c45_ids->devices_in_package & (1 << i))) 259 continue; 260 261 reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1; 262 phy_reg = mdiobus_read(bus, addr, reg_addr); 263 if (phy_reg < 0) 264 return -EIO; 265 c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16; 266 267 reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2; 268 phy_reg = mdiobus_read(bus, addr, reg_addr); 269 if (phy_reg < 0) 270 return -EIO; 271 c45_ids->device_ids[i] |= (phy_reg & 0xffff); 272 } 273 *phy_id = 0; 274 return 0; 275 } 276 277 /** 278 * get_phy_id - reads the specified addr for its ID. 279 * @bus: the target MII bus 280 * @addr: PHY address on the MII bus 281 * @phy_id: where to store the ID retrieved. 282 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol 283 * @c45_ids: where to store the c45 ID information. 284 * 285 * Description: In the case of a 802.3-c22 PHY, reads the ID registers 286 * of the PHY at @addr on the @bus, stores it in @phy_id and returns 287 * zero on success. 288 * 289 * In the case of a 802.3-c45 PHY, get_phy_c45_ids() is invoked, and 290 * its return value is in turn returned. 291 * 292 */ 293 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id, 294 bool is_c45, struct phy_c45_device_ids *c45_ids) 295 { 296 int phy_reg; 297 298 if (is_c45) 299 return get_phy_c45_ids(bus, addr, phy_id, c45_ids); 300 301 /* Grab the bits from PHYIR1, and put them 302 * in the upper half */ 303 phy_reg = mdiobus_read(bus, addr, MII_PHYSID1); 304 305 if (phy_reg < 0) 306 return -EIO; 307 308 *phy_id = (phy_reg & 0xffff) << 16; 309 310 /* Grab the bits from PHYIR2, and put them in the lower half */ 311 phy_reg = mdiobus_read(bus, addr, MII_PHYSID2); 312 313 if (phy_reg < 0) 314 return -EIO; 315 316 *phy_id |= (phy_reg & 0xffff); 317 318 return 0; 319 } 320 321 /** 322 * get_phy_device - reads the specified PHY device and returns its @phy_device struct 323 * @bus: the target MII bus 324 * @addr: PHY address on the MII bus 325 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol 326 * 327 * Description: Reads the ID registers of the PHY at @addr on the 328 * @bus, then allocates and returns the phy_device to represent it. 329 */ 330 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45) 331 { 332 struct phy_c45_device_ids c45_ids = {0}; 333 struct phy_device *dev = NULL; 334 u32 phy_id = 0; 335 int r; 336 337 r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids); 338 if (r) 339 return ERR_PTR(r); 340 341 /* If the phy_id is mostly Fs, there is no device there */ 342 if ((phy_id & 0x1fffffff) == 0x1fffffff) 343 return NULL; 344 345 dev = phy_device_create(bus, addr, phy_id, is_c45, &c45_ids); 346 347 return dev; 348 } 349 EXPORT_SYMBOL(get_phy_device); 350 351 /** 352 * phy_device_register - Register the phy device on the MDIO bus 353 * @phydev: phy_device structure to be added to the MDIO bus 354 */ 355 int phy_device_register(struct phy_device *phydev) 356 { 357 int err; 358 359 /* Don't register a phy if one is already registered at this 360 * address */ 361 if (phydev->bus->phy_map[phydev->addr]) 362 return -EINVAL; 363 phydev->bus->phy_map[phydev->addr] = phydev; 364 365 /* Run all of the fixups for this PHY */ 366 phy_scan_fixups(phydev); 367 368 err = device_add(&phydev->dev); 369 if (err) { 370 pr_err("PHY %d failed to add\n", phydev->addr); 371 goto out; 372 } 373 374 return 0; 375 376 out: 377 phydev->bus->phy_map[phydev->addr] = NULL; 378 return err; 379 } 380 EXPORT_SYMBOL(phy_device_register); 381 382 /** 383 * phy_find_first - finds the first PHY device on the bus 384 * @bus: the target MII bus 385 */ 386 struct phy_device *phy_find_first(struct mii_bus *bus) 387 { 388 int addr; 389 390 for (addr = 0; addr < PHY_MAX_ADDR; addr++) { 391 if (bus->phy_map[addr]) 392 return bus->phy_map[addr]; 393 } 394 return NULL; 395 } 396 EXPORT_SYMBOL(phy_find_first); 397 398 /** 399 * phy_prepare_link - prepares the PHY layer to monitor link status 400 * @phydev: target phy_device struct 401 * @handler: callback function for link status change notifications 402 * 403 * Description: Tells the PHY infrastructure to handle the 404 * gory details on monitoring link status (whether through 405 * polling or an interrupt), and to call back to the 406 * connected device driver when the link status changes. 407 * If you want to monitor your own link state, don't call 408 * this function. 409 */ 410 static void phy_prepare_link(struct phy_device *phydev, 411 void (*handler)(struct net_device *)) 412 { 413 phydev->adjust_link = handler; 414 } 415 416 /** 417 * phy_connect_direct - connect an ethernet device to a specific phy_device 418 * @dev: the network device to connect 419 * @phydev: the pointer to the phy device 420 * @handler: callback function for state change notifications 421 * @interface: PHY device's interface 422 */ 423 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, 424 void (*handler)(struct net_device *), 425 phy_interface_t interface) 426 { 427 int rc; 428 429 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface); 430 if (rc) 431 return rc; 432 433 phy_prepare_link(phydev, handler); 434 phy_start_machine(phydev, NULL); 435 if (phydev->irq > 0) 436 phy_start_interrupts(phydev); 437 438 return 0; 439 } 440 EXPORT_SYMBOL(phy_connect_direct); 441 442 /** 443 * phy_connect - connect an ethernet device to a PHY device 444 * @dev: the network device to connect 445 * @bus_id: the id string of the PHY device to connect 446 * @handler: callback function for state change notifications 447 * @interface: PHY device's interface 448 * 449 * Description: Convenience function for connecting ethernet 450 * devices to PHY devices. The default behavior is for 451 * the PHY infrastructure to handle everything, and only notify 452 * the connected driver when the link status changes. If you 453 * don't want, or can't use the provided functionality, you may 454 * choose to call only the subset of functions which provide 455 * the desired functionality. 456 */ 457 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, 458 void (*handler)(struct net_device *), 459 phy_interface_t interface) 460 { 461 struct phy_device *phydev; 462 struct device *d; 463 int rc; 464 465 /* Search the list of PHY devices on the mdio bus for the 466 * PHY with the requested name */ 467 d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id); 468 if (!d) { 469 pr_err("PHY %s not found\n", bus_id); 470 return ERR_PTR(-ENODEV); 471 } 472 phydev = to_phy_device(d); 473 474 rc = phy_connect_direct(dev, phydev, handler, interface); 475 if (rc) 476 return ERR_PTR(rc); 477 478 return phydev; 479 } 480 EXPORT_SYMBOL(phy_connect); 481 482 /** 483 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device 484 * @phydev: target phy_device struct 485 */ 486 void phy_disconnect(struct phy_device *phydev) 487 { 488 if (phydev->irq > 0) 489 phy_stop_interrupts(phydev); 490 491 phy_stop_machine(phydev); 492 493 phydev->adjust_link = NULL; 494 495 phy_detach(phydev); 496 } 497 EXPORT_SYMBOL(phy_disconnect); 498 499 int phy_init_hw(struct phy_device *phydev) 500 { 501 int ret; 502 503 if (!phydev->drv || !phydev->drv->config_init) 504 return 0; 505 506 ret = phy_scan_fixups(phydev); 507 if (ret < 0) 508 return ret; 509 510 return phydev->drv->config_init(phydev); 511 } 512 513 /** 514 * phy_attach_direct - attach a network device to a given PHY device pointer 515 * @dev: network device to attach 516 * @phydev: Pointer to phy_device to attach 517 * @flags: PHY device's dev_flags 518 * @interface: PHY device's interface 519 * 520 * Description: Called by drivers to attach to a particular PHY 521 * device. The phy_device is found, and properly hooked up 522 * to the phy_driver. If no driver is attached, then the 523 * genphy_driver is used. The phy_device is given a ptr to 524 * the attaching device, and given a callback for link status 525 * change. The phy_device is returned to the attaching driver. 526 */ 527 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, 528 u32 flags, phy_interface_t interface) 529 { 530 struct device *d = &phydev->dev; 531 int err; 532 533 /* Assume that if there is no driver, that it doesn't 534 * exist, and we should use the genphy driver. */ 535 if (NULL == d->driver) { 536 if (phydev->is_c45) { 537 pr_err("No driver for phy %x\n", phydev->phy_id); 538 return -ENODEV; 539 } 540 541 d->driver = &genphy_driver.driver; 542 543 err = d->driver->probe(d); 544 if (err >= 0) 545 err = device_bind_driver(d); 546 547 if (err) 548 return err; 549 } 550 551 if (phydev->attached_dev) { 552 dev_err(&dev->dev, "PHY already attached\n"); 553 return -EBUSY; 554 } 555 556 phydev->attached_dev = dev; 557 dev->phydev = phydev; 558 559 phydev->dev_flags = flags; 560 561 phydev->interface = interface; 562 563 phydev->state = PHY_READY; 564 565 /* Do initial configuration here, now that 566 * we have certain key parameters 567 * (dev_flags and interface) */ 568 err = phy_init_hw(phydev); 569 if (err) 570 phy_detach(phydev); 571 572 return err; 573 } 574 575 /** 576 * phy_attach - attach a network device to a particular PHY device 577 * @dev: network device to attach 578 * @bus_id: Bus ID of PHY device to attach 579 * @interface: PHY device's interface 580 * 581 * Description: Same as phy_attach_direct() except that a PHY bus_id 582 * string is passed instead of a pointer to a struct phy_device. 583 */ 584 struct phy_device *phy_attach(struct net_device *dev, 585 const char *bus_id, phy_interface_t interface) 586 { 587 struct bus_type *bus = &mdio_bus_type; 588 struct phy_device *phydev; 589 struct device *d; 590 int rc; 591 592 /* Search the list of PHY devices on the mdio bus for the 593 * PHY with the requested name */ 594 d = bus_find_device_by_name(bus, NULL, bus_id); 595 if (!d) { 596 pr_err("PHY %s not found\n", bus_id); 597 return ERR_PTR(-ENODEV); 598 } 599 phydev = to_phy_device(d); 600 601 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface); 602 if (rc) 603 return ERR_PTR(rc); 604 605 return phydev; 606 } 607 EXPORT_SYMBOL(phy_attach); 608 609 /** 610 * phy_detach - detach a PHY device from its network device 611 * @phydev: target phy_device struct 612 */ 613 void phy_detach(struct phy_device *phydev) 614 { 615 phydev->attached_dev->phydev = NULL; 616 phydev->attached_dev = NULL; 617 618 /* If the device had no specific driver before (i.e. - it 619 * was using the generic driver), we unbind the device 620 * from the generic driver so that there's a chance a 621 * real driver could be loaded */ 622 if (phydev->dev.driver == &genphy_driver.driver) 623 device_release_driver(&phydev->dev); 624 } 625 EXPORT_SYMBOL(phy_detach); 626 627 628 /* Generic PHY support and helper functions */ 629 630 /** 631 * genphy_config_advert - sanitize and advertise auto-negotiation parameters 632 * @phydev: target phy_device struct 633 * 634 * Description: Writes MII_ADVERTISE with the appropriate values, 635 * after sanitizing the values to make sure we only advertise 636 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement 637 * hasn't changed, and > 0 if it has changed. 638 */ 639 static int genphy_config_advert(struct phy_device *phydev) 640 { 641 u32 advertise; 642 int oldadv, adv; 643 int err, changed = 0; 644 645 /* Only allow advertising what 646 * this PHY supports */ 647 phydev->advertising &= phydev->supported; 648 advertise = phydev->advertising; 649 650 /* Setup standard advertisement */ 651 oldadv = adv = phy_read(phydev, MII_ADVERTISE); 652 653 if (adv < 0) 654 return adv; 655 656 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP | 657 ADVERTISE_PAUSE_ASYM); 658 adv |= ethtool_adv_to_mii_adv_t(advertise); 659 660 if (adv != oldadv) { 661 err = phy_write(phydev, MII_ADVERTISE, adv); 662 663 if (err < 0) 664 return err; 665 changed = 1; 666 } 667 668 /* Configure gigabit if it's supported */ 669 if (phydev->supported & (SUPPORTED_1000baseT_Half | 670 SUPPORTED_1000baseT_Full)) { 671 oldadv = adv = phy_read(phydev, MII_CTRL1000); 672 673 if (adv < 0) 674 return adv; 675 676 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF); 677 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise); 678 679 if (adv != oldadv) { 680 err = phy_write(phydev, MII_CTRL1000, adv); 681 682 if (err < 0) 683 return err; 684 changed = 1; 685 } 686 } 687 688 return changed; 689 } 690 691 /** 692 * genphy_setup_forced - configures/forces speed/duplex from @phydev 693 * @phydev: target phy_device struct 694 * 695 * Description: Configures MII_BMCR to force speed/duplex 696 * to the values in phydev. Assumes that the values are valid. 697 * Please see phy_sanitize_settings(). 698 */ 699 static int genphy_setup_forced(struct phy_device *phydev) 700 { 701 int err; 702 int ctl = 0; 703 704 phydev->pause = phydev->asym_pause = 0; 705 706 if (SPEED_1000 == phydev->speed) 707 ctl |= BMCR_SPEED1000; 708 else if (SPEED_100 == phydev->speed) 709 ctl |= BMCR_SPEED100; 710 711 if (DUPLEX_FULL == phydev->duplex) 712 ctl |= BMCR_FULLDPLX; 713 714 err = phy_write(phydev, MII_BMCR, ctl); 715 716 return err; 717 } 718 719 720 /** 721 * genphy_restart_aneg - Enable and Restart Autonegotiation 722 * @phydev: target phy_device struct 723 */ 724 int genphy_restart_aneg(struct phy_device *phydev) 725 { 726 int ctl; 727 728 ctl = phy_read(phydev, MII_BMCR); 729 730 if (ctl < 0) 731 return ctl; 732 733 ctl |= (BMCR_ANENABLE | BMCR_ANRESTART); 734 735 /* Don't isolate the PHY if we're negotiating */ 736 ctl &= ~(BMCR_ISOLATE); 737 738 ctl = phy_write(phydev, MII_BMCR, ctl); 739 740 return ctl; 741 } 742 EXPORT_SYMBOL(genphy_restart_aneg); 743 744 745 /** 746 * genphy_config_aneg - restart auto-negotiation or write BMCR 747 * @phydev: target phy_device struct 748 * 749 * Description: If auto-negotiation is enabled, we configure the 750 * advertising, and then restart auto-negotiation. If it is not 751 * enabled, then we write the BMCR. 752 */ 753 int genphy_config_aneg(struct phy_device *phydev) 754 { 755 int result; 756 757 if (AUTONEG_ENABLE != phydev->autoneg) 758 return genphy_setup_forced(phydev); 759 760 result = genphy_config_advert(phydev); 761 762 if (result < 0) /* error */ 763 return result; 764 765 if (result == 0) { 766 /* Advertisement hasn't changed, but maybe aneg was never on to 767 * begin with? Or maybe phy was isolated? */ 768 int ctl = phy_read(phydev, MII_BMCR); 769 770 if (ctl < 0) 771 return ctl; 772 773 if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE)) 774 result = 1; /* do restart aneg */ 775 } 776 777 /* Only restart aneg if we are advertising something different 778 * than we were before. */ 779 if (result > 0) 780 result = genphy_restart_aneg(phydev); 781 782 return result; 783 } 784 EXPORT_SYMBOL(genphy_config_aneg); 785 786 /** 787 * genphy_update_link - update link status in @phydev 788 * @phydev: target phy_device struct 789 * 790 * Description: Update the value in phydev->link to reflect the 791 * current link value. In order to do this, we need to read 792 * the status register twice, keeping the second value. 793 */ 794 int genphy_update_link(struct phy_device *phydev) 795 { 796 int status; 797 798 /* Do a fake read */ 799 status = phy_read(phydev, MII_BMSR); 800 801 if (status < 0) 802 return status; 803 804 /* Read link and autonegotiation status */ 805 status = phy_read(phydev, MII_BMSR); 806 807 if (status < 0) 808 return status; 809 810 if ((status & BMSR_LSTATUS) == 0) 811 phydev->link = 0; 812 else 813 phydev->link = 1; 814 815 return 0; 816 } 817 EXPORT_SYMBOL(genphy_update_link); 818 819 /** 820 * genphy_read_status - check the link status and update current link state 821 * @phydev: target phy_device struct 822 * 823 * Description: Check the link, then figure out the current state 824 * by comparing what we advertise with what the link partner 825 * advertises. Start by checking the gigabit possibilities, 826 * then move on to 10/100. 827 */ 828 int genphy_read_status(struct phy_device *phydev) 829 { 830 int adv; 831 int err; 832 int lpa; 833 int lpagb = 0; 834 835 /* Update the link, but return if there 836 * was an error */ 837 err = genphy_update_link(phydev); 838 if (err) 839 return err; 840 841 if (AUTONEG_ENABLE == phydev->autoneg) { 842 if (phydev->supported & (SUPPORTED_1000baseT_Half 843 | SUPPORTED_1000baseT_Full)) { 844 lpagb = phy_read(phydev, MII_STAT1000); 845 846 if (lpagb < 0) 847 return lpagb; 848 849 adv = phy_read(phydev, MII_CTRL1000); 850 851 if (adv < 0) 852 return adv; 853 854 lpagb &= adv << 2; 855 } 856 857 lpa = phy_read(phydev, MII_LPA); 858 859 if (lpa < 0) 860 return lpa; 861 862 adv = phy_read(phydev, MII_ADVERTISE); 863 864 if (adv < 0) 865 return adv; 866 867 lpa &= adv; 868 869 phydev->speed = SPEED_10; 870 phydev->duplex = DUPLEX_HALF; 871 phydev->pause = phydev->asym_pause = 0; 872 873 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) { 874 phydev->speed = SPEED_1000; 875 876 if (lpagb & LPA_1000FULL) 877 phydev->duplex = DUPLEX_FULL; 878 } else if (lpa & (LPA_100FULL | LPA_100HALF)) { 879 phydev->speed = SPEED_100; 880 881 if (lpa & LPA_100FULL) 882 phydev->duplex = DUPLEX_FULL; 883 } else 884 if (lpa & LPA_10FULL) 885 phydev->duplex = DUPLEX_FULL; 886 887 if (phydev->duplex == DUPLEX_FULL){ 888 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0; 889 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0; 890 } 891 } else { 892 int bmcr = phy_read(phydev, MII_BMCR); 893 if (bmcr < 0) 894 return bmcr; 895 896 if (bmcr & BMCR_FULLDPLX) 897 phydev->duplex = DUPLEX_FULL; 898 else 899 phydev->duplex = DUPLEX_HALF; 900 901 if (bmcr & BMCR_SPEED1000) 902 phydev->speed = SPEED_1000; 903 else if (bmcr & BMCR_SPEED100) 904 phydev->speed = SPEED_100; 905 else 906 phydev->speed = SPEED_10; 907 908 phydev->pause = phydev->asym_pause = 0; 909 } 910 911 return 0; 912 } 913 EXPORT_SYMBOL(genphy_read_status); 914 915 static int genphy_config_init(struct phy_device *phydev) 916 { 917 int val; 918 u32 features; 919 920 /* For now, I'll claim that the generic driver supports 921 * all possible port types */ 922 features = (SUPPORTED_TP | SUPPORTED_MII 923 | SUPPORTED_AUI | SUPPORTED_FIBRE | 924 SUPPORTED_BNC); 925 926 /* Do we support autonegotiation? */ 927 val = phy_read(phydev, MII_BMSR); 928 929 if (val < 0) 930 return val; 931 932 if (val & BMSR_ANEGCAPABLE) 933 features |= SUPPORTED_Autoneg; 934 935 if (val & BMSR_100FULL) 936 features |= SUPPORTED_100baseT_Full; 937 if (val & BMSR_100HALF) 938 features |= SUPPORTED_100baseT_Half; 939 if (val & BMSR_10FULL) 940 features |= SUPPORTED_10baseT_Full; 941 if (val & BMSR_10HALF) 942 features |= SUPPORTED_10baseT_Half; 943 944 if (val & BMSR_ESTATEN) { 945 val = phy_read(phydev, MII_ESTATUS); 946 947 if (val < 0) 948 return val; 949 950 if (val & ESTATUS_1000_TFULL) 951 features |= SUPPORTED_1000baseT_Full; 952 if (val & ESTATUS_1000_THALF) 953 features |= SUPPORTED_1000baseT_Half; 954 } 955 956 phydev->supported = features; 957 phydev->advertising = features; 958 959 return 0; 960 } 961 int genphy_suspend(struct phy_device *phydev) 962 { 963 int value; 964 965 mutex_lock(&phydev->lock); 966 967 value = phy_read(phydev, MII_BMCR); 968 phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN)); 969 970 mutex_unlock(&phydev->lock); 971 972 return 0; 973 } 974 EXPORT_SYMBOL(genphy_suspend); 975 976 int genphy_resume(struct phy_device *phydev) 977 { 978 int value; 979 980 mutex_lock(&phydev->lock); 981 982 value = phy_read(phydev, MII_BMCR); 983 phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN)); 984 985 mutex_unlock(&phydev->lock); 986 987 return 0; 988 } 989 EXPORT_SYMBOL(genphy_resume); 990 991 /** 992 * phy_probe - probe and init a PHY device 993 * @dev: device to probe and init 994 * 995 * Description: Take care of setting up the phy_device structure, 996 * set the state to READY (the driver's init function should 997 * set it to STARTING if needed). 998 */ 999 static int phy_probe(struct device *dev) 1000 { 1001 struct phy_device *phydev; 1002 struct phy_driver *phydrv; 1003 struct device_driver *drv; 1004 int err = 0; 1005 1006 phydev = to_phy_device(dev); 1007 1008 drv = phydev->dev.driver; 1009 phydrv = to_phy_driver(drv); 1010 phydev->drv = phydrv; 1011 1012 /* Disable the interrupt if the PHY doesn't support it */ 1013 if (!(phydrv->flags & PHY_HAS_INTERRUPT)) 1014 phydev->irq = PHY_POLL; 1015 1016 mutex_lock(&phydev->lock); 1017 1018 /* Start out supporting everything. Eventually, 1019 * a controller will attach, and may modify one 1020 * or both of these values */ 1021 phydev->supported = phydrv->features; 1022 phydev->advertising = phydrv->features; 1023 1024 /* Set the state to READY by default */ 1025 phydev->state = PHY_READY; 1026 1027 if (phydev->drv->probe) 1028 err = phydev->drv->probe(phydev); 1029 1030 mutex_unlock(&phydev->lock); 1031 1032 return err; 1033 1034 } 1035 1036 static int phy_remove(struct device *dev) 1037 { 1038 struct phy_device *phydev; 1039 1040 phydev = to_phy_device(dev); 1041 1042 mutex_lock(&phydev->lock); 1043 phydev->state = PHY_DOWN; 1044 mutex_unlock(&phydev->lock); 1045 1046 if (phydev->drv->remove) 1047 phydev->drv->remove(phydev); 1048 phydev->drv = NULL; 1049 1050 return 0; 1051 } 1052 1053 /** 1054 * phy_driver_register - register a phy_driver with the PHY layer 1055 * @new_driver: new phy_driver to register 1056 */ 1057 int phy_driver_register(struct phy_driver *new_driver) 1058 { 1059 int retval; 1060 1061 new_driver->driver.name = new_driver->name; 1062 new_driver->driver.bus = &mdio_bus_type; 1063 new_driver->driver.probe = phy_probe; 1064 new_driver->driver.remove = phy_remove; 1065 1066 retval = driver_register(&new_driver->driver); 1067 1068 if (retval) { 1069 pr_err("%s: Error %d in registering driver\n", 1070 new_driver->name, retval); 1071 1072 return retval; 1073 } 1074 1075 pr_debug("%s: Registered new driver\n", new_driver->name); 1076 1077 return 0; 1078 } 1079 EXPORT_SYMBOL(phy_driver_register); 1080 1081 int phy_drivers_register(struct phy_driver *new_driver, int n) 1082 { 1083 int i, ret = 0; 1084 1085 for (i = 0; i < n; i++) { 1086 ret = phy_driver_register(new_driver + i); 1087 if (ret) { 1088 while (i-- > 0) 1089 phy_driver_unregister(new_driver + i); 1090 break; 1091 } 1092 } 1093 return ret; 1094 } 1095 EXPORT_SYMBOL(phy_drivers_register); 1096 1097 void phy_driver_unregister(struct phy_driver *drv) 1098 { 1099 driver_unregister(&drv->driver); 1100 } 1101 EXPORT_SYMBOL(phy_driver_unregister); 1102 1103 void phy_drivers_unregister(struct phy_driver *drv, int n) 1104 { 1105 int i; 1106 for (i = 0; i < n; i++) { 1107 phy_driver_unregister(drv + i); 1108 } 1109 } 1110 EXPORT_SYMBOL(phy_drivers_unregister); 1111 1112 static struct phy_driver genphy_driver = { 1113 .phy_id = 0xffffffff, 1114 .phy_id_mask = 0xffffffff, 1115 .name = "Generic PHY", 1116 .config_init = genphy_config_init, 1117 .features = 0, 1118 .config_aneg = genphy_config_aneg, 1119 .read_status = genphy_read_status, 1120 .suspend = genphy_suspend, 1121 .resume = genphy_resume, 1122 .driver = {.owner= THIS_MODULE, }, 1123 }; 1124 1125 static int __init phy_init(void) 1126 { 1127 int rc; 1128 1129 rc = mdio_bus_init(); 1130 if (rc) 1131 return rc; 1132 1133 rc = phy_driver_register(&genphy_driver); 1134 if (rc) 1135 mdio_bus_exit(); 1136 1137 return rc; 1138 } 1139 1140 static void __exit phy_exit(void) 1141 { 1142 phy_driver_unregister(&genphy_driver); 1143 mdio_bus_exit(); 1144 } 1145 1146 subsys_initcall(phy_init); 1147 module_exit(phy_exit); 1148