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/netlink.h> 19 #include <linux/etherdevice.h> 20 #include <linux/skbuff.h> 21 #include <linux/mm.h> 22 #include <linux/module.h> 23 #include <linux/mii.h> 24 #include <linux/ethtool.h> 25 #include <linux/ethtool_netlink.h> 26 #include <linux/phy.h> 27 #include <linux/phy_led_triggers.h> 28 #include <linux/sfp.h> 29 #include <linux/workqueue.h> 30 #include <linux/mdio.h> 31 #include <linux/io.h> 32 #include <linux/uaccess.h> 33 #include <linux/atomic.h> 34 #include <linux/suspend.h> 35 #include <net/netlink.h> 36 #include <net/genetlink.h> 37 #include <net/sock.h> 38 39 #define PHY_STATE_TIME HZ 40 41 #define PHY_STATE_STR(_state) \ 42 case PHY_##_state: \ 43 return __stringify(_state); \ 44 45 static const char *phy_state_to_str(enum phy_state st) 46 { 47 switch (st) { 48 PHY_STATE_STR(DOWN) 49 PHY_STATE_STR(READY) 50 PHY_STATE_STR(UP) 51 PHY_STATE_STR(RUNNING) 52 PHY_STATE_STR(NOLINK) 53 PHY_STATE_STR(CABLETEST) 54 PHY_STATE_STR(HALTED) 55 } 56 57 return NULL; 58 } 59 60 static void phy_process_state_change(struct phy_device *phydev, 61 enum phy_state old_state) 62 { 63 if (old_state != phydev->state) { 64 phydev_dbg(phydev, "PHY state change %s -> %s\n", 65 phy_state_to_str(old_state), 66 phy_state_to_str(phydev->state)); 67 if (phydev->drv && phydev->drv->link_change_notify) 68 phydev->drv->link_change_notify(phydev); 69 } 70 } 71 72 static void phy_link_up(struct phy_device *phydev) 73 { 74 phydev->phy_link_change(phydev, true); 75 phy_led_trigger_change_speed(phydev); 76 } 77 78 static void phy_link_down(struct phy_device *phydev) 79 { 80 phydev->phy_link_change(phydev, false); 81 phy_led_trigger_change_speed(phydev); 82 WRITE_ONCE(phydev->link_down_events, phydev->link_down_events + 1); 83 } 84 85 static const char *phy_pause_str(struct phy_device *phydev) 86 { 87 bool local_pause, local_asym_pause; 88 89 if (phydev->autoneg == AUTONEG_DISABLE) 90 goto no_pause; 91 92 local_pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, 93 phydev->advertising); 94 local_asym_pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, 95 phydev->advertising); 96 97 if (local_pause && phydev->pause) 98 return "rx/tx"; 99 100 if (local_asym_pause && phydev->asym_pause) { 101 if (local_pause) 102 return "rx"; 103 if (phydev->pause) 104 return "tx"; 105 } 106 107 no_pause: 108 return "off"; 109 } 110 111 /** 112 * phy_print_status - Convenience function to print out the current phy status 113 * @phydev: the phy_device struct 114 */ 115 void phy_print_status(struct phy_device *phydev) 116 { 117 if (phydev->link) { 118 netdev_info(phydev->attached_dev, 119 "Link is Up - %s/%s %s- flow control %s\n", 120 phy_speed_to_str(phydev->speed), 121 phy_duplex_to_str(phydev->duplex), 122 phydev->downshifted_rate ? "(downshifted) " : "", 123 phy_pause_str(phydev)); 124 } else { 125 netdev_info(phydev->attached_dev, "Link is Down\n"); 126 } 127 } 128 EXPORT_SYMBOL(phy_print_status); 129 130 /** 131 * phy_get_rate_matching - determine if rate matching is supported 132 * @phydev: The phy device to return rate matching for 133 * @iface: The interface mode to use 134 * 135 * This determines the type of rate matching (if any) that @phy supports 136 * using @iface. @iface may be %PHY_INTERFACE_MODE_NA to determine if any 137 * interface supports rate matching. 138 * 139 * Return: The type of rate matching @phy supports for @iface, or 140 * %RATE_MATCH_NONE. 141 */ 142 int phy_get_rate_matching(struct phy_device *phydev, 143 phy_interface_t iface) 144 { 145 int ret = RATE_MATCH_NONE; 146 147 if (phydev->drv->get_rate_matching) { 148 mutex_lock(&phydev->lock); 149 ret = phydev->drv->get_rate_matching(phydev, iface); 150 mutex_unlock(&phydev->lock); 151 } 152 153 return ret; 154 } 155 EXPORT_SYMBOL_GPL(phy_get_rate_matching); 156 157 /** 158 * phy_config_interrupt - configure the PHY device for the requested interrupts 159 * @phydev: the phy_device struct 160 * @interrupts: interrupt flags to configure for this @phydev 161 * 162 * Returns 0 on success or < 0 on error. 163 */ 164 static int phy_config_interrupt(struct phy_device *phydev, bool interrupts) 165 { 166 phydev->interrupts = interrupts ? 1 : 0; 167 if (phydev->drv->config_intr) 168 return phydev->drv->config_intr(phydev); 169 170 return 0; 171 } 172 173 /** 174 * phy_restart_aneg - restart auto-negotiation 175 * @phydev: target phy_device struct 176 * 177 * Restart the autonegotiation on @phydev. Returns >= 0 on success or 178 * negative errno on error. 179 */ 180 int phy_restart_aneg(struct phy_device *phydev) 181 { 182 int ret; 183 184 if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0))) 185 ret = genphy_c45_restart_aneg(phydev); 186 else 187 ret = genphy_restart_aneg(phydev); 188 189 return ret; 190 } 191 EXPORT_SYMBOL_GPL(phy_restart_aneg); 192 193 /** 194 * phy_aneg_done - return auto-negotiation status 195 * @phydev: target phy_device struct 196 * 197 * Description: Return the auto-negotiation status from this @phydev 198 * Returns > 0 on success or < 0 on error. 0 means that auto-negotiation 199 * is still pending. 200 */ 201 int phy_aneg_done(struct phy_device *phydev) 202 { 203 if (phydev->drv && phydev->drv->aneg_done) 204 return phydev->drv->aneg_done(phydev); 205 else if (phydev->is_c45) 206 return genphy_c45_aneg_done(phydev); 207 else 208 return genphy_aneg_done(phydev); 209 } 210 EXPORT_SYMBOL(phy_aneg_done); 211 212 /** 213 * phy_find_valid - find a PHY setting that matches the requested parameters 214 * @speed: desired speed 215 * @duplex: desired duplex 216 * @supported: mask of supported link modes 217 * 218 * Locate a supported phy setting that is, in priority order: 219 * - an exact match for the specified speed and duplex mode 220 * - a match for the specified speed, or slower speed 221 * - the slowest supported speed 222 * Returns the matched phy_setting entry, or %NULL if no supported phy 223 * settings were found. 224 */ 225 static const struct phy_setting * 226 phy_find_valid(int speed, int duplex, unsigned long *supported) 227 { 228 return phy_lookup_setting(speed, duplex, supported, false); 229 } 230 231 /** 232 * phy_supported_speeds - return all speeds currently supported by a phy device 233 * @phy: The phy device to return supported speeds of. 234 * @speeds: buffer to store supported speeds in. 235 * @size: size of speeds buffer. 236 * 237 * Description: Returns the number of supported speeds, and fills the speeds 238 * buffer with the supported speeds. If speeds buffer is too small to contain 239 * all currently supported speeds, will return as many speeds as can fit. 240 */ 241 unsigned int phy_supported_speeds(struct phy_device *phy, 242 unsigned int *speeds, 243 unsigned int size) 244 { 245 return phy_speeds(speeds, size, phy->supported); 246 } 247 248 /** 249 * phy_check_valid - check if there is a valid PHY setting which matches 250 * speed, duplex, and feature mask 251 * @speed: speed to match 252 * @duplex: duplex to match 253 * @features: A mask of the valid settings 254 * 255 * Description: Returns true if there is a valid setting, false otherwise. 256 */ 257 bool phy_check_valid(int speed, int duplex, unsigned long *features) 258 { 259 return !!phy_lookup_setting(speed, duplex, features, true); 260 } 261 EXPORT_SYMBOL(phy_check_valid); 262 263 /** 264 * phy_sanitize_settings - make sure the PHY is set to supported speed and duplex 265 * @phydev: the target phy_device struct 266 * 267 * Description: Make sure the PHY is set to supported speeds and 268 * duplexes. Drop down by one in this order: 1000/FULL, 269 * 1000/HALF, 100/FULL, 100/HALF, 10/FULL, 10/HALF. 270 */ 271 static void phy_sanitize_settings(struct phy_device *phydev) 272 { 273 const struct phy_setting *setting; 274 275 setting = phy_find_valid(phydev->speed, phydev->duplex, 276 phydev->supported); 277 if (setting) { 278 phydev->speed = setting->speed; 279 phydev->duplex = setting->duplex; 280 } else { 281 /* We failed to find anything (no supported speeds?) */ 282 phydev->speed = SPEED_UNKNOWN; 283 phydev->duplex = DUPLEX_UNKNOWN; 284 } 285 } 286 287 void phy_ethtool_ksettings_get(struct phy_device *phydev, 288 struct ethtool_link_ksettings *cmd) 289 { 290 mutex_lock(&phydev->lock); 291 linkmode_copy(cmd->link_modes.supported, phydev->supported); 292 linkmode_copy(cmd->link_modes.advertising, phydev->advertising); 293 linkmode_copy(cmd->link_modes.lp_advertising, phydev->lp_advertising); 294 295 cmd->base.speed = phydev->speed; 296 cmd->base.duplex = phydev->duplex; 297 cmd->base.master_slave_cfg = phydev->master_slave_get; 298 cmd->base.master_slave_state = phydev->master_slave_state; 299 cmd->base.rate_matching = phydev->rate_matching; 300 if (phydev->interface == PHY_INTERFACE_MODE_MOCA) 301 cmd->base.port = PORT_BNC; 302 else 303 cmd->base.port = phydev->port; 304 cmd->base.transceiver = phy_is_internal(phydev) ? 305 XCVR_INTERNAL : XCVR_EXTERNAL; 306 cmd->base.phy_address = phydev->mdio.addr; 307 cmd->base.autoneg = phydev->autoneg; 308 cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl; 309 cmd->base.eth_tp_mdix = phydev->mdix; 310 mutex_unlock(&phydev->lock); 311 } 312 EXPORT_SYMBOL(phy_ethtool_ksettings_get); 313 314 /** 315 * phy_mii_ioctl - generic PHY MII ioctl interface 316 * @phydev: the phy_device struct 317 * @ifr: &struct ifreq for socket ioctl's 318 * @cmd: ioctl cmd to execute 319 * 320 * Note that this function is currently incompatible with the 321 * PHYCONTROL layer. It changes registers without regard to 322 * current state. Use at own risk. 323 */ 324 int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd) 325 { 326 struct mii_ioctl_data *mii_data = if_mii(ifr); 327 u16 val = mii_data->val_in; 328 bool change_autoneg = false; 329 int prtad, devad; 330 331 switch (cmd) { 332 case SIOCGMIIPHY: 333 mii_data->phy_id = phydev->mdio.addr; 334 fallthrough; 335 336 case SIOCGMIIREG: 337 if (mdio_phy_id_is_c45(mii_data->phy_id)) { 338 prtad = mdio_phy_id_prtad(mii_data->phy_id); 339 devad = mdio_phy_id_devad(mii_data->phy_id); 340 mii_data->val_out = mdiobus_c45_read( 341 phydev->mdio.bus, prtad, devad, 342 mii_data->reg_num); 343 } else { 344 mii_data->val_out = mdiobus_read( 345 phydev->mdio.bus, mii_data->phy_id, 346 mii_data->reg_num); 347 } 348 return 0; 349 350 case SIOCSMIIREG: 351 if (mdio_phy_id_is_c45(mii_data->phy_id)) { 352 prtad = mdio_phy_id_prtad(mii_data->phy_id); 353 devad = mdio_phy_id_devad(mii_data->phy_id); 354 } else { 355 prtad = mii_data->phy_id; 356 devad = mii_data->reg_num; 357 } 358 if (prtad == phydev->mdio.addr) { 359 switch (devad) { 360 case MII_BMCR: 361 if ((val & (BMCR_RESET | BMCR_ANENABLE)) == 0) { 362 if (phydev->autoneg == AUTONEG_ENABLE) 363 change_autoneg = true; 364 phydev->autoneg = AUTONEG_DISABLE; 365 if (val & BMCR_FULLDPLX) 366 phydev->duplex = DUPLEX_FULL; 367 else 368 phydev->duplex = DUPLEX_HALF; 369 if (val & BMCR_SPEED1000) 370 phydev->speed = SPEED_1000; 371 else if (val & BMCR_SPEED100) 372 phydev->speed = SPEED_100; 373 else phydev->speed = SPEED_10; 374 } else { 375 if (phydev->autoneg == AUTONEG_DISABLE) 376 change_autoneg = true; 377 phydev->autoneg = AUTONEG_ENABLE; 378 } 379 break; 380 case MII_ADVERTISE: 381 mii_adv_mod_linkmode_adv_t(phydev->advertising, 382 val); 383 change_autoneg = true; 384 break; 385 case MII_CTRL1000: 386 mii_ctrl1000_mod_linkmode_adv_t(phydev->advertising, 387 val); 388 change_autoneg = true; 389 break; 390 default: 391 /* do nothing */ 392 break; 393 } 394 } 395 396 if (mdio_phy_id_is_c45(mii_data->phy_id)) 397 mdiobus_c45_write(phydev->mdio.bus, prtad, devad, 398 mii_data->reg_num, val); 399 else 400 mdiobus_write(phydev->mdio.bus, prtad, devad, val); 401 402 if (prtad == phydev->mdio.addr && 403 devad == MII_BMCR && 404 val & BMCR_RESET) 405 return phy_init_hw(phydev); 406 407 if (change_autoneg) 408 return phy_start_aneg(phydev); 409 410 return 0; 411 412 case SIOCSHWTSTAMP: 413 if (phydev->mii_ts && phydev->mii_ts->hwtstamp) 414 return phydev->mii_ts->hwtstamp(phydev->mii_ts, ifr); 415 fallthrough; 416 417 default: 418 return -EOPNOTSUPP; 419 } 420 } 421 EXPORT_SYMBOL(phy_mii_ioctl); 422 423 /** 424 * phy_do_ioctl - generic ndo_eth_ioctl implementation 425 * @dev: the net_device struct 426 * @ifr: &struct ifreq for socket ioctl's 427 * @cmd: ioctl cmd to execute 428 */ 429 int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 430 { 431 if (!dev->phydev) 432 return -ENODEV; 433 434 return phy_mii_ioctl(dev->phydev, ifr, cmd); 435 } 436 EXPORT_SYMBOL(phy_do_ioctl); 437 438 /** 439 * phy_do_ioctl_running - generic ndo_eth_ioctl implementation but test first 440 * 441 * @dev: the net_device struct 442 * @ifr: &struct ifreq for socket ioctl's 443 * @cmd: ioctl cmd to execute 444 * 445 * Same as phy_do_ioctl, but ensures that net_device is running before 446 * handling the ioctl. 447 */ 448 int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd) 449 { 450 if (!netif_running(dev)) 451 return -ENODEV; 452 453 return phy_do_ioctl(dev, ifr, cmd); 454 } 455 EXPORT_SYMBOL(phy_do_ioctl_running); 456 457 /** 458 * phy_queue_state_machine - Trigger the state machine to run soon 459 * 460 * @phydev: the phy_device struct 461 * @jiffies: Run the state machine after these jiffies 462 */ 463 void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies) 464 { 465 mod_delayed_work(system_power_efficient_wq, &phydev->state_queue, 466 jiffies); 467 } 468 EXPORT_SYMBOL(phy_queue_state_machine); 469 470 /** 471 * phy_trigger_machine - Trigger the state machine to run now 472 * 473 * @phydev: the phy_device struct 474 */ 475 void phy_trigger_machine(struct phy_device *phydev) 476 { 477 phy_queue_state_machine(phydev, 0); 478 } 479 EXPORT_SYMBOL(phy_trigger_machine); 480 481 static void phy_abort_cable_test(struct phy_device *phydev) 482 { 483 int err; 484 485 ethnl_cable_test_finished(phydev); 486 487 err = phy_init_hw(phydev); 488 if (err) 489 phydev_err(phydev, "Error while aborting cable test"); 490 } 491 492 /** 493 * phy_ethtool_get_strings - Get the statistic counter names 494 * 495 * @phydev: the phy_device struct 496 * @data: Where to put the strings 497 */ 498 int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data) 499 { 500 if (!phydev->drv) 501 return -EIO; 502 503 mutex_lock(&phydev->lock); 504 phydev->drv->get_strings(phydev, data); 505 mutex_unlock(&phydev->lock); 506 507 return 0; 508 } 509 EXPORT_SYMBOL(phy_ethtool_get_strings); 510 511 /** 512 * phy_ethtool_get_sset_count - Get the number of statistic counters 513 * 514 * @phydev: the phy_device struct 515 */ 516 int phy_ethtool_get_sset_count(struct phy_device *phydev) 517 { 518 int ret; 519 520 if (!phydev->drv) 521 return -EIO; 522 523 if (phydev->drv->get_sset_count && 524 phydev->drv->get_strings && 525 phydev->drv->get_stats) { 526 mutex_lock(&phydev->lock); 527 ret = phydev->drv->get_sset_count(phydev); 528 mutex_unlock(&phydev->lock); 529 530 return ret; 531 } 532 533 return -EOPNOTSUPP; 534 } 535 EXPORT_SYMBOL(phy_ethtool_get_sset_count); 536 537 /** 538 * phy_ethtool_get_stats - Get the statistic counters 539 * 540 * @phydev: the phy_device struct 541 * @stats: What counters to get 542 * @data: Where to store the counters 543 */ 544 int phy_ethtool_get_stats(struct phy_device *phydev, 545 struct ethtool_stats *stats, u64 *data) 546 { 547 if (!phydev->drv) 548 return -EIO; 549 550 mutex_lock(&phydev->lock); 551 phydev->drv->get_stats(phydev, stats, data); 552 mutex_unlock(&phydev->lock); 553 554 return 0; 555 } 556 EXPORT_SYMBOL(phy_ethtool_get_stats); 557 558 /** 559 * phy_ethtool_get_plca_cfg - Get PLCA RS configuration 560 * @phydev: the phy_device struct 561 * @plca_cfg: where to store the retrieved configuration 562 * 563 * Retrieve the PLCA configuration from the PHY. Return 0 on success or a 564 * negative value if an error occurred. 565 */ 566 int phy_ethtool_get_plca_cfg(struct phy_device *phydev, 567 struct phy_plca_cfg *plca_cfg) 568 { 569 int ret; 570 571 if (!phydev->drv) { 572 ret = -EIO; 573 goto out; 574 } 575 576 if (!phydev->drv->get_plca_cfg) { 577 ret = -EOPNOTSUPP; 578 goto out; 579 } 580 581 mutex_lock(&phydev->lock); 582 ret = phydev->drv->get_plca_cfg(phydev, plca_cfg); 583 584 mutex_unlock(&phydev->lock); 585 out: 586 return ret; 587 } 588 589 /** 590 * plca_check_valid - Check PLCA configuration before enabling 591 * @phydev: the phy_device struct 592 * @plca_cfg: current PLCA configuration 593 * @extack: extack for reporting useful error messages 594 * 595 * Checks whether the PLCA and PHY configuration are consistent and it is safe 596 * to enable PLCA. Returns 0 on success or a negative value if the PLCA or PHY 597 * configuration is not consistent. 598 */ 599 static int plca_check_valid(struct phy_device *phydev, 600 const struct phy_plca_cfg *plca_cfg, 601 struct netlink_ext_ack *extack) 602 { 603 int ret = 0; 604 605 if (!linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT1S_P2MP_Half_BIT, 606 phydev->advertising)) { 607 ret = -EOPNOTSUPP; 608 NL_SET_ERR_MSG(extack, 609 "Point to Multi-Point mode is not enabled"); 610 } else if (plca_cfg->node_id >= 255) { 611 NL_SET_ERR_MSG(extack, "PLCA node ID is not set"); 612 ret = -EINVAL; 613 } 614 615 return ret; 616 } 617 618 /** 619 * phy_ethtool_set_plca_cfg - Set PLCA RS configuration 620 * @phydev: the phy_device struct 621 * @plca_cfg: new PLCA configuration to apply 622 * @extack: extack for reporting useful error messages 623 * 624 * Sets the PLCA configuration in the PHY. Return 0 on success or a 625 * negative value if an error occurred. 626 */ 627 int phy_ethtool_set_plca_cfg(struct phy_device *phydev, 628 const struct phy_plca_cfg *plca_cfg, 629 struct netlink_ext_ack *extack) 630 { 631 struct phy_plca_cfg *curr_plca_cfg; 632 int ret; 633 634 if (!phydev->drv) { 635 ret = -EIO; 636 goto out; 637 } 638 639 if (!phydev->drv->set_plca_cfg || 640 !phydev->drv->get_plca_cfg) { 641 ret = -EOPNOTSUPP; 642 goto out; 643 } 644 645 curr_plca_cfg = kmalloc(sizeof(*curr_plca_cfg), GFP_KERNEL); 646 if (!curr_plca_cfg) { 647 ret = -ENOMEM; 648 goto out; 649 } 650 651 mutex_lock(&phydev->lock); 652 653 ret = phydev->drv->get_plca_cfg(phydev, curr_plca_cfg); 654 if (ret) 655 goto out_drv; 656 657 if (curr_plca_cfg->enabled < 0 && plca_cfg->enabled >= 0) { 658 NL_SET_ERR_MSG(extack, 659 "PHY does not support changing the PLCA 'enable' attribute"); 660 ret = -EINVAL; 661 goto out_drv; 662 } 663 664 if (curr_plca_cfg->node_id < 0 && plca_cfg->node_id >= 0) { 665 NL_SET_ERR_MSG(extack, 666 "PHY does not support changing the PLCA 'local node ID' attribute"); 667 ret = -EINVAL; 668 goto out_drv; 669 } 670 671 if (curr_plca_cfg->node_cnt < 0 && plca_cfg->node_cnt >= 0) { 672 NL_SET_ERR_MSG(extack, 673 "PHY does not support changing the PLCA 'node count' attribute"); 674 ret = -EINVAL; 675 goto out_drv; 676 } 677 678 if (curr_plca_cfg->to_tmr < 0 && plca_cfg->to_tmr >= 0) { 679 NL_SET_ERR_MSG(extack, 680 "PHY does not support changing the PLCA 'TO timer' attribute"); 681 ret = -EINVAL; 682 goto out_drv; 683 } 684 685 if (curr_plca_cfg->burst_cnt < 0 && plca_cfg->burst_cnt >= 0) { 686 NL_SET_ERR_MSG(extack, 687 "PHY does not support changing the PLCA 'burst count' attribute"); 688 ret = -EINVAL; 689 goto out_drv; 690 } 691 692 if (curr_plca_cfg->burst_tmr < 0 && plca_cfg->burst_tmr >= 0) { 693 NL_SET_ERR_MSG(extack, 694 "PHY does not support changing the PLCA 'burst timer' attribute"); 695 ret = -EINVAL; 696 goto out_drv; 697 } 698 699 // if enabling PLCA, perform a few sanity checks 700 if (plca_cfg->enabled > 0) { 701 // allow setting node_id concurrently with enabled 702 if (plca_cfg->node_id >= 0) 703 curr_plca_cfg->node_id = plca_cfg->node_id; 704 705 ret = plca_check_valid(phydev, curr_plca_cfg, extack); 706 if (ret) 707 goto out_drv; 708 } 709 710 ret = phydev->drv->set_plca_cfg(phydev, plca_cfg); 711 712 out_drv: 713 kfree(curr_plca_cfg); 714 mutex_unlock(&phydev->lock); 715 out: 716 return ret; 717 } 718 719 /** 720 * phy_ethtool_get_plca_status - Get PLCA RS status information 721 * @phydev: the phy_device struct 722 * @plca_st: where to store the retrieved status information 723 * 724 * Retrieve the PLCA status information from the PHY. Return 0 on success or a 725 * negative value if an error occurred. 726 */ 727 int phy_ethtool_get_plca_status(struct phy_device *phydev, 728 struct phy_plca_status *plca_st) 729 { 730 int ret; 731 732 if (!phydev->drv) { 733 ret = -EIO; 734 goto out; 735 } 736 737 if (!phydev->drv->get_plca_status) { 738 ret = -EOPNOTSUPP; 739 goto out; 740 } 741 742 mutex_lock(&phydev->lock); 743 ret = phydev->drv->get_plca_status(phydev, plca_st); 744 745 mutex_unlock(&phydev->lock); 746 out: 747 return ret; 748 } 749 750 /** 751 * phy_start_cable_test - Start a cable test 752 * 753 * @phydev: the phy_device struct 754 * @extack: extack for reporting useful error messages 755 */ 756 int phy_start_cable_test(struct phy_device *phydev, 757 struct netlink_ext_ack *extack) 758 { 759 struct net_device *dev = phydev->attached_dev; 760 int err = -ENOMEM; 761 762 if (!(phydev->drv && 763 phydev->drv->cable_test_start && 764 phydev->drv->cable_test_get_status)) { 765 NL_SET_ERR_MSG(extack, 766 "PHY driver does not support cable testing"); 767 return -EOPNOTSUPP; 768 } 769 770 mutex_lock(&phydev->lock); 771 if (phydev->state == PHY_CABLETEST) { 772 NL_SET_ERR_MSG(extack, 773 "PHY already performing a test"); 774 err = -EBUSY; 775 goto out; 776 } 777 778 if (phydev->state < PHY_UP || 779 phydev->state > PHY_CABLETEST) { 780 NL_SET_ERR_MSG(extack, 781 "PHY not configured. Try setting interface up"); 782 err = -EBUSY; 783 goto out; 784 } 785 786 err = ethnl_cable_test_alloc(phydev, ETHTOOL_MSG_CABLE_TEST_NTF); 787 if (err) 788 goto out; 789 790 /* Mark the carrier down until the test is complete */ 791 phy_link_down(phydev); 792 793 netif_testing_on(dev); 794 err = phydev->drv->cable_test_start(phydev); 795 if (err) { 796 netif_testing_off(dev); 797 phy_link_up(phydev); 798 goto out_free; 799 } 800 801 phydev->state = PHY_CABLETEST; 802 803 if (phy_polling_mode(phydev)) 804 phy_trigger_machine(phydev); 805 806 mutex_unlock(&phydev->lock); 807 808 return 0; 809 810 out_free: 811 ethnl_cable_test_free(phydev); 812 out: 813 mutex_unlock(&phydev->lock); 814 815 return err; 816 } 817 EXPORT_SYMBOL(phy_start_cable_test); 818 819 /** 820 * phy_start_cable_test_tdr - Start a raw TDR cable test 821 * 822 * @phydev: the phy_device struct 823 * @extack: extack for reporting useful error messages 824 * @config: Configuration of the test to run 825 */ 826 int phy_start_cable_test_tdr(struct phy_device *phydev, 827 struct netlink_ext_ack *extack, 828 const struct phy_tdr_config *config) 829 { 830 struct net_device *dev = phydev->attached_dev; 831 int err = -ENOMEM; 832 833 if (!(phydev->drv && 834 phydev->drv->cable_test_tdr_start && 835 phydev->drv->cable_test_get_status)) { 836 NL_SET_ERR_MSG(extack, 837 "PHY driver does not support cable test TDR"); 838 return -EOPNOTSUPP; 839 } 840 841 mutex_lock(&phydev->lock); 842 if (phydev->state == PHY_CABLETEST) { 843 NL_SET_ERR_MSG(extack, 844 "PHY already performing a test"); 845 err = -EBUSY; 846 goto out; 847 } 848 849 if (phydev->state < PHY_UP || 850 phydev->state > PHY_CABLETEST) { 851 NL_SET_ERR_MSG(extack, 852 "PHY not configured. Try setting interface up"); 853 err = -EBUSY; 854 goto out; 855 } 856 857 err = ethnl_cable_test_alloc(phydev, ETHTOOL_MSG_CABLE_TEST_TDR_NTF); 858 if (err) 859 goto out; 860 861 /* Mark the carrier down until the test is complete */ 862 phy_link_down(phydev); 863 864 netif_testing_on(dev); 865 err = phydev->drv->cable_test_tdr_start(phydev, config); 866 if (err) { 867 netif_testing_off(dev); 868 phy_link_up(phydev); 869 goto out_free; 870 } 871 872 phydev->state = PHY_CABLETEST; 873 874 if (phy_polling_mode(phydev)) 875 phy_trigger_machine(phydev); 876 877 mutex_unlock(&phydev->lock); 878 879 return 0; 880 881 out_free: 882 ethnl_cable_test_free(phydev); 883 out: 884 mutex_unlock(&phydev->lock); 885 886 return err; 887 } 888 EXPORT_SYMBOL(phy_start_cable_test_tdr); 889 890 int phy_config_aneg(struct phy_device *phydev) 891 { 892 if (phydev->drv->config_aneg) 893 return phydev->drv->config_aneg(phydev); 894 895 /* Clause 45 PHYs that don't implement Clause 22 registers are not 896 * allowed to call genphy_config_aneg() 897 */ 898 if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0))) 899 return genphy_c45_config_aneg(phydev); 900 901 return genphy_config_aneg(phydev); 902 } 903 EXPORT_SYMBOL(phy_config_aneg); 904 905 /** 906 * phy_check_link_status - check link status and set state accordingly 907 * @phydev: the phy_device struct 908 * 909 * Description: Check for link and whether autoneg was triggered / is running 910 * and set state accordingly 911 */ 912 static int phy_check_link_status(struct phy_device *phydev) 913 { 914 int err; 915 916 lockdep_assert_held(&phydev->lock); 917 918 /* Keep previous state if loopback is enabled because some PHYs 919 * report that Link is Down when loopback is enabled. 920 */ 921 if (phydev->loopback_enabled) 922 return 0; 923 924 err = phy_read_status(phydev); 925 if (err) 926 return err; 927 928 if (phydev->link && phydev->state != PHY_RUNNING) { 929 phy_check_downshift(phydev); 930 phydev->state = PHY_RUNNING; 931 phy_link_up(phydev); 932 } else if (!phydev->link && phydev->state != PHY_NOLINK) { 933 phydev->state = PHY_NOLINK; 934 phy_link_down(phydev); 935 } 936 937 return 0; 938 } 939 940 /** 941 * _phy_start_aneg - start auto-negotiation for this PHY device 942 * @phydev: the phy_device struct 943 * 944 * Description: Sanitizes the settings (if we're not autonegotiating 945 * them), and then calls the driver's config_aneg function. 946 * If the PHYCONTROL Layer is operating, we change the state to 947 * reflect the beginning of Auto-negotiation or forcing. 948 */ 949 static int _phy_start_aneg(struct phy_device *phydev) 950 { 951 int err; 952 953 lockdep_assert_held(&phydev->lock); 954 955 if (!phydev->drv) 956 return -EIO; 957 958 if (AUTONEG_DISABLE == phydev->autoneg) 959 phy_sanitize_settings(phydev); 960 961 err = phy_config_aneg(phydev); 962 if (err < 0) 963 return err; 964 965 if (phy_is_started(phydev)) 966 err = phy_check_link_status(phydev); 967 968 return err; 969 } 970 971 /** 972 * phy_start_aneg - start auto-negotiation for this PHY device 973 * @phydev: the phy_device struct 974 * 975 * Description: Sanitizes the settings (if we're not autonegotiating 976 * them), and then calls the driver's config_aneg function. 977 * If the PHYCONTROL Layer is operating, we change the state to 978 * reflect the beginning of Auto-negotiation or forcing. 979 */ 980 int phy_start_aneg(struct phy_device *phydev) 981 { 982 int err; 983 984 mutex_lock(&phydev->lock); 985 err = _phy_start_aneg(phydev); 986 mutex_unlock(&phydev->lock); 987 988 return err; 989 } 990 EXPORT_SYMBOL(phy_start_aneg); 991 992 static int phy_poll_aneg_done(struct phy_device *phydev) 993 { 994 unsigned int retries = 100; 995 int ret; 996 997 do { 998 msleep(100); 999 ret = phy_aneg_done(phydev); 1000 } while (!ret && --retries); 1001 1002 if (!ret) 1003 return -ETIMEDOUT; 1004 1005 return ret < 0 ? ret : 0; 1006 } 1007 1008 int phy_ethtool_ksettings_set(struct phy_device *phydev, 1009 const struct ethtool_link_ksettings *cmd) 1010 { 1011 __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising); 1012 u8 autoneg = cmd->base.autoneg; 1013 u8 duplex = cmd->base.duplex; 1014 u32 speed = cmd->base.speed; 1015 1016 if (cmd->base.phy_address != phydev->mdio.addr) 1017 return -EINVAL; 1018 1019 linkmode_copy(advertising, cmd->link_modes.advertising); 1020 1021 /* We make sure that we don't pass unsupported values in to the PHY */ 1022 linkmode_and(advertising, advertising, phydev->supported); 1023 1024 /* Verify the settings we care about. */ 1025 if (autoneg != AUTONEG_ENABLE && autoneg != AUTONEG_DISABLE) 1026 return -EINVAL; 1027 1028 if (autoneg == AUTONEG_ENABLE && linkmode_empty(advertising)) 1029 return -EINVAL; 1030 1031 if (autoneg == AUTONEG_DISABLE && 1032 ((speed != SPEED_1000 && 1033 speed != SPEED_100 && 1034 speed != SPEED_10) || 1035 (duplex != DUPLEX_HALF && 1036 duplex != DUPLEX_FULL))) 1037 return -EINVAL; 1038 1039 mutex_lock(&phydev->lock); 1040 phydev->autoneg = autoneg; 1041 1042 if (autoneg == AUTONEG_DISABLE) { 1043 phydev->speed = speed; 1044 phydev->duplex = duplex; 1045 } 1046 1047 linkmode_copy(phydev->advertising, advertising); 1048 1049 linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, 1050 phydev->advertising, autoneg == AUTONEG_ENABLE); 1051 1052 phydev->master_slave_set = cmd->base.master_slave_cfg; 1053 phydev->mdix_ctrl = cmd->base.eth_tp_mdix_ctrl; 1054 1055 /* Restart the PHY */ 1056 if (phy_is_started(phydev)) { 1057 phydev->state = PHY_UP; 1058 phy_trigger_machine(phydev); 1059 } else { 1060 _phy_start_aneg(phydev); 1061 } 1062 1063 mutex_unlock(&phydev->lock); 1064 return 0; 1065 } 1066 EXPORT_SYMBOL(phy_ethtool_ksettings_set); 1067 1068 /** 1069 * phy_speed_down - set speed to lowest speed supported by both link partners 1070 * @phydev: the phy_device struct 1071 * @sync: perform action synchronously 1072 * 1073 * Description: Typically used to save energy when waiting for a WoL packet 1074 * 1075 * WARNING: Setting sync to false may cause the system being unable to suspend 1076 * in case the PHY generates an interrupt when finishing the autonegotiation. 1077 * This interrupt may wake up the system immediately after suspend. 1078 * Therefore use sync = false only if you're sure it's safe with the respective 1079 * network chip. 1080 */ 1081 int phy_speed_down(struct phy_device *phydev, bool sync) 1082 { 1083 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv_tmp); 1084 int ret = 0; 1085 1086 mutex_lock(&phydev->lock); 1087 1088 if (phydev->autoneg != AUTONEG_ENABLE) 1089 goto out; 1090 1091 linkmode_copy(adv_tmp, phydev->advertising); 1092 1093 ret = phy_speed_down_core(phydev); 1094 if (ret) 1095 goto out; 1096 1097 linkmode_copy(phydev->adv_old, adv_tmp); 1098 1099 if (linkmode_equal(phydev->advertising, adv_tmp)) { 1100 ret = 0; 1101 goto out; 1102 } 1103 1104 ret = phy_config_aneg(phydev); 1105 if (ret) 1106 goto out; 1107 1108 ret = sync ? phy_poll_aneg_done(phydev) : 0; 1109 out: 1110 mutex_unlock(&phydev->lock); 1111 1112 return ret; 1113 } 1114 EXPORT_SYMBOL_GPL(phy_speed_down); 1115 1116 /** 1117 * phy_speed_up - (re)set advertised speeds to all supported speeds 1118 * @phydev: the phy_device struct 1119 * 1120 * Description: Used to revert the effect of phy_speed_down 1121 */ 1122 int phy_speed_up(struct phy_device *phydev) 1123 { 1124 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv_tmp); 1125 int ret = 0; 1126 1127 mutex_lock(&phydev->lock); 1128 1129 if (phydev->autoneg != AUTONEG_ENABLE) 1130 goto out; 1131 1132 if (linkmode_empty(phydev->adv_old)) 1133 goto out; 1134 1135 linkmode_copy(adv_tmp, phydev->advertising); 1136 linkmode_copy(phydev->advertising, phydev->adv_old); 1137 linkmode_zero(phydev->adv_old); 1138 1139 if (linkmode_equal(phydev->advertising, adv_tmp)) 1140 goto out; 1141 1142 ret = phy_config_aneg(phydev); 1143 out: 1144 mutex_unlock(&phydev->lock); 1145 1146 return ret; 1147 } 1148 EXPORT_SYMBOL_GPL(phy_speed_up); 1149 1150 /** 1151 * phy_start_machine - start PHY state machine tracking 1152 * @phydev: the phy_device struct 1153 * 1154 * Description: The PHY infrastructure can run a state machine 1155 * which tracks whether the PHY is starting up, negotiating, 1156 * etc. This function starts the delayed workqueue which tracks 1157 * the state of the PHY. If you want to maintain your own state machine, 1158 * do not call this function. 1159 */ 1160 void phy_start_machine(struct phy_device *phydev) 1161 { 1162 phy_trigger_machine(phydev); 1163 } 1164 EXPORT_SYMBOL_GPL(phy_start_machine); 1165 1166 /** 1167 * phy_stop_machine - stop the PHY state machine tracking 1168 * @phydev: target phy_device struct 1169 * 1170 * Description: Stops the state machine delayed workqueue, sets the 1171 * state to UP (unless it wasn't up yet). This function must be 1172 * called BEFORE phy_detach. 1173 */ 1174 void phy_stop_machine(struct phy_device *phydev) 1175 { 1176 cancel_delayed_work_sync(&phydev->state_queue); 1177 1178 mutex_lock(&phydev->lock); 1179 if (phy_is_started(phydev)) 1180 phydev->state = PHY_UP; 1181 mutex_unlock(&phydev->lock); 1182 } 1183 1184 /** 1185 * phy_error - enter HALTED state for this PHY device 1186 * @phydev: target phy_device struct 1187 * 1188 * Moves the PHY to the HALTED state in response to a read 1189 * or write error, and tells the controller the link is down. 1190 * Must not be called from interrupt context, or while the 1191 * phydev->lock is held. 1192 */ 1193 void phy_error(struct phy_device *phydev) 1194 { 1195 WARN_ON(1); 1196 1197 mutex_lock(&phydev->lock); 1198 phydev->state = PHY_HALTED; 1199 mutex_unlock(&phydev->lock); 1200 1201 phy_trigger_machine(phydev); 1202 } 1203 EXPORT_SYMBOL(phy_error); 1204 1205 /** 1206 * phy_disable_interrupts - Disable the PHY interrupts from the PHY side 1207 * @phydev: target phy_device struct 1208 */ 1209 int phy_disable_interrupts(struct phy_device *phydev) 1210 { 1211 /* Disable PHY interrupts */ 1212 return phy_config_interrupt(phydev, PHY_INTERRUPT_DISABLED); 1213 } 1214 1215 /** 1216 * phy_interrupt - PHY interrupt handler 1217 * @irq: interrupt line 1218 * @phy_dat: phy_device pointer 1219 * 1220 * Description: Handle PHY interrupt 1221 */ 1222 static irqreturn_t phy_interrupt(int irq, void *phy_dat) 1223 { 1224 struct phy_device *phydev = phy_dat; 1225 struct phy_driver *drv = phydev->drv; 1226 irqreturn_t ret; 1227 1228 /* Wakeup interrupts may occur during a system sleep transition. 1229 * Postpone handling until the PHY has resumed. 1230 */ 1231 if (IS_ENABLED(CONFIG_PM_SLEEP) && phydev->irq_suspended) { 1232 struct net_device *netdev = phydev->attached_dev; 1233 1234 if (netdev) { 1235 struct device *parent = netdev->dev.parent; 1236 1237 if (netdev->wol_enabled) 1238 pm_system_wakeup(); 1239 else if (device_may_wakeup(&netdev->dev)) 1240 pm_wakeup_dev_event(&netdev->dev, 0, true); 1241 else if (parent && device_may_wakeup(parent)) 1242 pm_wakeup_dev_event(parent, 0, true); 1243 } 1244 1245 phydev->irq_rerun = 1; 1246 disable_irq_nosync(irq); 1247 return IRQ_HANDLED; 1248 } 1249 1250 mutex_lock(&phydev->lock); 1251 ret = drv->handle_interrupt(phydev); 1252 mutex_unlock(&phydev->lock); 1253 1254 return ret; 1255 } 1256 1257 /** 1258 * phy_enable_interrupts - Enable the interrupts from the PHY side 1259 * @phydev: target phy_device struct 1260 */ 1261 static int phy_enable_interrupts(struct phy_device *phydev) 1262 { 1263 return phy_config_interrupt(phydev, PHY_INTERRUPT_ENABLED); 1264 } 1265 1266 /** 1267 * phy_request_interrupt - request and enable interrupt for a PHY device 1268 * @phydev: target phy_device struct 1269 * 1270 * Description: Request and enable the interrupt for the given PHY. 1271 * If this fails, then we set irq to PHY_POLL. 1272 * This should only be called with a valid IRQ number. 1273 */ 1274 void phy_request_interrupt(struct phy_device *phydev) 1275 { 1276 int err; 1277 1278 err = request_threaded_irq(phydev->irq, NULL, phy_interrupt, 1279 IRQF_ONESHOT | IRQF_SHARED, 1280 phydev_name(phydev), phydev); 1281 if (err) { 1282 phydev_warn(phydev, "Error %d requesting IRQ %d, falling back to polling\n", 1283 err, phydev->irq); 1284 phydev->irq = PHY_POLL; 1285 } else { 1286 if (phy_enable_interrupts(phydev)) { 1287 phydev_warn(phydev, "Can't enable interrupt, falling back to polling\n"); 1288 phy_free_interrupt(phydev); 1289 phydev->irq = PHY_POLL; 1290 } 1291 } 1292 } 1293 EXPORT_SYMBOL(phy_request_interrupt); 1294 1295 /** 1296 * phy_free_interrupt - disable and free interrupt for a PHY device 1297 * @phydev: target phy_device struct 1298 * 1299 * Description: Disable and free the interrupt for the given PHY. 1300 * This should only be called with a valid IRQ number. 1301 */ 1302 void phy_free_interrupt(struct phy_device *phydev) 1303 { 1304 phy_disable_interrupts(phydev); 1305 free_irq(phydev->irq, phydev); 1306 } 1307 EXPORT_SYMBOL(phy_free_interrupt); 1308 1309 /** 1310 * phy_stop - Bring down the PHY link, and stop checking the status 1311 * @phydev: target phy_device struct 1312 */ 1313 void phy_stop(struct phy_device *phydev) 1314 { 1315 struct net_device *dev = phydev->attached_dev; 1316 enum phy_state old_state; 1317 1318 if (!phy_is_started(phydev) && phydev->state != PHY_DOWN) { 1319 WARN(1, "called from state %s\n", 1320 phy_state_to_str(phydev->state)); 1321 return; 1322 } 1323 1324 mutex_lock(&phydev->lock); 1325 old_state = phydev->state; 1326 1327 if (phydev->state == PHY_CABLETEST) { 1328 phy_abort_cable_test(phydev); 1329 netif_testing_off(dev); 1330 } 1331 1332 if (phydev->sfp_bus) 1333 sfp_upstream_stop(phydev->sfp_bus); 1334 1335 phydev->state = PHY_HALTED; 1336 phy_process_state_change(phydev, old_state); 1337 1338 mutex_unlock(&phydev->lock); 1339 1340 phy_state_machine(&phydev->state_queue.work); 1341 phy_stop_machine(phydev); 1342 1343 /* Cannot call flush_scheduled_work() here as desired because 1344 * of rtnl_lock(), but PHY_HALTED shall guarantee irq handler 1345 * will not reenable interrupts. 1346 */ 1347 } 1348 EXPORT_SYMBOL(phy_stop); 1349 1350 /** 1351 * phy_start - start or restart a PHY device 1352 * @phydev: target phy_device struct 1353 * 1354 * Description: Indicates the attached device's readiness to 1355 * handle PHY-related work. Used during startup to start the 1356 * PHY, and after a call to phy_stop() to resume operation. 1357 * Also used to indicate the MDIO bus has cleared an error 1358 * condition. 1359 */ 1360 void phy_start(struct phy_device *phydev) 1361 { 1362 mutex_lock(&phydev->lock); 1363 1364 if (phydev->state != PHY_READY && phydev->state != PHY_HALTED) { 1365 WARN(1, "called from state %s\n", 1366 phy_state_to_str(phydev->state)); 1367 goto out; 1368 } 1369 1370 if (phydev->sfp_bus) 1371 sfp_upstream_start(phydev->sfp_bus); 1372 1373 /* if phy was suspended, bring the physical link up again */ 1374 __phy_resume(phydev); 1375 1376 phydev->state = PHY_UP; 1377 1378 phy_start_machine(phydev); 1379 out: 1380 mutex_unlock(&phydev->lock); 1381 } 1382 EXPORT_SYMBOL(phy_start); 1383 1384 /** 1385 * phy_state_machine - Handle the state machine 1386 * @work: work_struct that describes the work to be done 1387 */ 1388 void phy_state_machine(struct work_struct *work) 1389 { 1390 struct delayed_work *dwork = to_delayed_work(work); 1391 struct phy_device *phydev = 1392 container_of(dwork, struct phy_device, state_queue); 1393 struct net_device *dev = phydev->attached_dev; 1394 bool needs_aneg = false, do_suspend = false; 1395 enum phy_state old_state; 1396 bool finished = false; 1397 int err = 0; 1398 1399 mutex_lock(&phydev->lock); 1400 1401 old_state = phydev->state; 1402 1403 switch (phydev->state) { 1404 case PHY_DOWN: 1405 case PHY_READY: 1406 break; 1407 case PHY_UP: 1408 needs_aneg = true; 1409 1410 break; 1411 case PHY_NOLINK: 1412 case PHY_RUNNING: 1413 err = phy_check_link_status(phydev); 1414 break; 1415 case PHY_CABLETEST: 1416 err = phydev->drv->cable_test_get_status(phydev, &finished); 1417 if (err) { 1418 phy_abort_cable_test(phydev); 1419 netif_testing_off(dev); 1420 needs_aneg = true; 1421 phydev->state = PHY_UP; 1422 break; 1423 } 1424 1425 if (finished) { 1426 ethnl_cable_test_finished(phydev); 1427 netif_testing_off(dev); 1428 needs_aneg = true; 1429 phydev->state = PHY_UP; 1430 } 1431 break; 1432 case PHY_HALTED: 1433 if (phydev->link) { 1434 phydev->link = 0; 1435 phy_link_down(phydev); 1436 } 1437 do_suspend = true; 1438 break; 1439 } 1440 1441 mutex_unlock(&phydev->lock); 1442 1443 if (needs_aneg) 1444 err = phy_start_aneg(phydev); 1445 else if (do_suspend) 1446 phy_suspend(phydev); 1447 1448 if (err == -ENODEV) 1449 return; 1450 1451 if (err < 0) 1452 phy_error(phydev); 1453 1454 phy_process_state_change(phydev, old_state); 1455 1456 /* Only re-schedule a PHY state machine change if we are polling the 1457 * PHY, if PHY_MAC_INTERRUPT is set, then we will be moving 1458 * between states from phy_mac_interrupt(). 1459 * 1460 * In state PHY_HALTED the PHY gets suspended, so rescheduling the 1461 * state machine would be pointless and possibly error prone when 1462 * called from phy_disconnect() synchronously. 1463 */ 1464 mutex_lock(&phydev->lock); 1465 if (phy_polling_mode(phydev) && phy_is_started(phydev)) 1466 phy_queue_state_machine(phydev, PHY_STATE_TIME); 1467 mutex_unlock(&phydev->lock); 1468 } 1469 1470 /** 1471 * phy_mac_interrupt - MAC says the link has changed 1472 * @phydev: phy_device struct with changed link 1473 * 1474 * The MAC layer is able to indicate there has been a change in the PHY link 1475 * status. Trigger the state machine and work a work queue. 1476 */ 1477 void phy_mac_interrupt(struct phy_device *phydev) 1478 { 1479 /* Trigger a state machine change */ 1480 phy_trigger_machine(phydev); 1481 } 1482 EXPORT_SYMBOL(phy_mac_interrupt); 1483 1484 /** 1485 * phy_init_eee - init and check the EEE feature 1486 * @phydev: target phy_device struct 1487 * @clk_stop_enable: PHY may stop the clock during LPI 1488 * 1489 * Description: it checks if the Energy-Efficient Ethernet (EEE) 1490 * is supported by looking at the MMD registers 3.20 and 7.60/61 1491 * and it programs the MMD register 3.0 setting the "Clock stop enable" 1492 * bit if required. 1493 */ 1494 int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable) 1495 { 1496 int ret; 1497 1498 if (!phydev->drv) 1499 return -EIO; 1500 1501 ret = genphy_c45_eee_is_active(phydev, NULL, NULL, NULL); 1502 if (ret < 0) 1503 return ret; 1504 if (!ret) 1505 return -EPROTONOSUPPORT; 1506 1507 if (clk_stop_enable) 1508 /* Configure the PHY to stop receiving xMII 1509 * clock while it is signaling LPI. 1510 */ 1511 ret = phy_set_bits_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, 1512 MDIO_PCS_CTRL1_CLKSTOP_EN); 1513 1514 return ret < 0 ? ret : 0; 1515 } 1516 EXPORT_SYMBOL(phy_init_eee); 1517 1518 /** 1519 * phy_get_eee_err - report the EEE wake error count 1520 * @phydev: target phy_device struct 1521 * 1522 * Description: it is to report the number of time where the PHY 1523 * failed to complete its normal wake sequence. 1524 */ 1525 int phy_get_eee_err(struct phy_device *phydev) 1526 { 1527 int ret; 1528 1529 if (!phydev->drv) 1530 return -EIO; 1531 1532 mutex_lock(&phydev->lock); 1533 ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_WK_ERR); 1534 mutex_unlock(&phydev->lock); 1535 1536 return ret; 1537 } 1538 EXPORT_SYMBOL(phy_get_eee_err); 1539 1540 /** 1541 * phy_ethtool_get_eee - get EEE supported and status 1542 * @phydev: target phy_device struct 1543 * @data: ethtool_eee data 1544 * 1545 * Description: it reportes the Supported/Advertisement/LP Advertisement 1546 * capabilities. 1547 */ 1548 int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data) 1549 { 1550 int ret; 1551 1552 if (!phydev->drv) 1553 return -EIO; 1554 1555 mutex_lock(&phydev->lock); 1556 ret = genphy_c45_ethtool_get_eee(phydev, data); 1557 mutex_unlock(&phydev->lock); 1558 1559 return ret; 1560 } 1561 EXPORT_SYMBOL(phy_ethtool_get_eee); 1562 1563 /** 1564 * phy_ethtool_set_eee - set EEE supported and status 1565 * @phydev: target phy_device struct 1566 * @data: ethtool_eee data 1567 * 1568 * Description: it is to program the Advertisement EEE register. 1569 */ 1570 int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data) 1571 { 1572 int ret; 1573 1574 if (!phydev->drv) 1575 return -EIO; 1576 1577 mutex_lock(&phydev->lock); 1578 ret = genphy_c45_ethtool_set_eee(phydev, data); 1579 mutex_unlock(&phydev->lock); 1580 1581 return ret; 1582 } 1583 EXPORT_SYMBOL(phy_ethtool_set_eee); 1584 1585 /** 1586 * phy_ethtool_set_wol - Configure Wake On LAN 1587 * 1588 * @phydev: target phy_device struct 1589 * @wol: Configuration requested 1590 */ 1591 int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) 1592 { 1593 int ret; 1594 1595 if (phydev->drv && phydev->drv->set_wol) { 1596 mutex_lock(&phydev->lock); 1597 ret = phydev->drv->set_wol(phydev, wol); 1598 mutex_unlock(&phydev->lock); 1599 1600 return ret; 1601 } 1602 1603 return -EOPNOTSUPP; 1604 } 1605 EXPORT_SYMBOL(phy_ethtool_set_wol); 1606 1607 /** 1608 * phy_ethtool_get_wol - Get the current Wake On LAN configuration 1609 * 1610 * @phydev: target phy_device struct 1611 * @wol: Store the current configuration here 1612 */ 1613 void phy_ethtool_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) 1614 { 1615 if (phydev->drv && phydev->drv->get_wol) { 1616 mutex_lock(&phydev->lock); 1617 phydev->drv->get_wol(phydev, wol); 1618 mutex_unlock(&phydev->lock); 1619 } 1620 } 1621 EXPORT_SYMBOL(phy_ethtool_get_wol); 1622 1623 int phy_ethtool_get_link_ksettings(struct net_device *ndev, 1624 struct ethtool_link_ksettings *cmd) 1625 { 1626 struct phy_device *phydev = ndev->phydev; 1627 1628 if (!phydev) 1629 return -ENODEV; 1630 1631 phy_ethtool_ksettings_get(phydev, cmd); 1632 1633 return 0; 1634 } 1635 EXPORT_SYMBOL(phy_ethtool_get_link_ksettings); 1636 1637 int phy_ethtool_set_link_ksettings(struct net_device *ndev, 1638 const struct ethtool_link_ksettings *cmd) 1639 { 1640 struct phy_device *phydev = ndev->phydev; 1641 1642 if (!phydev) 1643 return -ENODEV; 1644 1645 return phy_ethtool_ksettings_set(phydev, cmd); 1646 } 1647 EXPORT_SYMBOL(phy_ethtool_set_link_ksettings); 1648 1649 /** 1650 * phy_ethtool_nway_reset - Restart auto negotiation 1651 * @ndev: Network device to restart autoneg for 1652 */ 1653 int phy_ethtool_nway_reset(struct net_device *ndev) 1654 { 1655 struct phy_device *phydev = ndev->phydev; 1656 int ret; 1657 1658 if (!phydev) 1659 return -ENODEV; 1660 1661 if (!phydev->drv) 1662 return -EIO; 1663 1664 mutex_lock(&phydev->lock); 1665 ret = phy_restart_aneg(phydev); 1666 mutex_unlock(&phydev->lock); 1667 1668 return ret; 1669 } 1670 EXPORT_SYMBOL(phy_ethtool_nway_reset); 1671