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