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