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 38MODULE_DESCRIPTION("PHY library"); 39MODULE_AUTHOR("Andy Fleming"); 40MODULE_LICENSE("GPL"); 41 42void phy_device_free(struct phy_device *phydev) 43{ 44 kfree(phydev); 45} 46EXPORT_SYMBOL(phy_device_free); 47 48static void phy_device_release(struct device *dev) 49{ 50 phy_device_free(to_phy_device(dev)); 51} 52 53static struct phy_driver genphy_driver; 54extern int mdio_bus_init(void); 55extern void mdio_bus_exit(void); 56 57static LIST_HEAD(phy_fixup_list); 58static 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 */ 69int 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} 89EXPORT_SYMBOL(phy_register_fixup); 90 91/* Registers a fixup to be run on any PHY with the UID in phy_uid */ 92int 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} 97EXPORT_SYMBOL(phy_register_fixup_for_uid); 98 99/* Registers a fixup to be run on the PHY with id string bus_id */ 100int 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} 105EXPORT_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 */ 111static 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 */ 126int 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} 147EXPORT_SYMBOL(phy_scan_fixups); 148 149struct 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} 196EXPORT_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 */ 207int 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} 230EXPORT_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 */ 240struct 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} 258EXPORT_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 */ 264int 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} 289EXPORT_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 */ 295struct 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} 305EXPORT_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 */ 319void 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 */ 333int 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} 350EXPORT_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 */ 368struct 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} 391EXPORT_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 */ 397void 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} 408EXPORT_SYMBOL(phy_disconnect); 409 410int 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 */ 438int 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 dev->phydev = phydev; 464 465 phydev->dev_flags = flags; 466 467 phydev->interface = interface; 468 469 phydev->state = PHY_READY; 470 471 /* Do initial configuration here, now that 472 * we have certain key parameters 473 * (dev_flags and interface) */ 474 return phy_init_hw(phydev); 475} 476EXPORT_SYMBOL(phy_attach_direct); 477 478/** 479 * phy_attach - attach a network device to a particular PHY device 480 * @dev: network device to attach 481 * @bus_id: Bus ID of PHY device to attach 482 * @flags: PHY device's dev_flags 483 * @interface: PHY device's interface 484 * 485 * Description: Same as phy_attach_direct() except that a PHY bus_id 486 * string is passed instead of a pointer to a struct phy_device. 487 */ 488struct phy_device *phy_attach(struct net_device *dev, 489 const char *bus_id, u32 flags, phy_interface_t interface) 490{ 491 struct bus_type *bus = &mdio_bus_type; 492 struct phy_device *phydev; 493 struct device *d; 494 int rc; 495 496 /* Search the list of PHY devices on the mdio bus for the 497 * PHY with the requested name */ 498 d = bus_find_device_by_name(bus, NULL, bus_id); 499 if (!d) { 500 pr_err("PHY %s not found\n", bus_id); 501 return ERR_PTR(-ENODEV); 502 } 503 phydev = to_phy_device(d); 504 505 rc = phy_attach_direct(dev, phydev, flags, interface); 506 if (rc) 507 return ERR_PTR(rc); 508 509 return phydev; 510} 511EXPORT_SYMBOL(phy_attach); 512 513/** 514 * phy_detach - detach a PHY device from its network device 515 * @phydev: target phy_device struct 516 */ 517void phy_detach(struct phy_device *phydev) 518{ 519 phydev->attached_dev->phydev = NULL; 520 phydev->attached_dev = NULL; 521 522 /* If the device had no specific driver before (i.e. - it 523 * was using the generic driver), we unbind the device 524 * from the generic driver so that there's a chance a 525 * real driver could be loaded */ 526 if (phydev->dev.driver == &genphy_driver.driver) 527 device_release_driver(&phydev->dev); 528} 529EXPORT_SYMBOL(phy_detach); 530 531 532/* Generic PHY support and helper functions */ 533 534/** 535 * genphy_config_advert - sanitize and advertise auto-negotation parameters 536 * @phydev: target phy_device struct 537 * 538 * Description: Writes MII_ADVERTISE with the appropriate values, 539 * after sanitizing the values to make sure we only advertise 540 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement 541 * hasn't changed, and > 0 if it has changed. 542 */ 543int genphy_config_advert(struct phy_device *phydev) 544{ 545 u32 advertise; 546 int oldadv, adv; 547 int err, changed = 0; 548 549 /* Only allow advertising what 550 * this PHY supports */ 551 phydev->advertising &= phydev->supported; 552 advertise = phydev->advertising; 553 554 /* Setup standard advertisement */ 555 oldadv = adv = phy_read(phydev, MII_ADVERTISE); 556 557 if (adv < 0) 558 return adv; 559 560 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP | 561 ADVERTISE_PAUSE_ASYM); 562 if (advertise & ADVERTISED_10baseT_Half) 563 adv |= ADVERTISE_10HALF; 564 if (advertise & ADVERTISED_10baseT_Full) 565 adv |= ADVERTISE_10FULL; 566 if (advertise & ADVERTISED_100baseT_Half) 567 adv |= ADVERTISE_100HALF; 568 if (advertise & ADVERTISED_100baseT_Full) 569 adv |= ADVERTISE_100FULL; 570 if (advertise & ADVERTISED_Pause) 571 adv |= ADVERTISE_PAUSE_CAP; 572 if (advertise & ADVERTISED_Asym_Pause) 573 adv |= ADVERTISE_PAUSE_ASYM; 574 575 if (adv != oldadv) { 576 err = phy_write(phydev, MII_ADVERTISE, adv); 577 578 if (err < 0) 579 return err; 580 changed = 1; 581 } 582 583 /* Configure gigabit if it's supported */ 584 if (phydev->supported & (SUPPORTED_1000baseT_Half | 585 SUPPORTED_1000baseT_Full)) { 586 oldadv = adv = phy_read(phydev, MII_CTRL1000); 587 588 if (adv < 0) 589 return adv; 590 591 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF); 592 if (advertise & SUPPORTED_1000baseT_Half) 593 adv |= ADVERTISE_1000HALF; 594 if (advertise & SUPPORTED_1000baseT_Full) 595 adv |= ADVERTISE_1000FULL; 596 597 if (adv != oldadv) { 598 err = phy_write(phydev, MII_CTRL1000, adv); 599 600 if (err < 0) 601 return err; 602 changed = 1; 603 } 604 } 605 606 return changed; 607} 608EXPORT_SYMBOL(genphy_config_advert); 609 610/** 611 * genphy_setup_forced - configures/forces speed/duplex from @phydev 612 * @phydev: target phy_device struct 613 * 614 * Description: Configures MII_BMCR to force speed/duplex 615 * to the values in phydev. Assumes that the values are valid. 616 * Please see phy_sanitize_settings(). 617 */ 618int genphy_setup_forced(struct phy_device *phydev) 619{ 620 int err; 621 int ctl = 0; 622 623 phydev->pause = phydev->asym_pause = 0; 624 625 if (SPEED_1000 == phydev->speed) 626 ctl |= BMCR_SPEED1000; 627 else if (SPEED_100 == phydev->speed) 628 ctl |= BMCR_SPEED100; 629 630 if (DUPLEX_FULL == phydev->duplex) 631 ctl |= BMCR_FULLDPLX; 632 633 err = phy_write(phydev, MII_BMCR, ctl); 634 635 return err; 636} 637 638 639/** 640 * genphy_restart_aneg - Enable and Restart Autonegotiation 641 * @phydev: target phy_device struct 642 */ 643int genphy_restart_aneg(struct phy_device *phydev) 644{ 645 int ctl; 646 647 ctl = phy_read(phydev, MII_BMCR); 648 649 if (ctl < 0) 650 return ctl; 651 652 ctl |= (BMCR_ANENABLE | BMCR_ANRESTART); 653 654 /* Don't isolate the PHY if we're negotiating */ 655 ctl &= ~(BMCR_ISOLATE); 656 657 ctl = phy_write(phydev, MII_BMCR, ctl); 658 659 return ctl; 660} 661EXPORT_SYMBOL(genphy_restart_aneg); 662 663 664/** 665 * genphy_config_aneg - restart auto-negotiation or write BMCR 666 * @phydev: target phy_device struct 667 * 668 * Description: If auto-negotiation is enabled, we configure the 669 * advertising, and then restart auto-negotiation. If it is not 670 * enabled, then we write the BMCR. 671 */ 672int genphy_config_aneg(struct phy_device *phydev) 673{ 674 int result; 675 676 if (AUTONEG_ENABLE != phydev->autoneg) 677 return genphy_setup_forced(phydev); 678 679 result = genphy_config_advert(phydev); 680 681 if (result < 0) /* error */ 682 return result; 683 684 if (result == 0) { 685 /* Advertisment hasn't changed, but maybe aneg was never on to 686 * begin with? Or maybe phy was isolated? */ 687 int ctl = phy_read(phydev, MII_BMCR); 688 689 if (ctl < 0) 690 return ctl; 691 692 if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE)) 693 result = 1; /* do restart aneg */ 694 } 695 696 /* Only restart aneg if we are advertising something different 697 * than we were before. */ 698 if (result > 0) 699 result = genphy_restart_aneg(phydev); 700 701 return result; 702} 703EXPORT_SYMBOL(genphy_config_aneg); 704 705/** 706 * genphy_update_link - update link status in @phydev 707 * @phydev: target phy_device struct 708 * 709 * Description: Update the value in phydev->link to reflect the 710 * current link value. In order to do this, we need to read 711 * the status register twice, keeping the second value. 712 */ 713int genphy_update_link(struct phy_device *phydev) 714{ 715 int status; 716 717 /* Do a fake read */ 718 status = phy_read(phydev, MII_BMSR); 719 720 if (status < 0) 721 return status; 722 723 /* Read link and autonegotiation status */ 724 status = phy_read(phydev, MII_BMSR); 725 726 if (status < 0) 727 return status; 728 729 if ((status & BMSR_LSTATUS) == 0) 730 phydev->link = 0; 731 else 732 phydev->link = 1; 733 734 return 0; 735} 736EXPORT_SYMBOL(genphy_update_link); 737 738/** 739 * genphy_read_status - check the link status and update current link state 740 * @phydev: target phy_device struct 741 * 742 * Description: Check the link, then figure out the current state 743 * by comparing what we advertise with what the link partner 744 * advertises. Start by checking the gigabit possibilities, 745 * then move on to 10/100. 746 */ 747int genphy_read_status(struct phy_device *phydev) 748{ 749 int adv; 750 int err; 751 int lpa; 752 int lpagb = 0; 753 754 /* Update the link, but return if there 755 * was an error */ 756 err = genphy_update_link(phydev); 757 if (err) 758 return err; 759 760 if (AUTONEG_ENABLE == phydev->autoneg) { 761 if (phydev->supported & (SUPPORTED_1000baseT_Half 762 | SUPPORTED_1000baseT_Full)) { 763 lpagb = phy_read(phydev, MII_STAT1000); 764 765 if (lpagb < 0) 766 return lpagb; 767 768 adv = phy_read(phydev, MII_CTRL1000); 769 770 if (adv < 0) 771 return adv; 772 773 lpagb &= adv << 2; 774 } 775 776 lpa = phy_read(phydev, MII_LPA); 777 778 if (lpa < 0) 779 return lpa; 780 781 adv = phy_read(phydev, MII_ADVERTISE); 782 783 if (adv < 0) 784 return adv; 785 786 lpa &= adv; 787 788 phydev->speed = SPEED_10; 789 phydev->duplex = DUPLEX_HALF; 790 phydev->pause = phydev->asym_pause = 0; 791 792 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) { 793 phydev->speed = SPEED_1000; 794 795 if (lpagb & LPA_1000FULL) 796 phydev->duplex = DUPLEX_FULL; 797 } else if (lpa & (LPA_100FULL | LPA_100HALF)) { 798 phydev->speed = SPEED_100; 799 800 if (lpa & LPA_100FULL) 801 phydev->duplex = DUPLEX_FULL; 802 } else 803 if (lpa & LPA_10FULL) 804 phydev->duplex = DUPLEX_FULL; 805 806 if (phydev->duplex == DUPLEX_FULL){ 807 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0; 808 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0; 809 } 810 } else { 811 int bmcr = phy_read(phydev, MII_BMCR); 812 if (bmcr < 0) 813 return bmcr; 814 815 if (bmcr & BMCR_FULLDPLX) 816 phydev->duplex = DUPLEX_FULL; 817 else 818 phydev->duplex = DUPLEX_HALF; 819 820 if (bmcr & BMCR_SPEED1000) 821 phydev->speed = SPEED_1000; 822 else if (bmcr & BMCR_SPEED100) 823 phydev->speed = SPEED_100; 824 else 825 phydev->speed = SPEED_10; 826 827 phydev->pause = phydev->asym_pause = 0; 828 } 829 830 return 0; 831} 832EXPORT_SYMBOL(genphy_read_status); 833 834static int genphy_config_init(struct phy_device *phydev) 835{ 836 int val; 837 u32 features; 838 839 /* For now, I'll claim that the generic driver supports 840 * all possible port types */ 841 features = (SUPPORTED_TP | SUPPORTED_MII 842 | SUPPORTED_AUI | SUPPORTED_FIBRE | 843 SUPPORTED_BNC); 844 845 /* Do we support autonegotiation? */ 846 val = phy_read(phydev, MII_BMSR); 847 848 if (val < 0) 849 return val; 850 851 if (val & BMSR_ANEGCAPABLE) 852 features |= SUPPORTED_Autoneg; 853 854 if (val & BMSR_100FULL) 855 features |= SUPPORTED_100baseT_Full; 856 if (val & BMSR_100HALF) 857 features |= SUPPORTED_100baseT_Half; 858 if (val & BMSR_10FULL) 859 features |= SUPPORTED_10baseT_Full; 860 if (val & BMSR_10HALF) 861 features |= SUPPORTED_10baseT_Half; 862 863 if (val & BMSR_ESTATEN) { 864 val = phy_read(phydev, MII_ESTATUS); 865 866 if (val < 0) 867 return val; 868 869 if (val & ESTATUS_1000_TFULL) 870 features |= SUPPORTED_1000baseT_Full; 871 if (val & ESTATUS_1000_THALF) 872 features |= SUPPORTED_1000baseT_Half; 873 } 874 875 phydev->supported = features; 876 phydev->advertising = features; 877 878 return 0; 879} 880int genphy_suspend(struct phy_device *phydev) 881{ 882 int value; 883 884 mutex_lock(&phydev->lock); 885 886 value = phy_read(phydev, MII_BMCR); 887 phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN)); 888 889 mutex_unlock(&phydev->lock); 890 891 return 0; 892} 893EXPORT_SYMBOL(genphy_suspend); 894 895int genphy_resume(struct phy_device *phydev) 896{ 897 int value; 898 899 mutex_lock(&phydev->lock); 900 901 value = phy_read(phydev, MII_BMCR); 902 phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN)); 903 904 mutex_unlock(&phydev->lock); 905 906 return 0; 907} 908EXPORT_SYMBOL(genphy_resume); 909 910/** 911 * phy_probe - probe and init a PHY device 912 * @dev: device to probe and init 913 * 914 * Description: Take care of setting up the phy_device structure, 915 * set the state to READY (the driver's init function should 916 * set it to STARTING if needed). 917 */ 918static int phy_probe(struct device *dev) 919{ 920 struct phy_device *phydev; 921 struct phy_driver *phydrv; 922 struct device_driver *drv; 923 int err = 0; 924 925 phydev = to_phy_device(dev); 926 927 drv = get_driver(phydev->dev.driver); 928 phydrv = to_phy_driver(drv); 929 phydev->drv = phydrv; 930 931 /* Disable the interrupt if the PHY doesn't support it */ 932 if (!(phydrv->flags & PHY_HAS_INTERRUPT)) 933 phydev->irq = PHY_POLL; 934 935 mutex_lock(&phydev->lock); 936 937 /* Start out supporting everything. Eventually, 938 * a controller will attach, and may modify one 939 * or both of these values */ 940 phydev->supported = phydrv->features; 941 phydev->advertising = phydrv->features; 942 943 /* Set the state to READY by default */ 944 phydev->state = PHY_READY; 945 946 if (phydev->drv->probe) 947 err = phydev->drv->probe(phydev); 948 949 mutex_unlock(&phydev->lock); 950 951 return err; 952 953} 954 955static int phy_remove(struct device *dev) 956{ 957 struct phy_device *phydev; 958 959 phydev = to_phy_device(dev); 960 961 mutex_lock(&phydev->lock); 962 phydev->state = PHY_DOWN; 963 mutex_unlock(&phydev->lock); 964 965 if (phydev->drv->remove) 966 phydev->drv->remove(phydev); 967 968 put_driver(dev->driver); 969 phydev->drv = NULL; 970 971 return 0; 972} 973 974/** 975 * phy_driver_register - register a phy_driver with the PHY layer 976 * @new_driver: new phy_driver to register 977 */ 978int phy_driver_register(struct phy_driver *new_driver) 979{ 980 int retval; 981 982 new_driver->driver.name = new_driver->name; 983 new_driver->driver.bus = &mdio_bus_type; 984 new_driver->driver.probe = phy_probe; 985 new_driver->driver.remove = phy_remove; 986 987 retval = driver_register(&new_driver->driver); 988 989 if (retval) { 990 printk(KERN_ERR "%s: Error %d in registering driver\n", 991 new_driver->name, retval); 992 993 return retval; 994 } 995 996 pr_debug("%s: Registered new driver\n", new_driver->name); 997 998 return 0; 999} 1000EXPORT_SYMBOL(phy_driver_register); 1001 1002void phy_driver_unregister(struct phy_driver *drv) 1003{ 1004 driver_unregister(&drv->driver); 1005} 1006EXPORT_SYMBOL(phy_driver_unregister); 1007 1008static struct phy_driver genphy_driver = { 1009 .phy_id = 0xffffffff, 1010 .phy_id_mask = 0xffffffff, 1011 .name = "Generic PHY", 1012 .config_init = genphy_config_init, 1013 .features = 0, 1014 .config_aneg = genphy_config_aneg, 1015 .read_status = genphy_read_status, 1016 .suspend = genphy_suspend, 1017 .resume = genphy_resume, 1018 .driver = {.owner= THIS_MODULE, }, 1019}; 1020 1021static int __init phy_init(void) 1022{ 1023 int rc; 1024 1025 rc = mdio_bus_init(); 1026 if (rc) 1027 return rc; 1028 1029 rc = phy_driver_register(&genphy_driver); 1030 if (rc) 1031 mdio_bus_exit(); 1032 1033 return rc; 1034} 1035 1036static void __exit phy_exit(void) 1037{ 1038 phy_driver_unregister(&genphy_driver); 1039 mdio_bus_exit(); 1040} 1041 1042subsys_initcall(phy_init); 1043module_exit(phy_exit); 1044