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 #include <linux/kernel.h> 18 #include <linux/string.h> 19 #include <linux/errno.h> 20 #include <linux/unistd.h> 21 #include <linux/slab.h> 22 #include <linux/interrupt.h> 23 #include <linux/init.h> 24 #include <linux/delay.h> 25 #include <linux/netdevice.h> 26 #include <linux/etherdevice.h> 27 #include <linux/skbuff.h> 28 #include <linux/mm.h> 29 #include <linux/module.h> 30 #include <linux/mii.h> 31 #include <linux/ethtool.h> 32 #include <linux/phy.h> 33 34 #include <asm/io.h> 35 #include <asm/irq.h> 36 #include <asm/uaccess.h> 37 38 MODULE_DESCRIPTION("PHY library"); 39 MODULE_AUTHOR("Andy Fleming"); 40 MODULE_LICENSE("GPL"); 41 42 static struct phy_driver genphy_driver; 43 extern int mdio_bus_init(void); 44 extern void mdio_bus_exit(void); 45 46 void phy_device_free(struct phy_device *phydev) 47 { 48 kfree(phydev); 49 } 50 51 static void phy_device_release(struct device *dev) 52 { 53 phy_device_free(to_phy_device(dev)); 54 } 55 56 struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id) 57 { 58 struct phy_device *dev; 59 /* We allocate the device, and initialize the 60 * default values */ 61 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 62 63 if (NULL == dev) 64 return (struct phy_device*) PTR_ERR((void*)-ENOMEM); 65 66 dev->dev.release = phy_device_release; 67 68 dev->speed = 0; 69 dev->duplex = -1; 70 dev->pause = dev->asym_pause = 0; 71 dev->link = 1; 72 dev->interface = PHY_INTERFACE_MODE_GMII; 73 74 dev->autoneg = AUTONEG_ENABLE; 75 76 dev->addr = addr; 77 dev->phy_id = phy_id; 78 dev->bus = bus; 79 80 dev->state = PHY_DOWN; 81 82 mutex_init(&dev->lock); 83 84 return dev; 85 } 86 EXPORT_SYMBOL(phy_device_create); 87 88 /** 89 * get_phy_id - reads the specified addr for its ID. 90 * @bus: the target MII bus 91 * @addr: PHY address on the MII bus 92 * @phy_id: where to store the ID retrieved. 93 * 94 * Description: Reads the ID registers of the PHY at @addr on the 95 * @bus, stores it in @phy_id and returns zero on success. 96 */ 97 int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id) 98 { 99 int phy_reg; 100 101 /* Grab the bits from PHYIR1, and put them 102 * in the upper half */ 103 phy_reg = bus->read(bus, addr, MII_PHYSID1); 104 105 if (phy_reg < 0) 106 return -EIO; 107 108 *phy_id = (phy_reg & 0xffff) << 16; 109 110 /* Grab the bits from PHYIR2, and put them in the lower half */ 111 phy_reg = bus->read(bus, addr, MII_PHYSID2); 112 113 if (phy_reg < 0) 114 return -EIO; 115 116 *phy_id |= (phy_reg & 0xffff); 117 118 return 0; 119 } 120 121 /** 122 * get_phy_device - reads the specified PHY device and returns its @phy_device struct 123 * @bus: the target MII bus 124 * @addr: PHY address on the MII bus 125 * 126 * Description: Reads the ID registers of the PHY at @addr on the 127 * @bus, then allocates and returns the phy_device to represent it. 128 */ 129 struct phy_device * get_phy_device(struct mii_bus *bus, int addr) 130 { 131 struct phy_device *dev = NULL; 132 u32 phy_id; 133 int r; 134 135 r = get_phy_id(bus, addr, &phy_id); 136 if (r) 137 return ERR_PTR(r); 138 139 /* If the phy_id is all Fs, there is no device there */ 140 if (0xffffffff == phy_id) 141 return NULL; 142 143 dev = phy_device_create(bus, addr, phy_id); 144 145 return dev; 146 } 147 148 /** 149 * phy_prepare_link - prepares the PHY layer to monitor link status 150 * @phydev: target phy_device struct 151 * @handler: callback function for link status change notifications 152 * 153 * Description: Tells the PHY infrastructure to handle the 154 * gory details on monitoring link status (whether through 155 * polling or an interrupt), and to call back to the 156 * connected device driver when the link status changes. 157 * If you want to monitor your own link state, don't call 158 * this function. 159 */ 160 void phy_prepare_link(struct phy_device *phydev, 161 void (*handler)(struct net_device *)) 162 { 163 phydev->adjust_link = handler; 164 } 165 166 /** 167 * phy_connect - connect an ethernet device to a PHY device 168 * @dev: the network device to connect 169 * @phy_id: the PHY device to connect 170 * @handler: callback function for state change notifications 171 * @flags: PHY device's dev_flags 172 * @interface: PHY device's interface 173 * 174 * Description: Convenience function for connecting ethernet 175 * devices to PHY devices. The default behavior is for 176 * the PHY infrastructure to handle everything, and only notify 177 * the connected driver when the link status changes. If you 178 * don't want, or can't use the provided functionality, you may 179 * choose to call only the subset of functions which provide 180 * the desired functionality. 181 */ 182 struct phy_device * phy_connect(struct net_device *dev, const char *phy_id, 183 void (*handler)(struct net_device *), u32 flags, 184 phy_interface_t interface) 185 { 186 struct phy_device *phydev; 187 188 phydev = phy_attach(dev, phy_id, flags, interface); 189 190 if (IS_ERR(phydev)) 191 return phydev; 192 193 phy_prepare_link(phydev, handler); 194 195 phy_start_machine(phydev, NULL); 196 197 if (phydev->irq > 0) 198 phy_start_interrupts(phydev); 199 200 return phydev; 201 } 202 EXPORT_SYMBOL(phy_connect); 203 204 /** 205 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device 206 * @phydev: target phy_device struct 207 */ 208 void phy_disconnect(struct phy_device *phydev) 209 { 210 if (phydev->irq > 0) 211 phy_stop_interrupts(phydev); 212 213 phy_stop_machine(phydev); 214 215 phydev->adjust_link = NULL; 216 217 phy_detach(phydev); 218 } 219 EXPORT_SYMBOL(phy_disconnect); 220 221 static int phy_compare_id(struct device *dev, void *data) 222 { 223 return strcmp((char *)data, dev->bus_id) ? 0 : 1; 224 } 225 226 /** 227 * phy_attach - attach a network device to a particular PHY device 228 * @dev: network device to attach 229 * @phy_id: PHY device to attach 230 * @flags: PHY device's dev_flags 231 * @interface: PHY device's interface 232 * 233 * Description: Called by drivers to attach to a particular PHY 234 * device. The phy_device is found, and properly hooked up 235 * to the phy_driver. If no driver is attached, then the 236 * genphy_driver is used. The phy_device is given a ptr to 237 * the attaching device, and given a callback for link status 238 * change. The phy_device is returned to the attaching driver. 239 */ 240 struct phy_device *phy_attach(struct net_device *dev, 241 const char *phy_id, u32 flags, phy_interface_t interface) 242 { 243 struct bus_type *bus = &mdio_bus_type; 244 struct phy_device *phydev; 245 struct device *d; 246 247 /* Search the list of PHY devices on the mdio bus for the 248 * PHY with the requested name */ 249 d = bus_find_device(bus, NULL, (void *)phy_id, phy_compare_id); 250 251 if (d) { 252 phydev = to_phy_device(d); 253 } else { 254 printk(KERN_ERR "%s not found\n", phy_id); 255 return ERR_PTR(-ENODEV); 256 } 257 258 /* Assume that if there is no driver, that it doesn't 259 * exist, and we should use the genphy driver. */ 260 if (NULL == d->driver) { 261 int err; 262 d->driver = &genphy_driver.driver; 263 264 err = d->driver->probe(d); 265 if (err >= 0) 266 err = device_bind_driver(d); 267 268 if (err) 269 return ERR_PTR(err); 270 } 271 272 if (phydev->attached_dev) { 273 printk(KERN_ERR "%s: %s already attached\n", 274 dev->name, phy_id); 275 return ERR_PTR(-EBUSY); 276 } 277 278 phydev->attached_dev = dev; 279 280 phydev->dev_flags = flags; 281 282 phydev->interface = interface; 283 284 /* Do initial configuration here, now that 285 * we have certain key parameters 286 * (dev_flags and interface) */ 287 if (phydev->drv->config_init) { 288 int err; 289 290 err = phydev->drv->config_init(phydev); 291 292 if (err < 0) 293 return ERR_PTR(err); 294 } 295 296 return phydev; 297 } 298 EXPORT_SYMBOL(phy_attach); 299 300 /** 301 * phy_detach - detach a PHY device from its network device 302 * @phydev: target phy_device struct 303 */ 304 void phy_detach(struct phy_device *phydev) 305 { 306 phydev->attached_dev = NULL; 307 308 /* If the device had no specific driver before (i.e. - it 309 * was using the generic driver), we unbind the device 310 * from the generic driver so that there's a chance a 311 * real driver could be loaded */ 312 if (phydev->dev.driver == &genphy_driver.driver) 313 device_release_driver(&phydev->dev); 314 } 315 EXPORT_SYMBOL(phy_detach); 316 317 318 /* Generic PHY support and helper functions */ 319 320 /** 321 * genphy_config_advert - sanitize and advertise auto-negotation parameters 322 * @phydev: target phy_device struct 323 * 324 * Description: Writes MII_ADVERTISE with the appropriate values, 325 * after sanitizing the values to make sure we only advertise 326 * what is supported. 327 */ 328 int genphy_config_advert(struct phy_device *phydev) 329 { 330 u32 advertise; 331 int adv; 332 int err; 333 334 /* Only allow advertising what 335 * this PHY supports */ 336 phydev->advertising &= phydev->supported; 337 advertise = phydev->advertising; 338 339 /* Setup standard advertisement */ 340 adv = phy_read(phydev, MII_ADVERTISE); 341 342 if (adv < 0) 343 return adv; 344 345 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP | 346 ADVERTISE_PAUSE_ASYM); 347 if (advertise & ADVERTISED_10baseT_Half) 348 adv |= ADVERTISE_10HALF; 349 if (advertise & ADVERTISED_10baseT_Full) 350 adv |= ADVERTISE_10FULL; 351 if (advertise & ADVERTISED_100baseT_Half) 352 adv |= ADVERTISE_100HALF; 353 if (advertise & ADVERTISED_100baseT_Full) 354 adv |= ADVERTISE_100FULL; 355 if (advertise & ADVERTISED_Pause) 356 adv |= ADVERTISE_PAUSE_CAP; 357 if (advertise & ADVERTISED_Asym_Pause) 358 adv |= ADVERTISE_PAUSE_ASYM; 359 360 err = phy_write(phydev, MII_ADVERTISE, adv); 361 362 if (err < 0) 363 return err; 364 365 /* Configure gigabit if it's supported */ 366 if (phydev->supported & (SUPPORTED_1000baseT_Half | 367 SUPPORTED_1000baseT_Full)) { 368 adv = phy_read(phydev, MII_CTRL1000); 369 370 if (adv < 0) 371 return adv; 372 373 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF); 374 if (advertise & SUPPORTED_1000baseT_Half) 375 adv |= ADVERTISE_1000HALF; 376 if (advertise & SUPPORTED_1000baseT_Full) 377 adv |= ADVERTISE_1000FULL; 378 err = phy_write(phydev, MII_CTRL1000, adv); 379 380 if (err < 0) 381 return err; 382 } 383 384 return adv; 385 } 386 EXPORT_SYMBOL(genphy_config_advert); 387 388 /** 389 * genphy_setup_forced - configures/forces speed/duplex from @phydev 390 * @phydev: target phy_device struct 391 * 392 * Description: Configures MII_BMCR to force speed/duplex 393 * to the values in phydev. Assumes that the values are valid. 394 * Please see phy_sanitize_settings(). 395 */ 396 int genphy_setup_forced(struct phy_device *phydev) 397 { 398 int ctl = 0; 399 400 phydev->pause = phydev->asym_pause = 0; 401 402 if (SPEED_1000 == phydev->speed) 403 ctl |= BMCR_SPEED1000; 404 else if (SPEED_100 == phydev->speed) 405 ctl |= BMCR_SPEED100; 406 407 if (DUPLEX_FULL == phydev->duplex) 408 ctl |= BMCR_FULLDPLX; 409 410 ctl = phy_write(phydev, MII_BMCR, ctl); 411 412 if (ctl < 0) 413 return ctl; 414 415 /* We just reset the device, so we'd better configure any 416 * settings the PHY requires to operate */ 417 if (phydev->drv->config_init) 418 ctl = phydev->drv->config_init(phydev); 419 420 return ctl; 421 } 422 423 424 /** 425 * genphy_restart_aneg - Enable and Restart Autonegotiation 426 * @phydev: target phy_device struct 427 */ 428 int genphy_restart_aneg(struct phy_device *phydev) 429 { 430 int ctl; 431 432 ctl = phy_read(phydev, MII_BMCR); 433 434 if (ctl < 0) 435 return ctl; 436 437 ctl |= (BMCR_ANENABLE | BMCR_ANRESTART); 438 439 /* Don't isolate the PHY if we're negotiating */ 440 ctl &= ~(BMCR_ISOLATE); 441 442 ctl = phy_write(phydev, MII_BMCR, ctl); 443 444 return ctl; 445 } 446 447 448 /** 449 * genphy_config_aneg - restart auto-negotiation or write BMCR 450 * @phydev: target phy_device struct 451 * 452 * Description: If auto-negotiation is enabled, we configure the 453 * advertising, and then restart auto-negotiation. If it is not 454 * enabled, then we write the BMCR. 455 */ 456 int genphy_config_aneg(struct phy_device *phydev) 457 { 458 int err = 0; 459 460 if (AUTONEG_ENABLE == phydev->autoneg) { 461 err = genphy_config_advert(phydev); 462 463 if (err < 0) 464 return err; 465 466 err = genphy_restart_aneg(phydev); 467 } else 468 err = genphy_setup_forced(phydev); 469 470 return err; 471 } 472 EXPORT_SYMBOL(genphy_config_aneg); 473 474 /** 475 * genphy_update_link - update link status in @phydev 476 * @phydev: target phy_device struct 477 * 478 * Description: Update the value in phydev->link to reflect the 479 * current link value. In order to do this, we need to read 480 * the status register twice, keeping the second value. 481 */ 482 int genphy_update_link(struct phy_device *phydev) 483 { 484 int status; 485 486 /* Do a fake read */ 487 status = phy_read(phydev, MII_BMSR); 488 489 if (status < 0) 490 return status; 491 492 /* Read link and autonegotiation status */ 493 status = phy_read(phydev, MII_BMSR); 494 495 if (status < 0) 496 return status; 497 498 if ((status & BMSR_LSTATUS) == 0) 499 phydev->link = 0; 500 else 501 phydev->link = 1; 502 503 return 0; 504 } 505 EXPORT_SYMBOL(genphy_update_link); 506 507 /** 508 * genphy_read_status - check the link status and update current link state 509 * @phydev: target phy_device struct 510 * 511 * Description: Check the link, then figure out the current state 512 * by comparing what we advertise with what the link partner 513 * advertises. Start by checking the gigabit possibilities, 514 * then move on to 10/100. 515 */ 516 int genphy_read_status(struct phy_device *phydev) 517 { 518 int adv; 519 int err; 520 int lpa; 521 int lpagb = 0; 522 523 /* Update the link, but return if there 524 * was an error */ 525 err = genphy_update_link(phydev); 526 if (err) 527 return err; 528 529 if (AUTONEG_ENABLE == phydev->autoneg) { 530 if (phydev->supported & (SUPPORTED_1000baseT_Half 531 | SUPPORTED_1000baseT_Full)) { 532 lpagb = phy_read(phydev, MII_STAT1000); 533 534 if (lpagb < 0) 535 return lpagb; 536 537 adv = phy_read(phydev, MII_CTRL1000); 538 539 if (adv < 0) 540 return adv; 541 542 lpagb &= adv << 2; 543 } 544 545 lpa = phy_read(phydev, MII_LPA); 546 547 if (lpa < 0) 548 return lpa; 549 550 adv = phy_read(phydev, MII_ADVERTISE); 551 552 if (adv < 0) 553 return adv; 554 555 lpa &= adv; 556 557 phydev->speed = SPEED_10; 558 phydev->duplex = DUPLEX_HALF; 559 phydev->pause = phydev->asym_pause = 0; 560 561 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) { 562 phydev->speed = SPEED_1000; 563 564 if (lpagb & LPA_1000FULL) 565 phydev->duplex = DUPLEX_FULL; 566 } else if (lpa & (LPA_100FULL | LPA_100HALF)) { 567 phydev->speed = SPEED_100; 568 569 if (lpa & LPA_100FULL) 570 phydev->duplex = DUPLEX_FULL; 571 } else 572 if (lpa & LPA_10FULL) 573 phydev->duplex = DUPLEX_FULL; 574 575 if (phydev->duplex == DUPLEX_FULL){ 576 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0; 577 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0; 578 } 579 } else { 580 int bmcr = phy_read(phydev, MII_BMCR); 581 if (bmcr < 0) 582 return bmcr; 583 584 if (bmcr & BMCR_FULLDPLX) 585 phydev->duplex = DUPLEX_FULL; 586 else 587 phydev->duplex = DUPLEX_HALF; 588 589 if (bmcr & BMCR_SPEED1000) 590 phydev->speed = SPEED_1000; 591 else if (bmcr & BMCR_SPEED100) 592 phydev->speed = SPEED_100; 593 else 594 phydev->speed = SPEED_10; 595 596 phydev->pause = phydev->asym_pause = 0; 597 } 598 599 return 0; 600 } 601 EXPORT_SYMBOL(genphy_read_status); 602 603 static int genphy_config_init(struct phy_device *phydev) 604 { 605 int val; 606 u32 features; 607 608 /* For now, I'll claim that the generic driver supports 609 * all possible port types */ 610 features = (SUPPORTED_TP | SUPPORTED_MII 611 | SUPPORTED_AUI | SUPPORTED_FIBRE | 612 SUPPORTED_BNC); 613 614 /* Do we support autonegotiation? */ 615 val = phy_read(phydev, MII_BMSR); 616 617 if (val < 0) 618 return val; 619 620 if (val & BMSR_ANEGCAPABLE) 621 features |= SUPPORTED_Autoneg; 622 623 if (val & BMSR_100FULL) 624 features |= SUPPORTED_100baseT_Full; 625 if (val & BMSR_100HALF) 626 features |= SUPPORTED_100baseT_Half; 627 if (val & BMSR_10FULL) 628 features |= SUPPORTED_10baseT_Full; 629 if (val & BMSR_10HALF) 630 features |= SUPPORTED_10baseT_Half; 631 632 if (val & BMSR_ESTATEN) { 633 val = phy_read(phydev, MII_ESTATUS); 634 635 if (val < 0) 636 return val; 637 638 if (val & ESTATUS_1000_TFULL) 639 features |= SUPPORTED_1000baseT_Full; 640 if (val & ESTATUS_1000_THALF) 641 features |= SUPPORTED_1000baseT_Half; 642 } 643 644 phydev->supported = features; 645 phydev->advertising = features; 646 647 return 0; 648 } 649 650 651 /** 652 * phy_probe - probe and init a PHY device 653 * @dev: device to probe and init 654 * 655 * Description: Take care of setting up the phy_device structure, 656 * set the state to READY (the driver's init function should 657 * set it to STARTING if needed). 658 */ 659 static int phy_probe(struct device *dev) 660 { 661 struct phy_device *phydev; 662 struct phy_driver *phydrv; 663 struct device_driver *drv; 664 int err = 0; 665 666 phydev = to_phy_device(dev); 667 668 /* Make sure the driver is held. 669 * XXX -- Is this correct? */ 670 drv = get_driver(phydev->dev.driver); 671 phydrv = to_phy_driver(drv); 672 phydev->drv = phydrv; 673 674 /* Disable the interrupt if the PHY doesn't support it */ 675 if (!(phydrv->flags & PHY_HAS_INTERRUPT)) 676 phydev->irq = PHY_POLL; 677 678 mutex_lock(&phydev->lock); 679 680 /* Start out supporting everything. Eventually, 681 * a controller will attach, and may modify one 682 * or both of these values */ 683 phydev->supported = phydrv->features; 684 phydev->advertising = phydrv->features; 685 686 /* Set the state to READY by default */ 687 phydev->state = PHY_READY; 688 689 if (phydev->drv->probe) 690 err = phydev->drv->probe(phydev); 691 692 mutex_unlock(&phydev->lock); 693 694 return err; 695 696 } 697 698 static int phy_remove(struct device *dev) 699 { 700 struct phy_device *phydev; 701 702 phydev = to_phy_device(dev); 703 704 mutex_lock(&phydev->lock); 705 phydev->state = PHY_DOWN; 706 mutex_unlock(&phydev->lock); 707 708 if (phydev->drv->remove) 709 phydev->drv->remove(phydev); 710 711 put_driver(dev->driver); 712 phydev->drv = NULL; 713 714 return 0; 715 } 716 717 /** 718 * phy_driver_register - register a phy_driver with the PHY layer 719 * @new_driver: new phy_driver to register 720 */ 721 int phy_driver_register(struct phy_driver *new_driver) 722 { 723 int retval; 724 725 memset(&new_driver->driver, 0, sizeof(new_driver->driver)); 726 new_driver->driver.name = new_driver->name; 727 new_driver->driver.bus = &mdio_bus_type; 728 new_driver->driver.probe = phy_probe; 729 new_driver->driver.remove = phy_remove; 730 731 retval = driver_register(&new_driver->driver); 732 733 if (retval) { 734 printk(KERN_ERR "%s: Error %d in registering driver\n", 735 new_driver->name, retval); 736 737 return retval; 738 } 739 740 pr_debug("%s: Registered new driver\n", new_driver->name); 741 742 return 0; 743 } 744 EXPORT_SYMBOL(phy_driver_register); 745 746 void phy_driver_unregister(struct phy_driver *drv) 747 { 748 driver_unregister(&drv->driver); 749 } 750 EXPORT_SYMBOL(phy_driver_unregister); 751 752 static struct phy_driver genphy_driver = { 753 .phy_id = 0xffffffff, 754 .phy_id_mask = 0xffffffff, 755 .name = "Generic PHY", 756 .config_init = genphy_config_init, 757 .features = 0, 758 .config_aneg = genphy_config_aneg, 759 .read_status = genphy_read_status, 760 .driver = {.owner= THIS_MODULE, }, 761 }; 762 763 static int __init phy_init(void) 764 { 765 int rc; 766 767 rc = mdio_bus_init(); 768 if (rc) 769 return rc; 770 771 rc = phy_driver_register(&genphy_driver); 772 if (rc) 773 mdio_bus_exit(); 774 775 return rc; 776 } 777 778 static void __exit phy_exit(void) 779 { 780 phy_driver_unregister(&genphy_driver); 781 mdio_bus_exit(); 782 } 783 784 subsys_initcall(phy_init); 785 module_exit(phy_exit); 786