0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0011
0012 #include <linux/acpi.h>
0013 #include <linux/bitmap.h>
0014 #include <linux/delay.h>
0015 #include <linux/errno.h>
0016 #include <linux/etherdevice.h>
0017 #include <linux/ethtool.h>
0018 #include <linux/init.h>
0019 #include <linux/interrupt.h>
0020 #include <linux/io.h>
0021 #include <linux/kernel.h>
0022 #include <linux/mdio.h>
0023 #include <linux/mii.h>
0024 #include <linux/mm.h>
0025 #include <linux/module.h>
0026 #include <linux/netdevice.h>
0027 #include <linux/phy.h>
0028 #include <linux/phy_led_triggers.h>
0029 #include <linux/property.h>
0030 #include <linux/sfp.h>
0031 #include <linux/skbuff.h>
0032 #include <linux/slab.h>
0033 #include <linux/string.h>
0034 #include <linux/uaccess.h>
0035 #include <linux/unistd.h>
0036
0037 MODULE_DESCRIPTION("PHY library");
0038 MODULE_AUTHOR("Andy Fleming");
0039 MODULE_LICENSE("GPL");
0040
0041 __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_features) __ro_after_init;
0042 EXPORT_SYMBOL_GPL(phy_basic_features);
0043
0044 __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1_features) __ro_after_init;
0045 EXPORT_SYMBOL_GPL(phy_basic_t1_features);
0046
0047 __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_features) __ro_after_init;
0048 EXPORT_SYMBOL_GPL(phy_gbit_features);
0049
0050 __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features) __ro_after_init;
0051 EXPORT_SYMBOL_GPL(phy_gbit_fibre_features);
0052
0053 __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_init;
0054 EXPORT_SYMBOL_GPL(phy_gbit_all_ports_features);
0055
0056 __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init;
0057 EXPORT_SYMBOL_GPL(phy_10gbit_features);
0058
0059 __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features) __ro_after_init;
0060 EXPORT_SYMBOL_GPL(phy_10gbit_fec_features);
0061
0062 const int phy_basic_ports_array[3] = {
0063 ETHTOOL_LINK_MODE_Autoneg_BIT,
0064 ETHTOOL_LINK_MODE_TP_BIT,
0065 ETHTOOL_LINK_MODE_MII_BIT,
0066 };
0067 EXPORT_SYMBOL_GPL(phy_basic_ports_array);
0068
0069 const int phy_fibre_port_array[1] = {
0070 ETHTOOL_LINK_MODE_FIBRE_BIT,
0071 };
0072 EXPORT_SYMBOL_GPL(phy_fibre_port_array);
0073
0074 const int phy_all_ports_features_array[7] = {
0075 ETHTOOL_LINK_MODE_Autoneg_BIT,
0076 ETHTOOL_LINK_MODE_TP_BIT,
0077 ETHTOOL_LINK_MODE_MII_BIT,
0078 ETHTOOL_LINK_MODE_FIBRE_BIT,
0079 ETHTOOL_LINK_MODE_AUI_BIT,
0080 ETHTOOL_LINK_MODE_BNC_BIT,
0081 ETHTOOL_LINK_MODE_Backplane_BIT,
0082 };
0083 EXPORT_SYMBOL_GPL(phy_all_ports_features_array);
0084
0085 const int phy_10_100_features_array[4] = {
0086 ETHTOOL_LINK_MODE_10baseT_Half_BIT,
0087 ETHTOOL_LINK_MODE_10baseT_Full_BIT,
0088 ETHTOOL_LINK_MODE_100baseT_Half_BIT,
0089 ETHTOOL_LINK_MODE_100baseT_Full_BIT,
0090 };
0091 EXPORT_SYMBOL_GPL(phy_10_100_features_array);
0092
0093 const int phy_basic_t1_features_array[3] = {
0094 ETHTOOL_LINK_MODE_TP_BIT,
0095 ETHTOOL_LINK_MODE_10baseT1L_Full_BIT,
0096 ETHTOOL_LINK_MODE_100baseT1_Full_BIT,
0097 };
0098 EXPORT_SYMBOL_GPL(phy_basic_t1_features_array);
0099
0100 const int phy_gbit_features_array[2] = {
0101 ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
0102 ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
0103 };
0104 EXPORT_SYMBOL_GPL(phy_gbit_features_array);
0105
0106 const int phy_10gbit_features_array[1] = {
0107 ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
0108 };
0109 EXPORT_SYMBOL_GPL(phy_10gbit_features_array);
0110
0111 static const int phy_10gbit_fec_features_array[1] = {
0112 ETHTOOL_LINK_MODE_10000baseR_FEC_BIT,
0113 };
0114
0115 __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init;
0116 EXPORT_SYMBOL_GPL(phy_10gbit_full_features);
0117
0118 static const int phy_10gbit_full_features_array[] = {
0119 ETHTOOL_LINK_MODE_10baseT_Full_BIT,
0120 ETHTOOL_LINK_MODE_100baseT_Full_BIT,
0121 ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
0122 ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
0123 };
0124
0125 static void features_init(void)
0126 {
0127
0128 linkmode_set_bit_array(phy_basic_ports_array,
0129 ARRAY_SIZE(phy_basic_ports_array),
0130 phy_basic_features);
0131 linkmode_set_bit_array(phy_10_100_features_array,
0132 ARRAY_SIZE(phy_10_100_features_array),
0133 phy_basic_features);
0134
0135
0136 linkmode_set_bit_array(phy_basic_t1_features_array,
0137 ARRAY_SIZE(phy_basic_t1_features_array),
0138 phy_basic_t1_features);
0139
0140
0141 linkmode_set_bit_array(phy_basic_ports_array,
0142 ARRAY_SIZE(phy_basic_ports_array),
0143 phy_gbit_features);
0144 linkmode_set_bit_array(phy_10_100_features_array,
0145 ARRAY_SIZE(phy_10_100_features_array),
0146 phy_gbit_features);
0147 linkmode_set_bit_array(phy_gbit_features_array,
0148 ARRAY_SIZE(phy_gbit_features_array),
0149 phy_gbit_features);
0150
0151
0152 linkmode_set_bit_array(phy_basic_ports_array,
0153 ARRAY_SIZE(phy_basic_ports_array),
0154 phy_gbit_fibre_features);
0155 linkmode_set_bit_array(phy_10_100_features_array,
0156 ARRAY_SIZE(phy_10_100_features_array),
0157 phy_gbit_fibre_features);
0158 linkmode_set_bit_array(phy_gbit_features_array,
0159 ARRAY_SIZE(phy_gbit_features_array),
0160 phy_gbit_fibre_features);
0161 linkmode_set_bit_array(phy_fibre_port_array,
0162 ARRAY_SIZE(phy_fibre_port_array),
0163 phy_gbit_fibre_features);
0164
0165
0166 linkmode_set_bit_array(phy_all_ports_features_array,
0167 ARRAY_SIZE(phy_all_ports_features_array),
0168 phy_gbit_all_ports_features);
0169 linkmode_set_bit_array(phy_10_100_features_array,
0170 ARRAY_SIZE(phy_10_100_features_array),
0171 phy_gbit_all_ports_features);
0172 linkmode_set_bit_array(phy_gbit_features_array,
0173 ARRAY_SIZE(phy_gbit_features_array),
0174 phy_gbit_all_ports_features);
0175
0176
0177 linkmode_set_bit_array(phy_all_ports_features_array,
0178 ARRAY_SIZE(phy_all_ports_features_array),
0179 phy_10gbit_features);
0180 linkmode_set_bit_array(phy_10_100_features_array,
0181 ARRAY_SIZE(phy_10_100_features_array),
0182 phy_10gbit_features);
0183 linkmode_set_bit_array(phy_gbit_features_array,
0184 ARRAY_SIZE(phy_gbit_features_array),
0185 phy_10gbit_features);
0186 linkmode_set_bit_array(phy_10gbit_features_array,
0187 ARRAY_SIZE(phy_10gbit_features_array),
0188 phy_10gbit_features);
0189
0190
0191 linkmode_set_bit_array(phy_all_ports_features_array,
0192 ARRAY_SIZE(phy_all_ports_features_array),
0193 phy_10gbit_full_features);
0194 linkmode_set_bit_array(phy_10gbit_full_features_array,
0195 ARRAY_SIZE(phy_10gbit_full_features_array),
0196 phy_10gbit_full_features);
0197
0198 linkmode_set_bit_array(phy_10gbit_fec_features_array,
0199 ARRAY_SIZE(phy_10gbit_fec_features_array),
0200 phy_10gbit_fec_features);
0201 }
0202
0203 void phy_device_free(struct phy_device *phydev)
0204 {
0205 put_device(&phydev->mdio.dev);
0206 }
0207 EXPORT_SYMBOL(phy_device_free);
0208
0209 static void phy_mdio_device_free(struct mdio_device *mdiodev)
0210 {
0211 struct phy_device *phydev;
0212
0213 phydev = container_of(mdiodev, struct phy_device, mdio);
0214 phy_device_free(phydev);
0215 }
0216
0217 static void phy_device_release(struct device *dev)
0218 {
0219 kfree(to_phy_device(dev));
0220 }
0221
0222 static void phy_mdio_device_remove(struct mdio_device *mdiodev)
0223 {
0224 struct phy_device *phydev;
0225
0226 phydev = container_of(mdiodev, struct phy_device, mdio);
0227 phy_device_remove(phydev);
0228 }
0229
0230 static struct phy_driver genphy_driver;
0231
0232 static LIST_HEAD(phy_fixup_list);
0233 static DEFINE_MUTEX(phy_fixup_lock);
0234
0235 static bool mdio_bus_phy_may_suspend(struct phy_device *phydev)
0236 {
0237 struct device_driver *drv = phydev->mdio.dev.driver;
0238 struct phy_driver *phydrv = to_phy_driver(drv);
0239 struct net_device *netdev = phydev->attached_dev;
0240
0241 if (!drv || !phydrv->suspend)
0242 return false;
0243
0244
0245
0246
0247
0248
0249 if (!netdev)
0250 goto out;
0251
0252 if (netdev->wol_enabled)
0253 return false;
0254
0255
0256
0257
0258
0259
0260 if (netdev->dev.parent && device_may_wakeup(netdev->dev.parent))
0261 return false;
0262
0263
0264
0265
0266
0267 if (device_may_wakeup(&netdev->dev))
0268 return false;
0269
0270 out:
0271 return !phydev->suspended;
0272 }
0273
0274 static __maybe_unused int mdio_bus_phy_suspend(struct device *dev)
0275 {
0276 struct phy_device *phydev = to_phy_device(dev);
0277
0278 if (phydev->mac_managed_pm)
0279 return 0;
0280
0281
0282
0283
0284
0285 if (phy_interrupt_is_valid(phydev)) {
0286 phydev->irq_suspended = 1;
0287 synchronize_irq(phydev->irq);
0288 }
0289
0290
0291
0292
0293
0294
0295 if (phydev->attached_dev && phydev->adjust_link)
0296 phy_stop_machine(phydev);
0297
0298 if (!mdio_bus_phy_may_suspend(phydev))
0299 return 0;
0300
0301 phydev->suspended_by_mdio_bus = 1;
0302
0303 return phy_suspend(phydev);
0304 }
0305
0306 static __maybe_unused int mdio_bus_phy_resume(struct device *dev)
0307 {
0308 struct phy_device *phydev = to_phy_device(dev);
0309 int ret;
0310
0311 if (phydev->mac_managed_pm)
0312 return 0;
0313
0314 if (!phydev->suspended_by_mdio_bus)
0315 goto no_resume;
0316
0317 phydev->suspended_by_mdio_bus = 0;
0318
0319
0320
0321
0322
0323
0324 WARN_ON(phydev->state != PHY_HALTED && phydev->state != PHY_READY &&
0325 phydev->state != PHY_UP);
0326
0327 ret = phy_init_hw(phydev);
0328 if (ret < 0)
0329 return ret;
0330
0331 ret = phy_resume(phydev);
0332 if (ret < 0)
0333 return ret;
0334 no_resume:
0335 if (phy_interrupt_is_valid(phydev)) {
0336 phydev->irq_suspended = 0;
0337 synchronize_irq(phydev->irq);
0338
0339
0340
0341
0342 if (phydev->irq_rerun) {
0343 phydev->irq_rerun = 0;
0344 enable_irq(phydev->irq);
0345 irq_wake_thread(phydev->irq, phydev);
0346 }
0347 }
0348
0349 if (phydev->attached_dev && phydev->adjust_link)
0350 phy_start_machine(phydev);
0351
0352 return 0;
0353 }
0354
0355 static SIMPLE_DEV_PM_OPS(mdio_bus_phy_pm_ops, mdio_bus_phy_suspend,
0356 mdio_bus_phy_resume);
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
0368 int (*run)(struct phy_device *))
0369 {
0370 struct phy_fixup *fixup = kzalloc(sizeof(*fixup), GFP_KERNEL);
0371
0372 if (!fixup)
0373 return -ENOMEM;
0374
0375 strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
0376 fixup->phy_uid = phy_uid;
0377 fixup->phy_uid_mask = phy_uid_mask;
0378 fixup->run = run;
0379
0380 mutex_lock(&phy_fixup_lock);
0381 list_add_tail(&fixup->list, &phy_fixup_list);
0382 mutex_unlock(&phy_fixup_lock);
0383
0384 return 0;
0385 }
0386 EXPORT_SYMBOL(phy_register_fixup);
0387
0388
0389 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
0390 int (*run)(struct phy_device *))
0391 {
0392 return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
0393 }
0394 EXPORT_SYMBOL(phy_register_fixup_for_uid);
0395
0396
0397 int phy_register_fixup_for_id(const char *bus_id,
0398 int (*run)(struct phy_device *))
0399 {
0400 return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
0401 }
0402 EXPORT_SYMBOL(phy_register_fixup_for_id);
0403
0404
0405
0406
0407
0408
0409
0410 int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask)
0411 {
0412 struct list_head *pos, *n;
0413 struct phy_fixup *fixup;
0414 int ret;
0415
0416 ret = -ENODEV;
0417
0418 mutex_lock(&phy_fixup_lock);
0419 list_for_each_safe(pos, n, &phy_fixup_list) {
0420 fixup = list_entry(pos, struct phy_fixup, list);
0421
0422 if ((!strcmp(fixup->bus_id, bus_id)) &&
0423 ((fixup->phy_uid & phy_uid_mask) ==
0424 (phy_uid & phy_uid_mask))) {
0425 list_del(&fixup->list);
0426 kfree(fixup);
0427 ret = 0;
0428 break;
0429 }
0430 }
0431 mutex_unlock(&phy_fixup_lock);
0432
0433 return ret;
0434 }
0435 EXPORT_SYMBOL(phy_unregister_fixup);
0436
0437
0438 int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask)
0439 {
0440 return phy_unregister_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask);
0441 }
0442 EXPORT_SYMBOL(phy_unregister_fixup_for_uid);
0443
0444
0445 int phy_unregister_fixup_for_id(const char *bus_id)
0446 {
0447 return phy_unregister_fixup(bus_id, PHY_ANY_UID, 0xffffffff);
0448 }
0449 EXPORT_SYMBOL(phy_unregister_fixup_for_id);
0450
0451
0452
0453
0454 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
0455 {
0456 if (strcmp(fixup->bus_id, phydev_name(phydev)) != 0)
0457 if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
0458 return 0;
0459
0460 if ((fixup->phy_uid & fixup->phy_uid_mask) !=
0461 (phydev->phy_id & fixup->phy_uid_mask))
0462 if (fixup->phy_uid != PHY_ANY_UID)
0463 return 0;
0464
0465 return 1;
0466 }
0467
0468
0469 static int phy_scan_fixups(struct phy_device *phydev)
0470 {
0471 struct phy_fixup *fixup;
0472
0473 mutex_lock(&phy_fixup_lock);
0474 list_for_each_entry(fixup, &phy_fixup_list, list) {
0475 if (phy_needs_fixup(phydev, fixup)) {
0476 int err = fixup->run(phydev);
0477
0478 if (err < 0) {
0479 mutex_unlock(&phy_fixup_lock);
0480 return err;
0481 }
0482 phydev->has_fixups = true;
0483 }
0484 }
0485 mutex_unlock(&phy_fixup_lock);
0486
0487 return 0;
0488 }
0489
0490 static int phy_bus_match(struct device *dev, struct device_driver *drv)
0491 {
0492 struct phy_device *phydev = to_phy_device(dev);
0493 struct phy_driver *phydrv = to_phy_driver(drv);
0494 const int num_ids = ARRAY_SIZE(phydev->c45_ids.device_ids);
0495 int i;
0496
0497 if (!(phydrv->mdiodrv.flags & MDIO_DEVICE_IS_PHY))
0498 return 0;
0499
0500 if (phydrv->match_phy_device)
0501 return phydrv->match_phy_device(phydev);
0502
0503 if (phydev->is_c45) {
0504 for (i = 1; i < num_ids; i++) {
0505 if (phydev->c45_ids.device_ids[i] == 0xffffffff)
0506 continue;
0507
0508 if ((phydrv->phy_id & phydrv->phy_id_mask) ==
0509 (phydev->c45_ids.device_ids[i] &
0510 phydrv->phy_id_mask))
0511 return 1;
0512 }
0513 return 0;
0514 } else {
0515 return (phydrv->phy_id & phydrv->phy_id_mask) ==
0516 (phydev->phy_id & phydrv->phy_id_mask);
0517 }
0518 }
0519
0520 static ssize_t
0521 phy_id_show(struct device *dev, struct device_attribute *attr, char *buf)
0522 {
0523 struct phy_device *phydev = to_phy_device(dev);
0524
0525 return sprintf(buf, "0x%.8lx\n", (unsigned long)phydev->phy_id);
0526 }
0527 static DEVICE_ATTR_RO(phy_id);
0528
0529 static ssize_t
0530 phy_interface_show(struct device *dev, struct device_attribute *attr, char *buf)
0531 {
0532 struct phy_device *phydev = to_phy_device(dev);
0533 const char *mode = NULL;
0534
0535 if (phy_is_internal(phydev))
0536 mode = "internal";
0537 else
0538 mode = phy_modes(phydev->interface);
0539
0540 return sprintf(buf, "%s\n", mode);
0541 }
0542 static DEVICE_ATTR_RO(phy_interface);
0543
0544 static ssize_t
0545 phy_has_fixups_show(struct device *dev, struct device_attribute *attr,
0546 char *buf)
0547 {
0548 struct phy_device *phydev = to_phy_device(dev);
0549
0550 return sprintf(buf, "%d\n", phydev->has_fixups);
0551 }
0552 static DEVICE_ATTR_RO(phy_has_fixups);
0553
0554 static ssize_t phy_dev_flags_show(struct device *dev,
0555 struct device_attribute *attr,
0556 char *buf)
0557 {
0558 struct phy_device *phydev = to_phy_device(dev);
0559
0560 return sprintf(buf, "0x%08x\n", phydev->dev_flags);
0561 }
0562 static DEVICE_ATTR_RO(phy_dev_flags);
0563
0564 static struct attribute *phy_dev_attrs[] = {
0565 &dev_attr_phy_id.attr,
0566 &dev_attr_phy_interface.attr,
0567 &dev_attr_phy_has_fixups.attr,
0568 &dev_attr_phy_dev_flags.attr,
0569 NULL,
0570 };
0571 ATTRIBUTE_GROUPS(phy_dev);
0572
0573 static const struct device_type mdio_bus_phy_type = {
0574 .name = "PHY",
0575 .groups = phy_dev_groups,
0576 .release = phy_device_release,
0577 .pm = pm_ptr(&mdio_bus_phy_pm_ops),
0578 };
0579
0580 static int phy_request_driver_module(struct phy_device *dev, u32 phy_id)
0581 {
0582 int ret;
0583
0584 ret = request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT,
0585 MDIO_ID_ARGS(phy_id));
0586
0587
0588
0589
0590
0591 if (IS_ENABLED(CONFIG_MODULES) && ret < 0 && ret != -ENOENT) {
0592 phydev_err(dev, "error %d loading PHY driver module for ID 0x%08lx\n",
0593 ret, (unsigned long)phy_id);
0594 return ret;
0595 }
0596
0597 return 0;
0598 }
0599
0600 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
0601 bool is_c45,
0602 struct phy_c45_device_ids *c45_ids)
0603 {
0604 struct phy_device *dev;
0605 struct mdio_device *mdiodev;
0606 int ret = 0;
0607
0608
0609 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
0610 if (!dev)
0611 return ERR_PTR(-ENOMEM);
0612
0613 mdiodev = &dev->mdio;
0614 mdiodev->dev.parent = &bus->dev;
0615 mdiodev->dev.bus = &mdio_bus_type;
0616 mdiodev->dev.type = &mdio_bus_phy_type;
0617 mdiodev->bus = bus;
0618 mdiodev->bus_match = phy_bus_match;
0619 mdiodev->addr = addr;
0620 mdiodev->flags = MDIO_DEVICE_FLAG_PHY;
0621 mdiodev->device_free = phy_mdio_device_free;
0622 mdiodev->device_remove = phy_mdio_device_remove;
0623
0624 dev->speed = SPEED_UNKNOWN;
0625 dev->duplex = DUPLEX_UNKNOWN;
0626 dev->pause = 0;
0627 dev->asym_pause = 0;
0628 dev->link = 0;
0629 dev->port = PORT_TP;
0630 dev->interface = PHY_INTERFACE_MODE_GMII;
0631
0632 dev->autoneg = AUTONEG_ENABLE;
0633
0634 dev->pma_extable = -ENODATA;
0635 dev->is_c45 = is_c45;
0636 dev->phy_id = phy_id;
0637 if (c45_ids)
0638 dev->c45_ids = *c45_ids;
0639 dev->irq = bus->irq[addr];
0640
0641 dev_set_name(&mdiodev->dev, PHY_ID_FMT, bus->id, addr);
0642 device_initialize(&mdiodev->dev);
0643
0644 dev->state = PHY_DOWN;
0645
0646 mutex_init(&dev->lock);
0647 INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659 if (is_c45 && c45_ids) {
0660 const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
0661 int i;
0662
0663 for (i = 1; i < num_ids; i++) {
0664 if (c45_ids->device_ids[i] == 0xffffffff)
0665 continue;
0666
0667 ret = phy_request_driver_module(dev,
0668 c45_ids->device_ids[i]);
0669 if (ret)
0670 break;
0671 }
0672 } else {
0673 ret = phy_request_driver_module(dev, phy_id);
0674 }
0675
0676 if (ret) {
0677 put_device(&mdiodev->dev);
0678 dev = ERR_PTR(ret);
0679 }
0680
0681 return dev;
0682 }
0683 EXPORT_SYMBOL(phy_device_create);
0684
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695
0696 static int phy_c45_probe_present(struct mii_bus *bus, int prtad, int devad)
0697 {
0698 int stat2;
0699
0700 stat2 = mdiobus_c45_read(bus, prtad, devad, MDIO_STAT2);
0701 if (stat2 < 0)
0702 return stat2;
0703
0704 return (stat2 & MDIO_STAT2_DEVPRST) == MDIO_STAT2_DEVPRST_VAL;
0705 }
0706
0707
0708
0709
0710
0711
0712
0713
0714
0715
0716
0717
0718 static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
0719 u32 *devices_in_package)
0720 {
0721 int phy_reg;
0722
0723 phy_reg = mdiobus_c45_read(bus, addr, dev_addr, MDIO_DEVS2);
0724 if (phy_reg < 0)
0725 return -EIO;
0726 *devices_in_package = phy_reg << 16;
0727
0728 phy_reg = mdiobus_c45_read(bus, addr, dev_addr, MDIO_DEVS1);
0729 if (phy_reg < 0)
0730 return -EIO;
0731 *devices_in_package |= phy_reg;
0732
0733 return 0;
0734 }
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749 static int get_phy_c45_ids(struct mii_bus *bus, int addr,
0750 struct phy_c45_device_ids *c45_ids)
0751 {
0752 const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
0753 u32 devs_in_pkg = 0;
0754 int i, ret, phy_reg;
0755
0756
0757
0758
0759 for (i = 1; i < MDIO_MMD_NUM && (devs_in_pkg == 0 ||
0760 (devs_in_pkg & 0x1fffffff) == 0x1fffffff); i++) {
0761 if (i == MDIO_MMD_VEND1 || i == MDIO_MMD_VEND2) {
0762
0763
0764
0765
0766
0767
0768 ret = phy_c45_probe_present(bus, addr, i);
0769 if (ret < 0)
0770 return -EIO;
0771
0772 if (!ret)
0773 continue;
0774 }
0775 phy_reg = get_phy_c45_devs_in_pkg(bus, addr, i, &devs_in_pkg);
0776 if (phy_reg < 0)
0777 return -EIO;
0778 }
0779
0780 if ((devs_in_pkg & 0x1fffffff) == 0x1fffffff) {
0781
0782
0783
0784
0785 phy_reg = get_phy_c45_devs_in_pkg(bus, addr, 0, &devs_in_pkg);
0786 if (phy_reg < 0)
0787 return -EIO;
0788
0789
0790 if ((devs_in_pkg & 0x1fffffff) == 0x1fffffff)
0791 return -ENODEV;
0792 }
0793
0794
0795 for (i = 1; i < num_ids; i++) {
0796 if (!(devs_in_pkg & (1 << i)))
0797 continue;
0798
0799 if (i == MDIO_MMD_VEND1 || i == MDIO_MMD_VEND2) {
0800
0801
0802
0803
0804 ret = phy_c45_probe_present(bus, addr, i);
0805 if (ret < 0)
0806 return ret;
0807
0808 if (!ret)
0809 continue;
0810 }
0811
0812 phy_reg = mdiobus_c45_read(bus, addr, i, MII_PHYSID1);
0813 if (phy_reg < 0)
0814 return -EIO;
0815 c45_ids->device_ids[i] = phy_reg << 16;
0816
0817 phy_reg = mdiobus_c45_read(bus, addr, i, MII_PHYSID2);
0818 if (phy_reg < 0)
0819 return -EIO;
0820 c45_ids->device_ids[i] |= phy_reg;
0821 }
0822
0823 c45_ids->devices_in_package = devs_in_pkg;
0824
0825 c45_ids->mmds_present = devs_in_pkg & ~BIT(0);
0826
0827 return 0;
0828 }
0829
0830
0831
0832
0833
0834
0835
0836
0837
0838
0839
0840
0841 static int get_phy_c22_id(struct mii_bus *bus, int addr, u32 *phy_id)
0842 {
0843 int phy_reg;
0844
0845
0846 phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
0847 if (phy_reg < 0) {
0848
0849 return (phy_reg == -EIO || phy_reg == -ENODEV) ? -ENODEV : -EIO;
0850 }
0851
0852 *phy_id = phy_reg << 16;
0853
0854
0855 phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
0856 if (phy_reg < 0) {
0857
0858 return (phy_reg == -EIO || phy_reg == -ENODEV) ? -ENODEV : -EIO;
0859 }
0860
0861 *phy_id |= phy_reg;
0862
0863
0864 if ((*phy_id & 0x1fffffff) == 0x1fffffff)
0865 return -ENODEV;
0866
0867 return 0;
0868 }
0869
0870
0871
0872
0873 int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id)
0874 {
0875 unsigned int upper, lower;
0876 const char *cp;
0877 int ret;
0878
0879 ret = fwnode_property_read_string(fwnode, "compatible", &cp);
0880 if (ret)
0881 return ret;
0882
0883 if (sscanf(cp, "ethernet-phy-id%4x.%4x", &upper, &lower) != 2)
0884 return -EINVAL;
0885
0886 *phy_id = ((upper & GENMASK(15, 0)) << 16) | (lower & GENMASK(15, 0));
0887 return 0;
0888 }
0889 EXPORT_SYMBOL(fwnode_get_phy_id);
0890
0891
0892
0893
0894
0895
0896
0897
0898
0899
0900
0901
0902
0903
0904
0905
0906
0907
0908
0909
0910 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
0911 {
0912 struct phy_c45_device_ids c45_ids;
0913 u32 phy_id = 0;
0914 int r;
0915
0916 c45_ids.devices_in_package = 0;
0917 c45_ids.mmds_present = 0;
0918 memset(c45_ids.device_ids, 0xff, sizeof(c45_ids.device_ids));
0919
0920 if (is_c45)
0921 r = get_phy_c45_ids(bus, addr, &c45_ids);
0922 else
0923 r = get_phy_c22_id(bus, addr, &phy_id);
0924
0925 if (r)
0926 return ERR_PTR(r);
0927
0928
0929
0930
0931
0932
0933 if (!is_c45 && phy_id == 0 && bus->probe_capabilities >= MDIOBUS_C45) {
0934 r = get_phy_c45_ids(bus, addr, &c45_ids);
0935 if (!r)
0936 return phy_device_create(bus, addr, phy_id,
0937 true, &c45_ids);
0938 }
0939
0940 return phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
0941 }
0942 EXPORT_SYMBOL(get_phy_device);
0943
0944
0945
0946
0947
0948 int phy_device_register(struct phy_device *phydev)
0949 {
0950 int err;
0951
0952 err = mdiobus_register_device(&phydev->mdio);
0953 if (err)
0954 return err;
0955
0956
0957 phy_device_reset(phydev, 0);
0958
0959
0960 err = phy_scan_fixups(phydev);
0961 if (err) {
0962 phydev_err(phydev, "failed to initialize\n");
0963 goto out;
0964 }
0965
0966 err = device_add(&phydev->mdio.dev);
0967 if (err) {
0968 phydev_err(phydev, "failed to add\n");
0969 goto out;
0970 }
0971
0972 return 0;
0973
0974 out:
0975
0976 phy_device_reset(phydev, 1);
0977
0978 mdiobus_unregister_device(&phydev->mdio);
0979 return err;
0980 }
0981 EXPORT_SYMBOL(phy_device_register);
0982
0983
0984
0985
0986
0987
0988
0989
0990
0991 void phy_device_remove(struct phy_device *phydev)
0992 {
0993 unregister_mii_timestamper(phydev->mii_ts);
0994
0995 device_del(&phydev->mdio.dev);
0996
0997
0998 phy_device_reset(phydev, 1);
0999
1000 mdiobus_unregister_device(&phydev->mdio);
1001 }
1002 EXPORT_SYMBOL(phy_device_remove);
1003
1004
1005
1006
1007
1008
1009
1010
1011 int phy_get_c45_ids(struct phy_device *phydev)
1012 {
1013 return get_phy_c45_ids(phydev->mdio.bus, phydev->mdio.addr,
1014 &phydev->c45_ids);
1015 }
1016 EXPORT_SYMBOL(phy_get_c45_ids);
1017
1018
1019
1020
1021
1022 struct phy_device *phy_find_first(struct mii_bus *bus)
1023 {
1024 struct phy_device *phydev;
1025 int addr;
1026
1027 for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
1028 phydev = mdiobus_get_phy(bus, addr);
1029 if (phydev)
1030 return phydev;
1031 }
1032 return NULL;
1033 }
1034 EXPORT_SYMBOL(phy_find_first);
1035
1036 static void phy_link_change(struct phy_device *phydev, bool up)
1037 {
1038 struct net_device *netdev = phydev->attached_dev;
1039
1040 if (up)
1041 netif_carrier_on(netdev);
1042 else
1043 netif_carrier_off(netdev);
1044 phydev->adjust_link(netdev);
1045 if (phydev->mii_ts && phydev->mii_ts->link_state)
1046 phydev->mii_ts->link_state(phydev->mii_ts, phydev);
1047 }
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061 static void phy_prepare_link(struct phy_device *phydev,
1062 void (*handler)(struct net_device *))
1063 {
1064 phydev->adjust_link = handler;
1065 }
1066
1067
1068
1069
1070
1071
1072
1073
1074 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
1075 void (*handler)(struct net_device *),
1076 phy_interface_t interface)
1077 {
1078 int rc;
1079
1080 if (!dev)
1081 return -EINVAL;
1082
1083 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
1084 if (rc)
1085 return rc;
1086
1087 phy_prepare_link(phydev, handler);
1088 if (phy_interrupt_is_valid(phydev))
1089 phy_request_interrupt(phydev);
1090
1091 return 0;
1092 }
1093 EXPORT_SYMBOL(phy_connect_direct);
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110 struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
1111 void (*handler)(struct net_device *),
1112 phy_interface_t interface)
1113 {
1114 struct phy_device *phydev;
1115 struct device *d;
1116 int rc;
1117
1118
1119
1120
1121 d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
1122 if (!d) {
1123 pr_err("PHY %s not found\n", bus_id);
1124 return ERR_PTR(-ENODEV);
1125 }
1126 phydev = to_phy_device(d);
1127
1128 rc = phy_connect_direct(dev, phydev, handler, interface);
1129 put_device(d);
1130 if (rc)
1131 return ERR_PTR(rc);
1132
1133 return phydev;
1134 }
1135 EXPORT_SYMBOL(phy_connect);
1136
1137
1138
1139
1140
1141
1142 void phy_disconnect(struct phy_device *phydev)
1143 {
1144 if (phy_is_started(phydev))
1145 phy_stop(phydev);
1146
1147 if (phy_interrupt_is_valid(phydev))
1148 phy_free_interrupt(phydev);
1149
1150 phydev->adjust_link = NULL;
1151
1152 phy_detach(phydev);
1153 }
1154 EXPORT_SYMBOL(phy_disconnect);
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174 static int phy_poll_reset(struct phy_device *phydev)
1175 {
1176
1177 int ret, val;
1178
1179 ret = phy_read_poll_timeout(phydev, MII_BMCR, val, !(val & BMCR_RESET),
1180 50000, 600000, true);
1181 if (ret)
1182 return ret;
1183
1184
1185
1186 msleep(1);
1187 return 0;
1188 }
1189
1190 int phy_init_hw(struct phy_device *phydev)
1191 {
1192 int ret = 0;
1193
1194
1195 phy_device_reset(phydev, 0);
1196
1197 if (!phydev->drv)
1198 return 0;
1199
1200 if (phydev->drv->soft_reset) {
1201 ret = phydev->drv->soft_reset(phydev);
1202
1203 if (!ret)
1204 phydev->suspended = 0;
1205 }
1206
1207 if (ret < 0)
1208 return ret;
1209
1210 ret = phy_scan_fixups(phydev);
1211 if (ret < 0)
1212 return ret;
1213
1214 if (phydev->drv->config_init) {
1215 ret = phydev->drv->config_init(phydev);
1216 if (ret < 0)
1217 return ret;
1218 }
1219
1220 if (phydev->drv->config_intr) {
1221 ret = phydev->drv->config_intr(phydev);
1222 if (ret < 0)
1223 return ret;
1224 }
1225
1226 return 0;
1227 }
1228 EXPORT_SYMBOL(phy_init_hw);
1229
1230 void phy_attached_info(struct phy_device *phydev)
1231 {
1232 phy_attached_print(phydev, NULL);
1233 }
1234 EXPORT_SYMBOL(phy_attached_info);
1235
1236 #define ATTACHED_FMT "attached PHY driver %s(mii_bus:phy_addr=%s, irq=%s)"
1237 char *phy_attached_info_irq(struct phy_device *phydev)
1238 {
1239 char *irq_str;
1240 char irq_num[8];
1241
1242 switch(phydev->irq) {
1243 case PHY_POLL:
1244 irq_str = "POLL";
1245 break;
1246 case PHY_MAC_INTERRUPT:
1247 irq_str = "MAC";
1248 break;
1249 default:
1250 snprintf(irq_num, sizeof(irq_num), "%d", phydev->irq);
1251 irq_str = irq_num;
1252 break;
1253 }
1254
1255 return kasprintf(GFP_KERNEL, "%s", irq_str);
1256 }
1257 EXPORT_SYMBOL(phy_attached_info_irq);
1258
1259 void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
1260 {
1261 const char *unbound = phydev->drv ? "" : "[unbound] ";
1262 char *irq_str = phy_attached_info_irq(phydev);
1263
1264 if (!fmt) {
1265 phydev_info(phydev, ATTACHED_FMT "\n", unbound,
1266 phydev_name(phydev), irq_str);
1267 } else {
1268 va_list ap;
1269
1270 phydev_info(phydev, ATTACHED_FMT, unbound,
1271 phydev_name(phydev), irq_str);
1272
1273 va_start(ap, fmt);
1274 vprintk(fmt, ap);
1275 va_end(ap);
1276 }
1277 kfree(irq_str);
1278 }
1279 EXPORT_SYMBOL(phy_attached_print);
1280
1281 static void phy_sysfs_create_links(struct phy_device *phydev)
1282 {
1283 struct net_device *dev = phydev->attached_dev;
1284 int err;
1285
1286 if (!dev)
1287 return;
1288
1289 err = sysfs_create_link(&phydev->mdio.dev.kobj, &dev->dev.kobj,
1290 "attached_dev");
1291 if (err)
1292 return;
1293
1294 err = sysfs_create_link_nowarn(&dev->dev.kobj,
1295 &phydev->mdio.dev.kobj,
1296 "phydev");
1297 if (err) {
1298 dev_err(&dev->dev, "could not add device link to %s err %d\n",
1299 kobject_name(&phydev->mdio.dev.kobj),
1300 err);
1301
1302
1303
1304 }
1305
1306 phydev->sysfs_links = true;
1307 }
1308
1309 static ssize_t
1310 phy_standalone_show(struct device *dev, struct device_attribute *attr,
1311 char *buf)
1312 {
1313 struct phy_device *phydev = to_phy_device(dev);
1314
1315 return sprintf(buf, "%d\n", !phydev->attached_dev);
1316 }
1317 static DEVICE_ATTR_RO(phy_standalone);
1318
1319
1320
1321
1322
1323
1324
1325
1326 void phy_sfp_attach(void *upstream, struct sfp_bus *bus)
1327 {
1328 struct phy_device *phydev = upstream;
1329
1330 if (phydev->attached_dev)
1331 phydev->attached_dev->sfp_bus = bus;
1332 phydev->sfp_bus_attached = true;
1333 }
1334 EXPORT_SYMBOL(phy_sfp_attach);
1335
1336
1337
1338
1339
1340
1341
1342
1343 void phy_sfp_detach(void *upstream, struct sfp_bus *bus)
1344 {
1345 struct phy_device *phydev = upstream;
1346
1347 if (phydev->attached_dev)
1348 phydev->attached_dev->sfp_bus = NULL;
1349 phydev->sfp_bus_attached = false;
1350 }
1351 EXPORT_SYMBOL(phy_sfp_detach);
1352
1353
1354
1355
1356
1357
1358 int phy_sfp_probe(struct phy_device *phydev,
1359 const struct sfp_upstream_ops *ops)
1360 {
1361 struct sfp_bus *bus;
1362 int ret = 0;
1363
1364 if (phydev->mdio.dev.fwnode) {
1365 bus = sfp_bus_find_fwnode(phydev->mdio.dev.fwnode);
1366 if (IS_ERR(bus))
1367 return PTR_ERR(bus);
1368
1369 phydev->sfp_bus = bus;
1370
1371 ret = sfp_bus_add_upstream(bus, phydev, ops);
1372 sfp_bus_put(bus);
1373 }
1374 return ret;
1375 }
1376 EXPORT_SYMBOL(phy_sfp_probe);
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393 int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
1394 u32 flags, phy_interface_t interface)
1395 {
1396 struct mii_bus *bus = phydev->mdio.bus;
1397 struct device *d = &phydev->mdio.dev;
1398 struct module *ndev_owner = NULL;
1399 bool using_genphy = false;
1400 int err;
1401
1402
1403
1404
1405
1406
1407 if (dev)
1408 ndev_owner = dev->dev.parent->driver->owner;
1409 if (ndev_owner != bus->owner && !try_module_get(bus->owner)) {
1410 phydev_err(phydev, "failed to get the bus module\n");
1411 return -EIO;
1412 }
1413
1414 get_device(d);
1415
1416
1417
1418
1419 if (!d->driver) {
1420 if (phydev->is_c45)
1421 d->driver = &genphy_c45_driver.mdiodrv.driver;
1422 else
1423 d->driver = &genphy_driver.mdiodrv.driver;
1424
1425 using_genphy = true;
1426 }
1427
1428 if (!try_module_get(d->driver->owner)) {
1429 phydev_err(phydev, "failed to get the device driver module\n");
1430 err = -EIO;
1431 goto error_put_device;
1432 }
1433
1434 if (using_genphy) {
1435 err = d->driver->probe(d);
1436 if (err >= 0)
1437 err = device_bind_driver(d);
1438
1439 if (err)
1440 goto error_module_put;
1441 }
1442
1443 if (phydev->attached_dev) {
1444 dev_err(&dev->dev, "PHY already attached\n");
1445 err = -EBUSY;
1446 goto error;
1447 }
1448
1449 phydev->phy_link_change = phy_link_change;
1450 if (dev) {
1451 phydev->attached_dev = dev;
1452 dev->phydev = phydev;
1453
1454 if (phydev->sfp_bus_attached)
1455 dev->sfp_bus = phydev->sfp_bus;
1456 else if (dev->sfp_bus)
1457 phydev->is_on_sfp_module = true;
1458 }
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468 phydev->sysfs_links = false;
1469
1470 phy_sysfs_create_links(phydev);
1471
1472 if (!phydev->attached_dev) {
1473 err = sysfs_create_file(&phydev->mdio.dev.kobj,
1474 &dev_attr_phy_standalone.attr);
1475 if (err)
1476 phydev_err(phydev, "error creating 'phy_standalone' sysfs entry\n");
1477 }
1478
1479 phydev->dev_flags |= flags;
1480
1481 phydev->interface = interface;
1482
1483 phydev->state = PHY_READY;
1484
1485 phydev->interrupts = PHY_INTERRUPT_DISABLED;
1486
1487
1488
1489
1490
1491
1492 if (using_genphy)
1493 phydev->port = PORT_MII;
1494
1495
1496
1497
1498 if (dev)
1499 netif_carrier_off(phydev->attached_dev);
1500
1501
1502
1503
1504
1505 err = phy_init_hw(phydev);
1506 if (err)
1507 goto error;
1508
1509 phy_resume(phydev);
1510 phy_led_triggers_register(phydev);
1511
1512 return err;
1513
1514 error:
1515
1516 phy_detach(phydev);
1517 return err;
1518
1519 error_module_put:
1520 module_put(d->driver->owner);
1521 error_put_device:
1522 put_device(d);
1523 if (ndev_owner != bus->owner)
1524 module_put(bus->owner);
1525 return err;
1526 }
1527 EXPORT_SYMBOL(phy_attach_direct);
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538 struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
1539 phy_interface_t interface)
1540 {
1541 struct bus_type *bus = &mdio_bus_type;
1542 struct phy_device *phydev;
1543 struct device *d;
1544 int rc;
1545
1546 if (!dev)
1547 return ERR_PTR(-EINVAL);
1548
1549
1550
1551
1552 d = bus_find_device_by_name(bus, NULL, bus_id);
1553 if (!d) {
1554 pr_err("PHY %s not found\n", bus_id);
1555 return ERR_PTR(-ENODEV);
1556 }
1557 phydev = to_phy_device(d);
1558
1559 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
1560 put_device(d);
1561 if (rc)
1562 return ERR_PTR(rc);
1563
1564 return phydev;
1565 }
1566 EXPORT_SYMBOL(phy_attach);
1567
1568 static bool phy_driver_is_genphy_kind(struct phy_device *phydev,
1569 struct device_driver *driver)
1570 {
1571 struct device *d = &phydev->mdio.dev;
1572 bool ret = false;
1573
1574 if (!phydev->drv)
1575 return ret;
1576
1577 get_device(d);
1578 ret = d->driver == driver;
1579 put_device(d);
1580
1581 return ret;
1582 }
1583
1584 bool phy_driver_is_genphy(struct phy_device *phydev)
1585 {
1586 return phy_driver_is_genphy_kind(phydev,
1587 &genphy_driver.mdiodrv.driver);
1588 }
1589 EXPORT_SYMBOL_GPL(phy_driver_is_genphy);
1590
1591 bool phy_driver_is_genphy_10g(struct phy_device *phydev)
1592 {
1593 return phy_driver_is_genphy_kind(phydev,
1594 &genphy_c45_driver.mdiodrv.driver);
1595 }
1596 EXPORT_SYMBOL_GPL(phy_driver_is_genphy_10g);
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624 int phy_package_join(struct phy_device *phydev, int addr, size_t priv_size)
1625 {
1626 struct mii_bus *bus = phydev->mdio.bus;
1627 struct phy_package_shared *shared;
1628 int ret;
1629
1630 if (addr < 0 || addr >= PHY_MAX_ADDR)
1631 return -EINVAL;
1632
1633 mutex_lock(&bus->shared_lock);
1634 shared = bus->shared[addr];
1635 if (!shared) {
1636 ret = -ENOMEM;
1637 shared = kzalloc(sizeof(*shared), GFP_KERNEL);
1638 if (!shared)
1639 goto err_unlock;
1640 if (priv_size) {
1641 shared->priv = kzalloc(priv_size, GFP_KERNEL);
1642 if (!shared->priv)
1643 goto err_free;
1644 shared->priv_size = priv_size;
1645 }
1646 shared->addr = addr;
1647 refcount_set(&shared->refcnt, 1);
1648 bus->shared[addr] = shared;
1649 } else {
1650 ret = -EINVAL;
1651 if (priv_size && priv_size != shared->priv_size)
1652 goto err_unlock;
1653 refcount_inc(&shared->refcnt);
1654 }
1655 mutex_unlock(&bus->shared_lock);
1656
1657 phydev->shared = shared;
1658
1659 return 0;
1660
1661 err_free:
1662 kfree(shared);
1663 err_unlock:
1664 mutex_unlock(&bus->shared_lock);
1665 return ret;
1666 }
1667 EXPORT_SYMBOL_GPL(phy_package_join);
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677 void phy_package_leave(struct phy_device *phydev)
1678 {
1679 struct phy_package_shared *shared = phydev->shared;
1680 struct mii_bus *bus = phydev->mdio.bus;
1681
1682 if (!shared)
1683 return;
1684
1685 if (refcount_dec_and_mutex_lock(&shared->refcnt, &bus->shared_lock)) {
1686 bus->shared[shared->addr] = NULL;
1687 mutex_unlock(&bus->shared_lock);
1688 kfree(shared->priv);
1689 kfree(shared);
1690 }
1691
1692 phydev->shared = NULL;
1693 }
1694 EXPORT_SYMBOL_GPL(phy_package_leave);
1695
1696 static void devm_phy_package_leave(struct device *dev, void *res)
1697 {
1698 phy_package_leave(*(struct phy_device **)res);
1699 }
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712 int devm_phy_package_join(struct device *dev, struct phy_device *phydev,
1713 int addr, size_t priv_size)
1714 {
1715 struct phy_device **ptr;
1716 int ret;
1717
1718 ptr = devres_alloc(devm_phy_package_leave, sizeof(*ptr),
1719 GFP_KERNEL);
1720 if (!ptr)
1721 return -ENOMEM;
1722
1723 ret = phy_package_join(phydev, addr, priv_size);
1724
1725 if (!ret) {
1726 *ptr = phydev;
1727 devres_add(dev, ptr);
1728 } else {
1729 devres_free(ptr);
1730 }
1731
1732 return ret;
1733 }
1734 EXPORT_SYMBOL_GPL(devm_phy_package_join);
1735
1736
1737
1738
1739
1740
1741
1742
1743 void phy_detach(struct phy_device *phydev)
1744 {
1745 struct net_device *dev = phydev->attached_dev;
1746 struct module *ndev_owner = NULL;
1747 struct mii_bus *bus;
1748
1749 if (phydev->sysfs_links) {
1750 if (dev)
1751 sysfs_remove_link(&dev->dev.kobj, "phydev");
1752 sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev");
1753 }
1754
1755 if (!phydev->attached_dev)
1756 sysfs_remove_file(&phydev->mdio.dev.kobj,
1757 &dev_attr_phy_standalone.attr);
1758
1759 phy_suspend(phydev);
1760 if (dev) {
1761 phydev->attached_dev->phydev = NULL;
1762 phydev->attached_dev = NULL;
1763 }
1764 phydev->phylink = NULL;
1765
1766 phy_led_triggers_unregister(phydev);
1767
1768 if (phydev->mdio.dev.driver)
1769 module_put(phydev->mdio.dev.driver->owner);
1770
1771
1772
1773
1774
1775
1776 if (phy_driver_is_genphy(phydev) ||
1777 phy_driver_is_genphy_10g(phydev))
1778 device_release_driver(&phydev->mdio.dev);
1779
1780
1781 phy_device_reset(phydev, 1);
1782
1783
1784
1785
1786
1787 bus = phydev->mdio.bus;
1788
1789 put_device(&phydev->mdio.dev);
1790 if (dev)
1791 ndev_owner = dev->dev.parent->driver->owner;
1792 if (ndev_owner != bus->owner)
1793 module_put(bus->owner);
1794 }
1795 EXPORT_SYMBOL(phy_detach);
1796
1797 int phy_suspend(struct phy_device *phydev)
1798 {
1799 struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
1800 struct net_device *netdev = phydev->attached_dev;
1801 struct phy_driver *phydrv = phydev->drv;
1802 int ret;
1803
1804 if (phydev->suspended)
1805 return 0;
1806
1807
1808 phy_ethtool_get_wol(phydev, &wol);
1809 if (wol.wolopts || (netdev && netdev->wol_enabled))
1810 return -EBUSY;
1811
1812 if (!phydrv || !phydrv->suspend)
1813 return 0;
1814
1815 ret = phydrv->suspend(phydev);
1816 if (!ret)
1817 phydev->suspended = true;
1818
1819 return ret;
1820 }
1821 EXPORT_SYMBOL(phy_suspend);
1822
1823 int __phy_resume(struct phy_device *phydev)
1824 {
1825 struct phy_driver *phydrv = phydev->drv;
1826 int ret;
1827
1828 lockdep_assert_held(&phydev->lock);
1829
1830 if (!phydrv || !phydrv->resume)
1831 return 0;
1832
1833 ret = phydrv->resume(phydev);
1834 if (!ret)
1835 phydev->suspended = false;
1836
1837 return ret;
1838 }
1839 EXPORT_SYMBOL(__phy_resume);
1840
1841 int phy_resume(struct phy_device *phydev)
1842 {
1843 int ret;
1844
1845 mutex_lock(&phydev->lock);
1846 ret = __phy_resume(phydev);
1847 mutex_unlock(&phydev->lock);
1848
1849 return ret;
1850 }
1851 EXPORT_SYMBOL(phy_resume);
1852
1853 int phy_loopback(struct phy_device *phydev, bool enable)
1854 {
1855 int ret = 0;
1856
1857 if (!phydev->drv)
1858 return -EIO;
1859
1860 mutex_lock(&phydev->lock);
1861
1862 if (enable && phydev->loopback_enabled) {
1863 ret = -EBUSY;
1864 goto out;
1865 }
1866
1867 if (!enable && !phydev->loopback_enabled) {
1868 ret = -EINVAL;
1869 goto out;
1870 }
1871
1872 if (phydev->drv->set_loopback)
1873 ret = phydev->drv->set_loopback(phydev, enable);
1874 else
1875 ret = genphy_loopback(phydev, enable);
1876
1877 if (ret)
1878 goto out;
1879
1880 phydev->loopback_enabled = enable;
1881
1882 out:
1883 mutex_unlock(&phydev->lock);
1884 return ret;
1885 }
1886 EXPORT_SYMBOL(phy_loopback);
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897 int phy_reset_after_clk_enable(struct phy_device *phydev)
1898 {
1899 if (!phydev || !phydev->drv)
1900 return -ENODEV;
1901
1902 if (phydev->drv->flags & PHY_RST_AFTER_CLK_EN) {
1903 phy_device_reset(phydev, 1);
1904 phy_device_reset(phydev, 0);
1905 return 1;
1906 }
1907
1908 return 0;
1909 }
1910 EXPORT_SYMBOL(phy_reset_after_clk_enable);
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923 static int genphy_config_advert(struct phy_device *phydev)
1924 {
1925 int err, bmsr, changed = 0;
1926 u32 adv;
1927
1928
1929 linkmode_and(phydev->advertising, phydev->advertising,
1930 phydev->supported);
1931
1932 adv = linkmode_adv_to_mii_adv_t(phydev->advertising);
1933
1934
1935 err = phy_modify_changed(phydev, MII_ADVERTISE,
1936 ADVERTISE_ALL | ADVERTISE_100BASE4 |
1937 ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM,
1938 adv);
1939 if (err < 0)
1940 return err;
1941 if (err > 0)
1942 changed = 1;
1943
1944 bmsr = phy_read(phydev, MII_BMSR);
1945 if (bmsr < 0)
1946 return bmsr;
1947
1948
1949
1950
1951
1952 if (!(bmsr & BMSR_ESTATEN))
1953 return changed;
1954
1955 adv = linkmode_adv_to_mii_ctrl1000_t(phydev->advertising);
1956
1957 err = phy_modify_changed(phydev, MII_CTRL1000,
1958 ADVERTISE_1000FULL | ADVERTISE_1000HALF,
1959 adv);
1960 if (err < 0)
1961 return err;
1962 if (err > 0)
1963 changed = 1;
1964
1965 return changed;
1966 }
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978 static int genphy_c37_config_advert(struct phy_device *phydev)
1979 {
1980 u16 adv = 0;
1981
1982
1983 linkmode_and(phydev->advertising, phydev->advertising,
1984 phydev->supported);
1985
1986 if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
1987 phydev->advertising))
1988 adv |= ADVERTISE_1000XFULL;
1989 if (linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
1990 phydev->advertising))
1991 adv |= ADVERTISE_1000XPAUSE;
1992 if (linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
1993 phydev->advertising))
1994 adv |= ADVERTISE_1000XPSE_ASYM;
1995
1996 return phy_modify_changed(phydev, MII_ADVERTISE,
1997 ADVERTISE_1000XFULL | ADVERTISE_1000XPAUSE |
1998 ADVERTISE_1000XHALF | ADVERTISE_1000XPSE_ASYM,
1999 adv);
2000 }
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010 int genphy_config_eee_advert(struct phy_device *phydev)
2011 {
2012 int err;
2013
2014
2015 if (!phydev->eee_broken_modes)
2016 return 0;
2017
2018 err = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV,
2019 phydev->eee_broken_modes, 0);
2020
2021 return err < 0 ? 0 : err;
2022 }
2023 EXPORT_SYMBOL(genphy_config_eee_advert);
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033 int genphy_setup_forced(struct phy_device *phydev)
2034 {
2035 u16 ctl;
2036
2037 phydev->pause = 0;
2038 phydev->asym_pause = 0;
2039
2040 ctl = mii_bmcr_encode_fixed(phydev->speed, phydev->duplex);
2041
2042 return phy_modify(phydev, MII_BMCR,
2043 ~(BMCR_LOOPBACK | BMCR_ISOLATE | BMCR_PDOWN), ctl);
2044 }
2045 EXPORT_SYMBOL(genphy_setup_forced);
2046
2047 static int genphy_setup_master_slave(struct phy_device *phydev)
2048 {
2049 u16 ctl = 0;
2050
2051 if (!phydev->is_gigabit_capable)
2052 return 0;
2053
2054 switch (phydev->master_slave_set) {
2055 case MASTER_SLAVE_CFG_MASTER_PREFERRED:
2056 ctl |= CTL1000_PREFER_MASTER;
2057 break;
2058 case MASTER_SLAVE_CFG_SLAVE_PREFERRED:
2059 break;
2060 case MASTER_SLAVE_CFG_MASTER_FORCE:
2061 ctl |= CTL1000_AS_MASTER;
2062 fallthrough;
2063 case MASTER_SLAVE_CFG_SLAVE_FORCE:
2064 ctl |= CTL1000_ENABLE_MASTER;
2065 break;
2066 case MASTER_SLAVE_CFG_UNKNOWN:
2067 case MASTER_SLAVE_CFG_UNSUPPORTED:
2068 return 0;
2069 default:
2070 phydev_warn(phydev, "Unsupported Master/Slave mode\n");
2071 return -EOPNOTSUPP;
2072 }
2073
2074 return phy_modify_changed(phydev, MII_CTRL1000,
2075 (CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER |
2076 CTL1000_PREFER_MASTER), ctl);
2077 }
2078
2079 int genphy_read_master_slave(struct phy_device *phydev)
2080 {
2081 int cfg, state;
2082 int val;
2083
2084 phydev->master_slave_get = MASTER_SLAVE_CFG_UNKNOWN;
2085 phydev->master_slave_state = MASTER_SLAVE_STATE_UNKNOWN;
2086
2087 val = phy_read(phydev, MII_CTRL1000);
2088 if (val < 0)
2089 return val;
2090
2091 if (val & CTL1000_ENABLE_MASTER) {
2092 if (val & CTL1000_AS_MASTER)
2093 cfg = MASTER_SLAVE_CFG_MASTER_FORCE;
2094 else
2095 cfg = MASTER_SLAVE_CFG_SLAVE_FORCE;
2096 } else {
2097 if (val & CTL1000_PREFER_MASTER)
2098 cfg = MASTER_SLAVE_CFG_MASTER_PREFERRED;
2099 else
2100 cfg = MASTER_SLAVE_CFG_SLAVE_PREFERRED;
2101 }
2102
2103 val = phy_read(phydev, MII_STAT1000);
2104 if (val < 0)
2105 return val;
2106
2107 if (val & LPA_1000MSFAIL) {
2108 state = MASTER_SLAVE_STATE_ERR;
2109 } else if (phydev->link) {
2110
2111 if (val & LPA_1000MSRES)
2112 state = MASTER_SLAVE_STATE_MASTER;
2113 else
2114 state = MASTER_SLAVE_STATE_SLAVE;
2115 } else {
2116 state = MASTER_SLAVE_STATE_UNKNOWN;
2117 }
2118
2119 phydev->master_slave_get = cfg;
2120 phydev->master_slave_state = state;
2121
2122 return 0;
2123 }
2124 EXPORT_SYMBOL(genphy_read_master_slave);
2125
2126
2127
2128
2129
2130 int genphy_restart_aneg(struct phy_device *phydev)
2131 {
2132
2133 return phy_modify(phydev, MII_BMCR, BMCR_ISOLATE,
2134 BMCR_ANENABLE | BMCR_ANRESTART);
2135 }
2136 EXPORT_SYMBOL(genphy_restart_aneg);
2137
2138
2139
2140
2141
2142
2143
2144
2145 int genphy_check_and_restart_aneg(struct phy_device *phydev, bool restart)
2146 {
2147 int ret;
2148
2149 if (!restart) {
2150
2151
2152
2153 ret = phy_read(phydev, MII_BMCR);
2154 if (ret < 0)
2155 return ret;
2156
2157 if (!(ret & BMCR_ANENABLE) || (ret & BMCR_ISOLATE))
2158 restart = true;
2159 }
2160
2161 if (restart)
2162 return genphy_restart_aneg(phydev);
2163
2164 return 0;
2165 }
2166 EXPORT_SYMBOL(genphy_check_and_restart_aneg);
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177 int __genphy_config_aneg(struct phy_device *phydev, bool changed)
2178 {
2179 int err;
2180
2181 if (genphy_config_eee_advert(phydev))
2182 changed = true;
2183
2184 err = genphy_setup_master_slave(phydev);
2185 if (err < 0)
2186 return err;
2187 else if (err)
2188 changed = true;
2189
2190 if (AUTONEG_ENABLE != phydev->autoneg)
2191 return genphy_setup_forced(phydev);
2192
2193 err = genphy_config_advert(phydev);
2194 if (err < 0)
2195 return err;
2196 else if (err)
2197 changed = true;
2198
2199 return genphy_check_and_restart_aneg(phydev, changed);
2200 }
2201 EXPORT_SYMBOL(__genphy_config_aneg);
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212 int genphy_c37_config_aneg(struct phy_device *phydev)
2213 {
2214 int err, changed;
2215
2216 if (phydev->autoneg != AUTONEG_ENABLE)
2217 return genphy_setup_forced(phydev);
2218
2219 err = phy_modify(phydev, MII_BMCR, BMCR_SPEED1000 | BMCR_SPEED100,
2220 BMCR_SPEED1000);
2221 if (err)
2222 return err;
2223
2224 changed = genphy_c37_config_advert(phydev);
2225 if (changed < 0)
2226 return changed;
2227
2228 if (!changed) {
2229
2230
2231
2232 int ctl = phy_read(phydev, MII_BMCR);
2233
2234 if (ctl < 0)
2235 return ctl;
2236
2237 if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
2238 changed = 1;
2239 }
2240
2241
2242
2243
2244 if (changed > 0)
2245 return genphy_restart_aneg(phydev);
2246
2247 return 0;
2248 }
2249 EXPORT_SYMBOL(genphy_c37_config_aneg);
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259 int genphy_aneg_done(struct phy_device *phydev)
2260 {
2261 int retval = phy_read(phydev, MII_BMSR);
2262
2263 return (retval < 0) ? retval : (retval & BMSR_ANEGCOMPLETE);
2264 }
2265 EXPORT_SYMBOL(genphy_aneg_done);
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275 int genphy_update_link(struct phy_device *phydev)
2276 {
2277 int status = 0, bmcr;
2278
2279 bmcr = phy_read(phydev, MII_BMCR);
2280 if (bmcr < 0)
2281 return bmcr;
2282
2283
2284
2285
2286 if (bmcr & BMCR_ANRESTART)
2287 goto done;
2288
2289
2290
2291
2292
2293
2294 if (!phy_polling_mode(phydev) || !phydev->link) {
2295 status = phy_read(phydev, MII_BMSR);
2296 if (status < 0)
2297 return status;
2298 else if (status & BMSR_LSTATUS)
2299 goto done;
2300 }
2301
2302
2303 status = phy_read(phydev, MII_BMSR);
2304 if (status < 0)
2305 return status;
2306 done:
2307 phydev->link = status & BMSR_LSTATUS ? 1 : 0;
2308 phydev->autoneg_complete = status & BMSR_ANEGCOMPLETE ? 1 : 0;
2309
2310
2311
2312
2313 if (phydev->autoneg == AUTONEG_ENABLE && !phydev->autoneg_complete)
2314 phydev->link = 0;
2315
2316 return 0;
2317 }
2318 EXPORT_SYMBOL(genphy_update_link);
2319
2320 int genphy_read_lpa(struct phy_device *phydev)
2321 {
2322 int lpa, lpagb;
2323
2324 if (phydev->autoneg == AUTONEG_ENABLE) {
2325 if (!phydev->autoneg_complete) {
2326 mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising,
2327 0);
2328 mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, 0);
2329 return 0;
2330 }
2331
2332 if (phydev->is_gigabit_capable) {
2333 lpagb = phy_read(phydev, MII_STAT1000);
2334 if (lpagb < 0)
2335 return lpagb;
2336
2337 if (lpagb & LPA_1000MSFAIL) {
2338 int adv = phy_read(phydev, MII_CTRL1000);
2339
2340 if (adv < 0)
2341 return adv;
2342
2343 if (adv & CTL1000_ENABLE_MASTER)
2344 phydev_err(phydev, "Master/Slave resolution failed, maybe conflicting manual settings?\n");
2345 else
2346 phydev_err(phydev, "Master/Slave resolution failed\n");
2347 return -ENOLINK;
2348 }
2349
2350 mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising,
2351 lpagb);
2352 }
2353
2354 lpa = phy_read(phydev, MII_LPA);
2355 if (lpa < 0)
2356 return lpa;
2357
2358 mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
2359 } else {
2360 linkmode_zero(phydev->lp_advertising);
2361 }
2362
2363 return 0;
2364 }
2365 EXPORT_SYMBOL(genphy_read_lpa);
2366
2367
2368
2369
2370
2371
2372
2373
2374 int genphy_read_status_fixed(struct phy_device *phydev)
2375 {
2376 int bmcr = phy_read(phydev, MII_BMCR);
2377
2378 if (bmcr < 0)
2379 return bmcr;
2380
2381 if (bmcr & BMCR_FULLDPLX)
2382 phydev->duplex = DUPLEX_FULL;
2383 else
2384 phydev->duplex = DUPLEX_HALF;
2385
2386 if (bmcr & BMCR_SPEED1000)
2387 phydev->speed = SPEED_1000;
2388 else if (bmcr & BMCR_SPEED100)
2389 phydev->speed = SPEED_100;
2390 else
2391 phydev->speed = SPEED_10;
2392
2393 return 0;
2394 }
2395 EXPORT_SYMBOL(genphy_read_status_fixed);
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406 int genphy_read_status(struct phy_device *phydev)
2407 {
2408 int err, old_link = phydev->link;
2409
2410
2411 err = genphy_update_link(phydev);
2412 if (err)
2413 return err;
2414
2415
2416 if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link)
2417 return 0;
2418
2419 phydev->master_slave_get = MASTER_SLAVE_CFG_UNSUPPORTED;
2420 phydev->master_slave_state = MASTER_SLAVE_STATE_UNSUPPORTED;
2421 phydev->speed = SPEED_UNKNOWN;
2422 phydev->duplex = DUPLEX_UNKNOWN;
2423 phydev->pause = 0;
2424 phydev->asym_pause = 0;
2425
2426 if (phydev->is_gigabit_capable) {
2427 err = genphy_read_master_slave(phydev);
2428 if (err < 0)
2429 return err;
2430 }
2431
2432 err = genphy_read_lpa(phydev);
2433 if (err < 0)
2434 return err;
2435
2436 if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) {
2437 phy_resolve_aneg_linkmode(phydev);
2438 } else if (phydev->autoneg == AUTONEG_DISABLE) {
2439 err = genphy_read_status_fixed(phydev);
2440 if (err < 0)
2441 return err;
2442 }
2443
2444 return 0;
2445 }
2446 EXPORT_SYMBOL(genphy_read_status);
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456 int genphy_c37_read_status(struct phy_device *phydev)
2457 {
2458 int lpa, err, old_link = phydev->link;
2459
2460
2461 err = genphy_update_link(phydev);
2462 if (err)
2463 return err;
2464
2465
2466 if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link)
2467 return 0;
2468
2469 phydev->duplex = DUPLEX_UNKNOWN;
2470 phydev->pause = 0;
2471 phydev->asym_pause = 0;
2472
2473 if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) {
2474 lpa = phy_read(phydev, MII_LPA);
2475 if (lpa < 0)
2476 return lpa;
2477
2478 linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
2479 phydev->lp_advertising, lpa & LPA_LPACK);
2480 linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
2481 phydev->lp_advertising, lpa & LPA_1000XFULL);
2482 linkmode_mod_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2483 phydev->lp_advertising, lpa & LPA_1000XPAUSE);
2484 linkmode_mod_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
2485 phydev->lp_advertising,
2486 lpa & LPA_1000XPAUSE_ASYM);
2487
2488 phy_resolve_aneg_linkmode(phydev);
2489 } else if (phydev->autoneg == AUTONEG_DISABLE) {
2490 int bmcr = phy_read(phydev, MII_BMCR);
2491
2492 if (bmcr < 0)
2493 return bmcr;
2494
2495 if (bmcr & BMCR_FULLDPLX)
2496 phydev->duplex = DUPLEX_FULL;
2497 else
2498 phydev->duplex = DUPLEX_HALF;
2499 }
2500
2501 return 0;
2502 }
2503 EXPORT_SYMBOL(genphy_c37_read_status);
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514 int genphy_soft_reset(struct phy_device *phydev)
2515 {
2516 u16 res = BMCR_RESET;
2517 int ret;
2518
2519 if (phydev->autoneg == AUTONEG_ENABLE)
2520 res |= BMCR_ANRESTART;
2521
2522 ret = phy_modify(phydev, MII_BMCR, BMCR_ISOLATE, res);
2523 if (ret < 0)
2524 return ret;
2525
2526
2527
2528
2529
2530 phydev->suspended = 0;
2531
2532 ret = phy_poll_reset(phydev);
2533 if (ret)
2534 return ret;
2535
2536
2537 if (phydev->autoneg == AUTONEG_DISABLE)
2538 ret = genphy_setup_forced(phydev);
2539
2540 return ret;
2541 }
2542 EXPORT_SYMBOL(genphy_soft_reset);
2543
2544 irqreturn_t genphy_handle_interrupt_no_ack(struct phy_device *phydev)
2545 {
2546
2547
2548
2549
2550
2551 phy_trigger_machine(phydev);
2552
2553 return 0;
2554 }
2555 EXPORT_SYMBOL(genphy_handle_interrupt_no_ack);
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566 int genphy_read_abilities(struct phy_device *phydev)
2567 {
2568 int val;
2569
2570 linkmode_set_bit_array(phy_basic_ports_array,
2571 ARRAY_SIZE(phy_basic_ports_array),
2572 phydev->supported);
2573
2574 val = phy_read(phydev, MII_BMSR);
2575 if (val < 0)
2576 return val;
2577
2578 linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported,
2579 val & BMSR_ANEGCAPABLE);
2580
2581 linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, phydev->supported,
2582 val & BMSR_100FULL);
2583 linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, phydev->supported,
2584 val & BMSR_100HALF);
2585 linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, phydev->supported,
2586 val & BMSR_10FULL);
2587 linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, phydev->supported,
2588 val & BMSR_10HALF);
2589
2590 if (val & BMSR_ESTATEN) {
2591 val = phy_read(phydev, MII_ESTATUS);
2592 if (val < 0)
2593 return val;
2594
2595 linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
2596 phydev->supported, val & ESTATUS_1000_TFULL);
2597 linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
2598 phydev->supported, val & ESTATUS_1000_THALF);
2599 linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
2600 phydev->supported, val & ESTATUS_1000_XFULL);
2601 }
2602
2603 return 0;
2604 }
2605 EXPORT_SYMBOL(genphy_read_abilities);
2606
2607
2608
2609
2610
2611 int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad, u16 regnum)
2612 {
2613 return -EOPNOTSUPP;
2614 }
2615 EXPORT_SYMBOL(genphy_read_mmd_unsupported);
2616
2617 int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
2618 u16 regnum, u16 val)
2619 {
2620 return -EOPNOTSUPP;
2621 }
2622 EXPORT_SYMBOL(genphy_write_mmd_unsupported);
2623
2624 int genphy_suspend(struct phy_device *phydev)
2625 {
2626 return phy_set_bits(phydev, MII_BMCR, BMCR_PDOWN);
2627 }
2628 EXPORT_SYMBOL(genphy_suspend);
2629
2630 int genphy_resume(struct phy_device *phydev)
2631 {
2632 return phy_clear_bits(phydev, MII_BMCR, BMCR_PDOWN);
2633 }
2634 EXPORT_SYMBOL(genphy_resume);
2635
2636 int genphy_loopback(struct phy_device *phydev, bool enable)
2637 {
2638 if (enable) {
2639 u16 val, ctl = BMCR_LOOPBACK;
2640 int ret;
2641
2642 ctl |= mii_bmcr_encode_fixed(phydev->speed, phydev->duplex);
2643
2644 phy_modify(phydev, MII_BMCR, ~0, ctl);
2645
2646 ret = phy_read_poll_timeout(phydev, MII_BMSR, val,
2647 val & BMSR_LSTATUS,
2648 5000, 500000, true);
2649 if (ret)
2650 return ret;
2651 } else {
2652 phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, 0);
2653
2654 phy_config_aneg(phydev);
2655 }
2656
2657 return 0;
2658 }
2659 EXPORT_SYMBOL(genphy_loopback);
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670 void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode)
2671 {
2672 linkmode_clear_bit(link_mode, phydev->supported);
2673 phy_advertise_supported(phydev);
2674 }
2675 EXPORT_SYMBOL(phy_remove_link_mode);
2676
2677 static void phy_copy_pause_bits(unsigned long *dst, unsigned long *src)
2678 {
2679 linkmode_mod_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, dst,
2680 linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, src));
2681 linkmode_mod_bit(ETHTOOL_LINK_MODE_Pause_BIT, dst,
2682 linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, src));
2683 }
2684
2685
2686
2687
2688
2689
2690
2691
2692 void phy_advertise_supported(struct phy_device *phydev)
2693 {
2694 __ETHTOOL_DECLARE_LINK_MODE_MASK(new);
2695
2696 linkmode_copy(new, phydev->supported);
2697 phy_copy_pause_bits(new, phydev->advertising);
2698 linkmode_copy(phydev->advertising, new);
2699 }
2700 EXPORT_SYMBOL(phy_advertise_supported);
2701
2702
2703
2704
2705
2706
2707
2708
2709 void phy_support_sym_pause(struct phy_device *phydev)
2710 {
2711 linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported);
2712 phy_copy_pause_bits(phydev->advertising, phydev->supported);
2713 }
2714 EXPORT_SYMBOL(phy_support_sym_pause);
2715
2716
2717
2718
2719
2720
2721
2722 void phy_support_asym_pause(struct phy_device *phydev)
2723 {
2724 phy_copy_pause_bits(phydev->advertising, phydev->supported);
2725 }
2726 EXPORT_SYMBOL(phy_support_asym_pause);
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739 void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
2740 bool autoneg)
2741 {
2742 linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported);
2743
2744 if (rx && tx && autoneg)
2745 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2746 phydev->supported);
2747
2748 linkmode_copy(phydev->advertising, phydev->supported);
2749 }
2750 EXPORT_SYMBOL(phy_set_sym_pause);
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763 void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx)
2764 {
2765 __ETHTOOL_DECLARE_LINK_MODE_MASK(oldadv);
2766
2767 linkmode_copy(oldadv, phydev->advertising);
2768 linkmode_set_pause(phydev->advertising, tx, rx);
2769
2770 if (!linkmode_equal(oldadv, phydev->advertising) &&
2771 phydev->autoneg)
2772 phy_start_aneg(phydev);
2773 }
2774 EXPORT_SYMBOL(phy_set_asym_pause);
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785 bool phy_validate_pause(struct phy_device *phydev,
2786 struct ethtool_pauseparam *pp)
2787 {
2788 if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2789 phydev->supported) && pp->rx_pause)
2790 return false;
2791
2792 if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
2793 phydev->supported) &&
2794 pp->rx_pause != pp->tx_pause)
2795 return false;
2796
2797 return true;
2798 }
2799 EXPORT_SYMBOL(phy_validate_pause);
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813 void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause)
2814 {
2815 if (phydev->duplex != DUPLEX_FULL) {
2816 *tx_pause = false;
2817 *rx_pause = false;
2818 return;
2819 }
2820
2821 return linkmode_resolve_pause(phydev->advertising,
2822 phydev->lp_advertising,
2823 tx_pause, rx_pause);
2824 }
2825 EXPORT_SYMBOL(phy_get_pause);
2826
2827 #if IS_ENABLED(CONFIG_OF_MDIO)
2828 static int phy_get_int_delay_property(struct device *dev, const char *name)
2829 {
2830 s32 int_delay;
2831 int ret;
2832
2833 ret = device_property_read_u32(dev, name, &int_delay);
2834 if (ret)
2835 return ret;
2836
2837 return int_delay;
2838 }
2839 #else
2840 static int phy_get_int_delay_property(struct device *dev, const char *name)
2841 {
2842 return -EINVAL;
2843 }
2844 #endif
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862 s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev,
2863 const int *delay_values, int size, bool is_rx)
2864 {
2865 s32 delay;
2866 int i;
2867
2868 if (is_rx) {
2869 delay = phy_get_int_delay_property(dev, "rx-internal-delay-ps");
2870 if (delay < 0 && size == 0) {
2871 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
2872 phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
2873 return 1;
2874 else
2875 return 0;
2876 }
2877
2878 } else {
2879 delay = phy_get_int_delay_property(dev, "tx-internal-delay-ps");
2880 if (delay < 0 && size == 0) {
2881 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
2882 phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
2883 return 1;
2884 else
2885 return 0;
2886 }
2887 }
2888
2889 if (delay < 0)
2890 return delay;
2891
2892 if (delay && size == 0)
2893 return delay;
2894
2895 if (delay < delay_values[0] || delay > delay_values[size - 1]) {
2896 phydev_err(phydev, "Delay %d is out of range\n", delay);
2897 return -EINVAL;
2898 }
2899
2900 if (delay == delay_values[0])
2901 return 0;
2902
2903 for (i = 1; i < size; i++) {
2904 if (delay == delay_values[i])
2905 return i;
2906
2907
2908 if (delay > delay_values[i - 1] &&
2909 delay < delay_values[i]) {
2910 if (delay - delay_values[i - 1] <
2911 delay_values[i] - delay)
2912 return i - 1;
2913 else
2914 return i;
2915 }
2916 }
2917
2918 phydev_err(phydev, "error finding internal delay index for %d\n",
2919 delay);
2920
2921 return -EINVAL;
2922 }
2923 EXPORT_SYMBOL(phy_get_internal_delay);
2924
2925 static bool phy_drv_supports_irq(struct phy_driver *phydrv)
2926 {
2927 return phydrv->config_intr && phydrv->handle_interrupt;
2928 }
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938 struct mdio_device *fwnode_mdio_find_device(struct fwnode_handle *fwnode)
2939 {
2940 struct device *d;
2941
2942 if (!fwnode)
2943 return NULL;
2944
2945 d = bus_find_device_by_fwnode(&mdio_bus_type, fwnode);
2946 if (!d)
2947 return NULL;
2948
2949 return to_mdio_device(d);
2950 }
2951 EXPORT_SYMBOL(fwnode_mdio_find_device);
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961 struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode)
2962 {
2963 struct mdio_device *mdiodev;
2964
2965 mdiodev = fwnode_mdio_find_device(phy_fwnode);
2966 if (!mdiodev)
2967 return NULL;
2968
2969 if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY)
2970 return to_phy_device(&mdiodev->dev);
2971
2972 put_device(&mdiodev->dev);
2973
2974 return NULL;
2975 }
2976 EXPORT_SYMBOL(fwnode_phy_find_device);
2977
2978
2979
2980
2981
2982
2983
2984 struct phy_device *device_phy_find_device(struct device *dev)
2985 {
2986 return fwnode_phy_find_device(dev_fwnode(dev));
2987 }
2988 EXPORT_SYMBOL_GPL(device_phy_find_device);
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999 struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode)
3000 {
3001 struct fwnode_handle *phy_node;
3002
3003
3004 phy_node = fwnode_find_reference(fwnode, "phy-handle", 0);
3005 if (is_acpi_node(fwnode) || !IS_ERR(phy_node))
3006 return phy_node;
3007 phy_node = fwnode_find_reference(fwnode, "phy", 0);
3008 if (IS_ERR(phy_node))
3009 phy_node = fwnode_find_reference(fwnode, "phy-device", 0);
3010 return phy_node;
3011 }
3012 EXPORT_SYMBOL_GPL(fwnode_get_phy_node);
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022 static int phy_probe(struct device *dev)
3023 {
3024 struct phy_device *phydev = to_phy_device(dev);
3025 struct device_driver *drv = phydev->mdio.dev.driver;
3026 struct phy_driver *phydrv = to_phy_driver(drv);
3027 int err = 0;
3028
3029 phydev->drv = phydrv;
3030
3031
3032
3033
3034 if (!phy_drv_supports_irq(phydrv) && phy_interrupt_is_valid(phydev))
3035 phydev->irq = PHY_POLL;
3036
3037 if (phydrv->flags & PHY_IS_INTERNAL)
3038 phydev->is_internal = true;
3039
3040 mutex_lock(&phydev->lock);
3041
3042
3043 phy_device_reset(phydev, 0);
3044
3045 if (phydev->drv->probe) {
3046 err = phydev->drv->probe(phydev);
3047 if (err)
3048 goto out;
3049 }
3050
3051
3052
3053
3054
3055 if (phydrv->features)
3056 linkmode_copy(phydev->supported, phydrv->features);
3057 else if (phydrv->get_features)
3058 err = phydrv->get_features(phydev);
3059 else if (phydev->is_c45)
3060 err = genphy_c45_pma_read_abilities(phydev);
3061 else
3062 err = genphy_read_abilities(phydev);
3063
3064 if (err)
3065 goto out;
3066
3067 if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
3068 phydev->supported))
3069 phydev->autoneg = 0;
3070
3071 if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
3072 phydev->supported))
3073 phydev->is_gigabit_capable = 1;
3074 if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
3075 phydev->supported))
3076 phydev->is_gigabit_capable = 1;
3077
3078 of_set_phy_supported(phydev);
3079 phy_advertise_supported(phydev);
3080
3081
3082
3083
3084 of_set_phy_eee_broken(phydev);
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097 if (!test_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported) &&
3098 !test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported)) {
3099 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
3100 phydev->supported);
3101 linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
3102 phydev->supported);
3103 }
3104
3105
3106 phydev->state = PHY_READY;
3107
3108 out:
3109
3110 if (err)
3111 phy_device_reset(phydev, 1);
3112
3113 mutex_unlock(&phydev->lock);
3114
3115 return err;
3116 }
3117
3118 static int phy_remove(struct device *dev)
3119 {
3120 struct phy_device *phydev = to_phy_device(dev);
3121
3122 cancel_delayed_work_sync(&phydev->state_queue);
3123
3124 mutex_lock(&phydev->lock);
3125 phydev->state = PHY_DOWN;
3126 mutex_unlock(&phydev->lock);
3127
3128 sfp_bus_del_upstream(phydev->sfp_bus);
3129 phydev->sfp_bus = NULL;
3130
3131 if (phydev->drv && phydev->drv->remove)
3132 phydev->drv->remove(phydev);
3133
3134
3135 phy_device_reset(phydev, 1);
3136
3137 phydev->drv = NULL;
3138
3139 return 0;
3140 }
3141
3142 static void phy_shutdown(struct device *dev)
3143 {
3144 struct phy_device *phydev = to_phy_device(dev);
3145
3146 if (phydev->state == PHY_READY || !phydev->attached_dev)
3147 return;
3148
3149 phy_disable_interrupts(phydev);
3150 }
3151
3152
3153
3154
3155
3156
3157 int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
3158 {
3159 int retval;
3160
3161
3162
3163
3164 if (WARN_ON(new_driver->features && new_driver->get_features)) {
3165 pr_err("%s: features and get_features must not both be set\n",
3166 new_driver->name);
3167 return -EINVAL;
3168 }
3169
3170
3171
3172
3173
3174
3175 if (WARN(new_driver->mdiodrv.driver.of_match_table,
3176 "%s: driver must not provide a DT match table\n",
3177 new_driver->name))
3178 return -EINVAL;
3179
3180 new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY;
3181 new_driver->mdiodrv.driver.name = new_driver->name;
3182 new_driver->mdiodrv.driver.bus = &mdio_bus_type;
3183 new_driver->mdiodrv.driver.probe = phy_probe;
3184 new_driver->mdiodrv.driver.remove = phy_remove;
3185 new_driver->mdiodrv.driver.shutdown = phy_shutdown;
3186 new_driver->mdiodrv.driver.owner = owner;
3187 new_driver->mdiodrv.driver.probe_type = PROBE_FORCE_SYNCHRONOUS;
3188
3189 retval = driver_register(&new_driver->mdiodrv.driver);
3190 if (retval) {
3191 pr_err("%s: Error %d in registering driver\n",
3192 new_driver->name, retval);
3193
3194 return retval;
3195 }
3196
3197 pr_debug("%s: Registered new driver\n", new_driver->name);
3198
3199 return 0;
3200 }
3201 EXPORT_SYMBOL(phy_driver_register);
3202
3203 int phy_drivers_register(struct phy_driver *new_driver, int n,
3204 struct module *owner)
3205 {
3206 int i, ret = 0;
3207
3208 for (i = 0; i < n; i++) {
3209 ret = phy_driver_register(new_driver + i, owner);
3210 if (ret) {
3211 while (i-- > 0)
3212 phy_driver_unregister(new_driver + i);
3213 break;
3214 }
3215 }
3216 return ret;
3217 }
3218 EXPORT_SYMBOL(phy_drivers_register);
3219
3220 void phy_driver_unregister(struct phy_driver *drv)
3221 {
3222 driver_unregister(&drv->mdiodrv.driver);
3223 }
3224 EXPORT_SYMBOL(phy_driver_unregister);
3225
3226 void phy_drivers_unregister(struct phy_driver *drv, int n)
3227 {
3228 int i;
3229
3230 for (i = 0; i < n; i++)
3231 phy_driver_unregister(drv + i);
3232 }
3233 EXPORT_SYMBOL(phy_drivers_unregister);
3234
3235 static struct phy_driver genphy_driver = {
3236 .phy_id = 0xffffffff,
3237 .phy_id_mask = 0xffffffff,
3238 .name = "Generic PHY",
3239 .get_features = genphy_read_abilities,
3240 .suspend = genphy_suspend,
3241 .resume = genphy_resume,
3242 .set_loopback = genphy_loopback,
3243 };
3244
3245 static const struct ethtool_phy_ops phy_ethtool_phy_ops = {
3246 .get_sset_count = phy_ethtool_get_sset_count,
3247 .get_strings = phy_ethtool_get_strings,
3248 .get_stats = phy_ethtool_get_stats,
3249 .start_cable_test = phy_start_cable_test,
3250 .start_cable_test_tdr = phy_start_cable_test_tdr,
3251 };
3252
3253 static int __init phy_init(void)
3254 {
3255 int rc;
3256
3257 rc = mdio_bus_init();
3258 if (rc)
3259 return rc;
3260
3261 ethtool_set_ethtool_phy_ops(&phy_ethtool_phy_ops);
3262 features_init();
3263
3264 rc = phy_driver_register(&genphy_c45_driver, THIS_MODULE);
3265 if (rc)
3266 goto err_c45;
3267
3268 rc = phy_driver_register(&genphy_driver, THIS_MODULE);
3269 if (rc) {
3270 phy_driver_unregister(&genphy_c45_driver);
3271 err_c45:
3272 mdio_bus_exit();
3273 }
3274
3275 return rc;
3276 }
3277
3278 static void __exit phy_exit(void)
3279 {
3280 phy_driver_unregister(&genphy_c45_driver);
3281 phy_driver_unregister(&genphy_driver);
3282 mdio_bus_exit();
3283 ethtool_set_ethtool_phy_ops(NULL);
3284 }
3285
3286 subsys_initcall(phy_init);
3287 module_exit(phy_exit);