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