cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

phy_device.c (88595B)


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