Linux Audio

Check our new training course

Loading...
v6.8
   1// SPDX-License-Identifier: GPL-2.0+
   2/* Framework for finding and configuring PHYs.
 
 
   3 * Also contains generic PHY driver
   4 *
   5 * Author: Andy Fleming
   6 *
   7 * Copyright (c) 2004 Freescale Semiconductor, Inc.
 
 
 
 
 
 
   8 */
   9
  10#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  11
  12#include <linux/acpi.h>
  13#include <linux/bitmap.h>
  14#include <linux/delay.h>
  15#include <linux/errno.h>
  16#include <linux/etherdevice.h>
  17#include <linux/ethtool.h>
  18#include <linux/init.h>
  19#include <linux/interrupt.h>
  20#include <linux/io.h>
  21#include <linux/kernel.h>
  22#include <linux/list.h>
  23#include <linux/mdio.h>
  24#include <linux/mii.h>
  25#include <linux/mm.h>
  26#include <linux/module.h>
  27#include <linux/of.h>
  28#include <linux/netdevice.h>
  29#include <linux/phy.h>
  30#include <linux/phylib_stubs.h>
  31#include <linux/phy_led_triggers.h>
  32#include <linux/pse-pd/pse.h>
  33#include <linux/property.h>
  34#include <linux/rtnetlink.h>
  35#include <linux/sfp.h>
  36#include <linux/skbuff.h>
  37#include <linux/slab.h>
  38#include <linux/string.h>
  39#include <linux/uaccess.h>
  40#include <linux/unistd.h>
  41
  42MODULE_DESCRIPTION("PHY library");
  43MODULE_AUTHOR("Andy Fleming");
  44MODULE_LICENSE("GPL");
  45
  46__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_features) __ro_after_init;
  47EXPORT_SYMBOL_GPL(phy_basic_features);
  48
  49__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1_features) __ro_after_init;
  50EXPORT_SYMBOL_GPL(phy_basic_t1_features);
  51
  52__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1s_p2mp_features) __ro_after_init;
  53EXPORT_SYMBOL_GPL(phy_basic_t1s_p2mp_features);
  54
  55__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_features) __ro_after_init;
  56EXPORT_SYMBOL_GPL(phy_gbit_features);
  57
  58__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features) __ro_after_init;
  59EXPORT_SYMBOL_GPL(phy_gbit_fibre_features);
  60
  61__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_init;
  62EXPORT_SYMBOL_GPL(phy_gbit_all_ports_features);
  63
  64__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init;
  65EXPORT_SYMBOL_GPL(phy_10gbit_features);
  66
  67__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features) __ro_after_init;
  68EXPORT_SYMBOL_GPL(phy_10gbit_fec_features);
  69
  70const int phy_basic_ports_array[3] = {
  71	ETHTOOL_LINK_MODE_Autoneg_BIT,
  72	ETHTOOL_LINK_MODE_TP_BIT,
  73	ETHTOOL_LINK_MODE_MII_BIT,
  74};
  75EXPORT_SYMBOL_GPL(phy_basic_ports_array);
  76
  77const int phy_fibre_port_array[1] = {
  78	ETHTOOL_LINK_MODE_FIBRE_BIT,
  79};
  80EXPORT_SYMBOL_GPL(phy_fibre_port_array);
  81
  82const int phy_all_ports_features_array[7] = {
  83	ETHTOOL_LINK_MODE_Autoneg_BIT,
  84	ETHTOOL_LINK_MODE_TP_BIT,
  85	ETHTOOL_LINK_MODE_MII_BIT,
  86	ETHTOOL_LINK_MODE_FIBRE_BIT,
  87	ETHTOOL_LINK_MODE_AUI_BIT,
  88	ETHTOOL_LINK_MODE_BNC_BIT,
  89	ETHTOOL_LINK_MODE_Backplane_BIT,
  90};
  91EXPORT_SYMBOL_GPL(phy_all_ports_features_array);
  92
  93const int phy_10_100_features_array[4] = {
  94	ETHTOOL_LINK_MODE_10baseT_Half_BIT,
  95	ETHTOOL_LINK_MODE_10baseT_Full_BIT,
  96	ETHTOOL_LINK_MODE_100baseT_Half_BIT,
  97	ETHTOOL_LINK_MODE_100baseT_Full_BIT,
  98};
  99EXPORT_SYMBOL_GPL(phy_10_100_features_array);
 100
 101const int phy_basic_t1_features_array[3] = {
 102	ETHTOOL_LINK_MODE_TP_BIT,
 103	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT,
 104	ETHTOOL_LINK_MODE_100baseT1_Full_BIT,
 105};
 106EXPORT_SYMBOL_GPL(phy_basic_t1_features_array);
 107
 108const int phy_basic_t1s_p2mp_features_array[2] = {
 109	ETHTOOL_LINK_MODE_TP_BIT,
 110	ETHTOOL_LINK_MODE_10baseT1S_P2MP_Half_BIT,
 111};
 112EXPORT_SYMBOL_GPL(phy_basic_t1s_p2mp_features_array);
 113
 114const int phy_gbit_features_array[2] = {
 115	ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
 116	ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
 117};
 118EXPORT_SYMBOL_GPL(phy_gbit_features_array);
 119
 120const int phy_10gbit_features_array[1] = {
 121	ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
 122};
 123EXPORT_SYMBOL_GPL(phy_10gbit_features_array);
 124
 125static const int phy_10gbit_fec_features_array[1] = {
 126	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT,
 127};
 128
 129__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init;
 130EXPORT_SYMBOL_GPL(phy_10gbit_full_features);
 131
 132static const int phy_10gbit_full_features_array[] = {
 133	ETHTOOL_LINK_MODE_10baseT_Full_BIT,
 134	ETHTOOL_LINK_MODE_100baseT_Full_BIT,
 135	ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
 136	ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
 137};
 138
 139static const int phy_eee_cap1_features_array[] = {
 140	ETHTOOL_LINK_MODE_100baseT_Full_BIT,
 141	ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
 142	ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
 143	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
 144	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT,
 145	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
 146};
 147
 148__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_eee_cap1_features) __ro_after_init;
 149EXPORT_SYMBOL_GPL(phy_eee_cap1_features);
 150
 151static void features_init(void)
 152{
 153	/* 10/100 half/full*/
 154	linkmode_set_bit_array(phy_basic_ports_array,
 155			       ARRAY_SIZE(phy_basic_ports_array),
 156			       phy_basic_features);
 157	linkmode_set_bit_array(phy_10_100_features_array,
 158			       ARRAY_SIZE(phy_10_100_features_array),
 159			       phy_basic_features);
 160
 161	/* 100 full, TP */
 162	linkmode_set_bit_array(phy_basic_t1_features_array,
 163			       ARRAY_SIZE(phy_basic_t1_features_array),
 164			       phy_basic_t1_features);
 165
 166	/* 10 half, P2MP, TP */
 167	linkmode_set_bit_array(phy_basic_t1s_p2mp_features_array,
 168			       ARRAY_SIZE(phy_basic_t1s_p2mp_features_array),
 169			       phy_basic_t1s_p2mp_features);
 170
 171	/* 10/100 half/full + 1000 half/full */
 172	linkmode_set_bit_array(phy_basic_ports_array,
 173			       ARRAY_SIZE(phy_basic_ports_array),
 174			       phy_gbit_features);
 175	linkmode_set_bit_array(phy_10_100_features_array,
 176			       ARRAY_SIZE(phy_10_100_features_array),
 177			       phy_gbit_features);
 178	linkmode_set_bit_array(phy_gbit_features_array,
 179			       ARRAY_SIZE(phy_gbit_features_array),
 180			       phy_gbit_features);
 181
 182	/* 10/100 half/full + 1000 half/full + fibre*/
 183	linkmode_set_bit_array(phy_basic_ports_array,
 184			       ARRAY_SIZE(phy_basic_ports_array),
 185			       phy_gbit_fibre_features);
 186	linkmode_set_bit_array(phy_10_100_features_array,
 187			       ARRAY_SIZE(phy_10_100_features_array),
 188			       phy_gbit_fibre_features);
 189	linkmode_set_bit_array(phy_gbit_features_array,
 190			       ARRAY_SIZE(phy_gbit_features_array),
 191			       phy_gbit_fibre_features);
 192	linkmode_set_bit_array(phy_fibre_port_array,
 193			       ARRAY_SIZE(phy_fibre_port_array),
 194			       phy_gbit_fibre_features);
 195
 196	/* 10/100 half/full + 1000 half/full + TP/MII/FIBRE/AUI/BNC/Backplane*/
 197	linkmode_set_bit_array(phy_all_ports_features_array,
 198			       ARRAY_SIZE(phy_all_ports_features_array),
 199			       phy_gbit_all_ports_features);
 200	linkmode_set_bit_array(phy_10_100_features_array,
 201			       ARRAY_SIZE(phy_10_100_features_array),
 202			       phy_gbit_all_ports_features);
 203	linkmode_set_bit_array(phy_gbit_features_array,
 204			       ARRAY_SIZE(phy_gbit_features_array),
 205			       phy_gbit_all_ports_features);
 206
 207	/* 10/100 half/full + 1000 half/full + 10G full*/
 208	linkmode_set_bit_array(phy_all_ports_features_array,
 209			       ARRAY_SIZE(phy_all_ports_features_array),
 210			       phy_10gbit_features);
 211	linkmode_set_bit_array(phy_10_100_features_array,
 212			       ARRAY_SIZE(phy_10_100_features_array),
 213			       phy_10gbit_features);
 214	linkmode_set_bit_array(phy_gbit_features_array,
 215			       ARRAY_SIZE(phy_gbit_features_array),
 216			       phy_10gbit_features);
 217	linkmode_set_bit_array(phy_10gbit_features_array,
 218			       ARRAY_SIZE(phy_10gbit_features_array),
 219			       phy_10gbit_features);
 220
 221	/* 10/100/1000/10G full */
 222	linkmode_set_bit_array(phy_all_ports_features_array,
 223			       ARRAY_SIZE(phy_all_ports_features_array),
 224			       phy_10gbit_full_features);
 225	linkmode_set_bit_array(phy_10gbit_full_features_array,
 226			       ARRAY_SIZE(phy_10gbit_full_features_array),
 227			       phy_10gbit_full_features);
 228	/* 10G FEC only */
 229	linkmode_set_bit_array(phy_10gbit_fec_features_array,
 230			       ARRAY_SIZE(phy_10gbit_fec_features_array),
 231			       phy_10gbit_fec_features);
 232	linkmode_set_bit_array(phy_eee_cap1_features_array,
 233			       ARRAY_SIZE(phy_eee_cap1_features_array),
 234			       phy_eee_cap1_features);
 235
 236}
 237
 238void phy_device_free(struct phy_device *phydev)
 239{
 240	put_device(&phydev->mdio.dev);
 241}
 242EXPORT_SYMBOL(phy_device_free);
 243
 244static void phy_mdio_device_free(struct mdio_device *mdiodev)
 245{
 246	struct phy_device *phydev;
 247
 248	phydev = container_of(mdiodev, struct phy_device, mdio);
 249	phy_device_free(phydev);
 250}
 251
 252static void phy_device_release(struct device *dev)
 253{
 254	fwnode_handle_put(dev->fwnode);
 255	kfree(to_phy_device(dev));
 256}
 257
 258static void phy_mdio_device_remove(struct mdio_device *mdiodev)
 259{
 260	struct phy_device *phydev;
 261
 262	phydev = container_of(mdiodev, struct phy_device, mdio);
 263	phy_device_remove(phydev);
 264}
 265
 266static struct phy_driver genphy_driver;
 
 
 267
 268static LIST_HEAD(phy_fixup_list);
 269static DEFINE_MUTEX(phy_fixup_lock);
 270
 271static bool mdio_bus_phy_may_suspend(struct phy_device *phydev)
 272{
 273	struct device_driver *drv = phydev->mdio.dev.driver;
 274	struct phy_driver *phydrv = to_phy_driver(drv);
 275	struct net_device *netdev = phydev->attached_dev;
 276
 277	if (!drv || !phydrv->suspend)
 278		return false;
 279
 280	/* PHY not attached? May suspend if the PHY has not already been
 281	 * suspended as part of a prior call to phy_disconnect() ->
 282	 * phy_detach() -> phy_suspend() because the parent netdev might be the
 283	 * MDIO bus driver and clock gated at this point.
 284	 */
 285	if (!netdev)
 286		goto out;
 287
 288	if (netdev->wol_enabled)
 289		return false;
 290
 291	/* As long as not all affected network drivers support the
 292	 * wol_enabled flag, let's check for hints that WoL is enabled.
 293	 * Don't suspend PHY if the attached netdev parent may wake up.
 294	 * The parent may point to a PCI device, as in tg3 driver.
 295	 */
 296	if (netdev->dev.parent && device_may_wakeup(netdev->dev.parent))
 297		return false;
 298
 299	/* Also don't suspend PHY if the netdev itself may wakeup. This
 300	 * is the case for devices w/o underlaying pwr. mgmt. aware bus,
 301	 * e.g. SoC devices.
 302	 */
 303	if (device_may_wakeup(&netdev->dev))
 304		return false;
 305
 306out:
 307	return !phydev->suspended;
 308}
 309
 310static __maybe_unused int mdio_bus_phy_suspend(struct device *dev)
 311{
 312	struct phy_device *phydev = to_phy_device(dev);
 313
 314	if (phydev->mac_managed_pm)
 315		return 0;
 316
 317	/* Wakeup interrupts may occur during the system sleep transition when
 318	 * the PHY is inaccessible. Set flag to postpone handling until the PHY
 319	 * has resumed. Wait for concurrent interrupt handler to complete.
 320	 */
 321	if (phy_interrupt_is_valid(phydev)) {
 322		phydev->irq_suspended = 1;
 323		synchronize_irq(phydev->irq);
 324	}
 325
 326	/* We must stop the state machine manually, otherwise it stops out of
 327	 * control, possibly with the phydev->lock held. Upon resume, netdev
 328	 * may call phy routines that try to grab the same lock, and that may
 329	 * lead to a deadlock.
 330	 */
 331	if (phydev->attached_dev && phydev->adjust_link)
 332		phy_stop_machine(phydev);
 333
 334	if (!mdio_bus_phy_may_suspend(phydev))
 335		return 0;
 336
 337	phydev->suspended_by_mdio_bus = 1;
 338
 339	return phy_suspend(phydev);
 340}
 341
 342static __maybe_unused int mdio_bus_phy_resume(struct device *dev)
 343{
 344	struct phy_device *phydev = to_phy_device(dev);
 345	int ret;
 346
 347	if (phydev->mac_managed_pm)
 348		return 0;
 349
 350	if (!phydev->suspended_by_mdio_bus)
 351		goto no_resume;
 352
 353	phydev->suspended_by_mdio_bus = 0;
 354
 355	/* If we managed to get here with the PHY state machine in a state
 356	 * neither PHY_HALTED, PHY_READY nor PHY_UP, this is an indication
 357	 * that something went wrong and we should most likely be using
 358	 * MAC managed PM, but we are not.
 359	 */
 360	WARN_ON(phydev->state != PHY_HALTED && phydev->state != PHY_READY &&
 361		phydev->state != PHY_UP);
 362
 363	ret = phy_init_hw(phydev);
 364	if (ret < 0)
 365		return ret;
 366
 367	ret = phy_resume(phydev);
 368	if (ret < 0)
 369		return ret;
 370no_resume:
 371	if (phy_interrupt_is_valid(phydev)) {
 372		phydev->irq_suspended = 0;
 373		synchronize_irq(phydev->irq);
 374
 375		/* Rerun interrupts which were postponed by phy_interrupt()
 376		 * because they occurred during the system sleep transition.
 377		 */
 378		if (phydev->irq_rerun) {
 379			phydev->irq_rerun = 0;
 380			enable_irq(phydev->irq);
 381			irq_wake_thread(phydev->irq, phydev);
 382		}
 383	}
 384
 385	if (phydev->attached_dev && phydev->adjust_link)
 386		phy_start_machine(phydev);
 387
 388	return 0;
 389}
 390
 391static SIMPLE_DEV_PM_OPS(mdio_bus_phy_pm_ops, mdio_bus_phy_suspend,
 392			 mdio_bus_phy_resume);
 393
 394/**
 395 * phy_register_fixup - creates a new phy_fixup and adds it to the list
 396 * @bus_id: A string which matches phydev->mdio.dev.bus_id (or PHY_ANY_ID)
 397 * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
 398 *	It can also be PHY_ANY_UID
 399 * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
 400 *	comparison
 401 * @run: The actual code to be run when a matching PHY is found
 402 */
 403int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
 404		       int (*run)(struct phy_device *))
 405{
 406	struct phy_fixup *fixup = kzalloc(sizeof(*fixup), GFP_KERNEL);
 407
 
 408	if (!fixup)
 409		return -ENOMEM;
 410
 411	strscpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
 412	fixup->phy_uid = phy_uid;
 413	fixup->phy_uid_mask = phy_uid_mask;
 414	fixup->run = run;
 415
 416	mutex_lock(&phy_fixup_lock);
 417	list_add_tail(&fixup->list, &phy_fixup_list);
 418	mutex_unlock(&phy_fixup_lock);
 419
 420	return 0;
 421}
 422EXPORT_SYMBOL(phy_register_fixup);
 423
 424/* Registers a fixup to be run on any PHY with the UID in phy_uid */
 425int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
 426			       int (*run)(struct phy_device *))
 427{
 428	return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
 429}
 430EXPORT_SYMBOL(phy_register_fixup_for_uid);
 431
 432/* Registers a fixup to be run on the PHY with id string bus_id */
 433int phy_register_fixup_for_id(const char *bus_id,
 434			      int (*run)(struct phy_device *))
 435{
 436	return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
 437}
 438EXPORT_SYMBOL(phy_register_fixup_for_id);
 439
 440/**
 441 * phy_unregister_fixup - remove a phy_fixup from the list
 442 * @bus_id: A string matches fixup->bus_id (or PHY_ANY_ID) in phy_fixup_list
 443 * @phy_uid: A phy id matches fixup->phy_id (or PHY_ANY_UID) in phy_fixup_list
 444 * @phy_uid_mask: Applied to phy_uid and fixup->phy_uid before comparison
 445 */
 446int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask)
 447{
 448	struct list_head *pos, *n;
 449	struct phy_fixup *fixup;
 450	int ret;
 451
 452	ret = -ENODEV;
 453
 454	mutex_lock(&phy_fixup_lock);
 455	list_for_each_safe(pos, n, &phy_fixup_list) {
 456		fixup = list_entry(pos, struct phy_fixup, list);
 457
 458		if ((!strcmp(fixup->bus_id, bus_id)) &&
 459		    phy_id_compare(fixup->phy_uid, phy_uid, phy_uid_mask)) {
 460			list_del(&fixup->list);
 461			kfree(fixup);
 462			ret = 0;
 463			break;
 464		}
 465	}
 466	mutex_unlock(&phy_fixup_lock);
 467
 468	return ret;
 469}
 470EXPORT_SYMBOL(phy_unregister_fixup);
 471
 472/* Unregisters a fixup of any PHY with the UID in phy_uid */
 473int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask)
 474{
 475	return phy_unregister_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask);
 476}
 477EXPORT_SYMBOL(phy_unregister_fixup_for_uid);
 478
 479/* Unregisters a fixup of the PHY with id string bus_id */
 480int phy_unregister_fixup_for_id(const char *bus_id)
 481{
 482	return phy_unregister_fixup(bus_id, PHY_ANY_UID, 0xffffffff);
 483}
 484EXPORT_SYMBOL(phy_unregister_fixup_for_id);
 485
 486/* Returns 1 if fixup matches phydev in bus_id and phy_uid.
 487 * Fixups can be set to match any in one or more fields.
 488 */
 489static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
 490{
 491	if (strcmp(fixup->bus_id, phydev_name(phydev)) != 0)
 492		if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
 493			return 0;
 494
 495	if (!phy_id_compare(phydev->phy_id, fixup->phy_uid,
 496			    fixup->phy_uid_mask))
 497		if (fixup->phy_uid != PHY_ANY_UID)
 498			return 0;
 499
 500	return 1;
 501}
 502
 503/* Runs any matching fixups for this phydev */
 504static int phy_scan_fixups(struct phy_device *phydev)
 505{
 506	struct phy_fixup *fixup;
 507
 508	mutex_lock(&phy_fixup_lock);
 509	list_for_each_entry(fixup, &phy_fixup_list, list) {
 510		if (phy_needs_fixup(phydev, fixup)) {
 511			int err = fixup->run(phydev);
 
 
 512
 513			if (err < 0) {
 514				mutex_unlock(&phy_fixup_lock);
 515				return err;
 516			}
 517			phydev->has_fixups = true;
 518		}
 519	}
 520	mutex_unlock(&phy_fixup_lock);
 521
 522	return 0;
 523}
 
 524
 525static int phy_bus_match(struct device *dev, struct device_driver *drv)
 526{
 527	struct phy_device *phydev = to_phy_device(dev);
 528	struct phy_driver *phydrv = to_phy_driver(drv);
 529	const int num_ids = ARRAY_SIZE(phydev->c45_ids.device_ids);
 530	int i;
 531
 532	if (!(phydrv->mdiodrv.flags & MDIO_DEVICE_IS_PHY))
 533		return 0;
 534
 535	if (phydrv->match_phy_device)
 536		return phydrv->match_phy_device(phydev);
 537
 538	if (phydev->is_c45) {
 539		for (i = 1; i < num_ids; i++) {
 540			if (phydev->c45_ids.device_ids[i] == 0xffffffff)
 541				continue;
 542
 543			if (phy_id_compare(phydev->c45_ids.device_ids[i],
 544					   phydrv->phy_id, phydrv->phy_id_mask))
 545				return 1;
 546		}
 547		return 0;
 548	} else {
 549		return phy_id_compare(phydev->phy_id, phydrv->phy_id,
 550				      phydrv->phy_id_mask);
 551	}
 552}
 553
 554static ssize_t
 555phy_id_show(struct device *dev, struct device_attribute *attr, char *buf)
 556{
 557	struct phy_device *phydev = to_phy_device(dev);
 558
 559	return sysfs_emit(buf, "0x%.8lx\n", (unsigned long)phydev->phy_id);
 560}
 561static DEVICE_ATTR_RO(phy_id);
 562
 563static ssize_t
 564phy_interface_show(struct device *dev, struct device_attribute *attr, char *buf)
 565{
 566	struct phy_device *phydev = to_phy_device(dev);
 567	const char *mode = NULL;
 568
 569	if (phy_is_internal(phydev))
 570		mode = "internal";
 571	else
 572		mode = phy_modes(phydev->interface);
 573
 574	return sysfs_emit(buf, "%s\n", mode);
 575}
 576static DEVICE_ATTR_RO(phy_interface);
 577
 578static ssize_t
 579phy_has_fixups_show(struct device *dev, struct device_attribute *attr,
 580		    char *buf)
 581{
 582	struct phy_device *phydev = to_phy_device(dev);
 583
 584	return sysfs_emit(buf, "%d\n", phydev->has_fixups);
 585}
 586static DEVICE_ATTR_RO(phy_has_fixups);
 587
 588static ssize_t phy_dev_flags_show(struct device *dev,
 589				  struct device_attribute *attr,
 590				  char *buf)
 591{
 592	struct phy_device *phydev = to_phy_device(dev);
 593
 594	return sysfs_emit(buf, "0x%08x\n", phydev->dev_flags);
 595}
 596static DEVICE_ATTR_RO(phy_dev_flags);
 597
 598static struct attribute *phy_dev_attrs[] = {
 599	&dev_attr_phy_id.attr,
 600	&dev_attr_phy_interface.attr,
 601	&dev_attr_phy_has_fixups.attr,
 602	&dev_attr_phy_dev_flags.attr,
 603	NULL,
 604};
 605ATTRIBUTE_GROUPS(phy_dev);
 606
 607static const struct device_type mdio_bus_phy_type = {
 608	.name = "PHY",
 609	.groups = phy_dev_groups,
 610	.release = phy_device_release,
 611	.pm = pm_ptr(&mdio_bus_phy_pm_ops),
 612};
 613
 614static int phy_request_driver_module(struct phy_device *dev, u32 phy_id)
 615{
 616	int ret;
 617
 618	ret = request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT,
 619			     MDIO_ID_ARGS(phy_id));
 620	/* We only check for failures in executing the usermode binary,
 621	 * not whether a PHY driver module exists for the PHY ID.
 622	 * Accept -ENOENT because this may occur in case no initramfs exists,
 623	 * then modprobe isn't available.
 624	 */
 625	if (IS_ENABLED(CONFIG_MODULES) && ret < 0 && ret != -ENOENT) {
 626		phydev_err(dev, "error %d loading PHY driver module for ID 0x%08lx\n",
 627			   ret, (unsigned long)phy_id);
 628		return ret;
 629	}
 630
 631	return 0;
 632}
 633
 634struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
 635				     bool is_c45,
 636				     struct phy_c45_device_ids *c45_ids)
 637{
 638	struct phy_device *dev;
 639	struct mdio_device *mdiodev;
 640	int ret = 0;
 641
 642	/* We allocate the device, and initialize the default values */
 
 643	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
 644	if (!dev)
 645		return ERR_PTR(-ENOMEM);
 646
 647	mdiodev = &dev->mdio;
 648	mdiodev->dev.parent = &bus->dev;
 649	mdiodev->dev.bus = &mdio_bus_type;
 650	mdiodev->dev.type = &mdio_bus_phy_type;
 651	mdiodev->bus = bus;
 652	mdiodev->bus_match = phy_bus_match;
 653	mdiodev->addr = addr;
 654	mdiodev->flags = MDIO_DEVICE_FLAG_PHY;
 655	mdiodev->device_free = phy_mdio_device_free;
 656	mdiodev->device_remove = phy_mdio_device_remove;
 657	mdiodev->reset_state = -1;
 658
 659	dev->speed = SPEED_UNKNOWN;
 660	dev->duplex = DUPLEX_UNKNOWN;
 661	dev->pause = 0;
 662	dev->asym_pause = 0;
 663	dev->link = 0;
 664	dev->port = PORT_TP;
 665	dev->interface = PHY_INTERFACE_MODE_GMII;
 666
 667	dev->autoneg = AUTONEG_ENABLE;
 668
 669	dev->pma_extable = -ENODATA;
 670	dev->is_c45 = is_c45;
 671	dev->phy_id = phy_id;
 672	if (c45_ids)
 673		dev->c45_ids = *c45_ids;
 674	dev->irq = bus->irq[addr];
 675
 676	dev_set_name(&mdiodev->dev, PHY_ID_FMT, bus->id, addr);
 677	device_initialize(&mdiodev->dev);
 678
 679	dev->state = PHY_DOWN;
 680	INIT_LIST_HEAD(&dev->leds);
 681
 682	mutex_init(&dev->lock);
 683	INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
 684
 685	/* Request the appropriate module unconditionally; don't
 686	 * bother trying to do so only if it isn't already loaded,
 687	 * because that gets complicated. A hotplug event would have
 688	 * done an unconditional modprobe anyway.
 689	 * We don't do normal hotplug because it won't work for MDIO
 690	 * -- because it relies on the device staying around for long
 691	 * enough for the driver to get loaded. With MDIO, the NIC
 692	 * driver will get bored and give up as soon as it finds that
 693	 * there's no driver _already_ loaded.
 694	 */
 695	if (is_c45 && c45_ids) {
 696		const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
 697		int i;
 698
 699		for (i = 1; i < num_ids; i++) {
 700			if (c45_ids->device_ids[i] == 0xffffffff)
 701				continue;
 702
 703			ret = phy_request_driver_module(dev,
 704						c45_ids->device_ids[i]);
 705			if (ret)
 706				break;
 707		}
 708	} else {
 709		ret = phy_request_driver_module(dev, phy_id);
 710	}
 711
 712	if (ret) {
 713		put_device(&mdiodev->dev);
 714		dev = ERR_PTR(ret);
 715	}
 716
 717	return dev;
 718}
 719EXPORT_SYMBOL(phy_device_create);
 720
 721/* phy_c45_probe_present - checks to see if a MMD is present in the package
 722 * @bus: the target MII bus
 723 * @prtad: PHY package address on the MII bus
 724 * @devad: PHY device (MMD) address
 725 *
 726 * Read the MDIO_STAT2 register, and check whether a device is responding
 727 * at this address.
 728 *
 729 * Returns: negative error number on bus access error, zero if no device
 730 * is responding, or positive if a device is present.
 731 */
 732static int phy_c45_probe_present(struct mii_bus *bus, int prtad, int devad)
 733{
 734	int stat2;
 735
 736	stat2 = mdiobus_c45_read(bus, prtad, devad, MDIO_STAT2);
 737	if (stat2 < 0)
 738		return stat2;
 739
 740	return (stat2 & MDIO_STAT2_DEVPRST) == MDIO_STAT2_DEVPRST_VAL;
 741}
 742
 743/* get_phy_c45_devs_in_pkg - reads a MMD's devices in package registers.
 
 744 * @bus: the target MII bus
 745 * @addr: PHY address on the MII bus
 746 * @dev_addr: MMD address in the PHY.
 747 * @devices_in_package: where to store the devices in package information.
 748 *
 749 * Description: reads devices in package registers of a MMD at @dev_addr
 750 * from PHY at @addr on @bus.
 751 *
 752 * Returns: 0 on success, -EIO on failure.
 
 753 */
 754static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
 755				   u32 *devices_in_package)
 756{
 757	int phy_reg;
 758
 759	phy_reg = mdiobus_c45_read(bus, addr, dev_addr, MDIO_DEVS2);
 760	if (phy_reg < 0)
 761		return -EIO;
 762	*devices_in_package = phy_reg << 16;
 763
 764	phy_reg = mdiobus_c45_read(bus, addr, dev_addr, MDIO_DEVS1);
 765	if (phy_reg < 0)
 766		return -EIO;
 767	*devices_in_package |= phy_reg;
 768
 769	return 0;
 770}
 771
 772/**
 773 * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs.
 774 * @bus: the target MII bus
 775 * @addr: PHY address on the MII bus
 776 * @c45_ids: where to store the c45 ID information.
 777 *
 778 * Read the PHY "devices in package". If this appears to be valid, read
 779 * the PHY identifiers for each device. Return the "devices in package"
 780 * and identifiers in @c45_ids.
 781 *
 782 * Returns zero on success, %-EIO on bus access error, or %-ENODEV if
 783 * the "devices in package" is invalid.
 784 */
 785static int get_phy_c45_ids(struct mii_bus *bus, int addr,
 786			   struct phy_c45_device_ids *c45_ids)
 787{
 788	const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
 789	u32 devs_in_pkg = 0;
 790	int i, ret, phy_reg;
 791
 792	/* Find first non-zero Devices In package. Device zero is reserved
 793	 * for 802.3 c45 complied PHYs, so don't probe it at first.
 794	 */
 795	for (i = 1; i < MDIO_MMD_NUM && (devs_in_pkg == 0 ||
 796	     (devs_in_pkg & 0x1fffffff) == 0x1fffffff); i++) {
 797		if (i == MDIO_MMD_VEND1 || i == MDIO_MMD_VEND2) {
 798			/* Check that there is a device present at this
 799			 * address before reading the devices-in-package
 800			 * register to avoid reading garbage from the PHY.
 801			 * Some PHYs (88x3310) vendor space is not IEEE802.3
 802			 * compliant.
 803			 */
 804			ret = phy_c45_probe_present(bus, addr, i);
 805			if (ret < 0)
 806				return -EIO;
 807
 808			if (!ret)
 809				continue;
 810		}
 811		phy_reg = get_phy_c45_devs_in_pkg(bus, addr, i, &devs_in_pkg);
 812		if (phy_reg < 0)
 813			return -EIO;
 814	}
 815
 816	if ((devs_in_pkg & 0x1fffffff) == 0x1fffffff) {
 817		/* If mostly Fs, there is no device there, then let's probe
 818		 * MMD 0, as some 10G PHYs have zero Devices In package,
 819		 * e.g. Cortina CS4315/CS4340 PHY.
 820		 */
 821		phy_reg = get_phy_c45_devs_in_pkg(bus, addr, 0, &devs_in_pkg);
 822		if (phy_reg < 0)
 823			return -EIO;
 824
 825		/* no device there, let's get out of here */
 826		if ((devs_in_pkg & 0x1fffffff) == 0x1fffffff)
 827			return -ENODEV;
 828	}
 829
 830	/* Now probe Device Identifiers for each device present. */
 831	for (i = 1; i < num_ids; i++) {
 832		if (!(devs_in_pkg & (1 << i)))
 833			continue;
 834
 835		if (i == MDIO_MMD_VEND1 || i == MDIO_MMD_VEND2) {
 836			/* Probe the "Device Present" bits for the vendor MMDs
 837			 * to ignore these if they do not contain IEEE 802.3
 838			 * registers.
 839			 */
 840			ret = phy_c45_probe_present(bus, addr, i);
 841			if (ret < 0)
 842				return ret;
 843
 844			if (!ret)
 845				continue;
 846		}
 847
 848		phy_reg = mdiobus_c45_read(bus, addr, i, MII_PHYSID1);
 849		if (phy_reg < 0)
 850			return -EIO;
 851		c45_ids->device_ids[i] = phy_reg << 16;
 852
 853		phy_reg = mdiobus_c45_read(bus, addr, i, MII_PHYSID2);
 854		if (phy_reg < 0)
 855			return -EIO;
 856		c45_ids->device_ids[i] |= phy_reg;
 857	}
 858
 859	c45_ids->devices_in_package = devs_in_pkg;
 860	/* Bit 0 doesn't represent a device, it indicates c22 regs presence */
 861	c45_ids->mmds_present = devs_in_pkg & ~BIT(0);
 862
 863	return 0;
 864}
 865
 866/**
 867 * get_phy_c22_id - reads the specified addr for its clause 22 ID.
 868 * @bus: the target MII bus
 869 * @addr: PHY address on the MII bus
 870 * @phy_id: where to store the ID retrieved.
 871 *
 872 * Read the 802.3 clause 22 PHY ID from the PHY at @addr on the @bus,
 873 * placing it in @phy_id. Return zero on successful read and the ID is
 874 * valid, %-EIO on bus access error, or %-ENODEV if no device responds
 875 * or invalid ID.
 876 */
 877static int get_phy_c22_id(struct mii_bus *bus, int addr, u32 *phy_id)
 878{
 879	int phy_reg;
 880
 881	/* Grab the bits from PHYIR1, and put them in the upper half */
 882	phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
 883	if (phy_reg < 0) {
 884		/* returning -ENODEV doesn't stop bus scanning */
 885		return (phy_reg == -EIO || phy_reg == -ENODEV) ? -ENODEV : -EIO;
 886	}
 887
 888	*phy_id = phy_reg << 16;
 889
 890	/* Grab the bits from PHYIR2, and put them in the lower half */
 891	phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
 892	if (phy_reg < 0) {
 893		/* returning -ENODEV doesn't stop bus scanning */
 894		return (phy_reg == -EIO || phy_reg == -ENODEV) ? -ENODEV : -EIO;
 895	}
 896
 897	*phy_id |= phy_reg;
 898
 899	/* If the phy_id is mostly Fs, there is no device there */
 900	if ((*phy_id & 0x1fffffff) == 0x1fffffff)
 901		return -ENODEV;
 902
 903	return 0;
 904}
 905
 906/* Extract the phy ID from the compatible string of the form
 907 * ethernet-phy-idAAAA.BBBB.
 908 */
 909int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id)
 910{
 911	unsigned int upper, lower;
 912	const char *cp;
 913	int ret;
 914
 915	ret = fwnode_property_read_string(fwnode, "compatible", &cp);
 916	if (ret)
 917		return ret;
 918
 919	if (sscanf(cp, "ethernet-phy-id%4x.%4x", &upper, &lower) != 2)
 920		return -EINVAL;
 921
 922	*phy_id = ((upper & GENMASK(15, 0)) << 16) | (lower & GENMASK(15, 0));
 923	return 0;
 924}
 925EXPORT_SYMBOL(fwnode_get_phy_id);
 926
 927/**
 928 * get_phy_device - reads the specified PHY device and returns its @phy_device
 929 *		    struct
 930 * @bus: the target MII bus
 931 * @addr: PHY address on the MII bus
 932 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
 933 *
 934 * Probe for a PHY at @addr on @bus.
 935 *
 936 * When probing for a clause 22 PHY, then read the ID registers. If we find
 937 * a valid ID, allocate and return a &struct phy_device.
 938 *
 939 * When probing for a clause 45 PHY, read the "devices in package" registers.
 940 * If the "devices in package" appears valid, read the ID registers for each
 941 * MMD, allocate and return a &struct phy_device.
 942 *
 943 * Returns an allocated &struct phy_device on success, %-ENODEV if there is
 944 * no PHY present, or %-EIO on bus access error.
 945 */
 946struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
 947{
 948	struct phy_c45_device_ids c45_ids;
 949	u32 phy_id = 0;
 950	int r;
 951
 952	c45_ids.devices_in_package = 0;
 953	c45_ids.mmds_present = 0;
 954	memset(c45_ids.device_ids, 0xff, sizeof(c45_ids.device_ids));
 955
 956	if (is_c45)
 957		r = get_phy_c45_ids(bus, addr, &c45_ids);
 958	else
 959		r = get_phy_c22_id(bus, addr, &phy_id);
 960
 961	if (r)
 962		return ERR_PTR(r);
 963
 964	/* PHY device such as the Marvell Alaska 88E2110 will return a PHY ID
 965	 * of 0 when probed using get_phy_c22_id() with no error. Proceed to
 966	 * probe with C45 to see if we're able to get a valid PHY ID in the C45
 967	 * space, if successful, create the C45 PHY device.
 968	 */
 969	if (!is_c45 && phy_id == 0 && bus->read_c45) {
 970		r = get_phy_c45_ids(bus, addr, &c45_ids);
 971		if (!r)
 972			return phy_device_create(bus, addr, phy_id,
 973						 true, &c45_ids);
 974	}
 975
 976	return phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
 977}
 978EXPORT_SYMBOL(get_phy_device);
 979
 980/**
 981 * phy_device_register - Register the phy device on the MDIO bus
 982 * @phydev: phy_device structure to be added to the MDIO bus
 983 */
 984int phy_device_register(struct phy_device *phydev)
 985{
 986	int err;
 987
 988	err = mdiobus_register_device(&phydev->mdio);
 989	if (err)
 990		return err;
 991
 992	/* Deassert the reset signal */
 993	phy_device_reset(phydev, 0);
 994
 995	/* Run all of the fixups for this PHY */
 996	err = phy_scan_fixups(phydev);
 997	if (err) {
 998		phydev_err(phydev, "failed to initialize\n");
 999		goto out;
1000	}
1001
1002	err = device_add(&phydev->mdio.dev);
1003	if (err) {
1004		phydev_err(phydev, "failed to add\n");
1005		goto out;
1006	}
1007
1008	return 0;
1009
1010 out:
1011	/* Assert the reset signal */
1012	phy_device_reset(phydev, 1);
1013
1014	mdiobus_unregister_device(&phydev->mdio);
1015	return err;
1016}
1017EXPORT_SYMBOL(phy_device_register);
1018
1019/**
1020 * phy_device_remove - Remove a previously registered phy device from the MDIO bus
1021 * @phydev: phy_device structure to remove
1022 *
1023 * This doesn't free the phy_device itself, it merely reverses the effects
1024 * of phy_device_register(). Use phy_device_free() to free the device
1025 * after calling this function.
1026 */
1027void phy_device_remove(struct phy_device *phydev)
1028{
1029	unregister_mii_timestamper(phydev->mii_ts);
1030	pse_control_put(phydev->psec);
1031
1032	device_del(&phydev->mdio.dev);
1033
1034	/* Assert the reset signal */
1035	phy_device_reset(phydev, 1);
1036
1037	mdiobus_unregister_device(&phydev->mdio);
1038}
1039EXPORT_SYMBOL(phy_device_remove);
1040
1041/**
1042 * phy_get_c45_ids - Read 802.3-c45 IDs for phy device.
1043 * @phydev: phy_device structure to read 802.3-c45 IDs
1044 *
1045 * Returns zero on success, %-EIO on bus access error, or %-ENODEV if
1046 * the "devices in package" is invalid.
1047 */
1048int phy_get_c45_ids(struct phy_device *phydev)
1049{
1050	return get_phy_c45_ids(phydev->mdio.bus, phydev->mdio.addr,
1051			       &phydev->c45_ids);
1052}
1053EXPORT_SYMBOL(phy_get_c45_ids);
1054
1055/**
1056 * phy_find_first - finds the first PHY device on the bus
1057 * @bus: the target MII bus
1058 */
1059struct phy_device *phy_find_first(struct mii_bus *bus)
1060{
1061	struct phy_device *phydev;
1062	int addr;
1063
1064	for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
1065		phydev = mdiobus_get_phy(bus, addr);
1066		if (phydev)
1067			return phydev;
1068	}
1069	return NULL;
1070}
1071EXPORT_SYMBOL(phy_find_first);
1072
1073static void phy_link_change(struct phy_device *phydev, bool up)
1074{
1075	struct net_device *netdev = phydev->attached_dev;
1076
1077	if (up)
1078		netif_carrier_on(netdev);
1079	else
1080		netif_carrier_off(netdev);
1081	phydev->adjust_link(netdev);
1082	if (phydev->mii_ts && phydev->mii_ts->link_state)
1083		phydev->mii_ts->link_state(phydev->mii_ts, phydev);
1084}
1085
1086/**
1087 * phy_prepare_link - prepares the PHY layer to monitor link status
1088 * @phydev: target phy_device struct
1089 * @handler: callback function for link status change notifications
1090 *
1091 * Description: Tells the PHY infrastructure to handle the
1092 *   gory details on monitoring link status (whether through
1093 *   polling or an interrupt), and to call back to the
1094 *   connected device driver when the link status changes.
1095 *   If you want to monitor your own link state, don't call
1096 *   this function.
1097 */
1098static void phy_prepare_link(struct phy_device *phydev,
1099			     void (*handler)(struct net_device *))
1100{
1101	phydev->adjust_link = handler;
1102}
1103
1104/**
1105 * phy_connect_direct - connect an ethernet device to a specific phy_device
1106 * @dev: the network device to connect
1107 * @phydev: the pointer to the phy device
1108 * @handler: callback function for state change notifications
 
1109 * @interface: PHY device's interface
1110 */
1111int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
1112		       void (*handler)(struct net_device *),
1113		       phy_interface_t interface)
1114{
1115	int rc;
1116
1117	if (!dev)
1118		return -EINVAL;
1119
1120	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
1121	if (rc)
1122		return rc;
1123
1124	phy_prepare_link(phydev, handler);
1125	if (phy_interrupt_is_valid(phydev))
1126		phy_request_interrupt(phydev);
 
1127
1128	return 0;
1129}
1130EXPORT_SYMBOL(phy_connect_direct);
1131
1132/**
1133 * phy_connect - connect an ethernet device to a PHY device
1134 * @dev: the network device to connect
1135 * @bus_id: the id string of the PHY device to connect
1136 * @handler: callback function for state change notifications
 
1137 * @interface: PHY device's interface
1138 *
1139 * Description: Convenience function for connecting ethernet
1140 *   devices to PHY devices.  The default behavior is for
1141 *   the PHY infrastructure to handle everything, and only notify
1142 *   the connected driver when the link status changes.  If you
1143 *   don't want, or can't use the provided functionality, you may
1144 *   choose to call only the subset of functions which provide
1145 *   the desired functionality.
1146 */
1147struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
1148			       void (*handler)(struct net_device *),
1149			       phy_interface_t interface)
1150{
1151	struct phy_device *phydev;
1152	struct device *d;
1153	int rc;
1154
1155	/* Search the list of PHY devices on the mdio bus for the
1156	 * PHY with the requested name
1157	 */
1158	d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
1159	if (!d) {
1160		pr_err("PHY %s not found\n", bus_id);
1161		return ERR_PTR(-ENODEV);
1162	}
1163	phydev = to_phy_device(d);
1164
1165	rc = phy_connect_direct(dev, phydev, handler, interface);
1166	put_device(d);
1167	if (rc)
1168		return ERR_PTR(rc);
1169
1170	return phydev;
1171}
1172EXPORT_SYMBOL(phy_connect);
1173
1174/**
1175 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY
1176 *		    device
1177 * @phydev: target phy_device struct
1178 */
1179void phy_disconnect(struct phy_device *phydev)
1180{
1181	if (phy_is_started(phydev))
1182		phy_stop(phydev);
1183
1184	if (phy_interrupt_is_valid(phydev))
1185		phy_free_interrupt(phydev);
1186
 
 
1187	phydev->adjust_link = NULL;
1188
1189	phy_detach(phydev);
1190}
1191EXPORT_SYMBOL(phy_disconnect);
1192
1193/**
1194 * phy_poll_reset - Safely wait until a PHY reset has properly completed
1195 * @phydev: The PHY device to poll
1196 *
1197 * Description: According to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as
1198 *   published in 2008, a PHY reset may take up to 0.5 seconds.  The MII BMCR
1199 *   register must be polled until the BMCR_RESET bit clears.
1200 *
1201 *   Furthermore, any attempts to write to PHY registers may have no effect
1202 *   or even generate MDIO bus errors until this is complete.
1203 *
1204 *   Some PHYs (such as the Marvell 88E1111) don't entirely conform to the
1205 *   standard and do not fully reset after the BMCR_RESET bit is set, and may
1206 *   even *REQUIRE* a soft-reset to properly restart autonegotiation.  In an
1207 *   effort to support such broken PHYs, this function is separate from the
1208 *   standard phy_init_hw() which will zero all the other bits in the BMCR
1209 *   and reapply all driver-specific and board-specific fixups.
1210 */
1211static int phy_poll_reset(struct phy_device *phydev)
1212{
1213	/* Poll until the reset bit clears (50ms per retry == 0.6 sec) */
1214	int ret, val;
1215
1216	ret = phy_read_poll_timeout(phydev, MII_BMCR, val, !(val & BMCR_RESET),
1217				    50000, 600000, true);
1218	if (ret)
1219		return ret;
1220	/* Some chips (smsc911x) may still need up to another 1ms after the
1221	 * BMCR_RESET bit is cleared before they are usable.
1222	 */
1223	msleep(1);
1224	return 0;
1225}
1226
1227int phy_init_hw(struct phy_device *phydev)
1228{
1229	int ret = 0;
1230
1231	/* Deassert the reset signal */
1232	phy_device_reset(phydev, 0);
1233
1234	if (!phydev->drv)
1235		return 0;
1236
1237	if (phydev->drv->soft_reset) {
1238		ret = phydev->drv->soft_reset(phydev);
1239		if (ret < 0)
1240			return ret;
1241
1242		/* see comment in genphy_soft_reset for an explanation */
1243		phydev->suspended = 0;
1244	}
1245
1246	ret = phy_scan_fixups(phydev);
1247	if (ret < 0)
1248		return ret;
1249
1250	phy_interface_zero(phydev->possible_interfaces);
1251
1252	if (phydev->drv->config_init) {
1253		ret = phydev->drv->config_init(phydev);
1254		if (ret < 0)
1255			return ret;
1256	}
1257
1258	if (phydev->drv->config_intr) {
1259		ret = phydev->drv->config_intr(phydev);
1260		if (ret < 0)
1261			return ret;
1262	}
1263
1264	return 0;
1265}
1266EXPORT_SYMBOL(phy_init_hw);
1267
1268void phy_attached_info(struct phy_device *phydev)
1269{
1270	phy_attached_print(phydev, NULL);
1271}
1272EXPORT_SYMBOL(phy_attached_info);
1273
1274#define ATTACHED_FMT "attached PHY driver %s(mii_bus:phy_addr=%s, irq=%s)"
1275char *phy_attached_info_irq(struct phy_device *phydev)
1276{
1277	char *irq_str;
1278	char irq_num[8];
1279
1280	switch(phydev->irq) {
1281	case PHY_POLL:
1282		irq_str = "POLL";
1283		break;
1284	case PHY_MAC_INTERRUPT:
1285		irq_str = "MAC";
1286		break;
1287	default:
1288		snprintf(irq_num, sizeof(irq_num), "%d", phydev->irq);
1289		irq_str = irq_num;
1290		break;
1291	}
1292
1293	return kasprintf(GFP_KERNEL, "%s", irq_str);
1294}
1295EXPORT_SYMBOL(phy_attached_info_irq);
1296
1297void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
1298{
1299	const char *unbound = phydev->drv ? "" : "[unbound] ";
1300	char *irq_str = phy_attached_info_irq(phydev);
1301
1302	if (!fmt) {
1303		phydev_info(phydev, ATTACHED_FMT "\n", unbound,
1304			    phydev_name(phydev), irq_str);
1305	} else {
1306		va_list ap;
1307
1308		phydev_info(phydev, ATTACHED_FMT, unbound,
1309			    phydev_name(phydev), irq_str);
1310
1311		va_start(ap, fmt);
1312		vprintk(fmt, ap);
1313		va_end(ap);
1314	}
1315	kfree(irq_str);
1316}
1317EXPORT_SYMBOL(phy_attached_print);
1318
1319static void phy_sysfs_create_links(struct phy_device *phydev)
1320{
1321	struct net_device *dev = phydev->attached_dev;
1322	int err;
1323
1324	if (!dev)
1325		return;
1326
1327	err = sysfs_create_link(&phydev->mdio.dev.kobj, &dev->dev.kobj,
1328				"attached_dev");
1329	if (err)
1330		return;
1331
1332	err = sysfs_create_link_nowarn(&dev->dev.kobj,
1333				       &phydev->mdio.dev.kobj,
1334				       "phydev");
1335	if (err) {
1336		dev_err(&dev->dev, "could not add device link to %s err %d\n",
1337			kobject_name(&phydev->mdio.dev.kobj),
1338			err);
1339		/* non-fatal - some net drivers can use one netdevice
1340		 * with more then one phy
1341		 */
1342	}
1343
1344	phydev->sysfs_links = true;
1345}
1346
1347static ssize_t
1348phy_standalone_show(struct device *dev, struct device_attribute *attr,
1349		    char *buf)
1350{
1351	struct phy_device *phydev = to_phy_device(dev);
1352
1353	return sysfs_emit(buf, "%d\n", !phydev->attached_dev);
1354}
1355static DEVICE_ATTR_RO(phy_standalone);
1356
1357/**
1358 * phy_sfp_attach - attach the SFP bus to the PHY upstream network device
1359 * @upstream: pointer to the phy device
1360 * @bus: sfp bus representing cage being attached
1361 *
1362 * This is used to fill in the sfp_upstream_ops .attach member.
1363 */
1364void phy_sfp_attach(void *upstream, struct sfp_bus *bus)
1365{
1366	struct phy_device *phydev = upstream;
1367
1368	if (phydev->attached_dev)
1369		phydev->attached_dev->sfp_bus = bus;
1370	phydev->sfp_bus_attached = true;
1371}
1372EXPORT_SYMBOL(phy_sfp_attach);
1373
1374/**
1375 * phy_sfp_detach - detach the SFP bus from the PHY upstream network device
1376 * @upstream: pointer to the phy device
1377 * @bus: sfp bus representing cage being attached
1378 *
1379 * This is used to fill in the sfp_upstream_ops .detach member.
1380 */
1381void phy_sfp_detach(void *upstream, struct sfp_bus *bus)
1382{
1383	struct phy_device *phydev = upstream;
1384
1385	if (phydev->attached_dev)
1386		phydev->attached_dev->sfp_bus = NULL;
1387	phydev->sfp_bus_attached = false;
1388}
1389EXPORT_SYMBOL(phy_sfp_detach);
1390
1391/**
1392 * phy_sfp_probe - probe for a SFP cage attached to this PHY device
1393 * @phydev: Pointer to phy_device
1394 * @ops: SFP's upstream operations
1395 */
1396int phy_sfp_probe(struct phy_device *phydev,
1397		  const struct sfp_upstream_ops *ops)
1398{
1399	struct sfp_bus *bus;
1400	int ret = 0;
1401
1402	if (phydev->mdio.dev.fwnode) {
1403		bus = sfp_bus_find_fwnode(phydev->mdio.dev.fwnode);
1404		if (IS_ERR(bus))
1405			return PTR_ERR(bus);
1406
1407		phydev->sfp_bus = bus;
1408
1409		ret = sfp_bus_add_upstream(bus, phydev, ops);
1410		sfp_bus_put(bus);
1411	}
1412	return ret;
1413}
1414EXPORT_SYMBOL(phy_sfp_probe);
1415
1416/**
1417 * phy_attach_direct - attach a network device to a given PHY device pointer
1418 * @dev: network device to attach
1419 * @phydev: Pointer to phy_device to attach
1420 * @flags: PHY device's dev_flags
1421 * @interface: PHY device's interface
1422 *
1423 * Description: Called by drivers to attach to a particular PHY
1424 *     device. The phy_device is found, and properly hooked up
1425 *     to the phy_driver.  If no driver is attached, then a
1426 *     generic driver is used.  The phy_device is given a ptr to
1427 *     the attaching device, and given a callback for link status
1428 *     change.  The phy_device is returned to the attaching driver.
1429 *     This function takes a reference on the phy device.
1430 */
1431int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
1432		      u32 flags, phy_interface_t interface)
1433{
1434	struct mii_bus *bus = phydev->mdio.bus;
1435	struct device *d = &phydev->mdio.dev;
1436	struct module *ndev_owner = NULL;
1437	bool using_genphy = false;
1438	int err;
1439
1440	/* For Ethernet device drivers that register their own MDIO bus, we
1441	 * will have bus->owner match ndev_mod, so we do not want to increment
1442	 * our own module->refcnt here, otherwise we would not be able to
1443	 * unload later on.
1444	 */
1445	if (dev)
1446		ndev_owner = dev->dev.parent->driver->owner;
1447	if (ndev_owner != bus->owner && !try_module_get(bus->owner)) {
1448		phydev_err(phydev, "failed to get the bus module\n");
1449		return -EIO;
1450	}
1451
1452	get_device(d);
1453
1454	/* Assume that if there is no driver, that it doesn't
1455	 * exist, and we should use the genphy driver.
1456	 */
1457	if (!d->driver) {
1458		if (phydev->is_c45)
1459			d->driver = &genphy_c45_driver.mdiodrv.driver;
1460		else
1461			d->driver = &genphy_driver.mdiodrv.driver;
1462
1463		using_genphy = true;
1464	}
1465
1466	if (!try_module_get(d->driver->owner)) {
1467		phydev_err(phydev, "failed to get the device driver module\n");
1468		err = -EIO;
1469		goto error_put_device;
1470	}
1471
1472	if (using_genphy) {
1473		err = d->driver->probe(d);
1474		if (err >= 0)
1475			err = device_bind_driver(d);
1476
1477		if (err)
1478			goto error_module_put;
1479	}
1480
1481	if (phydev->attached_dev) {
1482		dev_err(&dev->dev, "PHY already attached\n");
1483		err = -EBUSY;
1484		goto error;
1485	}
1486
1487	phydev->phy_link_change = phy_link_change;
1488	if (dev) {
1489		phydev->attached_dev = dev;
1490		dev->phydev = phydev;
1491
1492		if (phydev->sfp_bus_attached)
1493			dev->sfp_bus = phydev->sfp_bus;
1494	}
1495
1496	/* Some Ethernet drivers try to connect to a PHY device before
1497	 * calling register_netdevice() -> netdev_register_kobject() and
1498	 * does the dev->dev.kobj initialization. Here we only check for
1499	 * success which indicates that the network device kobject is
1500	 * ready. Once we do that we still need to keep track of whether
1501	 * links were successfully set up or not for phy_detach() to
1502	 * remove them accordingly.
1503	 */
1504	phydev->sysfs_links = false;
1505
1506	phy_sysfs_create_links(phydev);
1507
1508	if (!phydev->attached_dev) {
1509		err = sysfs_create_file(&phydev->mdio.dev.kobj,
1510					&dev_attr_phy_standalone.attr);
1511		if (err)
1512			phydev_err(phydev, "error creating 'phy_standalone' sysfs entry\n");
1513	}
1514
1515	phydev->dev_flags |= flags;
1516
1517	phydev->interface = interface;
1518
1519	phydev->state = PHY_READY;
1520
1521	phydev->interrupts = PHY_INTERRUPT_DISABLED;
1522
1523	/* PHYs can request to use poll mode even though they have an
1524	 * associated interrupt line. This could be the case if they
1525	 * detect a broken interrupt handling.
1526	 */
1527	if (phydev->dev_flags & PHY_F_NO_IRQ)
1528		phydev->irq = PHY_POLL;
1529
1530	/* Port is set to PORT_TP by default and the actual PHY driver will set
1531	 * it to different value depending on the PHY configuration. If we have
1532	 * the generic PHY driver we can't figure it out, thus set the old
1533	 * legacy PORT_MII value.
1534	 */
1535	if (using_genphy)
1536		phydev->port = PORT_MII;
1537
1538	/* Initial carrier state is off as the phy is about to be
1539	 * (re)initialized.
1540	 */
1541	if (dev)
1542		netif_carrier_off(phydev->attached_dev);
1543
1544	/* Do initial configuration here, now that
1545	 * we have certain key parameters
1546	 * (dev_flags and interface)
1547	 */
1548	err = phy_init_hw(phydev);
1549	if (err)
1550		goto error;
1551
1552	phy_resume(phydev);
1553	if (!phydev->is_on_sfp_module)
1554		phy_led_triggers_register(phydev);
1555
1556	/**
1557	 * If the external phy used by current mac interface is managed by
1558	 * another mac interface, so we should create a device link between
1559	 * phy dev and mac dev.
1560	 */
1561	if (dev && phydev->mdio.bus->parent && dev->dev.parent != phydev->mdio.bus->parent)
1562		phydev->devlink = device_link_add(dev->dev.parent, &phydev->mdio.dev,
1563						  DL_FLAG_PM_RUNTIME | DL_FLAG_STATELESS);
1564
1565	return err;
1566
1567error:
1568	/* phy_detach() does all of the cleanup below */
1569	phy_detach(phydev);
1570	return err;
1571
1572error_module_put:
1573	module_put(d->driver->owner);
1574	d->driver = NULL;
1575error_put_device:
1576	put_device(d);
1577	if (ndev_owner != bus->owner)
1578		module_put(bus->owner);
1579	return err;
1580}
1581EXPORT_SYMBOL(phy_attach_direct);
1582
1583/**
1584 * phy_attach - attach a network device to a particular PHY device
1585 * @dev: network device to attach
1586 * @bus_id: Bus ID of PHY device to attach
 
1587 * @interface: PHY device's interface
1588 *
1589 * Description: Same as phy_attach_direct() except that a PHY bus_id
1590 *     string is passed instead of a pointer to a struct phy_device.
1591 */
1592struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
1593			      phy_interface_t interface)
1594{
1595	struct bus_type *bus = &mdio_bus_type;
1596	struct phy_device *phydev;
1597	struct device *d;
1598	int rc;
1599
1600	if (!dev)
1601		return ERR_PTR(-EINVAL);
1602
1603	/* Search the list of PHY devices on the mdio bus for the
1604	 * PHY with the requested name
1605	 */
1606	d = bus_find_device_by_name(bus, NULL, bus_id);
1607	if (!d) {
1608		pr_err("PHY %s not found\n", bus_id);
1609		return ERR_PTR(-ENODEV);
1610	}
1611	phydev = to_phy_device(d);
1612
1613	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
1614	put_device(d);
1615	if (rc)
1616		return ERR_PTR(rc);
1617
1618	return phydev;
1619}
1620EXPORT_SYMBOL(phy_attach);
1621
1622static bool phy_driver_is_genphy_kind(struct phy_device *phydev,
1623				      struct device_driver *driver)
1624{
1625	struct device *d = &phydev->mdio.dev;
1626	bool ret = false;
1627
1628	if (!phydev->drv)
1629		return ret;
1630
1631	get_device(d);
1632	ret = d->driver == driver;
1633	put_device(d);
1634
1635	return ret;
1636}
1637
1638bool phy_driver_is_genphy(struct phy_device *phydev)
1639{
1640	return phy_driver_is_genphy_kind(phydev,
1641					 &genphy_driver.mdiodrv.driver);
1642}
1643EXPORT_SYMBOL_GPL(phy_driver_is_genphy);
1644
1645bool phy_driver_is_genphy_10g(struct phy_device *phydev)
1646{
1647	return phy_driver_is_genphy_kind(phydev,
1648					 &genphy_c45_driver.mdiodrv.driver);
1649}
1650EXPORT_SYMBOL_GPL(phy_driver_is_genphy_10g);
1651
1652/**
1653 * phy_package_join - join a common PHY group
1654 * @phydev: target phy_device struct
1655 * @base_addr: cookie and base PHY address of PHY package for offset
1656 *   calculation of global register access
1657 * @priv_size: if non-zero allocate this amount of bytes for private data
1658 *
1659 * This joins a PHY group and provides a shared storage for all phydevs in
1660 * this group. This is intended to be used for packages which contain
1661 * more than one PHY, for example a quad PHY transceiver.
1662 *
1663 * The base_addr parameter serves as cookie which has to have the same values
1664 * for all members of one group and as the base PHY address of the PHY package
1665 * for offset calculation to access generic registers of a PHY package.
1666 * Usually, one of the PHY addresses of the different PHYs in the package
1667 * provides access to these global registers.
1668 * The address which is given here, will be used in the phy_package_read()
1669 * and phy_package_write() convenience functions as base and added to the
1670 * passed offset in those functions.
1671 *
1672 * This will set the shared pointer of the phydev to the shared storage.
1673 * If this is the first call for a this cookie the shared storage will be
1674 * allocated. If priv_size is non-zero, the given amount of bytes are
1675 * allocated for the priv member.
1676 *
1677 * Returns < 1 on error, 0 on success. Esp. calling phy_package_join()
1678 * with the same cookie but a different priv_size is an error.
1679 */
1680int phy_package_join(struct phy_device *phydev, int base_addr, size_t priv_size)
1681{
1682	struct mii_bus *bus = phydev->mdio.bus;
1683	struct phy_package_shared *shared;
1684	int ret;
1685
1686	if (base_addr < 0 || base_addr >= PHY_MAX_ADDR)
1687		return -EINVAL;
1688
1689	mutex_lock(&bus->shared_lock);
1690	shared = bus->shared[base_addr];
1691	if (!shared) {
1692		ret = -ENOMEM;
1693		shared = kzalloc(sizeof(*shared), GFP_KERNEL);
1694		if (!shared)
1695			goto err_unlock;
1696		if (priv_size) {
1697			shared->priv = kzalloc(priv_size, GFP_KERNEL);
1698			if (!shared->priv)
1699				goto err_free;
1700			shared->priv_size = priv_size;
1701		}
1702		shared->base_addr = base_addr;
1703		refcount_set(&shared->refcnt, 1);
1704		bus->shared[base_addr] = shared;
1705	} else {
1706		ret = -EINVAL;
1707		if (priv_size && priv_size != shared->priv_size)
1708			goto err_unlock;
1709		refcount_inc(&shared->refcnt);
1710	}
1711	mutex_unlock(&bus->shared_lock);
1712
1713	phydev->shared = shared;
1714
1715	return 0;
1716
1717err_free:
1718	kfree(shared);
1719err_unlock:
1720	mutex_unlock(&bus->shared_lock);
1721	return ret;
1722}
1723EXPORT_SYMBOL_GPL(phy_package_join);
1724
1725/**
1726 * phy_package_leave - leave a common PHY group
1727 * @phydev: target phy_device struct
1728 *
1729 * This leaves a PHY group created by phy_package_join(). If this phydev
1730 * was the last user of the shared data between the group, this data is
1731 * freed. Resets the phydev->shared pointer to NULL.
1732 */
1733void phy_package_leave(struct phy_device *phydev)
1734{
1735	struct phy_package_shared *shared = phydev->shared;
1736	struct mii_bus *bus = phydev->mdio.bus;
1737
1738	if (!shared)
1739		return;
1740
1741	if (refcount_dec_and_mutex_lock(&shared->refcnt, &bus->shared_lock)) {
1742		bus->shared[shared->base_addr] = NULL;
1743		mutex_unlock(&bus->shared_lock);
1744		kfree(shared->priv);
1745		kfree(shared);
1746	}
1747
1748	phydev->shared = NULL;
1749}
1750EXPORT_SYMBOL_GPL(phy_package_leave);
1751
1752static void devm_phy_package_leave(struct device *dev, void *res)
1753{
1754	phy_package_leave(*(struct phy_device **)res);
1755}
1756
1757/**
1758 * devm_phy_package_join - resource managed phy_package_join()
1759 * @dev: device that is registering this PHY package
1760 * @phydev: target phy_device struct
1761 * @base_addr: cookie and base PHY address of PHY package for offset
1762 *   calculation of global register access
1763 * @priv_size: if non-zero allocate this amount of bytes for private data
1764 *
1765 * Managed phy_package_join(). Shared storage fetched by this function,
1766 * phy_package_leave() is automatically called on driver detach. See
1767 * phy_package_join() for more information.
1768 */
1769int devm_phy_package_join(struct device *dev, struct phy_device *phydev,
1770			  int base_addr, size_t priv_size)
1771{
1772	struct phy_device **ptr;
1773	int ret;
1774
1775	ptr = devres_alloc(devm_phy_package_leave, sizeof(*ptr),
1776			   GFP_KERNEL);
1777	if (!ptr)
1778		return -ENOMEM;
1779
1780	ret = phy_package_join(phydev, base_addr, priv_size);
1781
1782	if (!ret) {
1783		*ptr = phydev;
1784		devres_add(dev, ptr);
1785	} else {
1786		devres_free(ptr);
1787	}
1788
1789	return ret;
1790}
1791EXPORT_SYMBOL_GPL(devm_phy_package_join);
1792
1793/**
1794 * phy_detach - detach a PHY device from its network device
1795 * @phydev: target phy_device struct
1796 *
1797 * This detaches the phy device from its network device and the phy
1798 * driver, and drops the reference count taken in phy_attach_direct().
1799 */
1800void phy_detach(struct phy_device *phydev)
1801{
1802	struct net_device *dev = phydev->attached_dev;
1803	struct module *ndev_owner = NULL;
1804	struct mii_bus *bus;
1805
1806	if (phydev->devlink)
1807		device_link_del(phydev->devlink);
1808
1809	if (phydev->sysfs_links) {
1810		if (dev)
1811			sysfs_remove_link(&dev->dev.kobj, "phydev");
1812		sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev");
1813	}
1814
1815	if (!phydev->attached_dev)
1816		sysfs_remove_file(&phydev->mdio.dev.kobj,
1817				  &dev_attr_phy_standalone.attr);
1818
1819	phy_suspend(phydev);
1820	if (dev) {
1821		phydev->attached_dev->phydev = NULL;
1822		phydev->attached_dev = NULL;
1823	}
1824	phydev->phylink = NULL;
1825
1826	if (!phydev->is_on_sfp_module)
1827		phy_led_triggers_unregister(phydev);
1828
1829	if (phydev->mdio.dev.driver)
1830		module_put(phydev->mdio.dev.driver->owner);
1831
1832	/* If the device had no specific driver before (i.e. - it
1833	 * was using the generic driver), we unbind the device
1834	 * from the generic driver so that there's a chance a
1835	 * real driver could be loaded
1836	 */
1837	if (phy_driver_is_genphy(phydev) ||
1838	    phy_driver_is_genphy_10g(phydev))
1839		device_release_driver(&phydev->mdio.dev);
1840
1841	/* Assert the reset signal */
1842	phy_device_reset(phydev, 1);
1843
1844	/*
1845	 * The phydev might go away on the put_device() below, so avoid
1846	 * a use-after-free bug by reading the underlying bus first.
1847	 */
1848	bus = phydev->mdio.bus;
1849
1850	put_device(&phydev->mdio.dev);
1851	if (dev)
1852		ndev_owner = dev->dev.parent->driver->owner;
1853	if (ndev_owner != bus->owner)
1854		module_put(bus->owner);
1855}
1856EXPORT_SYMBOL(phy_detach);
1857
1858int phy_suspend(struct phy_device *phydev)
1859{
1860	struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
1861	struct net_device *netdev = phydev->attached_dev;
1862	struct phy_driver *phydrv = phydev->drv;
1863	int ret;
1864
1865	if (phydev->suspended)
1866		return 0;
1867
1868	phy_ethtool_get_wol(phydev, &wol);
1869	phydev->wol_enabled = wol.wolopts || (netdev && netdev->wol_enabled);
1870	/* If the device has WOL enabled, we cannot suspend the PHY */
1871	if (phydev->wol_enabled && !(phydrv->flags & PHY_ALWAYS_CALL_SUSPEND))
1872		return -EBUSY;
1873
1874	if (!phydrv || !phydrv->suspend)
1875		return 0;
1876
1877	ret = phydrv->suspend(phydev);
1878	if (!ret)
1879		phydev->suspended = true;
1880
1881	return ret;
1882}
1883EXPORT_SYMBOL(phy_suspend);
1884
1885int __phy_resume(struct phy_device *phydev)
1886{
1887	struct phy_driver *phydrv = phydev->drv;
1888	int ret;
1889
1890	lockdep_assert_held(&phydev->lock);
1891
1892	if (!phydrv || !phydrv->resume)
1893		return 0;
1894
1895	ret = phydrv->resume(phydev);
1896	if (!ret)
1897		phydev->suspended = false;
1898
1899	return ret;
1900}
1901EXPORT_SYMBOL(__phy_resume);
1902
1903int phy_resume(struct phy_device *phydev)
1904{
1905	int ret;
1906
1907	mutex_lock(&phydev->lock);
1908	ret = __phy_resume(phydev);
1909	mutex_unlock(&phydev->lock);
1910
1911	return ret;
1912}
1913EXPORT_SYMBOL(phy_resume);
1914
1915int phy_loopback(struct phy_device *phydev, bool enable)
1916{
1917	int ret = 0;
1918
1919	if (!phydev->drv)
1920		return -EIO;
1921
1922	mutex_lock(&phydev->lock);
1923
1924	if (enable && phydev->loopback_enabled) {
1925		ret = -EBUSY;
1926		goto out;
1927	}
1928
1929	if (!enable && !phydev->loopback_enabled) {
1930		ret = -EINVAL;
1931		goto out;
1932	}
1933
1934	if (phydev->drv->set_loopback)
1935		ret = phydev->drv->set_loopback(phydev, enable);
1936	else
1937		ret = genphy_loopback(phydev, enable);
1938
1939	if (ret)
1940		goto out;
1941
1942	phydev->loopback_enabled = enable;
1943
1944out:
1945	mutex_unlock(&phydev->lock);
1946	return ret;
1947}
1948EXPORT_SYMBOL(phy_loopback);
1949
1950/**
1951 * phy_reset_after_clk_enable - perform a PHY reset if needed
1952 * @phydev: target phy_device struct
1953 *
1954 * Description: Some PHYs are known to need a reset after their refclk was
1955 *   enabled. This function evaluates the flags and perform the reset if it's
1956 *   needed. Returns < 0 on error, 0 if the phy wasn't reset and 1 if the phy
1957 *   was reset.
1958 */
1959int phy_reset_after_clk_enable(struct phy_device *phydev)
1960{
1961	if (!phydev || !phydev->drv)
1962		return -ENODEV;
1963
1964	if (phydev->drv->flags & PHY_RST_AFTER_CLK_EN) {
1965		phy_device_reset(phydev, 1);
1966		phy_device_reset(phydev, 0);
1967		return 1;
1968	}
1969
1970	return 0;
1971}
1972EXPORT_SYMBOL(phy_reset_after_clk_enable);
1973
1974/* Generic PHY support and helper functions */
1975
1976/**
1977 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
1978 * @phydev: target phy_device struct
1979 *
1980 * Description: Writes MII_ADVERTISE with the appropriate values,
1981 *   after sanitizing the values to make sure we only advertise
1982 *   what is supported.  Returns < 0 on error, 0 if the PHY's advertisement
1983 *   hasn't changed, and > 0 if it has changed.
1984 */
1985static int genphy_config_advert(struct phy_device *phydev)
1986{
1987	int err, bmsr, changed = 0;
1988	u32 adv;
1989
1990	/* Only allow advertising what this PHY supports */
1991	linkmode_and(phydev->advertising, phydev->advertising,
1992		     phydev->supported);
1993
1994	adv = linkmode_adv_to_mii_adv_t(phydev->advertising);
1995
1996	/* Setup standard advertisement */
1997	err = phy_modify_changed(phydev, MII_ADVERTISE,
1998				 ADVERTISE_ALL | ADVERTISE_100BASE4 |
1999				 ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM,
2000				 adv);
2001	if (err < 0)
2002		return err;
2003	if (err > 0)
2004		changed = 1;
2005
2006	bmsr = phy_read(phydev, MII_BMSR);
2007	if (bmsr < 0)
2008		return bmsr;
2009
2010	/* Per 802.3-2008, Section 22.2.4.2.16 Extended status all
2011	 * 1000Mbits/sec capable PHYs shall have the BMSR_ESTATEN bit set to a
2012	 * logical 1.
2013	 */
2014	if (!(bmsr & BMSR_ESTATEN))
2015		return changed;
2016
2017	adv = linkmode_adv_to_mii_ctrl1000_t(phydev->advertising);
2018
2019	err = phy_modify_changed(phydev, MII_CTRL1000,
2020				 ADVERTISE_1000FULL | ADVERTISE_1000HALF,
2021				 adv);
2022	if (err < 0)
2023		return err;
2024	if (err > 0)
2025		changed = 1;
2026
2027	return changed;
2028}
 
 
 
 
 
 
 
 
 
 
 
 
2029
2030/**
2031 * genphy_c37_config_advert - sanitize and advertise auto-negotiation parameters
2032 * @phydev: target phy_device struct
2033 *
2034 * Description: Writes MII_ADVERTISE with the appropriate values,
2035 *   after sanitizing the values to make sure we only advertise
2036 *   what is supported.  Returns < 0 on error, 0 if the PHY's advertisement
2037 *   hasn't changed, and > 0 if it has changed. This function is intended
2038 *   for Clause 37 1000Base-X mode.
2039 */
2040static int genphy_c37_config_advert(struct phy_device *phydev)
2041{
2042	u16 adv = 0;
2043
2044	/* Only allow advertising what this PHY supports */
2045	linkmode_and(phydev->advertising, phydev->advertising,
2046		     phydev->supported);
2047
2048	if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
2049			      phydev->advertising))
2050		adv |= ADVERTISE_1000XFULL;
2051	if (linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2052			      phydev->advertising))
2053		adv |= ADVERTISE_1000XPAUSE;
2054	if (linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
2055			      phydev->advertising))
2056		adv |= ADVERTISE_1000XPSE_ASYM;
2057
2058	return phy_modify_changed(phydev, MII_ADVERTISE,
2059				  ADVERTISE_1000XFULL | ADVERTISE_1000XPAUSE |
2060				  ADVERTISE_1000XHALF | ADVERTISE_1000XPSE_ASYM,
2061				  adv);
2062}
2063
2064/**
2065 * genphy_config_eee_advert - disable unwanted eee mode advertisement
2066 * @phydev: target phy_device struct
2067 *
2068 * Description: Writes MDIO_AN_EEE_ADV after disabling unsupported energy
2069 *   efficent ethernet modes. Returns 0 if the PHY's advertisement hasn't
2070 *   changed, and 1 if it has changed.
2071 */
2072int genphy_config_eee_advert(struct phy_device *phydev)
2073{
2074	int err;
 
 
2075
2076	/* Nothing to disable */
2077	if (!phydev->eee_broken_modes)
2078		return 0;
2079
2080	err = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV,
2081				     phydev->eee_broken_modes, 0);
2082	/* If the call failed, we assume that EEE is not supported */
2083	return err < 0 ? 0 : err;
 
 
 
2084}
2085EXPORT_SYMBOL(genphy_config_eee_advert);
2086
2087/**
2088 * genphy_setup_forced - configures/forces speed/duplex from @phydev
2089 * @phydev: target phy_device struct
2090 *
2091 * Description: Configures MII_BMCR to force speed/duplex
2092 *   to the values in phydev. Assumes that the values are valid.
2093 *   Please see phy_sanitize_settings().
2094 */
2095int genphy_setup_forced(struct phy_device *phydev)
2096{
2097	u16 ctl;
2098
2099	phydev->pause = 0;
2100	phydev->asym_pause = 0;
2101
2102	ctl = mii_bmcr_encode_fixed(phydev->speed, phydev->duplex);
2103
2104	return phy_modify(phydev, MII_BMCR,
2105			  ~(BMCR_LOOPBACK | BMCR_ISOLATE | BMCR_PDOWN), ctl);
2106}
2107EXPORT_SYMBOL(genphy_setup_forced);
2108
2109static int genphy_setup_master_slave(struct phy_device *phydev)
2110{
2111	u16 ctl = 0;
 
2112
2113	if (!phydev->is_gigabit_capable)
2114		return 0;
2115
2116	switch (phydev->master_slave_set) {
2117	case MASTER_SLAVE_CFG_MASTER_PREFERRED:
2118		ctl |= CTL1000_PREFER_MASTER;
2119		break;
2120	case MASTER_SLAVE_CFG_SLAVE_PREFERRED:
2121		break;
2122	case MASTER_SLAVE_CFG_MASTER_FORCE:
2123		ctl |= CTL1000_AS_MASTER;
2124		fallthrough;
2125	case MASTER_SLAVE_CFG_SLAVE_FORCE:
2126		ctl |= CTL1000_ENABLE_MASTER;
2127		break;
2128	case MASTER_SLAVE_CFG_UNKNOWN:
2129	case MASTER_SLAVE_CFG_UNSUPPORTED:
2130		return 0;
2131	default:
2132		phydev_warn(phydev, "Unsupported Master/Slave mode\n");
2133		return -EOPNOTSUPP;
2134	}
2135
2136	return phy_modify_changed(phydev, MII_CTRL1000,
2137				  (CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER |
2138				   CTL1000_PREFER_MASTER), ctl);
2139}
2140
2141int genphy_read_master_slave(struct phy_device *phydev)
2142{
2143	int cfg, state;
2144	int val;
2145
2146	phydev->master_slave_get = MASTER_SLAVE_CFG_UNKNOWN;
2147	phydev->master_slave_state = MASTER_SLAVE_STATE_UNKNOWN;
2148
2149	val = phy_read(phydev, MII_CTRL1000);
2150	if (val < 0)
2151		return val;
2152
2153	if (val & CTL1000_ENABLE_MASTER) {
2154		if (val & CTL1000_AS_MASTER)
2155			cfg = MASTER_SLAVE_CFG_MASTER_FORCE;
2156		else
2157			cfg = MASTER_SLAVE_CFG_SLAVE_FORCE;
2158	} else {
2159		if (val & CTL1000_PREFER_MASTER)
2160			cfg = MASTER_SLAVE_CFG_MASTER_PREFERRED;
2161		else
2162			cfg = MASTER_SLAVE_CFG_SLAVE_PREFERRED;
2163	}
2164
2165	val = phy_read(phydev, MII_STAT1000);
2166	if (val < 0)
2167		return val;
2168
2169	if (val & LPA_1000MSFAIL) {
2170		state = MASTER_SLAVE_STATE_ERR;
2171	} else if (phydev->link) {
2172		/* this bits are valid only for active link */
2173		if (val & LPA_1000MSRES)
2174			state = MASTER_SLAVE_STATE_MASTER;
2175		else
2176			state = MASTER_SLAVE_STATE_SLAVE;
2177	} else {
2178		state = MASTER_SLAVE_STATE_UNKNOWN;
2179	}
2180
2181	phydev->master_slave_get = cfg;
2182	phydev->master_slave_state = state;
2183
2184	return 0;
2185}
2186EXPORT_SYMBOL(genphy_read_master_slave);
2187
2188/**
2189 * genphy_restart_aneg - Enable and Restart Autonegotiation
2190 * @phydev: target phy_device struct
2191 */
2192int genphy_restart_aneg(struct phy_device *phydev)
2193{
2194	/* Don't isolate the PHY if we're negotiating */
2195	return phy_modify(phydev, MII_BMCR, BMCR_ISOLATE,
2196			  BMCR_ANENABLE | BMCR_ANRESTART);
2197}
2198EXPORT_SYMBOL(genphy_restart_aneg);
2199
2200/**
2201 * genphy_check_and_restart_aneg - Enable and restart auto-negotiation
2202 * @phydev: target phy_device struct
2203 * @restart: whether aneg restart is requested
2204 *
2205 * Check, and restart auto-negotiation if needed.
2206 */
2207int genphy_check_and_restart_aneg(struct phy_device *phydev, bool restart)
2208{
2209	int ret;
2210
2211	if (!restart) {
2212		/* Advertisement hasn't changed, but maybe aneg was never on to
2213		 * begin with?  Or maybe phy was isolated?
2214		 */
2215		ret = phy_read(phydev, MII_BMCR);
2216		if (ret < 0)
2217			return ret;
2218
2219		if (!(ret & BMCR_ANENABLE) || (ret & BMCR_ISOLATE))
2220			restart = true;
2221	}
2222
2223	if (restart)
2224		return genphy_restart_aneg(phydev);
2225
2226	return 0;
 
 
2227}
2228EXPORT_SYMBOL(genphy_check_and_restart_aneg);
 
2229
2230/**
2231 * __genphy_config_aneg - restart auto-negotiation or write BMCR
2232 * @phydev: target phy_device struct
2233 * @changed: whether autoneg is requested
2234 *
2235 * Description: If auto-negotiation is enabled, we configure the
2236 *   advertising, and then restart auto-negotiation.  If it is not
2237 *   enabled, then we write the BMCR.
2238 */
2239int __genphy_config_aneg(struct phy_device *phydev, bool changed)
2240{
2241	int err;
2242
2243	err = genphy_c45_an_config_eee_aneg(phydev);
2244	if (err < 0)
2245		return err;
2246	else if (err)
2247		changed = true;
2248
2249	err = genphy_setup_master_slave(phydev);
2250	if (err < 0)
2251		return err;
2252	else if (err)
2253		changed = true;
2254
2255	if (AUTONEG_ENABLE != phydev->autoneg)
2256		return genphy_setup_forced(phydev);
2257
2258	err = genphy_config_advert(phydev);
2259	if (err < 0) /* error */
2260		return err;
2261	else if (err)
2262		changed = true;
2263
2264	return genphy_check_and_restart_aneg(phydev, changed);
2265}
2266EXPORT_SYMBOL(__genphy_config_aneg);
2267
2268/**
2269 * genphy_c37_config_aneg - restart auto-negotiation or write BMCR
2270 * @phydev: target phy_device struct
2271 *
2272 * Description: If auto-negotiation is enabled, we configure the
2273 *   advertising, and then restart auto-negotiation.  If it is not
2274 *   enabled, then we write the BMCR. This function is intended
2275 *   for use with Clause 37 1000Base-X mode.
2276 */
2277int genphy_c37_config_aneg(struct phy_device *phydev)
2278{
2279	int err, changed;
2280
2281	if (phydev->autoneg != AUTONEG_ENABLE)
2282		return genphy_setup_forced(phydev);
2283
2284	err = phy_modify(phydev, MII_BMCR, BMCR_SPEED1000 | BMCR_SPEED100,
2285			 BMCR_SPEED1000);
2286	if (err)
2287		return err;
2288
2289	changed = genphy_c37_config_advert(phydev);
2290	if (changed < 0) /* error */
2291		return changed;
2292
2293	if (!changed) {
2294		/* Advertisement hasn't changed, but maybe aneg was never on to
2295		 * begin with?  Or maybe phy was isolated?
2296		 */
2297		int ctl = phy_read(phydev, MII_BMCR);
2298
2299		if (ctl < 0)
2300			return ctl;
2301
2302		if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
2303			changed = 1; /* do restart aneg */
2304	}
2305
2306	/* Only restart aneg if we are advertising something different
2307	 * than we were before.
2308	 */
2309	if (changed > 0)
2310		return genphy_restart_aneg(phydev);
2311
2312	return 0;
2313}
2314EXPORT_SYMBOL(genphy_c37_config_aneg);
2315
2316/**
2317 * genphy_aneg_done - return auto-negotiation status
2318 * @phydev: target phy_device struct
2319 *
2320 * Description: Reads the status register and returns 0 either if
2321 *   auto-negotiation is incomplete, or if there was an error.
2322 *   Returns BMSR_ANEGCOMPLETE if auto-negotiation is done.
2323 */
2324int genphy_aneg_done(struct phy_device *phydev)
2325{
2326	int retval = phy_read(phydev, MII_BMSR);
2327
2328	return (retval < 0) ? retval : (retval & BMSR_ANEGCOMPLETE);
2329}
2330EXPORT_SYMBOL(genphy_aneg_done);
2331
2332/**
2333 * genphy_update_link - update link status in @phydev
2334 * @phydev: target phy_device struct
2335 *
2336 * Description: Update the value in phydev->link to reflect the
2337 *   current link value.  In order to do this, we need to read
2338 *   the status register twice, keeping the second value.
2339 */
2340int genphy_update_link(struct phy_device *phydev)
2341{
2342	int status = 0, bmcr;
2343
2344	bmcr = phy_read(phydev, MII_BMCR);
2345	if (bmcr < 0)
2346		return bmcr;
2347
2348	/* Autoneg is being started, therefore disregard BMSR value and
2349	 * report link as down.
2350	 */
2351	if (bmcr & BMCR_ANRESTART)
2352		goto done;
2353
2354	/* The link state is latched low so that momentary link
2355	 * drops can be detected. Do not double-read the status
2356	 * in polling mode to detect such short link drops except
2357	 * the link was already down.
2358	 */
2359	if (!phy_polling_mode(phydev) || !phydev->link) {
2360		status = phy_read(phydev, MII_BMSR);
2361		if (status < 0)
2362			return status;
2363		else if (status & BMSR_LSTATUS)
2364			goto done;
2365	}
2366
2367	/* Read link and autonegotiation status */
2368	status = phy_read(phydev, MII_BMSR);
 
2369	if (status < 0)
2370		return status;
2371done:
2372	phydev->link = status & BMSR_LSTATUS ? 1 : 0;
2373	phydev->autoneg_complete = status & BMSR_ANEGCOMPLETE ? 1 : 0;
2374
2375	/* Consider the case that autoneg was started and "aneg complete"
2376	 * bit has been reset, but "link up" bit not yet.
2377	 */
2378	if (phydev->autoneg == AUTONEG_ENABLE && !phydev->autoneg_complete)
2379		phydev->link = 0;
2380
2381	return 0;
2382}
2383EXPORT_SYMBOL(genphy_update_link);
2384
2385int genphy_read_lpa(struct phy_device *phydev)
2386{
2387	int lpa, lpagb;
2388
2389	if (phydev->autoneg == AUTONEG_ENABLE) {
2390		if (!phydev->autoneg_complete) {
2391			mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising,
2392							0);
2393			mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, 0);
2394			return 0;
2395		}
2396
2397		if (phydev->is_gigabit_capable) {
2398			lpagb = phy_read(phydev, MII_STAT1000);
2399			if (lpagb < 0)
2400				return lpagb;
2401
2402			if (lpagb & LPA_1000MSFAIL) {
2403				int adv = phy_read(phydev, MII_CTRL1000);
2404
2405				if (adv < 0)
2406					return adv;
2407
2408				if (adv & CTL1000_ENABLE_MASTER)
2409					phydev_err(phydev, "Master/Slave resolution failed, maybe conflicting manual settings?\n");
2410				else
2411					phydev_err(phydev, "Master/Slave resolution failed\n");
2412				return -ENOLINK;
2413			}
2414
2415			mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising,
2416							lpagb);
2417		}
2418
2419		lpa = phy_read(phydev, MII_LPA);
2420		if (lpa < 0)
2421			return lpa;
2422
2423		mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
2424	} else {
2425		linkmode_zero(phydev->lp_advertising);
2426	}
2427
2428	return 0;
2429}
2430EXPORT_SYMBOL(genphy_read_lpa);
2431
2432/**
2433 * genphy_read_status_fixed - read the link parameters for !aneg mode
2434 * @phydev: target phy_device struct
2435 *
2436 * Read the current duplex and speed state for a PHY operating with
2437 * autonegotiation disabled.
2438 */
2439int genphy_read_status_fixed(struct phy_device *phydev)
2440{
2441	int bmcr = phy_read(phydev, MII_BMCR);
2442
2443	if (bmcr < 0)
2444		return bmcr;
2445
2446	if (bmcr & BMCR_FULLDPLX)
2447		phydev->duplex = DUPLEX_FULL;
2448	else
2449		phydev->duplex = DUPLEX_HALF;
2450
2451	if (bmcr & BMCR_SPEED1000)
2452		phydev->speed = SPEED_1000;
2453	else if (bmcr & BMCR_SPEED100)
2454		phydev->speed = SPEED_100;
2455	else
2456		phydev->speed = SPEED_10;
2457
2458	return 0;
2459}
2460EXPORT_SYMBOL(genphy_read_status_fixed);
2461
2462/**
2463 * genphy_read_status - check the link status and update current link state
2464 * @phydev: target phy_device struct
2465 *
2466 * Description: Check the link, then figure out the current state
2467 *   by comparing what we advertise with what the link partner
2468 *   advertises.  Start by checking the gigabit possibilities,
2469 *   then move on to 10/100.
2470 */
2471int genphy_read_status(struct phy_device *phydev)
2472{
2473	int err, old_link = phydev->link;
 
 
 
2474
2475	/* Update the link, but return if there was an error */
 
2476	err = genphy_update_link(phydev);
2477	if (err)
2478		return err;
2479
2480	/* why bother the PHY if nothing can have changed */
2481	if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link)
2482		return 0;
 
2483
2484	phydev->master_slave_get = MASTER_SLAVE_CFG_UNSUPPORTED;
2485	phydev->master_slave_state = MASTER_SLAVE_STATE_UNSUPPORTED;
2486	phydev->speed = SPEED_UNKNOWN;
2487	phydev->duplex = DUPLEX_UNKNOWN;
2488	phydev->pause = 0;
2489	phydev->asym_pause = 0;
2490
2491	if (phydev->is_gigabit_capable) {
2492		err = genphy_read_master_slave(phydev);
2493		if (err < 0)
2494			return err;
2495	}
2496
2497	err = genphy_read_lpa(phydev);
2498	if (err < 0)
2499		return err;
2500
2501	if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) {
2502		phy_resolve_aneg_linkmode(phydev);
2503	} else if (phydev->autoneg == AUTONEG_DISABLE) {
2504		err = genphy_read_status_fixed(phydev);
2505		if (err < 0)
2506			return err;
2507	}
2508
2509	return 0;
2510}
2511EXPORT_SYMBOL(genphy_read_status);
2512
2513/**
2514 * genphy_c37_read_status - check the link status and update current link state
2515 * @phydev: target phy_device struct
2516 *
2517 * Description: Check the link, then figure out the current state
2518 *   by comparing what we advertise with what the link partner
2519 *   advertises. This function is for Clause 37 1000Base-X mode.
2520 */
2521int genphy_c37_read_status(struct phy_device *phydev)
2522{
2523	int lpa, err, old_link = phydev->link;
2524
2525	/* Update the link, but return if there was an error */
2526	err = genphy_update_link(phydev);
2527	if (err)
2528		return err;
2529
2530	/* why bother the PHY if nothing can have changed */
2531	if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link)
2532		return 0;
2533
2534	phydev->duplex = DUPLEX_UNKNOWN;
2535	phydev->pause = 0;
2536	phydev->asym_pause = 0;
2537
2538	if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) {
2539		lpa = phy_read(phydev, MII_LPA);
2540		if (lpa < 0)
2541			return lpa;
2542
2543		linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
2544				 phydev->lp_advertising, lpa & LPA_LPACK);
2545		linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
2546				 phydev->lp_advertising, lpa & LPA_1000XFULL);
2547		linkmode_mod_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2548				 phydev->lp_advertising, lpa & LPA_1000XPAUSE);
2549		linkmode_mod_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
2550				 phydev->lp_advertising,
2551				 lpa & LPA_1000XPAUSE_ASYM);
2552
2553		phy_resolve_aneg_linkmode(phydev);
2554	} else if (phydev->autoneg == AUTONEG_DISABLE) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2555		int bmcr = phy_read(phydev, MII_BMCR);
2556
2557		if (bmcr < 0)
2558			return bmcr;
2559
2560		if (bmcr & BMCR_FULLDPLX)
2561			phydev->duplex = DUPLEX_FULL;
2562		else
2563			phydev->duplex = DUPLEX_HALF;
2564	}
2565
2566	return 0;
2567}
2568EXPORT_SYMBOL(genphy_c37_read_status);
2569
2570/**
2571 * genphy_soft_reset - software reset the PHY via BMCR_RESET bit
2572 * @phydev: target phy_device struct
2573 *
2574 * Description: Perform a software PHY reset using the standard
2575 * BMCR_RESET bit and poll for the reset bit to be cleared.
2576 *
2577 * Returns: 0 on success, < 0 on failure
2578 */
2579int genphy_soft_reset(struct phy_device *phydev)
2580{
2581	u16 res = BMCR_RESET;
2582	int ret;
2583
2584	if (phydev->autoneg == AUTONEG_ENABLE)
2585		res |= BMCR_ANRESTART;
2586
2587	ret = phy_modify(phydev, MII_BMCR, BMCR_ISOLATE, res);
2588	if (ret < 0)
2589		return ret;
2590
2591	/* Clause 22 states that setting bit BMCR_RESET sets control registers
2592	 * to their default value. Therefore the POWER DOWN bit is supposed to
2593	 * be cleared after soft reset.
2594	 */
2595	phydev->suspended = 0;
2596
2597	ret = phy_poll_reset(phydev);
2598	if (ret)
2599		return ret;
 
 
 
2600
2601	/* BMCR may be reset to defaults */
2602	if (phydev->autoneg == AUTONEG_DISABLE)
2603		ret = genphy_setup_forced(phydev);
2604
2605	return ret;
2606}
2607EXPORT_SYMBOL(genphy_soft_reset);
2608
2609irqreturn_t genphy_handle_interrupt_no_ack(struct phy_device *phydev)
2610{
2611	/* It seems there are cases where the interrupts are handled by another
2612	 * entity (ie an IRQ controller embedded inside the PHY) and do not
2613	 * need any other interraction from phylib. In this case, just trigger
2614	 * the state machine directly.
2615	 */
2616	phy_trigger_machine(phydev);
2617
2618	return 0;
2619}
2620EXPORT_SYMBOL(genphy_handle_interrupt_no_ack);
2621
2622/**
2623 * genphy_read_abilities - read PHY abilities from Clause 22 registers
2624 * @phydev: target phy_device struct
2625 *
2626 * Description: Reads the PHY's abilities and populates
2627 * phydev->supported accordingly.
2628 *
2629 * Returns: 0 on success, < 0 on failure
2630 */
2631int genphy_read_abilities(struct phy_device *phydev)
2632{
2633	int val;
 
2634
2635	linkmode_set_bit_array(phy_basic_ports_array,
2636			       ARRAY_SIZE(phy_basic_ports_array),
2637			       phydev->supported);
 
 
2638
 
2639	val = phy_read(phydev, MII_BMSR);
 
2640	if (val < 0)
2641		return val;
2642
2643	linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported,
2644			 val & BMSR_ANEGCAPABLE);
2645
2646	linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, phydev->supported,
2647			 val & BMSR_100FULL);
2648	linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, phydev->supported,
2649			 val & BMSR_100HALF);
2650	linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, phydev->supported,
2651			 val & BMSR_10FULL);
2652	linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, phydev->supported,
2653			 val & BMSR_10HALF);
2654
2655	if (val & BMSR_ESTATEN) {
2656		val = phy_read(phydev, MII_ESTATUS);
 
2657		if (val < 0)
2658			return val;
2659
2660		linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
2661				 phydev->supported, val & ESTATUS_1000_TFULL);
2662		linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
2663				 phydev->supported, val & ESTATUS_1000_THALF);
2664		linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
2665				 phydev->supported, val & ESTATUS_1000_XFULL);
2666	}
2667
2668	/* This is optional functionality. If not supported, we may get an error
2669	 * which should be ignored.
2670	 */
2671	genphy_c45_read_eee_abilities(phydev);
2672
2673	return 0;
2674}
2675EXPORT_SYMBOL(genphy_read_abilities);
2676
2677/* This is used for the phy device which doesn't support the MMD extended
2678 * register access, but it does have side effect when we are trying to access
2679 * the MMD register via indirect method.
2680 */
2681int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad, u16 regnum)
2682{
2683	return -EOPNOTSUPP;
2684}
2685EXPORT_SYMBOL(genphy_read_mmd_unsupported);
2686
2687int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
2688				 u16 regnum, u16 val)
2689{
2690	return -EOPNOTSUPP;
2691}
2692EXPORT_SYMBOL(genphy_write_mmd_unsupported);
2693
2694int genphy_suspend(struct phy_device *phydev)
2695{
2696	return phy_set_bits(phydev, MII_BMCR, BMCR_PDOWN);
2697}
2698EXPORT_SYMBOL(genphy_suspend);
2699
2700int genphy_resume(struct phy_device *phydev)
2701{
2702	return phy_clear_bits(phydev, MII_BMCR, BMCR_PDOWN);
2703}
2704EXPORT_SYMBOL(genphy_resume);
2705
2706int genphy_loopback(struct phy_device *phydev, bool enable)
2707{
2708	if (enable) {
2709		u16 val, ctl = BMCR_LOOPBACK;
2710		int ret;
2711
2712		ctl |= mii_bmcr_encode_fixed(phydev->speed, phydev->duplex);
2713
2714		phy_modify(phydev, MII_BMCR, ~0, ctl);
2715
2716		ret = phy_read_poll_timeout(phydev, MII_BMSR, val,
2717					    val & BMSR_LSTATUS,
2718				    5000, 500000, true);
2719		if (ret)
2720			return ret;
2721	} else {
2722		phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, 0);
2723
2724		phy_config_aneg(phydev);
2725	}
2726
2727	return 0;
2728}
2729EXPORT_SYMBOL(genphy_loopback);
2730
2731/**
2732 * phy_remove_link_mode - Remove a supported link mode
2733 * @phydev: phy_device structure to remove link mode from
2734 * @link_mode: Link mode to be removed
2735 *
2736 * Description: Some MACs don't support all link modes which the PHY
2737 * does.  e.g. a 1G MAC often does not support 1000Half. Add a helper
2738 * to remove a link mode.
2739 */
2740void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode)
2741{
2742	linkmode_clear_bit(link_mode, phydev->supported);
2743	phy_advertise_supported(phydev);
2744}
2745EXPORT_SYMBOL(phy_remove_link_mode);
2746
2747static void phy_copy_pause_bits(unsigned long *dst, unsigned long *src)
2748{
2749	linkmode_mod_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, dst,
2750		linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, src));
2751	linkmode_mod_bit(ETHTOOL_LINK_MODE_Pause_BIT, dst,
2752		linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, src));
2753}
2754
2755/**
2756 * phy_advertise_supported - Advertise all supported modes
2757 * @phydev: target phy_device struct
2758 *
2759 * Description: Called to advertise all supported modes, doesn't touch
2760 * pause mode advertising.
2761 */
2762void phy_advertise_supported(struct phy_device *phydev)
2763{
2764	__ETHTOOL_DECLARE_LINK_MODE_MASK(new);
2765
2766	linkmode_copy(new, phydev->supported);
2767	phy_copy_pause_bits(new, phydev->advertising);
2768	linkmode_copy(phydev->advertising, new);
2769}
2770EXPORT_SYMBOL(phy_advertise_supported);
2771
2772/**
2773 * phy_support_sym_pause - Enable support of symmetrical pause
2774 * @phydev: target phy_device struct
2775 *
2776 * Description: Called by the MAC to indicate is supports symmetrical
2777 * Pause, but not asym pause.
2778 */
2779void phy_support_sym_pause(struct phy_device *phydev)
2780{
2781	linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported);
2782	phy_copy_pause_bits(phydev->advertising, phydev->supported);
2783}
2784EXPORT_SYMBOL(phy_support_sym_pause);
2785
2786/**
2787 * phy_support_asym_pause - Enable support of asym pause
2788 * @phydev: target phy_device struct
2789 *
2790 * Description: Called by the MAC to indicate is supports Asym Pause.
2791 */
2792void phy_support_asym_pause(struct phy_device *phydev)
2793{
2794	phy_copy_pause_bits(phydev->advertising, phydev->supported);
2795}
2796EXPORT_SYMBOL(phy_support_asym_pause);
2797
2798/**
2799 * phy_set_sym_pause - Configure symmetric Pause
2800 * @phydev: target phy_device struct
2801 * @rx: Receiver Pause is supported
2802 * @tx: Transmit Pause is supported
2803 * @autoneg: Auto neg should be used
2804 *
2805 * Description: Configure advertised Pause support depending on if
2806 * receiver pause and pause auto neg is supported. Generally called
2807 * from the set_pauseparam .ndo.
2808 */
2809void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
2810		       bool autoneg)
2811{
2812	linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported);
2813
2814	if (rx && tx && autoneg)
2815		linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2816				 phydev->supported);
2817
2818	linkmode_copy(phydev->advertising, phydev->supported);
2819}
2820EXPORT_SYMBOL(phy_set_sym_pause);
2821
2822/**
2823 * phy_set_asym_pause - Configure Pause and Asym Pause
2824 * @phydev: target phy_device struct
2825 * @rx: Receiver Pause is supported
2826 * @tx: Transmit Pause is supported
2827 *
2828 * Description: Configure advertised Pause support depending on if
2829 * transmit and receiver pause is supported. If there has been a
2830 * change in adverting, trigger a new autoneg. Generally called from
2831 * the set_pauseparam .ndo.
2832 */
2833void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx)
2834{
2835	__ETHTOOL_DECLARE_LINK_MODE_MASK(oldadv);
2836
2837	linkmode_copy(oldadv, phydev->advertising);
2838	linkmode_set_pause(phydev->advertising, tx, rx);
2839
2840	if (!linkmode_equal(oldadv, phydev->advertising) &&
2841	    phydev->autoneg)
2842		phy_start_aneg(phydev);
2843}
2844EXPORT_SYMBOL(phy_set_asym_pause);
2845
2846/**
2847 * phy_validate_pause - Test if the PHY/MAC support the pause configuration
2848 * @phydev: phy_device struct
2849 * @pp: requested pause configuration
2850 *
2851 * Description: Test if the PHY/MAC combination supports the Pause
2852 * configuration the user is requesting. Returns True if it is
2853 * supported, false otherwise.
2854 */
2855bool phy_validate_pause(struct phy_device *phydev,
2856			struct ethtool_pauseparam *pp)
2857{
2858	if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2859			       phydev->supported) && pp->rx_pause)
2860		return false;
2861
2862	if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
2863			       phydev->supported) &&
2864	    pp->rx_pause != pp->tx_pause)
2865		return false;
2866
2867	return true;
2868}
2869EXPORT_SYMBOL(phy_validate_pause);
2870
2871/**
2872 * phy_get_pause - resolve negotiated pause modes
2873 * @phydev: phy_device struct
2874 * @tx_pause: pointer to bool to indicate whether transmit pause should be
2875 * enabled.
2876 * @rx_pause: pointer to bool to indicate whether receive pause should be
2877 * enabled.
2878 *
2879 * Resolve and return the flow control modes according to the negotiation
2880 * result. This includes checking that we are operating in full duplex mode.
2881 * See linkmode_resolve_pause() for further details.
2882 */
2883void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause)
2884{
2885	if (phydev->duplex != DUPLEX_FULL) {
2886		*tx_pause = false;
2887		*rx_pause = false;
2888		return;
2889	}
2890
2891	return linkmode_resolve_pause(phydev->advertising,
2892				      phydev->lp_advertising,
2893				      tx_pause, rx_pause);
2894}
2895EXPORT_SYMBOL(phy_get_pause);
2896
2897#if IS_ENABLED(CONFIG_OF_MDIO)
2898static int phy_get_int_delay_property(struct device *dev, const char *name)
2899{
2900	s32 int_delay;
2901	int ret;
2902
2903	ret = device_property_read_u32(dev, name, &int_delay);
2904	if (ret)
2905		return ret;
2906
2907	return int_delay;
2908}
2909#else
2910static int phy_get_int_delay_property(struct device *dev, const char *name)
2911{
2912	return -EINVAL;
2913}
2914#endif
2915
2916/**
2917 * phy_get_internal_delay - returns the index of the internal delay
2918 * @phydev: phy_device struct
2919 * @dev: pointer to the devices device struct
2920 * @delay_values: array of delays the PHY supports
2921 * @size: the size of the delay array
2922 * @is_rx: boolean to indicate to get the rx internal delay
2923 *
2924 * Returns the index within the array of internal delay passed in.
2925 * If the device property is not present then the interface type is checked
2926 * if the interface defines use of internal delay then a 1 is returned otherwise
2927 * a 0 is returned.
2928 * The array must be in ascending order. If PHY does not have an ascending order
2929 * array then size = 0 and the value of the delay property is returned.
2930 * Return -EINVAL if the delay is invalid or cannot be found.
2931 */
2932s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev,
2933			   const int *delay_values, int size, bool is_rx)
2934{
2935	s32 delay;
2936	int i;
2937
2938	if (is_rx) {
2939		delay = phy_get_int_delay_property(dev, "rx-internal-delay-ps");
2940		if (delay < 0 && size == 0) {
2941			if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
2942			    phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
2943				return 1;
2944			else
2945				return 0;
2946		}
2947
2948	} else {
2949		delay = phy_get_int_delay_property(dev, "tx-internal-delay-ps");
2950		if (delay < 0 && size == 0) {
2951			if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
2952			    phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
2953				return 1;
2954			else
2955				return 0;
2956		}
2957	}
2958
2959	if (delay < 0)
2960		return delay;
2961
2962	if (delay && size == 0)
2963		return delay;
2964
2965	if (delay < delay_values[0] || delay > delay_values[size - 1]) {
2966		phydev_err(phydev, "Delay %d is out of range\n", delay);
2967		return -EINVAL;
2968	}
2969
2970	if (delay == delay_values[0])
2971		return 0;
2972
2973	for (i = 1; i < size; i++) {
2974		if (delay == delay_values[i])
2975			return i;
2976
2977		/* Find an approximate index by looking up the table */
2978		if (delay > delay_values[i - 1] &&
2979		    delay < delay_values[i]) {
2980			if (delay - delay_values[i - 1] <
2981			    delay_values[i] - delay)
2982				return i - 1;
2983			else
2984				return i;
2985		}
2986	}
2987
2988	phydev_err(phydev, "error finding internal delay index for %d\n",
2989		   delay);
2990
2991	return -EINVAL;
2992}
2993EXPORT_SYMBOL(phy_get_internal_delay);
2994
2995static bool phy_drv_supports_irq(struct phy_driver *phydrv)
2996{
2997	return phydrv->config_intr && phydrv->handle_interrupt;
2998}
2999
3000static int phy_led_set_brightness(struct led_classdev *led_cdev,
3001				  enum led_brightness value)
3002{
3003	struct phy_led *phyled = to_phy_led(led_cdev);
3004	struct phy_device *phydev = phyled->phydev;
3005	int err;
3006
3007	mutex_lock(&phydev->lock);
3008	err = phydev->drv->led_brightness_set(phydev, phyled->index, value);
3009	mutex_unlock(&phydev->lock);
3010
3011	return err;
3012}
3013
3014static int phy_led_blink_set(struct led_classdev *led_cdev,
3015			     unsigned long *delay_on,
3016			     unsigned long *delay_off)
3017{
3018	struct phy_led *phyled = to_phy_led(led_cdev);
3019	struct phy_device *phydev = phyled->phydev;
3020	int err;
3021
3022	mutex_lock(&phydev->lock);
3023	err = phydev->drv->led_blink_set(phydev, phyled->index,
3024					 delay_on, delay_off);
3025	mutex_unlock(&phydev->lock);
3026
3027	return err;
3028}
3029
3030static __maybe_unused struct device *
3031phy_led_hw_control_get_device(struct led_classdev *led_cdev)
3032{
3033	struct phy_led *phyled = to_phy_led(led_cdev);
3034	struct phy_device *phydev = phyled->phydev;
3035
3036	if (phydev->attached_dev)
3037		return &phydev->attached_dev->dev;
3038	return NULL;
3039}
3040
3041static int __maybe_unused
3042phy_led_hw_control_get(struct led_classdev *led_cdev,
3043		       unsigned long *rules)
3044{
3045	struct phy_led *phyled = to_phy_led(led_cdev);
3046	struct phy_device *phydev = phyled->phydev;
3047	int err;
3048
3049	mutex_lock(&phydev->lock);
3050	err = phydev->drv->led_hw_control_get(phydev, phyled->index, rules);
3051	mutex_unlock(&phydev->lock);
3052
3053	return err;
3054}
 
3055
3056static int __maybe_unused
3057phy_led_hw_control_set(struct led_classdev *led_cdev,
3058		       unsigned long rules)
3059{
3060	struct phy_led *phyled = to_phy_led(led_cdev);
3061	struct phy_device *phydev = phyled->phydev;
3062	int err;
3063
3064	mutex_lock(&phydev->lock);
3065	err = phydev->drv->led_hw_control_set(phydev, phyled->index, rules);
3066	mutex_unlock(&phydev->lock);
3067
3068	return err;
3069}
3070
3071static __maybe_unused int phy_led_hw_is_supported(struct led_classdev *led_cdev,
3072						  unsigned long rules)
3073{
3074	struct phy_led *phyled = to_phy_led(led_cdev);
3075	struct phy_device *phydev = phyled->phydev;
3076	int err;
3077
3078	mutex_lock(&phydev->lock);
3079	err = phydev->drv->led_hw_is_supported(phydev, phyled->index, rules);
3080	mutex_unlock(&phydev->lock);
3081
3082	return err;
3083}
3084
3085static void phy_leds_unregister(struct phy_device *phydev)
3086{
3087	struct phy_led *phyled;
3088
3089	list_for_each_entry(phyled, &phydev->leds, list) {
3090		led_classdev_unregister(&phyled->led_cdev);
3091	}
3092}
3093
3094static int of_phy_led(struct phy_device *phydev,
3095		      struct device_node *led)
3096{
3097	struct device *dev = &phydev->mdio.dev;
3098	struct led_init_data init_data = {};
3099	struct led_classdev *cdev;
3100	struct phy_led *phyled;
3101	u32 index;
3102	int err;
3103
3104	phyled = devm_kzalloc(dev, sizeof(*phyled), GFP_KERNEL);
3105	if (!phyled)
3106		return -ENOMEM;
3107
3108	cdev = &phyled->led_cdev;
3109	phyled->phydev = phydev;
3110
3111	err = of_property_read_u32(led, "reg", &index);
3112	if (err)
3113		return err;
3114	if (index > U8_MAX)
3115		return -EINVAL;
3116
3117	phyled->index = index;
3118	if (phydev->drv->led_brightness_set)
3119		cdev->brightness_set_blocking = phy_led_set_brightness;
3120	if (phydev->drv->led_blink_set)
3121		cdev->blink_set = phy_led_blink_set;
3122
3123#ifdef CONFIG_LEDS_TRIGGERS
3124	if (phydev->drv->led_hw_is_supported &&
3125	    phydev->drv->led_hw_control_set &&
3126	    phydev->drv->led_hw_control_get) {
3127		cdev->hw_control_is_supported = phy_led_hw_is_supported;
3128		cdev->hw_control_set = phy_led_hw_control_set;
3129		cdev->hw_control_get = phy_led_hw_control_get;
3130		cdev->hw_control_trigger = "netdev";
3131	}
3132
3133	cdev->hw_control_get_device = phy_led_hw_control_get_device;
3134#endif
3135	cdev->max_brightness = 1;
3136	init_data.devicename = dev_name(&phydev->mdio.dev);
3137	init_data.fwnode = of_fwnode_handle(led);
3138	init_data.devname_mandatory = true;
3139
3140	err = led_classdev_register_ext(dev, cdev, &init_data);
3141	if (err)
3142		return err;
3143
3144	list_add(&phyled->list, &phydev->leds);
3145
3146	return 0;
3147}
3148
3149static int of_phy_leds(struct phy_device *phydev)
3150{
3151	struct device_node *node = phydev->mdio.dev.of_node;
3152	struct device_node *leds, *led;
3153	int err;
3154
3155	if (!IS_ENABLED(CONFIG_OF_MDIO))
3156		return 0;
3157
3158	if (!node)
3159		return 0;
3160
3161	leds = of_get_child_by_name(node, "leds");
3162	if (!leds)
3163		return 0;
3164
3165	for_each_available_child_of_node(leds, led) {
3166		err = of_phy_led(phydev, led);
3167		if (err) {
3168			of_node_put(led);
3169			phy_leds_unregister(phydev);
3170			return err;
3171		}
3172	}
3173
3174	return 0;
3175}
3176
3177/**
3178 * fwnode_mdio_find_device - Given a fwnode, find the mdio_device
3179 * @fwnode: pointer to the mdio_device's fwnode
3180 *
3181 * If successful, returns a pointer to the mdio_device with the embedded
3182 * struct device refcount incremented by one, or NULL on failure.
3183 * The caller should call put_device() on the mdio_device after its use.
3184 */
3185struct mdio_device *fwnode_mdio_find_device(struct fwnode_handle *fwnode)
3186{
3187	struct device *d;
3188
3189	if (!fwnode)
3190		return NULL;
3191
3192	d = bus_find_device_by_fwnode(&mdio_bus_type, fwnode);
3193	if (!d)
3194		return NULL;
3195
3196	return to_mdio_device(d);
3197}
3198EXPORT_SYMBOL(fwnode_mdio_find_device);
3199
3200/**
3201 * fwnode_phy_find_device - For provided phy_fwnode, find phy_device.
3202 *
3203 * @phy_fwnode: Pointer to the phy's fwnode.
3204 *
3205 * If successful, returns a pointer to the phy_device with the embedded
3206 * struct device refcount incremented by one, or NULL on failure.
3207 */
3208struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode)
3209{
3210	struct mdio_device *mdiodev;
3211
3212	mdiodev = fwnode_mdio_find_device(phy_fwnode);
3213	if (!mdiodev)
3214		return NULL;
3215
3216	if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY)
3217		return to_phy_device(&mdiodev->dev);
3218
3219	put_device(&mdiodev->dev);
3220
3221	return NULL;
3222}
3223EXPORT_SYMBOL(fwnode_phy_find_device);
3224
3225/**
3226 * device_phy_find_device - For the given device, get the phy_device
3227 * @dev: Pointer to the given device
3228 *
3229 * Refer return conditions of fwnode_phy_find_device().
3230 */
3231struct phy_device *device_phy_find_device(struct device *dev)
3232{
3233	return fwnode_phy_find_device(dev_fwnode(dev));
3234}
3235EXPORT_SYMBOL_GPL(device_phy_find_device);
3236
3237/**
3238 * fwnode_get_phy_node - Get the phy_node using the named reference.
3239 * @fwnode: Pointer to fwnode from which phy_node has to be obtained.
3240 *
3241 * Refer return conditions of fwnode_find_reference().
3242 * For ACPI, only "phy-handle" is supported. Legacy DT properties "phy"
3243 * and "phy-device" are not supported in ACPI. DT supports all the three
3244 * named references to the phy node.
3245 */
3246struct fwnode_handle *fwnode_get_phy_node(const struct fwnode_handle *fwnode)
3247{
3248	struct fwnode_handle *phy_node;
3249
3250	/* Only phy-handle is used for ACPI */
3251	phy_node = fwnode_find_reference(fwnode, "phy-handle", 0);
3252	if (is_acpi_node(fwnode) || !IS_ERR(phy_node))
3253		return phy_node;
3254	phy_node = fwnode_find_reference(fwnode, "phy", 0);
3255	if (IS_ERR(phy_node))
3256		phy_node = fwnode_find_reference(fwnode, "phy-device", 0);
3257	return phy_node;
3258}
3259EXPORT_SYMBOL_GPL(fwnode_get_phy_node);
3260
3261/**
3262 * phy_probe - probe and init a PHY device
3263 * @dev: device to probe and init
3264 *
3265 * Take care of setting up the phy_device structure, set the state to READY.
 
 
3266 */
3267static int phy_probe(struct device *dev)
3268{
3269	struct phy_device *phydev = to_phy_device(dev);
3270	struct device_driver *drv = phydev->mdio.dev.driver;
3271	struct phy_driver *phydrv = to_phy_driver(drv);
3272	int err = 0;
3273
 
 
 
 
 
 
3274	phydev->drv = phydrv;
3275
3276	/* Disable the interrupt if the PHY doesn't support it
3277	 * but the interrupt is still a valid one
3278	 */
3279	if (!phy_drv_supports_irq(phydrv) && phy_interrupt_is_valid(phydev))
3280		phydev->irq = PHY_POLL;
3281
3282	if (phydrv->flags & PHY_IS_INTERNAL)
3283		phydev->is_internal = true;
3284
3285	/* Deassert the reset signal */
3286	phy_device_reset(phydev, 0);
3287
3288	if (phydev->drv->probe) {
3289		err = phydev->drv->probe(phydev);
3290		if (err)
3291			goto out;
3292	}
3293
3294	phy_disable_interrupts(phydev);
3295
3296	/* Start out supporting everything. Eventually,
3297	 * a controller will attach, and may modify one
3298	 * or both of these values
3299	 */
3300	if (phydrv->features) {
3301		linkmode_copy(phydev->supported, phydrv->features);
3302		genphy_c45_read_eee_abilities(phydev);
3303	}
3304	else if (phydrv->get_features)
3305		err = phydrv->get_features(phydev);
3306	else if (phydev->is_c45)
3307		err = genphy_c45_pma_read_abilities(phydev);
3308	else
3309		err = genphy_read_abilities(phydev);
3310
3311	if (err)
3312		goto out;
3313
3314	if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
3315			       phydev->supported))
3316		phydev->autoneg = 0;
3317
3318	if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
3319			      phydev->supported))
3320		phydev->is_gigabit_capable = 1;
3321	if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
3322			      phydev->supported))
3323		phydev->is_gigabit_capable = 1;
3324
3325	of_set_phy_supported(phydev);
3326	phy_advertise_supported(phydev);
3327
3328	/* Get PHY default EEE advertising modes and handle them as potentially
3329	 * safe initial configuration.
3330	 */
3331	err = genphy_c45_read_eee_adv(phydev, phydev->advertising_eee);
3332	if (err)
3333		goto out;
3334
3335	/* There is no "enabled" flag. If PHY is advertising, assume it is
3336	 * kind of enabled.
3337	 */
3338	phydev->eee_enabled = !linkmode_empty(phydev->advertising_eee);
3339
3340	/* Some PHYs may advertise, by default, not support EEE modes. So,
3341	 * we need to clean them.
3342	 */
3343	if (phydev->eee_enabled)
3344		linkmode_and(phydev->advertising_eee, phydev->supported_eee,
3345			     phydev->advertising_eee);
3346
3347	/* Get the EEE modes we want to prohibit. We will ask
3348	 * the PHY stop advertising these mode later on
3349	 */
3350	of_set_phy_eee_broken(phydev);
3351
3352	/* The Pause Frame bits indicate that the PHY can support passing
3353	 * pause frames. During autonegotiation, the PHYs will determine if
3354	 * they should allow pause frames to pass.  The MAC driver should then
3355	 * use that result to determine whether to enable flow control via
3356	 * pause frames.
3357	 *
3358	 * Normally, PHY drivers should not set the Pause bits, and instead
3359	 * allow phylib to do that.  However, there may be some situations
3360	 * (e.g. hardware erratum) where the driver wants to set only one
3361	 * of these bits.
3362	 */
3363	if (!test_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported) &&
3364	    !test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported)) {
3365		linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
3366				 phydev->supported);
3367		linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
3368				 phydev->supported);
3369	}
3370
3371	/* Set the state to READY by default */
3372	phydev->state = PHY_READY;
3373
3374	/* Get the LEDs from the device tree, and instantiate standard
3375	 * LEDs for them.
3376	 */
3377	if (IS_ENABLED(CONFIG_PHYLIB_LEDS))
3378		err = of_phy_leds(phydev);
3379
3380out:
3381	/* Re-assert the reset signal on error */
3382	if (err)
3383		phy_device_reset(phydev, 1);
3384
3385	return err;
 
3386}
3387
3388static int phy_remove(struct device *dev)
3389{
3390	struct phy_device *phydev = to_phy_device(dev);
3391
3392	cancel_delayed_work_sync(&phydev->state_queue);
3393
3394	if (IS_ENABLED(CONFIG_PHYLIB_LEDS))
3395		phy_leds_unregister(phydev);
3396
 
3397	phydev->state = PHY_DOWN;
 
3398
3399	sfp_bus_del_upstream(phydev->sfp_bus);
3400	phydev->sfp_bus = NULL;
3401
3402	if (phydev->drv && phydev->drv->remove)
3403		phydev->drv->remove(phydev);
3404
3405	/* Assert the reset signal */
3406	phy_device_reset(phydev, 1);
3407
3408	phydev->drv = NULL;
3409
3410	return 0;
3411}
3412
3413/**
3414 * phy_driver_register - register a phy_driver with the PHY layer
3415 * @new_driver: new phy_driver to register
3416 * @owner: module owning this PHY
3417 */
3418int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
3419{
3420	int retval;
3421
3422	/* Either the features are hard coded, or dynamically
3423	 * determined. It cannot be both.
3424	 */
3425	if (WARN_ON(new_driver->features && new_driver->get_features)) {
3426		pr_err("%s: features and get_features must not both be set\n",
3427		       new_driver->name);
3428		return -EINVAL;
3429	}
3430
3431	/* PHYLIB device drivers must not match using a DT compatible table
3432	 * as this bypasses our checks that the mdiodev that is being matched
3433	 * is backed by a struct phy_device. If such a case happens, we will
3434	 * make out-of-bounds accesses and lockup in phydev->lock.
3435	 */
3436	if (WARN(new_driver->mdiodrv.driver.of_match_table,
3437		 "%s: driver must not provide a DT match table\n",
3438		 new_driver->name))
3439		return -EINVAL;
3440
3441	new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY;
3442	new_driver->mdiodrv.driver.name = new_driver->name;
3443	new_driver->mdiodrv.driver.bus = &mdio_bus_type;
3444	new_driver->mdiodrv.driver.probe = phy_probe;
3445	new_driver->mdiodrv.driver.remove = phy_remove;
3446	new_driver->mdiodrv.driver.owner = owner;
3447	new_driver->mdiodrv.driver.probe_type = PROBE_FORCE_SYNCHRONOUS;
3448
3449	retval = driver_register(&new_driver->mdiodrv.driver);
3450	if (retval) {
3451		pr_err("%s: Error %d in registering driver\n",
3452		       new_driver->name, retval);
3453
3454		return retval;
3455	}
3456
3457	pr_debug("%s: Registered new driver\n", new_driver->name);
3458
3459	return 0;
3460}
3461EXPORT_SYMBOL(phy_driver_register);
3462
3463int phy_drivers_register(struct phy_driver *new_driver, int n,
3464			 struct module *owner)
3465{
3466	int i, ret = 0;
3467
3468	for (i = 0; i < n; i++) {
3469		ret = phy_driver_register(new_driver + i, owner);
3470		if (ret) {
3471			while (i-- > 0)
3472				phy_driver_unregister(new_driver + i);
3473			break;
3474		}
3475	}
3476	return ret;
3477}
3478EXPORT_SYMBOL(phy_drivers_register);
3479
3480void phy_driver_unregister(struct phy_driver *drv)
3481{
3482	driver_unregister(&drv->mdiodrv.driver);
3483}
3484EXPORT_SYMBOL(phy_driver_unregister);
3485
3486void phy_drivers_unregister(struct phy_driver *drv, int n)
3487{
3488	int i;
3489
3490	for (i = 0; i < n; i++)
3491		phy_driver_unregister(drv + i);
3492}
3493EXPORT_SYMBOL(phy_drivers_unregister);
3494
3495static struct phy_driver genphy_driver = {
3496	.phy_id		= 0xffffffff,
3497	.phy_id_mask	= 0xffffffff,
3498	.name		= "Generic PHY",
3499	.get_features	= genphy_read_abilities,
 
 
 
3500	.suspend	= genphy_suspend,
3501	.resume		= genphy_resume,
3502	.set_loopback   = genphy_loopback,
3503};
3504
3505static const struct ethtool_phy_ops phy_ethtool_phy_ops = {
3506	.get_sset_count		= phy_ethtool_get_sset_count,
3507	.get_strings		= phy_ethtool_get_strings,
3508	.get_stats		= phy_ethtool_get_stats,
3509	.get_plca_cfg		= phy_ethtool_get_plca_cfg,
3510	.set_plca_cfg		= phy_ethtool_set_plca_cfg,
3511	.get_plca_status	= phy_ethtool_get_plca_status,
3512	.start_cable_test	= phy_start_cable_test,
3513	.start_cable_test_tdr	= phy_start_cable_test_tdr,
3514};
3515
3516static const struct phylib_stubs __phylib_stubs = {
3517	.hwtstamp_get = __phy_hwtstamp_get,
3518	.hwtstamp_set = __phy_hwtstamp_set,
3519};
3520
3521static void phylib_register_stubs(void)
3522{
3523	phylib_stubs = &__phylib_stubs;
3524}
3525
3526static void phylib_unregister_stubs(void)
3527{
3528	phylib_stubs = NULL;
3529}
3530
3531static int __init phy_init(void)
3532{
3533	int rc;
3534
3535	rtnl_lock();
3536	ethtool_set_ethtool_phy_ops(&phy_ethtool_phy_ops);
3537	phylib_register_stubs();
3538	rtnl_unlock();
3539
3540	rc = mdio_bus_init();
3541	if (rc)
3542		goto err_ethtool_phy_ops;
3543
3544	features_init();
3545
3546	rc = phy_driver_register(&genphy_c45_driver, THIS_MODULE);
3547	if (rc)
3548		goto err_mdio_bus;
3549
3550	rc = phy_driver_register(&genphy_driver, THIS_MODULE);
3551	if (rc)
3552		goto err_c45;
3553
3554	return 0;
3555
3556err_c45:
3557	phy_driver_unregister(&genphy_c45_driver);
3558err_mdio_bus:
3559	mdio_bus_exit();
3560err_ethtool_phy_ops:
3561	rtnl_lock();
3562	phylib_unregister_stubs();
3563	ethtool_set_ethtool_phy_ops(NULL);
3564	rtnl_unlock();
3565
3566	return rc;
3567}
3568
3569static void __exit phy_exit(void)
3570{
3571	phy_driver_unregister(&genphy_c45_driver);
3572	phy_driver_unregister(&genphy_driver);
3573	mdio_bus_exit();
3574	rtnl_lock();
3575	phylib_unregister_stubs();
3576	ethtool_set_ethtool_phy_ops(NULL);
3577	rtnl_unlock();
3578}
3579
3580subsys_initcall(phy_init);
3581module_exit(phy_exit);
v3.1
   1/*
   2 * drivers/net/phy/phy_device.c
   3 *
   4 * Framework for finding and configuring PHYs.
   5 * Also contains generic PHY driver
   6 *
   7 * Author: Andy Fleming
   8 *
   9 * Copyright (c) 2004 Freescale Semiconductor, Inc.
  10 *
  11 * This program is free software; you can redistribute  it and/or modify it
  12 * under  the terms of  the GNU General  Public License as published by the
  13 * Free Software Foundation;  either version 2 of the  License, or (at your
  14 * option) any later version.
  15 *
  16 */
  17#include <linux/kernel.h>
  18#include <linux/string.h>
 
 
 
 
  19#include <linux/errno.h>
  20#include <linux/unistd.h>
  21#include <linux/slab.h>
 
  22#include <linux/interrupt.h>
  23#include <linux/init.h>
  24#include <linux/delay.h>
  25#include <linux/netdevice.h>
  26#include <linux/etherdevice.h>
  27#include <linux/skbuff.h>
  28#include <linux/mm.h>
  29#include <linux/module.h>
  30#include <linux/mii.h>
  31#include <linux/ethtool.h>
  32#include <linux/phy.h>
  33
  34#include <asm/io.h>
  35#include <asm/irq.h>
  36#include <asm/uaccess.h>
 
 
 
 
 
 
 
  37
  38MODULE_DESCRIPTION("PHY library");
  39MODULE_AUTHOR("Andy Fleming");
  40MODULE_LICENSE("GPL");
  41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  42void phy_device_free(struct phy_device *phydev)
  43{
  44	kfree(phydev);
  45}
  46EXPORT_SYMBOL(phy_device_free);
  47
 
 
 
 
 
 
 
 
  48static void phy_device_release(struct device *dev)
  49{
  50	phy_device_free(to_phy_device(dev));
 
 
 
 
 
 
 
 
 
  51}
  52
  53static struct phy_driver genphy_driver;
  54extern int mdio_bus_init(void);
  55extern void mdio_bus_exit(void);
  56
  57static LIST_HEAD(phy_fixup_list);
  58static DEFINE_MUTEX(phy_fixup_lock);
  59
  60static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
  61			     u32 flags, phy_interface_t interface);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  62
  63/*
  64 * Creates a new phy_fixup and adds it to the list
  65 * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  66 * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
  67 * 	It can also be PHY_ANY_UID
  68 * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
  69 * 	comparison
  70 * @run: The actual code to be run when a matching PHY is found
  71 */
  72int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
  73		int (*run)(struct phy_device *))
  74{
  75	struct phy_fixup *fixup;
  76
  77	fixup = kzalloc(sizeof(struct phy_fixup), GFP_KERNEL);
  78	if (!fixup)
  79		return -ENOMEM;
  80
  81	strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
  82	fixup->phy_uid = phy_uid;
  83	fixup->phy_uid_mask = phy_uid_mask;
  84	fixup->run = run;
  85
  86	mutex_lock(&phy_fixup_lock);
  87	list_add_tail(&fixup->list, &phy_fixup_list);
  88	mutex_unlock(&phy_fixup_lock);
  89
  90	return 0;
  91}
  92EXPORT_SYMBOL(phy_register_fixup);
  93
  94/* Registers a fixup to be run on any PHY with the UID in phy_uid */
  95int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
  96		int (*run)(struct phy_device *))
  97{
  98	return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
  99}
 100EXPORT_SYMBOL(phy_register_fixup_for_uid);
 101
 102/* Registers a fixup to be run on the PHY with id string bus_id */
 103int phy_register_fixup_for_id(const char *bus_id,
 104		int (*run)(struct phy_device *))
 105{
 106	return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
 107}
 108EXPORT_SYMBOL(phy_register_fixup_for_id);
 109
 110/*
 111 * Returns 1 if fixup matches phydev in bus_id and phy_uid.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 112 * Fixups can be set to match any in one or more fields.
 113 */
 114static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
 115{
 116	if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
 117		if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
 118			return 0;
 119
 120	if ((fixup->phy_uid & fixup->phy_uid_mask) !=
 121			(phydev->phy_id & fixup->phy_uid_mask))
 122		if (fixup->phy_uid != PHY_ANY_UID)
 123			return 0;
 124
 125	return 1;
 126}
 127
 128/* Runs any matching fixups for this phydev */
 129int phy_scan_fixups(struct phy_device *phydev)
 130{
 131	struct phy_fixup *fixup;
 132
 133	mutex_lock(&phy_fixup_lock);
 134	list_for_each_entry(fixup, &phy_fixup_list, list) {
 135		if (phy_needs_fixup(phydev, fixup)) {
 136			int err;
 137
 138			err = fixup->run(phydev);
 139
 140			if (err < 0) {
 141				mutex_unlock(&phy_fixup_lock);
 142				return err;
 143			}
 
 144		}
 145	}
 146	mutex_unlock(&phy_fixup_lock);
 147
 148	return 0;
 149}
 150EXPORT_SYMBOL(phy_scan_fixups);
 151
 152static struct phy_device* phy_device_create(struct mii_bus *bus,
 153					    int addr, int phy_id)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 154{
 155	struct phy_device *dev;
 
 
 156
 157	/* We allocate the device, and initialize the
 158	 * default values */
 159	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
 
 
 160
 161	if (NULL == dev)
 162		return (struct phy_device*) PTR_ERR((void*)-ENOMEM);
 163
 164	dev->dev.release = phy_device_release;
 165
 166	dev->speed = 0;
 167	dev->duplex = -1;
 168	dev->pause = dev->asym_pause = 0;
 169	dev->link = 1;
 
 
 
 
 
 
 
 
 
 170	dev->interface = PHY_INTERFACE_MODE_GMII;
 171
 172	dev->autoneg = AUTONEG_ENABLE;
 173
 174	dev->addr = addr;
 
 175	dev->phy_id = phy_id;
 176	dev->bus = bus;
 177	dev->dev.parent = bus->parent;
 178	dev->dev.bus = &mdio_bus_type;
 179	dev->irq = bus->irq != NULL ? bus->irq[addr] : PHY_POLL;
 180	dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
 
 181
 182	dev->state = PHY_DOWN;
 
 183
 184	mutex_init(&dev->lock);
 185	INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
 186
 187	/* Request the appropriate module unconditionally; don't
 188	   bother trying to do so only if it isn't already loaded,
 189	   because that gets complicated. A hotplug event would have
 190	   done an unconditional modprobe anyway.
 191	   We don't do normal hotplug because it won't work for MDIO
 192	   -- because it relies on the device staying around for long
 193	   enough for the driver to get loaded. With MDIO, the NIC
 194	   driver will get bored and give up as soon as it finds that
 195	   there's no driver _already_ loaded. */
 196	request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 197
 198	return dev;
 199}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 200
 201/**
 202 * get_phy_id - reads the specified addr for its ID.
 203 * @bus: the target MII bus
 204 * @addr: PHY address on the MII bus
 205 * @phy_id: where to store the ID retrieved.
 
 
 
 
 206 *
 207 * Description: Reads the ID registers of the PHY at @addr on the
 208 *   @bus, stores it in @phy_id and returns zero on success.
 209 */
 210int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id)
 
 211{
 212	int phy_reg;
 213
 214	/* Grab the bits from PHYIR1, and put them
 215	 * in the upper half */
 216	phy_reg = bus->read(bus, addr, MII_PHYSID1);
 
 217
 
 218	if (phy_reg < 0)
 219		return -EIO;
 
 220
 221	*phy_id = (phy_reg & 0xffff) << 16;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 222
 223	/* Grab the bits from PHYIR2, and put them in the lower half */
 224	phy_reg = bus->read(bus, addr, MII_PHYSID2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 225
 226	if (phy_reg < 0)
 227		return -EIO;
 
 
 
 
 
 
 
 
 
 
 228
 229	*phy_id |= (phy_reg & 0xffff);
 
 230
 
 231	return 0;
 232}
 233EXPORT_SYMBOL(get_phy_id);
 234
 235/**
 236 * get_phy_device - reads the specified PHY device and returns its @phy_device struct
 
 237 * @bus: the target MII bus
 238 * @addr: PHY address on the MII bus
 
 239 *
 240 * Description: Reads the ID registers of the PHY at @addr on the
 241 *   @bus, then allocates and returns the phy_device to represent it.
 
 
 
 
 
 
 
 
 
 242 */
 243struct phy_device * get_phy_device(struct mii_bus *bus, int addr)
 244{
 245	struct phy_device *dev = NULL;
 246	u32 phy_id;
 247	int r;
 248
 249	r = get_phy_id(bus, addr, &phy_id);
 
 
 
 
 
 
 
 
 250	if (r)
 251		return ERR_PTR(r);
 252
 253	/* If the phy_id is mostly Fs, there is no device there */
 254	if ((phy_id & 0x1fffffff) == 0x1fffffff)
 255		return NULL;
 256
 257	dev = phy_device_create(bus, addr, phy_id);
 
 
 
 
 
 
 258
 259	return dev;
 260}
 261EXPORT_SYMBOL(get_phy_device);
 262
 263/**
 264 * phy_device_register - Register the phy device on the MDIO bus
 265 * @phydev: phy_device structure to be added to the MDIO bus
 266 */
 267int phy_device_register(struct phy_device *phydev)
 268{
 269	int err;
 270
 271	/* Don't register a phy if one is already registered at this
 272	 * address */
 273	if (phydev->bus->phy_map[phydev->addr])
 274		return -EINVAL;
 275	phydev->bus->phy_map[phydev->addr] = phydev;
 
 276
 277	/* Run all of the fixups for this PHY */
 278	phy_scan_fixups(phydev);
 
 
 
 
 279
 280	err = device_register(&phydev->dev);
 281	if (err) {
 282		pr_err("phy %d failed to register\n", phydev->addr);
 283		goto out;
 284	}
 285
 286	return 0;
 287
 288 out:
 289	phydev->bus->phy_map[phydev->addr] = NULL;
 
 
 
 290	return err;
 291}
 292EXPORT_SYMBOL(phy_device_register);
 293
 294/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 295 * phy_find_first - finds the first PHY device on the bus
 296 * @bus: the target MII bus
 297 */
 298struct phy_device *phy_find_first(struct mii_bus *bus)
 299{
 
 300	int addr;
 301
 302	for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
 303		if (bus->phy_map[addr])
 304			return bus->phy_map[addr];
 
 305	}
 306	return NULL;
 307}
 308EXPORT_SYMBOL(phy_find_first);
 309
 
 
 
 
 
 
 
 
 
 
 
 
 
 310/**
 311 * phy_prepare_link - prepares the PHY layer to monitor link status
 312 * @phydev: target phy_device struct
 313 * @handler: callback function for link status change notifications
 314 *
 315 * Description: Tells the PHY infrastructure to handle the
 316 *   gory details on monitoring link status (whether through
 317 *   polling or an interrupt), and to call back to the
 318 *   connected device driver when the link status changes.
 319 *   If you want to monitor your own link state, don't call
 320 *   this function.
 321 */
 322static void phy_prepare_link(struct phy_device *phydev,
 323		void (*handler)(struct net_device *))
 324{
 325	phydev->adjust_link = handler;
 326}
 327
 328/**
 329 * phy_connect_direct - connect an ethernet device to a specific phy_device
 330 * @dev: the network device to connect
 331 * @phydev: the pointer to the phy device
 332 * @handler: callback function for state change notifications
 333 * @flags: PHY device's dev_flags
 334 * @interface: PHY device's interface
 335 */
 336int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
 337		       void (*handler)(struct net_device *), u32 flags,
 338		       phy_interface_t interface)
 339{
 340	int rc;
 341
 342	rc = phy_attach_direct(dev, phydev, flags, interface);
 
 
 
 343	if (rc)
 344		return rc;
 345
 346	phy_prepare_link(phydev, handler);
 347	phy_start_machine(phydev, NULL);
 348	if (phydev->irq > 0)
 349		phy_start_interrupts(phydev);
 350
 351	return 0;
 352}
 353EXPORT_SYMBOL(phy_connect_direct);
 354
 355/**
 356 * phy_connect - connect an ethernet device to a PHY device
 357 * @dev: the network device to connect
 358 * @bus_id: the id string of the PHY device to connect
 359 * @handler: callback function for state change notifications
 360 * @flags: PHY device's dev_flags
 361 * @interface: PHY device's interface
 362 *
 363 * Description: Convenience function for connecting ethernet
 364 *   devices to PHY devices.  The default behavior is for
 365 *   the PHY infrastructure to handle everything, and only notify
 366 *   the connected driver when the link status changes.  If you
 367 *   don't want, or can't use the provided functionality, you may
 368 *   choose to call only the subset of functions which provide
 369 *   the desired functionality.
 370 */
 371struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
 372		void (*handler)(struct net_device *), u32 flags,
 373		phy_interface_t interface)
 374{
 375	struct phy_device *phydev;
 376	struct device *d;
 377	int rc;
 378
 379	/* Search the list of PHY devices on the mdio bus for the
 380	 * PHY with the requested name */
 
 381	d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
 382	if (!d) {
 383		pr_err("PHY %s not found\n", bus_id);
 384		return ERR_PTR(-ENODEV);
 385	}
 386	phydev = to_phy_device(d);
 387
 388	rc = phy_connect_direct(dev, phydev, handler, flags, interface);
 
 389	if (rc)
 390		return ERR_PTR(rc);
 391
 392	return phydev;
 393}
 394EXPORT_SYMBOL(phy_connect);
 395
 396/**
 397 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
 
 398 * @phydev: target phy_device struct
 399 */
 400void phy_disconnect(struct phy_device *phydev)
 401{
 402	if (phydev->irq > 0)
 403		phy_stop_interrupts(phydev);
 
 
 
 404
 405	phy_stop_machine(phydev);
 406	
 407	phydev->adjust_link = NULL;
 408
 409	phy_detach(phydev);
 410}
 411EXPORT_SYMBOL(phy_disconnect);
 412
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 413int phy_init_hw(struct phy_device *phydev)
 414{
 415	int ret;
 
 
 
 416
 417	if (!phydev->drv || !phydev->drv->config_init)
 418		return 0;
 419
 
 
 
 
 
 
 
 
 
 420	ret = phy_scan_fixups(phydev);
 421	if (ret < 0)
 422		return ret;
 423
 424	return phydev->drv->config_init(phydev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 425}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 426
 427/**
 428 * phy_attach_direct - attach a network device to a given PHY device pointer
 429 * @dev: network device to attach
 430 * @phydev: Pointer to phy_device to attach
 431 * @flags: PHY device's dev_flags
 432 * @interface: PHY device's interface
 433 *
 434 * Description: Called by drivers to attach to a particular PHY
 435 *     device. The phy_device is found, and properly hooked up
 436 *     to the phy_driver.  If no driver is attached, then the
 437 *     genphy_driver is used.  The phy_device is given a ptr to
 438 *     the attaching device, and given a callback for link status
 439 *     change.  The phy_device is returned to the attaching driver.
 
 440 */
 441static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
 442			     u32 flags, phy_interface_t interface)
 443{
 444	struct device *d = &phydev->dev;
 
 
 
 445	int err;
 446
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 447	/* Assume that if there is no driver, that it doesn't
 448	 * exist, and we should use the genphy driver. */
 449	if (NULL == d->driver) {
 450		d->driver = &genphy_driver.driver;
 
 
 
 
 
 
 
 
 
 
 
 
 
 451
 
 452		err = d->driver->probe(d);
 453		if (err >= 0)
 454			err = device_bind_driver(d);
 455
 456		if (err)
 457			return err;
 458	}
 459
 460	if (phydev->attached_dev) {
 461		dev_err(&dev->dev, "PHY already attached\n");
 462		return -EBUSY;
 
 
 
 
 
 
 
 
 
 
 463	}
 464
 465	phydev->attached_dev = dev;
 466	dev->phydev = phydev;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 467
 468	phydev->dev_flags = flags;
 469
 470	phydev->interface = interface;
 471
 472	phydev->state = PHY_READY;
 473
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 474	/* Do initial configuration here, now that
 475	 * we have certain key parameters
 476	 * (dev_flags and interface) */
 
 477	err = phy_init_hw(phydev);
 478	if (err)
 479		phy_detach(phydev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 480
 481	return err;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 482}
 
 483
 484/**
 485 * phy_attach - attach a network device to a particular PHY device
 486 * @dev: network device to attach
 487 * @bus_id: Bus ID of PHY device to attach
 488 * @flags: PHY device's dev_flags
 489 * @interface: PHY device's interface
 490 *
 491 * Description: Same as phy_attach_direct() except that a PHY bus_id
 492 *     string is passed instead of a pointer to a struct phy_device.
 493 */
 494struct phy_device *phy_attach(struct net_device *dev,
 495		const char *bus_id, u32 flags, phy_interface_t interface)
 496{
 497	struct bus_type *bus = &mdio_bus_type;
 498	struct phy_device *phydev;
 499	struct device *d;
 500	int rc;
 501
 
 
 
 502	/* Search the list of PHY devices on the mdio bus for the
 503	 * PHY with the requested name */
 
 504	d = bus_find_device_by_name(bus, NULL, bus_id);
 505	if (!d) {
 506		pr_err("PHY %s not found\n", bus_id);
 507		return ERR_PTR(-ENODEV);
 508	}
 509	phydev = to_phy_device(d);
 510
 511	rc = phy_attach_direct(dev, phydev, flags, interface);
 
 512	if (rc)
 513		return ERR_PTR(rc);
 514
 515	return phydev;
 516}
 517EXPORT_SYMBOL(phy_attach);
 518
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 519/**
 520 * phy_detach - detach a PHY device from its network device
 521 * @phydev: target phy_device struct
 
 
 
 522 */
 523void phy_detach(struct phy_device *phydev)
 524{
 525	phydev->attached_dev->phydev = NULL;
 526	phydev->attached_dev = NULL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 527
 528	/* If the device had no specific driver before (i.e. - it
 529	 * was using the generic driver), we unbind the device
 530	 * from the generic driver so that there's a chance a
 531	 * real driver could be loaded */
 532	if (phydev->dev.driver == &genphy_driver.driver)
 533		device_release_driver(&phydev->dev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 534}
 535EXPORT_SYMBOL(phy_detach);
 536
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 537
 538/* Generic PHY support and helper functions */
 539
 540/**
 541 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
 542 * @phydev: target phy_device struct
 543 *
 544 * Description: Writes MII_ADVERTISE with the appropriate values,
 545 *   after sanitizing the values to make sure we only advertise
 546 *   what is supported.  Returns < 0 on error, 0 if the PHY's advertisement
 547 *   hasn't changed, and > 0 if it has changed.
 548 */
 549static int genphy_config_advert(struct phy_device *phydev)
 550{
 551	u32 advertise;
 552	int oldadv, adv;
 553	int err, changed = 0;
 554
 555	/* Only allow advertising what
 556	 * this PHY supports */
 557	phydev->advertising &= phydev->supported;
 558	advertise = phydev->advertising;
 559
 560	/* Setup standard advertisement */
 561	oldadv = adv = phy_read(phydev, MII_ADVERTISE);
 
 
 
 
 
 
 
 562
 563	if (adv < 0)
 564		return adv;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 565
 566	adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP | 
 567		 ADVERTISE_PAUSE_ASYM);
 568	if (advertise & ADVERTISED_10baseT_Half)
 569		adv |= ADVERTISE_10HALF;
 570	if (advertise & ADVERTISED_10baseT_Full)
 571		adv |= ADVERTISE_10FULL;
 572	if (advertise & ADVERTISED_100baseT_Half)
 573		adv |= ADVERTISE_100HALF;
 574	if (advertise & ADVERTISED_100baseT_Full)
 575		adv |= ADVERTISE_100FULL;
 576	if (advertise & ADVERTISED_Pause)
 577		adv |= ADVERTISE_PAUSE_CAP;
 578	if (advertise & ADVERTISED_Asym_Pause)
 579		adv |= ADVERTISE_PAUSE_ASYM;
 580
 581	if (adv != oldadv) {
 582		err = phy_write(phydev, MII_ADVERTISE, adv);
 
 
 
 
 
 
 
 
 
 
 
 583
 584		if (err < 0)
 585			return err;
 586		changed = 1;
 587	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 588
 589	/* Configure gigabit if it's supported */
 590	if (phydev->supported & (SUPPORTED_1000baseT_Half |
 591				SUPPORTED_1000baseT_Full)) {
 592		oldadv = adv = phy_read(phydev, MII_CTRL1000);
 593
 594		if (adv < 0)
 595			return adv;
 596
 597		adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
 598		if (advertise & SUPPORTED_1000baseT_Half)
 599			adv |= ADVERTISE_1000HALF;
 600		if (advertise & SUPPORTED_1000baseT_Full)
 601			adv |= ADVERTISE_1000FULL;
 602
 603		if (adv != oldadv) {
 604			err = phy_write(phydev, MII_CTRL1000, adv);
 
 605
 606			if (err < 0)
 607				return err;
 608			changed = 1;
 609		}
 610	}
 611
 612	return changed;
 613}
 
 614
 615/**
 616 * genphy_setup_forced - configures/forces speed/duplex from @phydev
 617 * @phydev: target phy_device struct
 618 *
 619 * Description: Configures MII_BMCR to force speed/duplex
 620 *   to the values in phydev. Assumes that the values are valid.
 621 *   Please see phy_sanitize_settings().
 622 */
 623static int genphy_setup_forced(struct phy_device *phydev)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 624{
 625	int err;
 626	int ctl = 0;
 627
 628	phydev->pause = phydev->asym_pause = 0;
 
 629
 630	if (SPEED_1000 == phydev->speed)
 631		ctl |= BMCR_SPEED1000;
 632	else if (SPEED_100 == phydev->speed)
 633		ctl |= BMCR_SPEED100;
 634
 635	if (DUPLEX_FULL == phydev->duplex)
 636		ctl |= BMCR_FULLDPLX;
 637	
 638	err = phy_write(phydev, MII_BMCR, ctl);
 
 
 
 
 
 
 
 
 
 
 639
 640	return err;
 
 
 641}
 642
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 643
 644/**
 645 * genphy_restart_aneg - Enable and Restart Autonegotiation
 646 * @phydev: target phy_device struct
 647 */
 648int genphy_restart_aneg(struct phy_device *phydev)
 649{
 650	int ctl;
 
 
 
 
 651
 652	ctl = phy_read(phydev, MII_BMCR);
 
 
 
 
 
 
 
 
 
 653
 654	if (ctl < 0)
 655		return ctl;
 
 
 
 
 
 656
 657	ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
 
 
 658
 659	/* Don't isolate the PHY if we're negotiating */
 660	ctl &= ~(BMCR_ISOLATE);
 661
 662	ctl = phy_write(phydev, MII_BMCR, ctl);
 663
 664	return ctl;
 665}
 666EXPORT_SYMBOL(genphy_restart_aneg);
 667
 668
 669/**
 670 * genphy_config_aneg - restart auto-negotiation or write BMCR
 671 * @phydev: target phy_device struct
 
 672 *
 673 * Description: If auto-negotiation is enabled, we configure the
 674 *   advertising, and then restart auto-negotiation.  If it is not
 675 *   enabled, then we write the BMCR.
 676 */
 677int genphy_config_aneg(struct phy_device *phydev)
 678{
 679	int result;
 
 
 
 
 
 
 
 
 
 
 
 
 680
 681	if (AUTONEG_ENABLE != phydev->autoneg)
 682		return genphy_setup_forced(phydev);
 683
 684	result = genphy_config_advert(phydev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 685
 686	if (result < 0) /* error */
 687		return result;
 
 
 688
 689	if (result == 0) {
 
 
 
 
 690		/* Advertisement hasn't changed, but maybe aneg was never on to
 691		 * begin with?  Or maybe phy was isolated? */
 
 692		int ctl = phy_read(phydev, MII_BMCR);
 693
 694		if (ctl < 0)
 695			return ctl;
 696
 697		if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
 698			result = 1; /* do restart aneg */
 699	}
 700
 701	/* Only restart aneg if we are advertising something different
 702	 * than we were before.	 */
 703	if (result > 0)
 704		result = genphy_restart_aneg(phydev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 705
 706	return result;
 707}
 708EXPORT_SYMBOL(genphy_config_aneg);
 709
 710/**
 711 * genphy_update_link - update link status in @phydev
 712 * @phydev: target phy_device struct
 713 *
 714 * Description: Update the value in phydev->link to reflect the
 715 *   current link value.  In order to do this, we need to read
 716 *   the status register twice, keeping the second value.
 717 */
 718int genphy_update_link(struct phy_device *phydev)
 719{
 720	int status;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 721
 722	/* Do a fake read */
 723	status = phy_read(phydev, MII_BMSR);
 724
 725	if (status < 0)
 726		return status;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 727
 728	/* Read link and autonegotiation status */
 729	status = phy_read(phydev, MII_BMSR);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 730
 731	if (status < 0)
 732		return status;
 
 
 733
 734	if ((status & BMSR_LSTATUS) == 0)
 735		phydev->link = 0;
 
 
 736	else
 737		phydev->link = 1;
 738
 739	return 0;
 740}
 741EXPORT_SYMBOL(genphy_update_link);
 742
 743/**
 744 * genphy_read_status - check the link status and update current link state
 745 * @phydev: target phy_device struct
 746 *
 747 * Description: Check the link, then figure out the current state
 748 *   by comparing what we advertise with what the link partner
 749 *   advertises.  Start by checking the gigabit possibilities,
 750 *   then move on to 10/100.
 751 */
 752int genphy_read_status(struct phy_device *phydev)
 753{
 754	int adv;
 755	int err;
 756	int lpa;
 757	int lpagb = 0;
 758
 759	/* Update the link, but return if there
 760	 * was an error */
 761	err = genphy_update_link(phydev);
 762	if (err)
 763		return err;
 764
 765	if (AUTONEG_ENABLE == phydev->autoneg) {
 766		if (phydev->supported & (SUPPORTED_1000baseT_Half
 767					| SUPPORTED_1000baseT_Full)) {
 768			lpagb = phy_read(phydev, MII_STAT1000);
 769
 770			if (lpagb < 0)
 771				return lpagb;
 
 
 
 
 772
 773			adv = phy_read(phydev, MII_CTRL1000);
 
 
 
 
 774
 775			if (adv < 0)
 776				return adv;
 
 777
 778			lpagb &= adv << 2;
 779		}
 
 
 
 
 
 780
 781		lpa = phy_read(phydev, MII_LPA);
 
 
 782
 783		if (lpa < 0)
 784			return lpa;
 
 
 
 
 
 
 
 
 
 785
 786		adv = phy_read(phydev, MII_ADVERTISE);
 
 
 
 787
 788		if (adv < 0)
 789			return adv;
 
 790
 791		lpa &= adv;
 
 
 792
 793		phydev->speed = SPEED_10;
 794		phydev->duplex = DUPLEX_HALF;
 795		phydev->pause = phydev->asym_pause = 0;
 
 796
 797		if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
 798			phydev->speed = SPEED_1000;
 
 
 
 
 
 
 
 799
 800			if (lpagb & LPA_1000FULL)
 801				phydev->duplex = DUPLEX_FULL;
 802		} else if (lpa & (LPA_100FULL | LPA_100HALF)) {
 803			phydev->speed = SPEED_100;
 804			
 805			if (lpa & LPA_100FULL)
 806				phydev->duplex = DUPLEX_FULL;
 807		} else
 808			if (lpa & LPA_10FULL)
 809				phydev->duplex = DUPLEX_FULL;
 810
 811		if (phydev->duplex == DUPLEX_FULL){
 812			phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
 813			phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
 814		}
 815	} else {
 816		int bmcr = phy_read(phydev, MII_BMCR);
 
 817		if (bmcr < 0)
 818			return bmcr;
 819
 820		if (bmcr & BMCR_FULLDPLX)
 821			phydev->duplex = DUPLEX_FULL;
 822		else
 823			phydev->duplex = DUPLEX_HALF;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 824
 825		if (bmcr & BMCR_SPEED1000)
 826			phydev->speed = SPEED_1000;
 827		else if (bmcr & BMCR_SPEED100)
 828			phydev->speed = SPEED_100;
 829		else
 830			phydev->speed = SPEED_10;
 831
 832		phydev->pause = phydev->asym_pause = 0;
 833	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 834
 835	return 0;
 836}
 837EXPORT_SYMBOL(genphy_read_status);
 838
 839static int genphy_config_init(struct phy_device *phydev)
 
 
 
 
 
 
 
 
 
 840{
 841	int val;
 842	u32 features;
 843
 844	/* For now, I'll claim that the generic driver supports
 845	 * all possible port types */
 846	features = (SUPPORTED_TP | SUPPORTED_MII
 847			| SUPPORTED_AUI | SUPPORTED_FIBRE |
 848			SUPPORTED_BNC);
 849
 850	/* Do we support autonegotiation? */
 851	val = phy_read(phydev, MII_BMSR);
 852
 853	if (val < 0)
 854		return val;
 855
 856	if (val & BMSR_ANEGCAPABLE)
 857		features |= SUPPORTED_Autoneg;
 858
 859	if (val & BMSR_100FULL)
 860		features |= SUPPORTED_100baseT_Full;
 861	if (val & BMSR_100HALF)
 862		features |= SUPPORTED_100baseT_Half;
 863	if (val & BMSR_10FULL)
 864		features |= SUPPORTED_10baseT_Full;
 865	if (val & BMSR_10HALF)
 866		features |= SUPPORTED_10baseT_Half;
 867
 868	if (val & BMSR_ESTATEN) {
 869		val = phy_read(phydev, MII_ESTATUS);
 870
 871		if (val < 0)
 872			return val;
 873
 874		if (val & ESTATUS_1000_TFULL)
 875			features |= SUPPORTED_1000baseT_Full;
 876		if (val & ESTATUS_1000_THALF)
 877			features |= SUPPORTED_1000baseT_Half;
 
 
 878	}
 879
 880	phydev->supported = features;
 881	phydev->advertising = features;
 
 
 882
 883	return 0;
 884}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 885int genphy_suspend(struct phy_device *phydev)
 886{
 887	int value;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 888
 889	mutex_lock(&phydev->lock);
 
 
 
 
 
 890
 891	value = phy_read(phydev, MII_BMCR);
 892	phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
 
 
 
 
 
 893
 
 
 
 894	mutex_unlock(&phydev->lock);
 895
 896	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 897}
 898EXPORT_SYMBOL(genphy_suspend);
 899
 900int genphy_resume(struct phy_device *phydev)
 
 
 901{
 902	int value;
 
 
 903
 904	mutex_lock(&phydev->lock);
 
 
 
 
 
 905
 906	value = phy_read(phydev, MII_BMCR);
 907	phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
 
 
 
 
 908
 
 
 909	mutex_unlock(&phydev->lock);
 910
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 911	return 0;
 912}
 913EXPORT_SYMBOL(genphy_resume);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 914
 915/**
 916 * phy_probe - probe and init a PHY device
 917 * @dev: device to probe and init
 918 *
 919 * Description: Take care of setting up the phy_device structure,
 920 *   set the state to READY (the driver's init function should
 921 *   set it to STARTING if needed).
 922 */
 923static int phy_probe(struct device *dev)
 924{
 925	struct phy_device *phydev;
 926	struct phy_driver *phydrv;
 927	struct device_driver *drv;
 928	int err = 0;
 929
 930	phydev = to_phy_device(dev);
 931
 932	/* Make sure the driver is held.
 933	 * XXX -- Is this correct? */
 934	drv = get_driver(phydev->dev.driver);
 935	phydrv = to_phy_driver(drv);
 936	phydev->drv = phydrv;
 937
 938	/* Disable the interrupt if the PHY doesn't support it */
 939	if (!(phydrv->flags & PHY_HAS_INTERRUPT))
 
 
 940		phydev->irq = PHY_POLL;
 941
 942	mutex_lock(&phydev->lock);
 
 
 
 
 
 
 
 
 
 
 
 
 943
 944	/* Start out supporting everything. Eventually,
 945	 * a controller will attach, and may modify one
 946	 * or both of these values */
 947	phydev->supported = phydrv->features;
 948	phydev->advertising = phydrv->features;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 949
 950	/* Set the state to READY by default */
 951	phydev->state = PHY_READY;
 952
 953	if (phydev->drv->probe)
 954		err = phydev->drv->probe(phydev);
 
 
 
 955
 956	mutex_unlock(&phydev->lock);
 
 
 
 957
 958	return err;
 959
 960}
 961
 962static int phy_remove(struct device *dev)
 963{
 964	struct phy_device *phydev;
 
 
 965
 966	phydev = to_phy_device(dev);
 
 967
 968	mutex_lock(&phydev->lock);
 969	phydev->state = PHY_DOWN;
 970	mutex_unlock(&phydev->lock);
 971
 972	if (phydev->drv->remove)
 
 
 
 973		phydev->drv->remove(phydev);
 974
 975	put_driver(dev->driver);
 
 
 976	phydev->drv = NULL;
 977
 978	return 0;
 979}
 980
 981/**
 982 * phy_driver_register - register a phy_driver with the PHY layer
 983 * @new_driver: new phy_driver to register
 
 984 */
 985int phy_driver_register(struct phy_driver *new_driver)
 986{
 987	int retval;
 988
 989	new_driver->driver.name = new_driver->name;
 990	new_driver->driver.bus = &mdio_bus_type;
 991	new_driver->driver.probe = phy_probe;
 992	new_driver->driver.remove = phy_remove;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 993
 994	retval = driver_register(&new_driver->driver);
 
 
 
 
 
 
 995
 
 996	if (retval) {
 997		printk(KERN_ERR "%s: Error %d in registering driver\n",
 998				new_driver->name, retval);
 999
1000		return retval;
1001	}
1002
1003	pr_debug("%s: Registered new driver\n", new_driver->name);
1004
1005	return 0;
1006}
1007EXPORT_SYMBOL(phy_driver_register);
1008
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1009void phy_driver_unregister(struct phy_driver *drv)
1010{
1011	driver_unregister(&drv->driver);
1012}
1013EXPORT_SYMBOL(phy_driver_unregister);
1014
 
 
 
 
 
 
 
 
 
1015static struct phy_driver genphy_driver = {
1016	.phy_id		= 0xffffffff,
1017	.phy_id_mask	= 0xffffffff,
1018	.name		= "Generic PHY",
1019	.config_init	= genphy_config_init,
1020	.features	= 0,
1021	.config_aneg	= genphy_config_aneg,
1022	.read_status	= genphy_read_status,
1023	.suspend	= genphy_suspend,
1024	.resume		= genphy_resume,
1025	.driver		= {.owner= THIS_MODULE, },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1026};
1027
 
 
 
 
 
 
 
 
 
 
1028static int __init phy_init(void)
1029{
1030	int rc;
1031
 
 
 
 
 
1032	rc = mdio_bus_init();
1033	if (rc)
1034		return rc;
 
 
 
 
 
 
1035
1036	rc = phy_driver_register(&genphy_driver);
1037	if (rc)
1038		mdio_bus_exit();
 
 
 
 
 
 
 
 
 
 
 
 
1039
1040	return rc;
1041}
1042
1043static void __exit phy_exit(void)
1044{
 
1045	phy_driver_unregister(&genphy_driver);
1046	mdio_bus_exit();
 
 
 
 
1047}
1048
1049subsys_initcall(phy_init);
1050module_exit(phy_exit);