1 // SPDX-License-Identifier: GPL-2.0+ 2 /* Framework for configuring and reading PHY devices 3 * Based on code in sungem_phy.c and gianfar_phy.c 4 * 5 * Author: Andy Fleming 6 * 7 * Copyright (c) 2004 Freescale Semiconductor, Inc. 8 * Copyright (c) 2006, 2007 Maciej W. Rozycki 9 */ 10 11 #include <linux/kernel.h> 12 #include <linux/string.h> 13 #include <linux/errno.h> 14 #include <linux/unistd.h> 15 #include <linux/interrupt.h> 16 #include <linux/delay.h> 17 #include <linux/netdevice.h> 18 #include <linux/etherdevice.h> 19 #include <linux/skbuff.h> 20 #include <linux/mm.h> 21 #include <linux/module.h> 22 #include <linux/mii.h> 23 #include <linux/ethtool.h> 24 #include <linux/phy.h> 25 #include <linux/phy_led_triggers.h> 26 #include <linux/workqueue.h> 27 #include <linux/mdio.h> 28 #include <linux/io.h> 29 #include <linux/uaccess.h> 30 #include <linux/atomic.h> 31 32 #define PHY_STATE_TIME HZ 33 34 #define PHY_STATE_STR(_state) \ 35 case PHY_##_state: \ 36 return __stringify(_state); \ 37 38 static const char *phy_state_to_str(enum phy_state st) 39 { 40 switch (st) { 41 PHY_STATE_STR(DOWN) 42 PHY_STATE_STR(READY) 43 PHY_STATE_STR(UP) 44 PHY_STATE_STR(RUNNING) 45 PHY_STATE_STR(NOLINK) 46 PHY_STATE_STR(FORCING) 47 PHY_STATE_STR(HALTED) 48 } 49 50 return NULL; 51 } 52 53 static void phy_link_up(struct phy_device *phydev) 54 { 55 phydev->phy_link_change(phydev, true, true); 56 phy_led_trigger_change_speed(phydev); 57 } 58 59 static void phy_link_down(struct phy_device *phydev, bool do_carrier) 60 { 61 phydev->phy_link_change(phydev, false, do_carrier); 62 phy_led_trigger_change_speed(phydev); 63 } 64 65 static const char *phy_pause_str(struct phy_device *phydev) 66 { 67 bool local_pause, local_asym_pause; 68 69 if (phydev->autoneg == AUTONEG_DISABLE) 70 goto no_pause; 71 72 local_pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, 73 phydev->advertising); 74 local_asym_pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, 75 phydev->advertising); 76 77 if (local_pause && phydev->pause) 78 return "rx/tx"; 79 80 if (local_asym_pause && phydev->asym_pause) { 81 if (local_pause) 82 return "rx"; 83 if (phydev->pause) 84 return "tx"; 85 } 86 87 no_pause: 88 return "off"; 89 } 90 91 /** 92 * phy_print_status - Convenience function to print out the current phy status 93 * @phydev: the phy_device struct 94 */ 95 void phy_print_status(struct phy_device *phydev) 96 { 97 if (phydev->link) { 98 netdev_info(phydev->attached_dev, 99 "Link is Up - %s/%s - flow control %s\n", 100 phy_speed_to_str(phydev->speed), 101 phy_duplex_to_str(phydev->duplex), 102 phy_pause_str(phydev)); 103 } else { 104 netdev_info(phydev->attached_dev, "Link is Down\n"); 105 } 106 } 107 EXPORT_SYMBOL(phy_print_status); 108 109 /** 110 * phy_clear_interrupt - Ack the phy device's interrupt 111 * @phydev: the phy_device struct 112 * 113 * If the @phydev driver has an ack_interrupt function, call it to 114 * ack and clear the phy device's interrupt. 115 * 116 * Returns 0 on success or < 0 on error. 117 */ 118 static int phy_clear_interrupt(struct phy_device *phydev) 119 { 120 if (phydev->drv->ack_interrupt) 121 return phydev->drv->ack_interrupt(phydev); 122 123 return 0; 124 } 125 126 /** 127 * phy_config_interrupt - configure the PHY device for the requested interrupts 128 * @phydev: the phy_device struct 129 * @interrupts: interrupt flags to configure for this @phydev 130 * 131 * Returns 0 on success or < 0 on error. 132 */ 133 static int phy_config_interrupt(struct phy_device *phydev, bool interrupts) 134 { 135 phydev->interrupts = interrupts ? 1 : 0; 136 if (phydev->drv->config_intr) 137 return phydev->drv->config_intr(phydev); 138 139 return 0; 140 } 141 142 /** 143 * phy_restart_aneg - restart auto-negotiation 144 * @phydev: target phy_device struct 145 * 146 * Restart the autonegotiation on @phydev. Returns >= 0 on success or 147 * negative errno on error. 148 */ 149 int phy_restart_aneg(struct phy_device *phydev) 150 { 151 int ret; 152 153 if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0))) 154 ret = genphy_c45_restart_aneg(phydev); 155 else 156 ret = genphy_restart_aneg(phydev); 157 158 return ret; 159 } 160 EXPORT_SYMBOL_GPL(phy_restart_aneg); 161 162 /** 163 * phy_aneg_done - return auto-negotiation status 164 * @phydev: target phy_device struct 165 * 166 * Description: Return the auto-negotiation status from this @phydev 167 * Returns > 0 on success or < 0 on error. 0 means that auto-negotiation 168 * is still pending. 169 */ 170 int phy_aneg_done(struct phy_device *phydev) 171 { 172 if (phydev->drv && phydev->drv->aneg_done) 173 return phydev->drv->aneg_done(phydev); 174 else if (phydev->is_c45) 175 return genphy_c45_aneg_done(phydev); 176 else 177 return genphy_aneg_done(phydev); 178 } 179 EXPORT_SYMBOL(phy_aneg_done); 180 181 /** 182 * phy_find_valid - find a PHY setting that matches the requested parameters 183 * @speed: desired speed 184 * @duplex: desired duplex 185 * @supported: mask of supported link modes 186 * 187 * Locate a supported phy setting that is, in priority order: 188 * - an exact match for the specified speed and duplex mode 189 * - a match for the specified speed, or slower speed 190 * - the slowest supported speed 191 * Returns the matched phy_setting entry, or %NULL if no supported phy 192 * settings were found. 193 */ 194 static const struct phy_setting * 195 phy_find_valid(int speed, int duplex, unsigned long *supported) 196 { 197 return phy_lookup_setting(speed, duplex, supported, false); 198 } 199 200 /** 201 * phy_supported_speeds - return all speeds currently supported by a phy device 202 * @phy: The phy device to return supported speeds of. 203 * @speeds: buffer to store supported speeds in. 204 * @size: size of speeds buffer. 205 * 206 * Description: Returns the number of supported speeds, and fills the speeds 207 * buffer with the supported speeds. If speeds buffer is too small to contain 208 * all currently supported speeds, will return as many speeds as can fit. 209 */ 210 unsigned int phy_supported_speeds(struct phy_device *phy, 211 unsigned int *speeds, 212 unsigned int size) 213 { 214 return phy_speeds(speeds, size, phy->supported); 215 } 216 217 /** 218 * phy_check_valid - check if there is a valid PHY setting which matches 219 * speed, duplex, and feature mask 220 * @speed: speed to match 221 * @duplex: duplex to match 222 * @features: A mask of the valid settings 223 * 224 * Description: Returns true if there is a valid setting, false otherwise. 225 */ 226 static inline bool phy_check_valid(int speed, int duplex, 227 unsigned long *features) 228 { 229 return !!phy_lookup_setting(speed, duplex, features, true); 230 } 231 232 /** 233 * phy_sanitize_settings - make sure the PHY is set to supported speed and duplex 234 * @phydev: the target phy_device struct 235 * 236 * Description: Make sure the PHY is set to supported speeds and 237 * duplexes. Drop down by one in this order: 1000/FULL, 238 * 1000/HALF, 100/FULL, 100/HALF, 10/FULL, 10/HALF. 239 */ 240 static void phy_sanitize_settings(struct phy_device *phydev) 241 { 242 const struct phy_setting *setting; 243 244 setting = phy_find_valid(phydev->speed, phydev->duplex, 245 phydev->supported); 246 if (setting) { 247 phydev->speed = setting->speed; 248 phydev->duplex = setting->duplex; 249 } else { 250 /* We failed to find anything (no supported speeds?) */ 251 phydev->speed = SPEED_UNKNOWN; 252 phydev->duplex = DUPLEX_UNKNOWN; 253 } 254 } 255 256 /** 257 * phy_ethtool_sset - generic ethtool sset function, handles all the details 258 * @phydev: target phy_device struct 259 * @cmd: ethtool_cmd 260 * 261 * A few notes about parameter checking: 262 * 263 * - We don't set port or transceiver, so we don't care what they 264 * were set to. 265 * - phy_start_aneg() will make sure forced settings are sane, and 266 * choose the next best ones from the ones selected, so we don't 267 * care if ethtool tries to give us bad values. 268 */ 269 int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd) 270 { 271 __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising); 272 u32 speed = ethtool_cmd_speed(cmd); 273 274 if (cmd->phy_address != phydev->mdio.addr) 275 return -EINVAL; 276 277 /* We make sure that we don't pass unsupported values in to the PHY */ 278 ethtool_convert_legacy_u32_to_link_mode(advertising, cmd->advertising); 279 linkmode_and(advertising, advertising, phydev->supported); 280 281 /* Verify the settings we care about. */ 282 if (cmd->autoneg != AUTONEG_ENABLE && cmd->autoneg != AUTONEG_DISABLE) 283 return -EINVAL; 284 285 if (cmd->autoneg == AUTONEG_ENABLE && cmd->advertising == 0) 286 return -EINVAL; 287 288 if (cmd->autoneg == AUTONEG_DISABLE && 289 ((speed != SPEED_1000 && 290 speed != SPEED_100 && 291 speed != SPEED_10) || 292 (cmd->duplex != DUPLEX_HALF && 293 cmd->duplex != DUPLEX_FULL))) 294 return -EINVAL; 295 296 phydev->autoneg = cmd->autoneg; 297 298 phydev->speed = speed; 299 300 linkmode_copy(phydev->advertising, advertising); 301 302 if (AUTONEG_ENABLE == cmd->autoneg) 303 linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, 304 phydev->advertising); 305 else 306 linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, 307 phydev->advertising); 308 309 phydev->duplex = cmd->duplex; 310 311 phydev->mdix_ctrl = cmd->eth_tp_mdix_ctrl; 312 313 /* Restart the PHY */ 314 phy_start_aneg(phydev); 315 316 return 0; 317 } 318 EXPORT_SYMBOL(phy_ethtool_sset); 319 320 int phy_ethtool_ksettings_set(struct phy_device *phydev, 321 const struct ethtool_link_ksettings *cmd) 322 { 323 __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising); 324 u8 autoneg = cmd->base.autoneg; 325 u8 duplex = cmd->base.duplex; 326 u32 speed = cmd->base.speed; 327 328 if (cmd->base.phy_address != phydev->mdio.addr) 329 return -EINVAL; 330 331 linkmode_copy(advertising, cmd->link_modes.advertising); 332 333 /* We make sure that we don't pass unsupported values in to the PHY */ 334 linkmode_and(advertising, advertising, phydev->supported); 335 336 /* Verify the settings we care about. */ 337 if (autoneg != AUTONEG_ENABLE && autoneg != AUTONEG_DISABLE) 338 return -EINVAL; 339 340 if (autoneg == AUTONEG_ENABLE && linkmode_empty(advertising)) 341 return -EINVAL; 342 343 if (autoneg == AUTONEG_DISABLE && 344 ((speed != SPEED_1000 && 345 speed != SPEED_100 && 346 speed != SPEED_10) || 347 (duplex != DUPLEX_HALF && 348 duplex != DUPLEX_FULL))) 349 return -EINVAL; 350 351 phydev->autoneg = autoneg; 352 353 phydev->speed = speed; 354 355 linkmode_copy(phydev->advertising, advertising); 356 357 if (autoneg == AUTONEG_ENABLE) 358 linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, 359 phydev->advertising); 360 else 361 linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, 362 phydev->advertising); 363 364 phydev->duplex = duplex; 365 366 phydev->mdix_ctrl = cmd->base.eth_tp_mdix_ctrl; 367 368 /* Restart the PHY */ 369 phy_start_aneg(phydev); 370 371 return 0; 372 } 373 EXPORT_SYMBOL(phy_ethtool_ksettings_set); 374 375 void phy_ethtool_ksettings_get(struct phy_device *phydev, 376 struct ethtool_link_ksettings *cmd) 377 { 378 linkmode_copy(cmd->link_modes.supported, phydev->supported); 379 linkmode_copy(cmd->link_modes.advertising, phydev->advertising); 380 linkmode_copy(cmd->link_modes.lp_advertising, phydev->lp_advertising); 381 382 cmd->base.speed = phydev->speed; 383 cmd->base.duplex = phydev->duplex; 384 if (phydev->interface == PHY_INTERFACE_MODE_MOCA) 385 cmd->base.port = PORT_BNC; 386 else 387 cmd->base.port = PORT_MII; 388 cmd->base.transceiver = phy_is_internal(phydev) ? 389 XCVR_INTERNAL : XCVR_EXTERNAL; 390 cmd->base.phy_address = phydev->mdio.addr; 391 cmd->base.autoneg = phydev->autoneg; 392 cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl; 393 cmd->base.eth_tp_mdix = phydev->mdix; 394 } 395 EXPORT_SYMBOL(phy_ethtool_ksettings_get); 396 397 /** 398 * phy_mii_ioctl - generic PHY MII ioctl interface 399 * @phydev: the phy_device struct 400 * @ifr: &struct ifreq for socket ioctl's 401 * @cmd: ioctl cmd to execute 402 * 403 * Note that this function is currently incompatible with the 404 * PHYCONTROL layer. It changes registers without regard to 405 * current state. Use at own risk. 406 */ 407 int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd) 408 { 409 struct mii_ioctl_data *mii_data = if_mii(ifr); 410 u16 val = mii_data->val_in; 411 bool change_autoneg = false; 412 int prtad, devad; 413 414 switch (cmd) { 415 case SIOCGMIIPHY: 416 mii_data->phy_id = phydev->mdio.addr; 417 /* fall through */ 418 419 case SIOCGMIIREG: 420 if (mdio_phy_id_is_c45(mii_data->phy_id)) { 421 prtad = mdio_phy_id_prtad(mii_data->phy_id); 422 devad = mdio_phy_id_devad(mii_data->phy_id); 423 devad = MII_ADDR_C45 | devad << 16 | mii_data->reg_num; 424 } else { 425 prtad = mii_data->phy_id; 426 devad = mii_data->reg_num; 427 } 428 mii_data->val_out = mdiobus_read(phydev->mdio.bus, prtad, 429 devad); 430 return 0; 431 432 case SIOCSMIIREG: 433 if (mdio_phy_id_is_c45(mii_data->phy_id)) { 434 prtad = mdio_phy_id_prtad(mii_data->phy_id); 435 devad = mdio_phy_id_devad(mii_data->phy_id); 436 devad = MII_ADDR_C45 | devad << 16 | mii_data->reg_num; 437 } else { 438 prtad = mii_data->phy_id; 439 devad = mii_data->reg_num; 440 } 441 if (prtad == phydev->mdio.addr) { 442 switch (devad) { 443 case MII_BMCR: 444 if ((val & (BMCR_RESET | BMCR_ANENABLE)) == 0) { 445 if (phydev->autoneg == AUTONEG_ENABLE) 446 change_autoneg = true; 447 phydev->autoneg = AUTONEG_DISABLE; 448 if (val & BMCR_FULLDPLX) 449 phydev->duplex = DUPLEX_FULL; 450 else 451 phydev->duplex = DUPLEX_HALF; 452 if (val & BMCR_SPEED1000) 453 phydev->speed = SPEED_1000; 454 else if (val & BMCR_SPEED100) 455 phydev->speed = SPEED_100; 456 else phydev->speed = SPEED_10; 457 } 458 else { 459 if (phydev->autoneg == AUTONEG_DISABLE) 460 change_autoneg = true; 461 phydev->autoneg = AUTONEG_ENABLE; 462 } 463 break; 464 case MII_ADVERTISE: 465 mii_adv_mod_linkmode_adv_t(phydev->advertising, 466 val); 467 change_autoneg = true; 468 break; 469 default: 470 /* do nothing */ 471 break; 472 } 473 } 474 475 mdiobus_write(phydev->mdio.bus, prtad, devad, val); 476 477 if (prtad == phydev->mdio.addr && 478 devad == MII_BMCR && 479 val & BMCR_RESET) 480 return phy_init_hw(phydev); 481 482 if (change_autoneg) 483 return phy_start_aneg(phydev); 484 485 return 0; 486 487 case SIOCSHWTSTAMP: 488 if (phydev->drv && phydev->drv->hwtstamp) 489 return phydev->drv->hwtstamp(phydev, ifr); 490 /* fall through */ 491 492 default: 493 return -EOPNOTSUPP; 494 } 495 } 496 EXPORT_SYMBOL(phy_mii_ioctl); 497 498 void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies) 499 { 500 mod_delayed_work(system_power_efficient_wq, &phydev->state_queue, 501 jiffies); 502 } 503 EXPORT_SYMBOL(phy_queue_state_machine); 504 505 static void phy_trigger_machine(struct phy_device *phydev) 506 { 507 phy_queue_state_machine(phydev, 0); 508 } 509 510 static int phy_config_aneg(struct phy_device *phydev) 511 { 512 if (phydev->drv->config_aneg) 513 return phydev->drv->config_aneg(phydev); 514 515 /* Clause 45 PHYs that don't implement Clause 22 registers are not 516 * allowed to call genphy_config_aneg() 517 */ 518 if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0))) 519 return -EOPNOTSUPP; 520 521 return genphy_config_aneg(phydev); 522 } 523 524 /** 525 * phy_check_link_status - check link status and set state accordingly 526 * @phydev: the phy_device struct 527 * 528 * Description: Check for link and whether autoneg was triggered / is running 529 * and set state accordingly 530 */ 531 static int phy_check_link_status(struct phy_device *phydev) 532 { 533 int err; 534 535 WARN_ON(!mutex_is_locked(&phydev->lock)); 536 537 err = phy_read_status(phydev); 538 if (err) 539 return err; 540 541 if (phydev->link && phydev->state != PHY_RUNNING) { 542 phydev->state = PHY_RUNNING; 543 phy_link_up(phydev); 544 } else if (!phydev->link && phydev->state != PHY_NOLINK) { 545 phydev->state = PHY_NOLINK; 546 phy_link_down(phydev, true); 547 } 548 549 return 0; 550 } 551 552 /** 553 * phy_start_aneg - start auto-negotiation for this PHY device 554 * @phydev: the phy_device struct 555 * 556 * Description: Sanitizes the settings (if we're not autonegotiating 557 * them), and then calls the driver's config_aneg function. 558 * If the PHYCONTROL Layer is operating, we change the state to 559 * reflect the beginning of Auto-negotiation or forcing. 560 */ 561 int phy_start_aneg(struct phy_device *phydev) 562 { 563 int err; 564 565 if (!phydev->drv) 566 return -EIO; 567 568 mutex_lock(&phydev->lock); 569 570 if (AUTONEG_DISABLE == phydev->autoneg) 571 phy_sanitize_settings(phydev); 572 573 /* Invalidate LP advertising flags */ 574 linkmode_zero(phydev->lp_advertising); 575 576 err = phy_config_aneg(phydev); 577 if (err < 0) 578 goto out_unlock; 579 580 if (phy_is_started(phydev)) { 581 if (phydev->autoneg == AUTONEG_ENABLE) { 582 err = phy_check_link_status(phydev); 583 } else { 584 phydev->state = PHY_FORCING; 585 phydev->link_timeout = PHY_FORCE_TIMEOUT; 586 } 587 } 588 589 out_unlock: 590 mutex_unlock(&phydev->lock); 591 592 return err; 593 } 594 EXPORT_SYMBOL(phy_start_aneg); 595 596 static int phy_poll_aneg_done(struct phy_device *phydev) 597 { 598 unsigned int retries = 100; 599 int ret; 600 601 do { 602 msleep(100); 603 ret = phy_aneg_done(phydev); 604 } while (!ret && --retries); 605 606 if (!ret) 607 return -ETIMEDOUT; 608 609 return ret < 0 ? ret : 0; 610 } 611 612 /** 613 * phy_speed_down - set speed to lowest speed supported by both link partners 614 * @phydev: the phy_device struct 615 * @sync: perform action synchronously 616 * 617 * Description: Typically used to save energy when waiting for a WoL packet 618 * 619 * WARNING: Setting sync to false may cause the system being unable to suspend 620 * in case the PHY generates an interrupt when finishing the autonegotiation. 621 * This interrupt may wake up the system immediately after suspend. 622 * Therefore use sync = false only if you're sure it's safe with the respective 623 * network chip. 624 */ 625 int phy_speed_down(struct phy_device *phydev, bool sync) 626 { 627 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old); 628 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv); 629 int ret; 630 631 if (phydev->autoneg != AUTONEG_ENABLE) 632 return 0; 633 634 linkmode_copy(adv_old, phydev->advertising); 635 linkmode_copy(adv, phydev->lp_advertising); 636 linkmode_and(adv, adv, phydev->supported); 637 638 if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, adv) || 639 linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, adv)) { 640 linkmode_clear_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, 641 phydev->advertising); 642 linkmode_clear_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 643 phydev->advertising); 644 linkmode_clear_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT, 645 phydev->advertising); 646 linkmode_clear_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, 647 phydev->advertising); 648 } else if (linkmode_test_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, 649 adv) || 650 linkmode_test_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 651 adv)) { 652 linkmode_clear_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT, 653 phydev->advertising); 654 linkmode_clear_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, 655 phydev->advertising); 656 } 657 658 if (linkmode_equal(phydev->advertising, adv_old)) 659 return 0; 660 661 ret = phy_config_aneg(phydev); 662 if (ret) 663 return ret; 664 665 return sync ? phy_poll_aneg_done(phydev) : 0; 666 } 667 EXPORT_SYMBOL_GPL(phy_speed_down); 668 669 /** 670 * phy_speed_up - (re)set advertised speeds to all supported speeds 671 * @phydev: the phy_device struct 672 * 673 * Description: Used to revert the effect of phy_speed_down 674 */ 675 int phy_speed_up(struct phy_device *phydev) 676 { 677 __ETHTOOL_DECLARE_LINK_MODE_MASK(all_speeds) = { 0, }; 678 __ETHTOOL_DECLARE_LINK_MODE_MASK(not_speeds); 679 __ETHTOOL_DECLARE_LINK_MODE_MASK(supported); 680 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old); 681 __ETHTOOL_DECLARE_LINK_MODE_MASK(speeds); 682 683 linkmode_copy(adv_old, phydev->advertising); 684 685 if (phydev->autoneg != AUTONEG_ENABLE) 686 return 0; 687 688 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, all_speeds); 689 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, all_speeds); 690 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, all_speeds); 691 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, all_speeds); 692 linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT, all_speeds); 693 linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, all_speeds); 694 695 linkmode_andnot(not_speeds, adv_old, all_speeds); 696 linkmode_copy(supported, phydev->supported); 697 linkmode_and(speeds, supported, all_speeds); 698 linkmode_or(phydev->advertising, not_speeds, speeds); 699 700 if (linkmode_equal(phydev->advertising, adv_old)) 701 return 0; 702 703 return phy_config_aneg(phydev); 704 } 705 EXPORT_SYMBOL_GPL(phy_speed_up); 706 707 /** 708 * phy_start_machine - start PHY state machine tracking 709 * @phydev: the phy_device struct 710 * 711 * Description: The PHY infrastructure can run a state machine 712 * which tracks whether the PHY is starting up, negotiating, 713 * etc. This function starts the delayed workqueue which tracks 714 * the state of the PHY. If you want to maintain your own state machine, 715 * do not call this function. 716 */ 717 void phy_start_machine(struct phy_device *phydev) 718 { 719 phy_trigger_machine(phydev); 720 } 721 EXPORT_SYMBOL_GPL(phy_start_machine); 722 723 /** 724 * phy_stop_machine - stop the PHY state machine tracking 725 * @phydev: target phy_device struct 726 * 727 * Description: Stops the state machine delayed workqueue, sets the 728 * state to UP (unless it wasn't up yet). This function must be 729 * called BEFORE phy_detach. 730 */ 731 void phy_stop_machine(struct phy_device *phydev) 732 { 733 cancel_delayed_work_sync(&phydev->state_queue); 734 735 mutex_lock(&phydev->lock); 736 if (phy_is_started(phydev)) 737 phydev->state = PHY_UP; 738 mutex_unlock(&phydev->lock); 739 } 740 741 /** 742 * phy_error - enter HALTED state for this PHY device 743 * @phydev: target phy_device struct 744 * 745 * Moves the PHY to the HALTED state in response to a read 746 * or write error, and tells the controller the link is down. 747 * Must not be called from interrupt context, or while the 748 * phydev->lock is held. 749 */ 750 static void phy_error(struct phy_device *phydev) 751 { 752 WARN_ON(1); 753 754 mutex_lock(&phydev->lock); 755 phydev->state = PHY_HALTED; 756 mutex_unlock(&phydev->lock); 757 758 phy_trigger_machine(phydev); 759 } 760 761 /** 762 * phy_disable_interrupts - Disable the PHY interrupts from the PHY side 763 * @phydev: target phy_device struct 764 */ 765 static int phy_disable_interrupts(struct phy_device *phydev) 766 { 767 int err; 768 769 /* Disable PHY interrupts */ 770 err = phy_config_interrupt(phydev, PHY_INTERRUPT_DISABLED); 771 if (err) 772 return err; 773 774 /* Clear the interrupt */ 775 return phy_clear_interrupt(phydev); 776 } 777 778 /** 779 * phy_interrupt - PHY interrupt handler 780 * @irq: interrupt line 781 * @phy_dat: phy_device pointer 782 * 783 * Description: Handle PHY interrupt 784 */ 785 static irqreturn_t phy_interrupt(int irq, void *phy_dat) 786 { 787 struct phy_device *phydev = phy_dat; 788 789 if (phydev->drv->did_interrupt && !phydev->drv->did_interrupt(phydev)) 790 return IRQ_NONE; 791 792 if (phydev->drv->handle_interrupt) { 793 if (phydev->drv->handle_interrupt(phydev)) 794 goto phy_err; 795 } else { 796 /* reschedule state queue work to run as soon as possible */ 797 phy_trigger_machine(phydev); 798 } 799 800 if (phy_clear_interrupt(phydev)) 801 goto phy_err; 802 return IRQ_HANDLED; 803 804 phy_err: 805 phy_error(phydev); 806 return IRQ_NONE; 807 } 808 809 /** 810 * phy_enable_interrupts - Enable the interrupts from the PHY side 811 * @phydev: target phy_device struct 812 */ 813 static int phy_enable_interrupts(struct phy_device *phydev) 814 { 815 int err = phy_clear_interrupt(phydev); 816 817 if (err < 0) 818 return err; 819 820 return phy_config_interrupt(phydev, PHY_INTERRUPT_ENABLED); 821 } 822 823 /** 824 * phy_request_interrupt - request and enable interrupt for a PHY device 825 * @phydev: target phy_device struct 826 * 827 * Description: Request and enable the interrupt for the given PHY. 828 * If this fails, then we set irq to PHY_POLL. 829 * This should only be called with a valid IRQ number. 830 */ 831 void phy_request_interrupt(struct phy_device *phydev) 832 { 833 int err; 834 835 err = request_threaded_irq(phydev->irq, NULL, phy_interrupt, 836 IRQF_ONESHOT | IRQF_SHARED, 837 phydev_name(phydev), phydev); 838 if (err) { 839 phydev_warn(phydev, "Error %d requesting IRQ %d, falling back to polling\n", 840 err, phydev->irq); 841 phydev->irq = PHY_POLL; 842 } else { 843 if (phy_enable_interrupts(phydev)) { 844 phydev_warn(phydev, "Can't enable interrupt, falling back to polling\n"); 845 phy_free_interrupt(phydev); 846 phydev->irq = PHY_POLL; 847 } 848 } 849 } 850 EXPORT_SYMBOL(phy_request_interrupt); 851 852 /** 853 * phy_free_interrupt - disable and free interrupt for a PHY device 854 * @phydev: target phy_device struct 855 * 856 * Description: Disable and free the interrupt for the given PHY. 857 * This should only be called with a valid IRQ number. 858 */ 859 void phy_free_interrupt(struct phy_device *phydev) 860 { 861 phy_disable_interrupts(phydev); 862 free_irq(phydev->irq, phydev); 863 } 864 EXPORT_SYMBOL(phy_free_interrupt); 865 866 /** 867 * phy_stop - Bring down the PHY link, and stop checking the status 868 * @phydev: target phy_device struct 869 */ 870 void phy_stop(struct phy_device *phydev) 871 { 872 if (!phy_is_started(phydev)) { 873 WARN(1, "called from state %s\n", 874 phy_state_to_str(phydev->state)); 875 return; 876 } 877 878 mutex_lock(&phydev->lock); 879 880 phydev->state = PHY_HALTED; 881 882 mutex_unlock(&phydev->lock); 883 884 phy_state_machine(&phydev->state_queue.work); 885 phy_stop_machine(phydev); 886 887 /* Cannot call flush_scheduled_work() here as desired because 888 * of rtnl_lock(), but PHY_HALTED shall guarantee irq handler 889 * will not reenable interrupts. 890 */ 891 } 892 EXPORT_SYMBOL(phy_stop); 893 894 /** 895 * phy_start - start or restart a PHY device 896 * @phydev: target phy_device struct 897 * 898 * Description: Indicates the attached device's readiness to 899 * handle PHY-related work. Used during startup to start the 900 * PHY, and after a call to phy_stop() to resume operation. 901 * Also used to indicate the MDIO bus has cleared an error 902 * condition. 903 */ 904 void phy_start(struct phy_device *phydev) 905 { 906 mutex_lock(&phydev->lock); 907 908 if (phydev->state != PHY_READY && phydev->state != PHY_HALTED) { 909 WARN(1, "called from state %s\n", 910 phy_state_to_str(phydev->state)); 911 goto out; 912 } 913 914 /* if phy was suspended, bring the physical link up again */ 915 __phy_resume(phydev); 916 917 phydev->state = PHY_UP; 918 919 phy_start_machine(phydev); 920 out: 921 mutex_unlock(&phydev->lock); 922 } 923 EXPORT_SYMBOL(phy_start); 924 925 /** 926 * phy_state_machine - Handle the state machine 927 * @work: work_struct that describes the work to be done 928 */ 929 void phy_state_machine(struct work_struct *work) 930 { 931 struct delayed_work *dwork = to_delayed_work(work); 932 struct phy_device *phydev = 933 container_of(dwork, struct phy_device, state_queue); 934 bool needs_aneg = false, do_suspend = false; 935 enum phy_state old_state; 936 int err = 0; 937 938 mutex_lock(&phydev->lock); 939 940 old_state = phydev->state; 941 942 switch (phydev->state) { 943 case PHY_DOWN: 944 case PHY_READY: 945 break; 946 case PHY_UP: 947 needs_aneg = true; 948 949 break; 950 case PHY_NOLINK: 951 case PHY_RUNNING: 952 err = phy_check_link_status(phydev); 953 break; 954 case PHY_FORCING: 955 err = genphy_update_link(phydev); 956 if (err) 957 break; 958 959 if (phydev->link) { 960 phydev->state = PHY_RUNNING; 961 phy_link_up(phydev); 962 } else { 963 if (0 == phydev->link_timeout--) 964 needs_aneg = true; 965 phy_link_down(phydev, false); 966 } 967 break; 968 case PHY_HALTED: 969 if (phydev->link) { 970 phydev->link = 0; 971 phy_link_down(phydev, true); 972 do_suspend = true; 973 } 974 break; 975 } 976 977 mutex_unlock(&phydev->lock); 978 979 if (needs_aneg) 980 err = phy_start_aneg(phydev); 981 else if (do_suspend) 982 phy_suspend(phydev); 983 984 if (err < 0) 985 phy_error(phydev); 986 987 if (old_state != phydev->state) { 988 phydev_dbg(phydev, "PHY state change %s -> %s\n", 989 phy_state_to_str(old_state), 990 phy_state_to_str(phydev->state)); 991 if (phydev->drv && phydev->drv->link_change_notify) 992 phydev->drv->link_change_notify(phydev); 993 } 994 995 /* Only re-schedule a PHY state machine change if we are polling the 996 * PHY, if PHY_IGNORE_INTERRUPT is set, then we will be moving 997 * between states from phy_mac_interrupt(). 998 * 999 * In state PHY_HALTED the PHY gets suspended, so rescheduling the 1000 * state machine would be pointless and possibly error prone when 1001 * called from phy_disconnect() synchronously. 1002 */ 1003 mutex_lock(&phydev->lock); 1004 if (phy_polling_mode(phydev) && phy_is_started(phydev)) 1005 phy_queue_state_machine(phydev, PHY_STATE_TIME); 1006 mutex_unlock(&phydev->lock); 1007 } 1008 1009 /** 1010 * phy_mac_interrupt - MAC says the link has changed 1011 * @phydev: phy_device struct with changed link 1012 * 1013 * The MAC layer is able to indicate there has been a change in the PHY link 1014 * status. Trigger the state machine and work a work queue. 1015 */ 1016 void phy_mac_interrupt(struct phy_device *phydev) 1017 { 1018 /* Trigger a state machine change */ 1019 phy_trigger_machine(phydev); 1020 } 1021 EXPORT_SYMBOL(phy_mac_interrupt); 1022 1023 static void mmd_eee_adv_to_linkmode(unsigned long *advertising, u16 eee_adv) 1024 { 1025 linkmode_zero(advertising); 1026 1027 if (eee_adv & MDIO_EEE_100TX) 1028 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 1029 advertising); 1030 if (eee_adv & MDIO_EEE_1000T) 1031 linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, 1032 advertising); 1033 if (eee_adv & MDIO_EEE_10GT) 1034 linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, 1035 advertising); 1036 if (eee_adv & MDIO_EEE_1000KX) 1037 linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT, 1038 advertising); 1039 if (eee_adv & MDIO_EEE_10GKX4) 1040 linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT, 1041 advertising); 1042 if (eee_adv & MDIO_EEE_10GKR) 1043 linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT, 1044 advertising); 1045 } 1046 1047 /** 1048 * phy_init_eee - init and check the EEE feature 1049 * @phydev: target phy_device struct 1050 * @clk_stop_enable: PHY may stop the clock during LPI 1051 * 1052 * Description: it checks if the Energy-Efficient Ethernet (EEE) 1053 * is supported by looking at the MMD registers 3.20 and 7.60/61 1054 * and it programs the MMD register 3.0 setting the "Clock stop enable" 1055 * bit if required. 1056 */ 1057 int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable) 1058 { 1059 if (!phydev->drv) 1060 return -EIO; 1061 1062 /* According to 802.3az,the EEE is supported only in full duplex-mode. 1063 */ 1064 if (phydev->duplex == DUPLEX_FULL) { 1065 __ETHTOOL_DECLARE_LINK_MODE_MASK(common); 1066 __ETHTOOL_DECLARE_LINK_MODE_MASK(lp); 1067 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv); 1068 int eee_lp, eee_cap, eee_adv; 1069 int status; 1070 u32 cap; 1071 1072 /* Read phy status to properly get the right settings */ 1073 status = phy_read_status(phydev); 1074 if (status) 1075 return status; 1076 1077 /* First check if the EEE ability is supported */ 1078 eee_cap = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); 1079 if (eee_cap <= 0) 1080 goto eee_exit_err; 1081 1082 cap = mmd_eee_cap_to_ethtool_sup_t(eee_cap); 1083 if (!cap) 1084 goto eee_exit_err; 1085 1086 /* Check which link settings negotiated and verify it in 1087 * the EEE advertising registers. 1088 */ 1089 eee_lp = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); 1090 if (eee_lp <= 0) 1091 goto eee_exit_err; 1092 1093 eee_adv = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); 1094 if (eee_adv <= 0) 1095 goto eee_exit_err; 1096 1097 mmd_eee_adv_to_linkmode(adv, eee_adv); 1098 mmd_eee_adv_to_linkmode(lp, eee_lp); 1099 linkmode_and(common, adv, lp); 1100 1101 if (!phy_check_valid(phydev->speed, phydev->duplex, common)) 1102 goto eee_exit_err; 1103 1104 if (clk_stop_enable) 1105 /* Configure the PHY to stop receiving xMII 1106 * clock while it is signaling LPI. 1107 */ 1108 phy_set_bits_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, 1109 MDIO_PCS_CTRL1_CLKSTOP_EN); 1110 1111 return 0; /* EEE supported */ 1112 } 1113 eee_exit_err: 1114 return -EPROTONOSUPPORT; 1115 } 1116 EXPORT_SYMBOL(phy_init_eee); 1117 1118 /** 1119 * phy_get_eee_err - report the EEE wake error count 1120 * @phydev: target phy_device struct 1121 * 1122 * Description: it is to report the number of time where the PHY 1123 * failed to complete its normal wake sequence. 1124 */ 1125 int phy_get_eee_err(struct phy_device *phydev) 1126 { 1127 if (!phydev->drv) 1128 return -EIO; 1129 1130 return phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_WK_ERR); 1131 } 1132 EXPORT_SYMBOL(phy_get_eee_err); 1133 1134 /** 1135 * phy_ethtool_get_eee - get EEE supported and status 1136 * @phydev: target phy_device struct 1137 * @data: ethtool_eee data 1138 * 1139 * Description: it reportes the Supported/Advertisement/LP Advertisement 1140 * capabilities. 1141 */ 1142 int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data) 1143 { 1144 int val; 1145 1146 if (!phydev->drv) 1147 return -EIO; 1148 1149 /* Get Supported EEE */ 1150 val = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); 1151 if (val < 0) 1152 return val; 1153 data->supported = mmd_eee_cap_to_ethtool_sup_t(val); 1154 1155 /* Get advertisement EEE */ 1156 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); 1157 if (val < 0) 1158 return val; 1159 data->advertised = mmd_eee_adv_to_ethtool_adv_t(val); 1160 data->eee_enabled = !!data->advertised; 1161 1162 /* Get LP advertisement EEE */ 1163 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); 1164 if (val < 0) 1165 return val; 1166 data->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val); 1167 1168 data->eee_active = !!(data->advertised & data->lp_advertised); 1169 1170 return 0; 1171 } 1172 EXPORT_SYMBOL(phy_ethtool_get_eee); 1173 1174 /** 1175 * phy_ethtool_set_eee - set EEE supported and status 1176 * @phydev: target phy_device struct 1177 * @data: ethtool_eee data 1178 * 1179 * Description: it is to program the Advertisement EEE register. 1180 */ 1181 int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data) 1182 { 1183 int cap, old_adv, adv = 0, ret; 1184 1185 if (!phydev->drv) 1186 return -EIO; 1187 1188 /* Get Supported EEE */ 1189 cap = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); 1190 if (cap < 0) 1191 return cap; 1192 1193 old_adv = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); 1194 if (old_adv < 0) 1195 return old_adv; 1196 1197 if (data->eee_enabled) { 1198 adv = !data->advertised ? cap : 1199 ethtool_adv_to_mmd_eee_adv_t(data->advertised) & cap; 1200 /* Mask prohibited EEE modes */ 1201 adv &= ~phydev->eee_broken_modes; 1202 } 1203 1204 if (old_adv != adv) { 1205 ret = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, adv); 1206 if (ret < 0) 1207 return ret; 1208 1209 /* Restart autonegotiation so the new modes get sent to the 1210 * link partner. 1211 */ 1212 ret = phy_restart_aneg(phydev); 1213 if (ret < 0) 1214 return ret; 1215 } 1216 1217 return 0; 1218 } 1219 EXPORT_SYMBOL(phy_ethtool_set_eee); 1220 1221 int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) 1222 { 1223 if (phydev->drv && phydev->drv->set_wol) 1224 return phydev->drv->set_wol(phydev, wol); 1225 1226 return -EOPNOTSUPP; 1227 } 1228 EXPORT_SYMBOL(phy_ethtool_set_wol); 1229 1230 void phy_ethtool_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) 1231 { 1232 if (phydev->drv && phydev->drv->get_wol) 1233 phydev->drv->get_wol(phydev, wol); 1234 } 1235 EXPORT_SYMBOL(phy_ethtool_get_wol); 1236 1237 int phy_ethtool_get_link_ksettings(struct net_device *ndev, 1238 struct ethtool_link_ksettings *cmd) 1239 { 1240 struct phy_device *phydev = ndev->phydev; 1241 1242 if (!phydev) 1243 return -ENODEV; 1244 1245 phy_ethtool_ksettings_get(phydev, cmd); 1246 1247 return 0; 1248 } 1249 EXPORT_SYMBOL(phy_ethtool_get_link_ksettings); 1250 1251 int phy_ethtool_set_link_ksettings(struct net_device *ndev, 1252 const struct ethtool_link_ksettings *cmd) 1253 { 1254 struct phy_device *phydev = ndev->phydev; 1255 1256 if (!phydev) 1257 return -ENODEV; 1258 1259 return phy_ethtool_ksettings_set(phydev, cmd); 1260 } 1261 EXPORT_SYMBOL(phy_ethtool_set_link_ksettings); 1262 1263 int phy_ethtool_nway_reset(struct net_device *ndev) 1264 { 1265 struct phy_device *phydev = ndev->phydev; 1266 1267 if (!phydev) 1268 return -ENODEV; 1269 1270 if (!phydev->drv) 1271 return -EIO; 1272 1273 return phy_restart_aneg(phydev); 1274 } 1275 EXPORT_SYMBOL(phy_ethtool_nway_reset); 1276