• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Framework for finding and configuring PHYs.
2  * Also contains generic PHY driver
3  *
4  * Author: Andy Fleming
5  *
6  * Copyright (c) 2004 Freescale Semiconductor, Inc.
7  *
8  * This program is free software; you can redistribute  it and/or modify it
9  * under  the terms of  the GNU General  Public License as published by the
10  * Free Software Foundation;  either version 2 of the  License, or (at your
11  * option) any later version.
12  *
13  */
14 
15 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16 
17 #include <linux/kernel.h>
18 #include <linux/string.h>
19 #include <linux/errno.h>
20 #include <linux/unistd.h>
21 #include <linux/slab.h>
22 #include <linux/interrupt.h>
23 #include <linux/init.h>
24 #include <linux/delay.h>
25 #include <linux/netdevice.h>
26 #include <linux/etherdevice.h>
27 #include <linux/skbuff.h>
28 #include <linux/mm.h>
29 #include <linux/module.h>
30 #include <linux/mii.h>
31 #include <linux/ethtool.h>
32 #include <linux/phy.h>
33 #include <linux/phy_led_triggers.h>
34 #include <linux/mdio.h>
35 #include <linux/io.h>
36 #include <linux/uaccess.h>
37 #include <linux/of.h>
38 
39 #include <asm/irq.h>
40 
41 MODULE_DESCRIPTION("PHY library");
42 MODULE_AUTHOR("Andy Fleming");
43 MODULE_LICENSE("GPL");
44 
phy_device_free(struct phy_device * phydev)45 void phy_device_free(struct phy_device *phydev)
46 {
47 	put_device(&phydev->mdio.dev);
48 }
49 EXPORT_SYMBOL(phy_device_free);
50 
phy_mdio_device_free(struct mdio_device * mdiodev)51 static void phy_mdio_device_free(struct mdio_device *mdiodev)
52 {
53 	struct phy_device *phydev;
54 
55 	phydev = container_of(mdiodev, struct phy_device, mdio);
56 	phy_device_free(phydev);
57 }
58 
phy_device_release(struct device * dev)59 static void phy_device_release(struct device *dev)
60 {
61 	kfree(to_phy_device(dev));
62 }
63 
phy_mdio_device_remove(struct mdio_device * mdiodev)64 static void phy_mdio_device_remove(struct mdio_device *mdiodev)
65 {
66 	struct phy_device *phydev;
67 
68 	phydev = container_of(mdiodev, struct phy_device, mdio);
69 	phy_device_remove(phydev);
70 }
71 
72 static struct phy_driver genphy_driver;
73 extern struct phy_driver genphy_10g_driver;
74 
75 static LIST_HEAD(phy_fixup_list);
76 static DEFINE_MUTEX(phy_fixup_lock);
77 
78 #ifdef CONFIG_PM
mdio_bus_phy_may_suspend(struct phy_device * phydev)79 static bool mdio_bus_phy_may_suspend(struct phy_device *phydev)
80 {
81 	struct device_driver *drv = phydev->mdio.dev.driver;
82 	struct phy_driver *phydrv = to_phy_driver(drv);
83 	struct net_device *netdev = phydev->attached_dev;
84 
85 	if (!drv || !phydrv->suspend)
86 		return false;
87 
88 	/* PHY not attached? May suspend if the PHY has not already been
89 	 * suspended as part of a prior call to phy_disconnect() ->
90 	 * phy_detach() -> phy_suspend() because the parent netdev might be the
91 	 * MDIO bus driver and clock gated at this point.
92 	 */
93 	if (!netdev)
94 		goto out;
95 
96 	/* Don't suspend PHY if the attached netdev parent may wakeup.
97 	 * The parent may point to a PCI device, as in tg3 driver.
98 	 */
99 	if (netdev->dev.parent && device_may_wakeup(netdev->dev.parent))
100 		return false;
101 
102 	/* Also don't suspend PHY if the netdev itself may wakeup. This
103 	 * is the case for devices w/o underlaying pwr. mgmt. aware bus,
104 	 * e.g. SoC devices.
105 	 */
106 	if (device_may_wakeup(&netdev->dev))
107 		return false;
108 
109 out:
110 	return !phydev->suspended;
111 }
112 
mdio_bus_phy_suspend(struct device * dev)113 static int mdio_bus_phy_suspend(struct device *dev)
114 {
115 	struct phy_device *phydev = to_phy_device(dev);
116 
117 	/* We must stop the state machine manually, otherwise it stops out of
118 	 * control, possibly with the phydev->lock held. Upon resume, netdev
119 	 * may call phy routines that try to grab the same lock, and that may
120 	 * lead to a deadlock.
121 	 */
122 	if (phydev->attached_dev && phydev->adjust_link)
123 		phy_stop_machine(phydev);
124 
125 	if (!mdio_bus_phy_may_suspend(phydev))
126 		return 0;
127 
128 	phydev->suspended_by_mdio_bus = true;
129 
130 	return phy_suspend(phydev);
131 }
132 
mdio_bus_phy_resume(struct device * dev)133 static int mdio_bus_phy_resume(struct device *dev)
134 {
135 	struct phy_device *phydev = to_phy_device(dev);
136 	int ret;
137 
138 	if (!phydev->suspended_by_mdio_bus)
139 		goto no_resume;
140 
141 	phydev->suspended_by_mdio_bus = false;
142 
143 	ret = phy_resume(phydev);
144 	if (ret < 0)
145 		return ret;
146 
147 no_resume:
148 	if (phydev->attached_dev && phydev->adjust_link)
149 		phy_start_machine(phydev);
150 
151 	return 0;
152 }
153 
mdio_bus_phy_restore(struct device * dev)154 static int mdio_bus_phy_restore(struct device *dev)
155 {
156 	struct phy_device *phydev = to_phy_device(dev);
157 	struct net_device *netdev = phydev->attached_dev;
158 	int ret;
159 
160 	if (!netdev)
161 		return 0;
162 
163 	ret = phy_init_hw(phydev);
164 	if (ret < 0)
165 		return ret;
166 
167 	if (phydev->attached_dev && phydev->adjust_link)
168 		phy_start_machine(phydev);
169 
170 	return 0;
171 }
172 
173 static const struct dev_pm_ops mdio_bus_phy_pm_ops = {
174 	.suspend = mdio_bus_phy_suspend,
175 	.resume = mdio_bus_phy_resume,
176 	.freeze = mdio_bus_phy_suspend,
177 	.thaw = mdio_bus_phy_resume,
178 	.restore = mdio_bus_phy_restore,
179 };
180 
181 #define MDIO_BUS_PHY_PM_OPS (&mdio_bus_phy_pm_ops)
182 
183 #else
184 
185 #define MDIO_BUS_PHY_PM_OPS NULL
186 
187 #endif /* CONFIG_PM */
188 
189 /**
190  * phy_register_fixup - creates a new phy_fixup and adds it to the list
191  * @bus_id: A string which matches phydev->mdio.dev.bus_id (or PHY_ANY_ID)
192  * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
193  *	It can also be PHY_ANY_UID
194  * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
195  *	comparison
196  * @run: The actual code to be run when a matching PHY is found
197  */
phy_register_fixup(const char * bus_id,u32 phy_uid,u32 phy_uid_mask,int (* run)(struct phy_device *))198 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
199 		       int (*run)(struct phy_device *))
200 {
201 	struct phy_fixup *fixup = kzalloc(sizeof(*fixup), GFP_KERNEL);
202 
203 	if (!fixup)
204 		return -ENOMEM;
205 
206 	strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
207 	fixup->phy_uid = phy_uid;
208 	fixup->phy_uid_mask = phy_uid_mask;
209 	fixup->run = run;
210 
211 	mutex_lock(&phy_fixup_lock);
212 	list_add_tail(&fixup->list, &phy_fixup_list);
213 	mutex_unlock(&phy_fixup_lock);
214 
215 	return 0;
216 }
217 EXPORT_SYMBOL(phy_register_fixup);
218 
219 /* Registers a fixup to be run on any PHY with the UID in phy_uid */
phy_register_fixup_for_uid(u32 phy_uid,u32 phy_uid_mask,int (* run)(struct phy_device *))220 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
221 			       int (*run)(struct phy_device *))
222 {
223 	return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
224 }
225 EXPORT_SYMBOL(phy_register_fixup_for_uid);
226 
227 /* Registers a fixup to be run on the PHY with id string bus_id */
phy_register_fixup_for_id(const char * bus_id,int (* run)(struct phy_device *))228 int phy_register_fixup_for_id(const char *bus_id,
229 			      int (*run)(struct phy_device *))
230 {
231 	return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
232 }
233 EXPORT_SYMBOL(phy_register_fixup_for_id);
234 
235 /**
236  * phy_unregister_fixup - remove a phy_fixup from the list
237  * @bus_id: A string matches fixup->bus_id (or PHY_ANY_ID) in phy_fixup_list
238  * @phy_uid: A phy id matches fixup->phy_id (or PHY_ANY_UID) in phy_fixup_list
239  * @phy_uid_mask: Applied to phy_uid and fixup->phy_uid before comparison
240  */
phy_unregister_fixup(const char * bus_id,u32 phy_uid,u32 phy_uid_mask)241 int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask)
242 {
243 	struct list_head *pos, *n;
244 	struct phy_fixup *fixup;
245 	int ret;
246 
247 	ret = -ENODEV;
248 
249 	mutex_lock(&phy_fixup_lock);
250 	list_for_each_safe(pos, n, &phy_fixup_list) {
251 		fixup = list_entry(pos, struct phy_fixup, list);
252 
253 		if ((!strcmp(fixup->bus_id, bus_id)) &&
254 		    ((fixup->phy_uid & phy_uid_mask) ==
255 		     (phy_uid & phy_uid_mask))) {
256 			list_del(&fixup->list);
257 			kfree(fixup);
258 			ret = 0;
259 			break;
260 		}
261 	}
262 	mutex_unlock(&phy_fixup_lock);
263 
264 	return ret;
265 }
266 EXPORT_SYMBOL(phy_unregister_fixup);
267 
268 /* Unregisters a fixup of any PHY with the UID in phy_uid */
phy_unregister_fixup_for_uid(u32 phy_uid,u32 phy_uid_mask)269 int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask)
270 {
271 	return phy_unregister_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask);
272 }
273 EXPORT_SYMBOL(phy_unregister_fixup_for_uid);
274 
275 /* Unregisters a fixup of the PHY with id string bus_id */
phy_unregister_fixup_for_id(const char * bus_id)276 int phy_unregister_fixup_for_id(const char *bus_id)
277 {
278 	return phy_unregister_fixup(bus_id, PHY_ANY_UID, 0xffffffff);
279 }
280 EXPORT_SYMBOL(phy_unregister_fixup_for_id);
281 
282 /* Returns 1 if fixup matches phydev in bus_id and phy_uid.
283  * Fixups can be set to match any in one or more fields.
284  */
phy_needs_fixup(struct phy_device * phydev,struct phy_fixup * fixup)285 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
286 {
287 	if (strcmp(fixup->bus_id, phydev_name(phydev)) != 0)
288 		if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
289 			return 0;
290 
291 	if ((fixup->phy_uid & fixup->phy_uid_mask) !=
292 	    (phydev->phy_id & fixup->phy_uid_mask))
293 		if (fixup->phy_uid != PHY_ANY_UID)
294 			return 0;
295 
296 	return 1;
297 }
298 
299 /* Runs any matching fixups for this phydev */
phy_scan_fixups(struct phy_device * phydev)300 static int phy_scan_fixups(struct phy_device *phydev)
301 {
302 	struct phy_fixup *fixup;
303 
304 	mutex_lock(&phy_fixup_lock);
305 	list_for_each_entry(fixup, &phy_fixup_list, list) {
306 		if (phy_needs_fixup(phydev, fixup)) {
307 			int err = fixup->run(phydev);
308 
309 			if (err < 0) {
310 				mutex_unlock(&phy_fixup_lock);
311 				return err;
312 			}
313 			phydev->has_fixups = true;
314 		}
315 	}
316 	mutex_unlock(&phy_fixup_lock);
317 
318 	return 0;
319 }
320 
phy_bus_match(struct device * dev,struct device_driver * drv)321 static int phy_bus_match(struct device *dev, struct device_driver *drv)
322 {
323 	struct phy_device *phydev = to_phy_device(dev);
324 	struct phy_driver *phydrv = to_phy_driver(drv);
325 	const int num_ids = ARRAY_SIZE(phydev->c45_ids.device_ids);
326 	int i;
327 
328 	if (!(phydrv->mdiodrv.flags & MDIO_DEVICE_IS_PHY))
329 		return 0;
330 
331 	if (phydrv->match_phy_device)
332 		return phydrv->match_phy_device(phydev);
333 
334 	if (phydev->is_c45) {
335 		for (i = 1; i < num_ids; i++) {
336 			if (!(phydev->c45_ids.devices_in_package & (1 << i)))
337 				continue;
338 
339 			if ((phydrv->phy_id & phydrv->phy_id_mask) ==
340 			    (phydev->c45_ids.device_ids[i] &
341 			     phydrv->phy_id_mask))
342 				return 1;
343 		}
344 		return 0;
345 	} else {
346 		return (phydrv->phy_id & phydrv->phy_id_mask) ==
347 			(phydev->phy_id & phydrv->phy_id_mask);
348 	}
349 }
350 
phy_device_create(struct mii_bus * bus,int addr,int phy_id,bool is_c45,struct phy_c45_device_ids * c45_ids)351 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
352 				     bool is_c45,
353 				     struct phy_c45_device_ids *c45_ids)
354 {
355 	struct phy_device *dev;
356 	struct mdio_device *mdiodev;
357 
358 	/* We allocate the device, and initialize the default values */
359 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
360 	if (!dev)
361 		return ERR_PTR(-ENOMEM);
362 
363 	mdiodev = &dev->mdio;
364 	mdiodev->dev.release = phy_device_release;
365 	mdiodev->dev.parent = &bus->dev;
366 	mdiodev->dev.bus = &mdio_bus_type;
367 	mdiodev->bus = bus;
368 	mdiodev->pm_ops = MDIO_BUS_PHY_PM_OPS;
369 	mdiodev->bus_match = phy_bus_match;
370 	mdiodev->addr = addr;
371 	mdiodev->flags = MDIO_DEVICE_FLAG_PHY;
372 	mdiodev->device_free = phy_mdio_device_free;
373 	mdiodev->device_remove = phy_mdio_device_remove;
374 
375 	dev->speed = SPEED_UNKNOWN;
376 	dev->duplex = DUPLEX_UNKNOWN;
377 	dev->pause = 0;
378 	dev->asym_pause = 0;
379 	dev->link = 1;
380 	dev->interface = PHY_INTERFACE_MODE_GMII;
381 
382 	dev->autoneg = AUTONEG_ENABLE;
383 
384 	dev->is_c45 = is_c45;
385 	dev->phy_id = phy_id;
386 	if (c45_ids)
387 		dev->c45_ids = *c45_ids;
388 	dev->irq = bus->irq[addr];
389 	dev_set_name(&mdiodev->dev, PHY_ID_FMT, bus->id, addr);
390 
391 	dev->state = PHY_DOWN;
392 
393 	mutex_init(&dev->lock);
394 	INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
395 	INIT_WORK(&dev->phy_queue, phy_change_work);
396 
397 	/* Request the appropriate module unconditionally; don't
398 	 * bother trying to do so only if it isn't already loaded,
399 	 * because that gets complicated. A hotplug event would have
400 	 * done an unconditional modprobe anyway.
401 	 * We don't do normal hotplug because it won't work for MDIO
402 	 * -- because it relies on the device staying around for long
403 	 * enough for the driver to get loaded. With MDIO, the NIC
404 	 * driver will get bored and give up as soon as it finds that
405 	 * there's no driver _already_ loaded.
406 	 */
407 	request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
408 
409 	device_initialize(&mdiodev->dev);
410 
411 	return dev;
412 }
413 EXPORT_SYMBOL(phy_device_create);
414 
415 /* get_phy_c45_devs_in_pkg - reads a MMD's devices in package registers.
416  * @bus: the target MII bus
417  * @addr: PHY address on the MII bus
418  * @dev_addr: MMD address in the PHY.
419  * @devices_in_package: where to store the devices in package information.
420  *
421  * Description: reads devices in package registers of a MMD at @dev_addr
422  * from PHY at @addr on @bus.
423  *
424  * Returns: 0 on success, -EIO on failure.
425  */
get_phy_c45_devs_in_pkg(struct mii_bus * bus,int addr,int dev_addr,u32 * devices_in_package)426 static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
427 				   u32 *devices_in_package)
428 {
429 	int phy_reg, reg_addr;
430 
431 	reg_addr = MII_ADDR_C45 | dev_addr << 16 | MDIO_DEVS2;
432 	phy_reg = mdiobus_read(bus, addr, reg_addr);
433 	if (phy_reg < 0)
434 		return -EIO;
435 	*devices_in_package = (phy_reg & 0xffff) << 16;
436 
437 	reg_addr = MII_ADDR_C45 | dev_addr << 16 | MDIO_DEVS1;
438 	phy_reg = mdiobus_read(bus, addr, reg_addr);
439 	if (phy_reg < 0)
440 		return -EIO;
441 	*devices_in_package |= (phy_reg & 0xffff);
442 
443 	return 0;
444 }
445 
446 /**
447  * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs.
448  * @bus: the target MII bus
449  * @addr: PHY address on the MII bus
450  * @phy_id: where to store the ID retrieved.
451  * @c45_ids: where to store the c45 ID information.
452  *
453  *   If the PHY devices-in-package appears to be valid, it and the
454  *   corresponding identifiers are stored in @c45_ids, zero is stored
455  *   in @phy_id.  Otherwise 0xffffffff is stored in @phy_id.  Returns
456  *   zero on success.
457  *
458  */
get_phy_c45_ids(struct mii_bus * bus,int addr,u32 * phy_id,struct phy_c45_device_ids * c45_ids)459 static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
460 			   struct phy_c45_device_ids *c45_ids) {
461 	int phy_reg;
462 	int i, reg_addr;
463 	const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
464 	u32 *devs = &c45_ids->devices_in_package;
465 
466 	/* Find first non-zero Devices In package. Device zero is reserved
467 	 * for 802.3 c45 complied PHYs, so don't probe it at first.
468 	 */
469 	for (i = 1; i < num_ids && *devs == 0; i++) {
470 		phy_reg = get_phy_c45_devs_in_pkg(bus, addr, i, devs);
471 		if (phy_reg < 0)
472 			return -EIO;
473 
474 		if ((*devs & 0x1fffffff) == 0x1fffffff) {
475 			/*  If mostly Fs, there is no device there,
476 			 *  then let's continue to probe more, as some
477 			 *  10G PHYs have zero Devices In package,
478 			 *  e.g. Cortina CS4315/CS4340 PHY.
479 			 */
480 			phy_reg = get_phy_c45_devs_in_pkg(bus, addr, 0, devs);
481 			if (phy_reg < 0)
482 				return -EIO;
483 			/* no device there, let's get out of here */
484 			if ((*devs & 0x1fffffff) == 0x1fffffff) {
485 				*phy_id = 0xffffffff;
486 				return 0;
487 			} else {
488 				break;
489 			}
490 		}
491 	}
492 
493 	/* Now probe Device Identifiers for each device present. */
494 	for (i = 1; i < num_ids; i++) {
495 		if (!(c45_ids->devices_in_package & (1 << i)))
496 			continue;
497 
498 		reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
499 		phy_reg = mdiobus_read(bus, addr, reg_addr);
500 		if (phy_reg < 0)
501 			return -EIO;
502 		c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
503 
504 		reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2;
505 		phy_reg = mdiobus_read(bus, addr, reg_addr);
506 		if (phy_reg < 0)
507 			return -EIO;
508 		c45_ids->device_ids[i] |= (phy_reg & 0xffff);
509 	}
510 	*phy_id = 0;
511 	return 0;
512 }
513 
514 /**
515  * get_phy_id - reads the specified addr for its ID.
516  * @bus: the target MII bus
517  * @addr: PHY address on the MII bus
518  * @phy_id: where to store the ID retrieved.
519  * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
520  * @c45_ids: where to store the c45 ID information.
521  *
522  * Description: In the case of a 802.3-c22 PHY, reads the ID registers
523  *   of the PHY at @addr on the @bus, stores it in @phy_id and returns
524  *   zero on success.
525  *
526  *   In the case of a 802.3-c45 PHY, get_phy_c45_ids() is invoked, and
527  *   its return value is in turn returned.
528  *
529  */
get_phy_id(struct mii_bus * bus,int addr,u32 * phy_id,bool is_c45,struct phy_c45_device_ids * c45_ids)530 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
531 		      bool is_c45, struct phy_c45_device_ids *c45_ids)
532 {
533 	int phy_reg;
534 
535 	if (is_c45)
536 		return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
537 
538 	/* Grab the bits from PHYIR1, and put them in the upper half */
539 	phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
540 	if (phy_reg < 0)
541 		return -EIO;
542 
543 	*phy_id = (phy_reg & 0xffff) << 16;
544 
545 	/* Grab the bits from PHYIR2, and put them in the lower half */
546 	phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
547 	if (phy_reg < 0)
548 		return -EIO;
549 
550 	*phy_id |= (phy_reg & 0xffff);
551 
552 	return 0;
553 }
554 
555 /**
556  * get_phy_device - reads the specified PHY device and returns its @phy_device
557  *		    struct
558  * @bus: the target MII bus
559  * @addr: PHY address on the MII bus
560  * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
561  *
562  * Description: Reads the ID registers of the PHY at @addr on the
563  *   @bus, then allocates and returns the phy_device to represent it.
564  */
get_phy_device(struct mii_bus * bus,int addr,bool is_c45)565 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
566 {
567 	struct phy_c45_device_ids c45_ids = {0};
568 	u32 phy_id = 0;
569 	int r;
570 
571 	r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
572 	if (r)
573 		return ERR_PTR(r);
574 
575 	/* If the phy_id is mostly Fs, there is no device there */
576 	if ((phy_id & 0x1fffffff) == 0x1fffffff)
577 		return ERR_PTR(-ENODEV);
578 
579 	return phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
580 }
581 EXPORT_SYMBOL(get_phy_device);
582 
583 static ssize_t
phy_id_show(struct device * dev,struct device_attribute * attr,char * buf)584 phy_id_show(struct device *dev, struct device_attribute *attr, char *buf)
585 {
586 	struct phy_device *phydev = to_phy_device(dev);
587 
588 	return sprintf(buf, "0x%.8lx\n", (unsigned long)phydev->phy_id);
589 }
590 static DEVICE_ATTR_RO(phy_id);
591 
592 static ssize_t
phy_interface_show(struct device * dev,struct device_attribute * attr,char * buf)593 phy_interface_show(struct device *dev, struct device_attribute *attr, char *buf)
594 {
595 	struct phy_device *phydev = to_phy_device(dev);
596 	const char *mode = NULL;
597 
598 	if (phy_is_internal(phydev))
599 		mode = "internal";
600 	else
601 		mode = phy_modes(phydev->interface);
602 
603 	return sprintf(buf, "%s\n", mode);
604 }
605 static DEVICE_ATTR_RO(phy_interface);
606 
607 static ssize_t
phy_has_fixups_show(struct device * dev,struct device_attribute * attr,char * buf)608 phy_has_fixups_show(struct device *dev, struct device_attribute *attr,
609 		    char *buf)
610 {
611 	struct phy_device *phydev = to_phy_device(dev);
612 
613 	return sprintf(buf, "%d\n", phydev->has_fixups);
614 }
615 static DEVICE_ATTR_RO(phy_has_fixups);
616 
617 static struct attribute *phy_dev_attrs[] = {
618 	&dev_attr_phy_id.attr,
619 	&dev_attr_phy_interface.attr,
620 	&dev_attr_phy_has_fixups.attr,
621 	NULL,
622 };
623 ATTRIBUTE_GROUPS(phy_dev);
624 
625 /**
626  * phy_device_register - Register the phy device on the MDIO bus
627  * @phydev: phy_device structure to be added to the MDIO bus
628  */
phy_device_register(struct phy_device * phydev)629 int phy_device_register(struct phy_device *phydev)
630 {
631 	int err;
632 
633 	err = mdiobus_register_device(&phydev->mdio);
634 	if (err)
635 		return err;
636 
637 	/* Run all of the fixups for this PHY */
638 	err = phy_scan_fixups(phydev);
639 	if (err) {
640 		pr_err("PHY %d failed to initialize\n", phydev->mdio.addr);
641 		goto out;
642 	}
643 
644 	phydev->mdio.dev.groups = phy_dev_groups;
645 
646 	err = device_add(&phydev->mdio.dev);
647 	if (err) {
648 		pr_err("PHY %d failed to add\n", phydev->mdio.addr);
649 		goto out;
650 	}
651 
652 	return 0;
653 
654  out:
655 	mdiobus_unregister_device(&phydev->mdio);
656 	return err;
657 }
658 EXPORT_SYMBOL(phy_device_register);
659 
660 /**
661  * phy_device_remove - Remove a previously registered phy device from the MDIO bus
662  * @phydev: phy_device structure to remove
663  *
664  * This doesn't free the phy_device itself, it merely reverses the effects
665  * of phy_device_register(). Use phy_device_free() to free the device
666  * after calling this function.
667  */
phy_device_remove(struct phy_device * phydev)668 void phy_device_remove(struct phy_device *phydev)
669 {
670 	device_del(&phydev->mdio.dev);
671 	mdiobus_unregister_device(&phydev->mdio);
672 }
673 EXPORT_SYMBOL(phy_device_remove);
674 
675 /**
676  * phy_find_first - finds the first PHY device on the bus
677  * @bus: the target MII bus
678  */
phy_find_first(struct mii_bus * bus)679 struct phy_device *phy_find_first(struct mii_bus *bus)
680 {
681 	struct phy_device *phydev;
682 	int addr;
683 
684 	for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
685 		phydev = mdiobus_get_phy(bus, addr);
686 		if (phydev)
687 			return phydev;
688 	}
689 	return NULL;
690 }
691 EXPORT_SYMBOL(phy_find_first);
692 
phy_link_change(struct phy_device * phydev,bool up,bool do_carrier)693 static void phy_link_change(struct phy_device *phydev, bool up, bool do_carrier)
694 {
695 	struct net_device *netdev = phydev->attached_dev;
696 
697 	if (do_carrier) {
698 		if (up)
699 			netif_carrier_on(netdev);
700 		else
701 			netif_carrier_off(netdev);
702 	}
703 	phydev->adjust_link(netdev);
704 }
705 
706 /**
707  * phy_prepare_link - prepares the PHY layer to monitor link status
708  * @phydev: target phy_device struct
709  * @handler: callback function for link status change notifications
710  *
711  * Description: Tells the PHY infrastructure to handle the
712  *   gory details on monitoring link status (whether through
713  *   polling or an interrupt), and to call back to the
714  *   connected device driver when the link status changes.
715  *   If you want to monitor your own link state, don't call
716  *   this function.
717  */
phy_prepare_link(struct phy_device * phydev,void (* handler)(struct net_device *))718 static void phy_prepare_link(struct phy_device *phydev,
719 			     void (*handler)(struct net_device *))
720 {
721 	phydev->adjust_link = handler;
722 }
723 
724 /**
725  * phy_connect_direct - connect an ethernet device to a specific phy_device
726  * @dev: the network device to connect
727  * @phydev: the pointer to the phy device
728  * @handler: callback function for state change notifications
729  * @interface: PHY device's interface
730  */
phy_connect_direct(struct net_device * dev,struct phy_device * phydev,void (* handler)(struct net_device *),phy_interface_t interface)731 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
732 		       void (*handler)(struct net_device *),
733 		       phy_interface_t interface)
734 {
735 	int rc;
736 
737 	if (!dev)
738 		return -EINVAL;
739 
740 	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
741 	if (rc)
742 		return rc;
743 
744 	phy_prepare_link(phydev, handler);
745 	phy_start_machine(phydev);
746 	if (phydev->irq > 0)
747 		phy_start_interrupts(phydev);
748 
749 	return 0;
750 }
751 EXPORT_SYMBOL(phy_connect_direct);
752 
753 /**
754  * phy_connect - connect an ethernet device to a PHY device
755  * @dev: the network device to connect
756  * @bus_id: the id string of the PHY device to connect
757  * @handler: callback function for state change notifications
758  * @interface: PHY device's interface
759  *
760  * Description: Convenience function for connecting ethernet
761  *   devices to PHY devices.  The default behavior is for
762  *   the PHY infrastructure to handle everything, and only notify
763  *   the connected driver when the link status changes.  If you
764  *   don't want, or can't use the provided functionality, you may
765  *   choose to call only the subset of functions which provide
766  *   the desired functionality.
767  */
phy_connect(struct net_device * dev,const char * bus_id,void (* handler)(struct net_device *),phy_interface_t interface)768 struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
769 			       void (*handler)(struct net_device *),
770 			       phy_interface_t interface)
771 {
772 	struct phy_device *phydev;
773 	struct device *d;
774 	int rc;
775 
776 	/* Search the list of PHY devices on the mdio bus for the
777 	 * PHY with the requested name
778 	 */
779 	d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
780 	if (!d) {
781 		pr_err("PHY %s not found\n", bus_id);
782 		return ERR_PTR(-ENODEV);
783 	}
784 	phydev = to_phy_device(d);
785 
786 	rc = phy_connect_direct(dev, phydev, handler, interface);
787 	put_device(d);
788 	if (rc)
789 		return ERR_PTR(rc);
790 
791 	return phydev;
792 }
793 EXPORT_SYMBOL(phy_connect);
794 
795 /**
796  * phy_disconnect - disable interrupts, stop state machine, and detach a PHY
797  *		    device
798  * @phydev: target phy_device struct
799  */
phy_disconnect(struct phy_device * phydev)800 void phy_disconnect(struct phy_device *phydev)
801 {
802 	if (phydev->irq > 0)
803 		phy_stop_interrupts(phydev);
804 
805 	phy_stop_machine(phydev);
806 
807 	phydev->adjust_link = NULL;
808 
809 	phy_detach(phydev);
810 }
811 EXPORT_SYMBOL(phy_disconnect);
812 
813 /**
814  * phy_poll_reset - Safely wait until a PHY reset has properly completed
815  * @phydev: The PHY device to poll
816  *
817  * Description: According to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as
818  *   published in 2008, a PHY reset may take up to 0.5 seconds.  The MII BMCR
819  *   register must be polled until the BMCR_RESET bit clears.
820  *
821  *   Furthermore, any attempts to write to PHY registers may have no effect
822  *   or even generate MDIO bus errors until this is complete.
823  *
824  *   Some PHYs (such as the Marvell 88E1111) don't entirely conform to the
825  *   standard and do not fully reset after the BMCR_RESET bit is set, and may
826  *   even *REQUIRE* a soft-reset to properly restart autonegotiation.  In an
827  *   effort to support such broken PHYs, this function is separate from the
828  *   standard phy_init_hw() which will zero all the other bits in the BMCR
829  *   and reapply all driver-specific and board-specific fixups.
830  */
phy_poll_reset(struct phy_device * phydev)831 static int phy_poll_reset(struct phy_device *phydev)
832 {
833 	/* Poll until the reset bit clears (50ms per retry == 0.6 sec) */
834 	unsigned int retries = 12;
835 	int ret;
836 
837 	do {
838 		msleep(50);
839 		ret = phy_read(phydev, MII_BMCR);
840 		if (ret < 0)
841 			return ret;
842 	} while (ret & BMCR_RESET && --retries);
843 	if (ret & BMCR_RESET)
844 		return -ETIMEDOUT;
845 
846 	/* Some chips (smsc911x) may still need up to another 1ms after the
847 	 * BMCR_RESET bit is cleared before they are usable.
848 	 */
849 	msleep(1);
850 	return 0;
851 }
852 
phy_init_hw(struct phy_device * phydev)853 int phy_init_hw(struct phy_device *phydev)
854 {
855 	int ret = 0;
856 
857 	if (!phydev->drv || !phydev->drv->config_init)
858 		return 0;
859 
860 	if (phydev->drv->soft_reset)
861 		ret = phydev->drv->soft_reset(phydev);
862 	else
863 		ret = genphy_soft_reset(phydev);
864 
865 	if (ret < 0)
866 		return ret;
867 
868 	ret = phy_scan_fixups(phydev);
869 	if (ret < 0)
870 		return ret;
871 
872 	return phydev->drv->config_init(phydev);
873 }
874 EXPORT_SYMBOL(phy_init_hw);
875 
phy_attached_info(struct phy_device * phydev)876 void phy_attached_info(struct phy_device *phydev)
877 {
878 	phy_attached_print(phydev, NULL);
879 }
880 EXPORT_SYMBOL(phy_attached_info);
881 
882 #define ATTACHED_FMT "attached PHY driver [%s] (mii_bus:phy_addr=%s, irq=%s)"
phy_attached_print(struct phy_device * phydev,const char * fmt,...)883 void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
884 {
885 	const char *drv_name = phydev->drv ? phydev->drv->name : "unbound";
886 	char *irq_str;
887 	char irq_num[8];
888 
889 	switch(phydev->irq) {
890 	case PHY_POLL:
891 		irq_str = "POLL";
892 		break;
893 	case PHY_IGNORE_INTERRUPT:
894 		irq_str = "IGNORE";
895 		break;
896 	default:
897 		snprintf(irq_num, sizeof(irq_num), "%d", phydev->irq);
898 		irq_str = irq_num;
899 		break;
900 	}
901 
902 
903 	if (!fmt) {
904 		dev_info(&phydev->mdio.dev, ATTACHED_FMT "\n",
905 			 drv_name, phydev_name(phydev),
906 			 irq_str);
907 	} else {
908 		va_list ap;
909 
910 		dev_info(&phydev->mdio.dev, ATTACHED_FMT,
911 			 drv_name, phydev_name(phydev),
912 			 irq_str);
913 
914 		va_start(ap, fmt);
915 		vprintk(fmt, ap);
916 		va_end(ap);
917 	}
918 }
919 EXPORT_SYMBOL(phy_attached_print);
920 
921 /**
922  * phy_attach_direct - attach a network device to a given PHY device pointer
923  * @dev: network device to attach
924  * @phydev: Pointer to phy_device to attach
925  * @flags: PHY device's dev_flags
926  * @interface: PHY device's interface
927  *
928  * Description: Called by drivers to attach to a particular PHY
929  *     device. The phy_device is found, and properly hooked up
930  *     to the phy_driver.  If no driver is attached, then a
931  *     generic driver is used.  The phy_device is given a ptr to
932  *     the attaching device, and given a callback for link status
933  *     change.  The phy_device is returned to the attaching driver.
934  *     This function takes a reference on the phy device.
935  */
phy_attach_direct(struct net_device * dev,struct phy_device * phydev,u32 flags,phy_interface_t interface)936 int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
937 		      u32 flags, phy_interface_t interface)
938 {
939 	struct module *ndev_owner = dev->dev.parent->driver->owner;
940 	struct mii_bus *bus = phydev->mdio.bus;
941 	struct device *d = &phydev->mdio.dev;
942 	bool using_genphy = false;
943 	int err;
944 
945 	/* For Ethernet device drivers that register their own MDIO bus, we
946 	 * will have bus->owner match ndev_mod, so we do not want to increment
947 	 * our own module->refcnt here, otherwise we would not be able to
948 	 * unload later on.
949 	 */
950 	if (ndev_owner != bus->owner && !try_module_get(bus->owner)) {
951 		dev_err(&dev->dev, "failed to get the bus module\n");
952 		return -EIO;
953 	}
954 
955 	get_device(d);
956 
957 	/* Assume that if there is no driver, that it doesn't
958 	 * exist, and we should use the genphy driver.
959 	 */
960 	if (!d->driver) {
961 		if (phydev->is_c45)
962 			d->driver = &genphy_10g_driver.mdiodrv.driver;
963 		else
964 			d->driver = &genphy_driver.mdiodrv.driver;
965 
966 		using_genphy = true;
967 	}
968 
969 	if (!try_module_get(d->driver->owner)) {
970 		dev_err(&dev->dev, "failed to get the device driver module\n");
971 		err = -EIO;
972 		goto error_put_device;
973 	}
974 
975 	if (using_genphy) {
976 		err = d->driver->probe(d);
977 		if (err >= 0)
978 			err = device_bind_driver(d);
979 
980 		if (err)
981 			goto error_module_put;
982 	}
983 
984 	if (phydev->attached_dev) {
985 		dev_err(&dev->dev, "PHY already attached\n");
986 		err = -EBUSY;
987 		goto error;
988 	}
989 
990 	phydev->phy_link_change = phy_link_change;
991 	phydev->attached_dev = dev;
992 	dev->phydev = phydev;
993 
994 	/* Some Ethernet drivers try to connect to a PHY device before
995 	 * calling register_netdevice() -> netdev_register_kobject() and
996 	 * does the dev->dev.kobj initialization. Here we only check for
997 	 * success which indicates that the network device kobject is
998 	 * ready. Once we do that we still need to keep track of whether
999 	 * links were successfully set up or not for phy_detach() to
1000 	 * remove them accordingly.
1001 	 */
1002 	phydev->sysfs_links = false;
1003 
1004 	err = sysfs_create_link(&phydev->mdio.dev.kobj, &dev->dev.kobj,
1005 				"attached_dev");
1006 	if (!err) {
1007 		err = sysfs_create_link_nowarn(&dev->dev.kobj,
1008 					       &phydev->mdio.dev.kobj,
1009 					       "phydev");
1010 		if (err) {
1011 			dev_err(&dev->dev, "could not add device link to %s err %d\n",
1012 				kobject_name(&phydev->mdio.dev.kobj),
1013 				err);
1014 			/* non-fatal - some net drivers can use one netdevice
1015 			 * with more then one phy
1016 			 */
1017 		}
1018 
1019 		phydev->sysfs_links = true;
1020 	}
1021 
1022 	phydev->dev_flags = flags;
1023 
1024 	phydev->interface = interface;
1025 
1026 	phydev->state = PHY_READY;
1027 
1028 	/* Initial carrier state is off as the phy is about to be
1029 	 * (re)initialized.
1030 	 */
1031 	netif_carrier_off(phydev->attached_dev);
1032 
1033 	/* Do initial configuration here, now that
1034 	 * we have certain key parameters
1035 	 * (dev_flags and interface)
1036 	 */
1037 	err = phy_init_hw(phydev);
1038 	if (err)
1039 		goto error;
1040 
1041 	phy_resume(phydev);
1042 	phy_led_triggers_register(phydev);
1043 
1044 	return err;
1045 
1046 error:
1047 	/* phy_detach() does all of the cleanup below */
1048 	phy_detach(phydev);
1049 	return err;
1050 
1051 error_module_put:
1052 	module_put(d->driver->owner);
1053 error_put_device:
1054 	put_device(d);
1055 	if (ndev_owner != bus->owner)
1056 		module_put(bus->owner);
1057 	return err;
1058 }
1059 EXPORT_SYMBOL(phy_attach_direct);
1060 
1061 /**
1062  * phy_attach - attach a network device to a particular PHY device
1063  * @dev: network device to attach
1064  * @bus_id: Bus ID of PHY device to attach
1065  * @interface: PHY device's interface
1066  *
1067  * Description: Same as phy_attach_direct() except that a PHY bus_id
1068  *     string is passed instead of a pointer to a struct phy_device.
1069  */
phy_attach(struct net_device * dev,const char * bus_id,phy_interface_t interface)1070 struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
1071 			      phy_interface_t interface)
1072 {
1073 	struct bus_type *bus = &mdio_bus_type;
1074 	struct phy_device *phydev;
1075 	struct device *d;
1076 	int rc;
1077 
1078 	if (!dev)
1079 		return ERR_PTR(-EINVAL);
1080 
1081 	/* Search the list of PHY devices on the mdio bus for the
1082 	 * PHY with the requested name
1083 	 */
1084 	d = bus_find_device_by_name(bus, NULL, bus_id);
1085 	if (!d) {
1086 		pr_err("PHY %s not found\n", bus_id);
1087 		return ERR_PTR(-ENODEV);
1088 	}
1089 	phydev = to_phy_device(d);
1090 
1091 	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
1092 	put_device(d);
1093 	if (rc)
1094 		return ERR_PTR(rc);
1095 
1096 	return phydev;
1097 }
1098 EXPORT_SYMBOL(phy_attach);
1099 
1100 /**
1101  * phy_detach - detach a PHY device from its network device
1102  * @phydev: target phy_device struct
1103  *
1104  * This detaches the phy device from its network device and the phy
1105  * driver, and drops the reference count taken in phy_attach_direct().
1106  */
phy_detach(struct phy_device * phydev)1107 void phy_detach(struct phy_device *phydev)
1108 {
1109 	struct net_device *dev = phydev->attached_dev;
1110 	struct module *ndev_owner = dev->dev.parent->driver->owner;
1111 	struct mii_bus *bus;
1112 
1113 	if (phydev->sysfs_links) {
1114 		sysfs_remove_link(&dev->dev.kobj, "phydev");
1115 		sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev");
1116 	}
1117 	phydev->attached_dev->phydev = NULL;
1118 	phydev->attached_dev = NULL;
1119 	phy_suspend(phydev);
1120 	phydev->phylink = NULL;
1121 
1122 	phy_led_triggers_unregister(phydev);
1123 
1124 	module_put(phydev->mdio.dev.driver->owner);
1125 
1126 	/* If the device had no specific driver before (i.e. - it
1127 	 * was using the generic driver), we unbind the device
1128 	 * from the generic driver so that there's a chance a
1129 	 * real driver could be loaded
1130 	 */
1131 	if (phydev->mdio.dev.driver == &genphy_10g_driver.mdiodrv.driver ||
1132 	    phydev->mdio.dev.driver == &genphy_driver.mdiodrv.driver)
1133 		device_release_driver(&phydev->mdio.dev);
1134 
1135 	/*
1136 	 * The phydev might go away on the put_device() below, so avoid
1137 	 * a use-after-free bug by reading the underlying bus first.
1138 	 */
1139 	bus = phydev->mdio.bus;
1140 
1141 	put_device(&phydev->mdio.dev);
1142 	if (ndev_owner != bus->owner)
1143 		module_put(bus->owner);
1144 }
1145 EXPORT_SYMBOL(phy_detach);
1146 
phy_suspend(struct phy_device * phydev)1147 int phy_suspend(struct phy_device *phydev)
1148 {
1149 	struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver);
1150 	struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
1151 	int ret = 0;
1152 
1153 	/* If the device has WOL enabled, we cannot suspend the PHY */
1154 	phy_ethtool_get_wol(phydev, &wol);
1155 	if (wol.wolopts)
1156 		return -EBUSY;
1157 
1158 	if (phydev->drv && phydrv->suspend)
1159 		ret = phydrv->suspend(phydev);
1160 
1161 	if (ret)
1162 		return ret;
1163 
1164 	phydev->suspended = true;
1165 
1166 	return ret;
1167 }
1168 EXPORT_SYMBOL(phy_suspend);
1169 
__phy_resume(struct phy_device * phydev)1170 int __phy_resume(struct phy_device *phydev)
1171 {
1172 	struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver);
1173 	int ret = 0;
1174 
1175 	WARN_ON(!mutex_is_locked(&phydev->lock));
1176 
1177 	if (phydev->drv && phydrv->resume)
1178 		ret = phydrv->resume(phydev);
1179 
1180 	if (ret)
1181 		return ret;
1182 
1183 	phydev->suspended = false;
1184 
1185 	return ret;
1186 }
1187 EXPORT_SYMBOL(__phy_resume);
1188 
phy_resume(struct phy_device * phydev)1189 int phy_resume(struct phy_device *phydev)
1190 {
1191 	int ret;
1192 
1193 	mutex_lock(&phydev->lock);
1194 	ret = __phy_resume(phydev);
1195 	mutex_unlock(&phydev->lock);
1196 
1197 	return ret;
1198 }
1199 EXPORT_SYMBOL(phy_resume);
1200 
phy_loopback(struct phy_device * phydev,bool enable)1201 int phy_loopback(struct phy_device *phydev, bool enable)
1202 {
1203 	struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver);
1204 	int ret = 0;
1205 
1206 	mutex_lock(&phydev->lock);
1207 
1208 	if (enable && phydev->loopback_enabled) {
1209 		ret = -EBUSY;
1210 		goto out;
1211 	}
1212 
1213 	if (!enable && !phydev->loopback_enabled) {
1214 		ret = -EINVAL;
1215 		goto out;
1216 	}
1217 
1218 	if (phydev->drv && phydrv->set_loopback)
1219 		ret = phydrv->set_loopback(phydev, enable);
1220 	else
1221 		ret = -EOPNOTSUPP;
1222 
1223 	if (ret)
1224 		goto out;
1225 
1226 	phydev->loopback_enabled = enable;
1227 
1228 out:
1229 	mutex_unlock(&phydev->lock);
1230 	return ret;
1231 }
1232 EXPORT_SYMBOL(phy_loopback);
1233 
1234 /* Generic PHY support and helper functions */
1235 
1236 /**
1237  * genphy_config_advert - sanitize and advertise auto-negotiation parameters
1238  * @phydev: target phy_device struct
1239  *
1240  * Description: Writes MII_ADVERTISE with the appropriate values,
1241  *   after sanitizing the values to make sure we only advertise
1242  *   what is supported.  Returns < 0 on error, 0 if the PHY's advertisement
1243  *   hasn't changed, and > 0 if it has changed.
1244  */
genphy_config_advert(struct phy_device * phydev)1245 static int genphy_config_advert(struct phy_device *phydev)
1246 {
1247 	u32 advertise;
1248 	int oldadv, adv, bmsr;
1249 	int err, changed = 0;
1250 
1251 	/* Only allow advertising what this PHY supports */
1252 	phydev->advertising &= phydev->supported;
1253 	advertise = phydev->advertising;
1254 
1255 	/* Setup standard advertisement */
1256 	adv = phy_read(phydev, MII_ADVERTISE);
1257 	if (adv < 0)
1258 		return adv;
1259 
1260 	oldadv = adv;
1261 	adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
1262 		 ADVERTISE_PAUSE_ASYM);
1263 	adv |= ethtool_adv_to_mii_adv_t(advertise);
1264 
1265 	if (adv != oldadv) {
1266 		err = phy_write(phydev, MII_ADVERTISE, adv);
1267 
1268 		if (err < 0)
1269 			return err;
1270 		changed = 1;
1271 	}
1272 
1273 	bmsr = phy_read(phydev, MII_BMSR);
1274 	if (bmsr < 0)
1275 		return bmsr;
1276 
1277 	/* Per 802.3-2008, Section 22.2.4.2.16 Extended status all
1278 	 * 1000Mbits/sec capable PHYs shall have the BMSR_ESTATEN bit set to a
1279 	 * logical 1.
1280 	 */
1281 	if (!(bmsr & BMSR_ESTATEN))
1282 		return changed;
1283 
1284 	/* Configure gigabit if it's supported */
1285 	adv = phy_read(phydev, MII_CTRL1000);
1286 	if (adv < 0)
1287 		return adv;
1288 
1289 	oldadv = adv;
1290 	adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
1291 
1292 	if (phydev->supported & (SUPPORTED_1000baseT_Half |
1293 				 SUPPORTED_1000baseT_Full)) {
1294 		adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
1295 	}
1296 
1297 	if (adv != oldadv)
1298 		changed = 1;
1299 
1300 	err = phy_write(phydev, MII_CTRL1000, adv);
1301 	if (err < 0)
1302 		return err;
1303 
1304 	return changed;
1305 }
1306 
1307 /**
1308  * genphy_config_eee_advert - disable unwanted eee mode advertisement
1309  * @phydev: target phy_device struct
1310  *
1311  * Description: Writes MDIO_AN_EEE_ADV after disabling unsupported energy
1312  *   efficent ethernet modes. Returns 0 if the PHY's advertisement hasn't
1313  *   changed, and 1 if it has changed.
1314  */
genphy_config_eee_advert(struct phy_device * phydev)1315 static int genphy_config_eee_advert(struct phy_device *phydev)
1316 {
1317 	int broken = phydev->eee_broken_modes;
1318 	int old_adv, adv;
1319 
1320 	/* Nothing to disable */
1321 	if (!broken)
1322 		return 0;
1323 
1324 	/* If the following call fails, we assume that EEE is not
1325 	 * supported by the phy. If we read 0, EEE is not advertised
1326 	 * In both case, we don't need to continue
1327 	 */
1328 	adv = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV);
1329 	if (adv <= 0)
1330 		return 0;
1331 
1332 	old_adv = adv;
1333 	adv &= ~broken;
1334 
1335 	/* Advertising remains unchanged with the broken mask */
1336 	if (old_adv == adv)
1337 		return 0;
1338 
1339 	phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, adv);
1340 
1341 	return 1;
1342 }
1343 
1344 /**
1345  * genphy_setup_forced - configures/forces speed/duplex from @phydev
1346  * @phydev: target phy_device struct
1347  *
1348  * Description: Configures MII_BMCR to force speed/duplex
1349  *   to the values in phydev. Assumes that the values are valid.
1350  *   Please see phy_sanitize_settings().
1351  */
genphy_setup_forced(struct phy_device * phydev)1352 int genphy_setup_forced(struct phy_device *phydev)
1353 {
1354 	int ctl = phy_read(phydev, MII_BMCR);
1355 
1356 	ctl &= BMCR_LOOPBACK | BMCR_ISOLATE | BMCR_PDOWN;
1357 	phydev->pause = 0;
1358 	phydev->asym_pause = 0;
1359 
1360 	if (SPEED_1000 == phydev->speed)
1361 		ctl |= BMCR_SPEED1000;
1362 	else if (SPEED_100 == phydev->speed)
1363 		ctl |= BMCR_SPEED100;
1364 
1365 	if (DUPLEX_FULL == phydev->duplex)
1366 		ctl |= BMCR_FULLDPLX;
1367 
1368 	return phy_write(phydev, MII_BMCR, ctl);
1369 }
1370 EXPORT_SYMBOL(genphy_setup_forced);
1371 
1372 /**
1373  * genphy_restart_aneg - Enable and Restart Autonegotiation
1374  * @phydev: target phy_device struct
1375  */
genphy_restart_aneg(struct phy_device * phydev)1376 int genphy_restart_aneg(struct phy_device *phydev)
1377 {
1378 	int ctl = phy_read(phydev, MII_BMCR);
1379 
1380 	if (ctl < 0)
1381 		return ctl;
1382 
1383 	ctl |= BMCR_ANENABLE | BMCR_ANRESTART;
1384 
1385 	/* Don't isolate the PHY if we're negotiating */
1386 	ctl &= ~BMCR_ISOLATE;
1387 
1388 	return phy_write(phydev, MII_BMCR, ctl);
1389 }
1390 EXPORT_SYMBOL(genphy_restart_aneg);
1391 
1392 /**
1393  * genphy_config_aneg - restart auto-negotiation or write BMCR
1394  * @phydev: target phy_device struct
1395  *
1396  * Description: If auto-negotiation is enabled, we configure the
1397  *   advertising, and then restart auto-negotiation.  If it is not
1398  *   enabled, then we write the BMCR.
1399  */
genphy_config_aneg(struct phy_device * phydev)1400 int genphy_config_aneg(struct phy_device *phydev)
1401 {
1402 	int err, changed;
1403 
1404 	changed = genphy_config_eee_advert(phydev);
1405 
1406 	if (AUTONEG_ENABLE != phydev->autoneg)
1407 		return genphy_setup_forced(phydev);
1408 
1409 	err = genphy_config_advert(phydev);
1410 	if (err < 0) /* error */
1411 		return err;
1412 
1413 	changed |= err;
1414 
1415 	if (changed == 0) {
1416 		/* Advertisement hasn't changed, but maybe aneg was never on to
1417 		 * begin with?  Or maybe phy was isolated?
1418 		 */
1419 		int ctl = phy_read(phydev, MII_BMCR);
1420 
1421 		if (ctl < 0)
1422 			return ctl;
1423 
1424 		if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
1425 			changed = 1; /* do restart aneg */
1426 	}
1427 
1428 	/* Only restart aneg if we are advertising something different
1429 	 * than we were before.
1430 	 */
1431 	if (changed > 0)
1432 		return genphy_restart_aneg(phydev);
1433 
1434 	return 0;
1435 }
1436 EXPORT_SYMBOL(genphy_config_aneg);
1437 
1438 /**
1439  * genphy_aneg_done - return auto-negotiation status
1440  * @phydev: target phy_device struct
1441  *
1442  * Description: Reads the status register and returns 0 either if
1443  *   auto-negotiation is incomplete, or if there was an error.
1444  *   Returns BMSR_ANEGCOMPLETE if auto-negotiation is done.
1445  */
genphy_aneg_done(struct phy_device * phydev)1446 int genphy_aneg_done(struct phy_device *phydev)
1447 {
1448 	int retval = phy_read(phydev, MII_BMSR);
1449 
1450 	return (retval < 0) ? retval : (retval & BMSR_ANEGCOMPLETE);
1451 }
1452 EXPORT_SYMBOL(genphy_aneg_done);
1453 
1454 /**
1455  * genphy_update_link - update link status in @phydev
1456  * @phydev: target phy_device struct
1457  *
1458  * Description: Update the value in phydev->link to reflect the
1459  *   current link value.  In order to do this, we need to read
1460  *   the status register twice, keeping the second value.
1461  */
genphy_update_link(struct phy_device * phydev)1462 int genphy_update_link(struct phy_device *phydev)
1463 {
1464 	int status;
1465 
1466 	/* Do a fake read */
1467 	status = phy_read(phydev, MII_BMSR);
1468 	if (status < 0)
1469 		return status;
1470 
1471 	/* Read link and autonegotiation status */
1472 	status = phy_read(phydev, MII_BMSR);
1473 	if (status < 0)
1474 		return status;
1475 
1476 	if ((status & BMSR_LSTATUS) == 0)
1477 		phydev->link = 0;
1478 	else
1479 		phydev->link = 1;
1480 
1481 	return 0;
1482 }
1483 EXPORT_SYMBOL(genphy_update_link);
1484 
1485 /**
1486  * genphy_read_status - check the link status and update current link state
1487  * @phydev: target phy_device struct
1488  *
1489  * Description: Check the link, then figure out the current state
1490  *   by comparing what we advertise with what the link partner
1491  *   advertises.  Start by checking the gigabit possibilities,
1492  *   then move on to 10/100.
1493  */
genphy_read_status(struct phy_device * phydev)1494 int genphy_read_status(struct phy_device *phydev)
1495 {
1496 	int adv;
1497 	int err;
1498 	int lpa;
1499 	int lpagb = 0;
1500 	int common_adv;
1501 	int common_adv_gb = 0;
1502 
1503 	/* Update the link, but return if there was an error */
1504 	err = genphy_update_link(phydev);
1505 	if (err)
1506 		return err;
1507 
1508 	phydev->lp_advertising = 0;
1509 
1510 	if (AUTONEG_ENABLE == phydev->autoneg) {
1511 		if (phydev->supported & (SUPPORTED_1000baseT_Half
1512 					| SUPPORTED_1000baseT_Full)) {
1513 			lpagb = phy_read(phydev, MII_STAT1000);
1514 			if (lpagb < 0)
1515 				return lpagb;
1516 
1517 			adv = phy_read(phydev, MII_CTRL1000);
1518 			if (adv < 0)
1519 				return adv;
1520 
1521 			phydev->lp_advertising =
1522 				mii_stat1000_to_ethtool_lpa_t(lpagb);
1523 			common_adv_gb = lpagb & adv << 2;
1524 		}
1525 
1526 		lpa = phy_read(phydev, MII_LPA);
1527 		if (lpa < 0)
1528 			return lpa;
1529 
1530 		phydev->lp_advertising |= mii_lpa_to_ethtool_lpa_t(lpa);
1531 
1532 		adv = phy_read(phydev, MII_ADVERTISE);
1533 		if (adv < 0)
1534 			return adv;
1535 
1536 		common_adv = lpa & adv;
1537 
1538 		phydev->speed = SPEED_10;
1539 		phydev->duplex = DUPLEX_HALF;
1540 		phydev->pause = 0;
1541 		phydev->asym_pause = 0;
1542 
1543 		if (common_adv_gb & (LPA_1000FULL | LPA_1000HALF)) {
1544 			phydev->speed = SPEED_1000;
1545 
1546 			if (common_adv_gb & LPA_1000FULL)
1547 				phydev->duplex = DUPLEX_FULL;
1548 		} else if (common_adv & (LPA_100FULL | LPA_100HALF)) {
1549 			phydev->speed = SPEED_100;
1550 
1551 			if (common_adv & LPA_100FULL)
1552 				phydev->duplex = DUPLEX_FULL;
1553 		} else
1554 			if (common_adv & LPA_10FULL)
1555 				phydev->duplex = DUPLEX_FULL;
1556 
1557 		if (phydev->duplex == DUPLEX_FULL) {
1558 			phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
1559 			phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
1560 		}
1561 	} else {
1562 		int bmcr = phy_read(phydev, MII_BMCR);
1563 
1564 		if (bmcr < 0)
1565 			return bmcr;
1566 
1567 		if (bmcr & BMCR_FULLDPLX)
1568 			phydev->duplex = DUPLEX_FULL;
1569 		else
1570 			phydev->duplex = DUPLEX_HALF;
1571 
1572 		if (bmcr & BMCR_SPEED1000)
1573 			phydev->speed = SPEED_1000;
1574 		else if (bmcr & BMCR_SPEED100)
1575 			phydev->speed = SPEED_100;
1576 		else
1577 			phydev->speed = SPEED_10;
1578 
1579 		phydev->pause = 0;
1580 		phydev->asym_pause = 0;
1581 	}
1582 
1583 	return 0;
1584 }
1585 EXPORT_SYMBOL(genphy_read_status);
1586 
1587 /**
1588  * genphy_soft_reset - software reset the PHY via BMCR_RESET bit
1589  * @phydev: target phy_device struct
1590  *
1591  * Description: Perform a software PHY reset using the standard
1592  * BMCR_RESET bit and poll for the reset bit to be cleared.
1593  *
1594  * Returns: 0 on success, < 0 on failure
1595  */
genphy_soft_reset(struct phy_device * phydev)1596 int genphy_soft_reset(struct phy_device *phydev)
1597 {
1598 	int ret;
1599 
1600 	ret = phy_write(phydev, MII_BMCR, BMCR_RESET);
1601 	if (ret < 0)
1602 		return ret;
1603 
1604 	return phy_poll_reset(phydev);
1605 }
1606 EXPORT_SYMBOL(genphy_soft_reset);
1607 
genphy_config_init(struct phy_device * phydev)1608 int genphy_config_init(struct phy_device *phydev)
1609 {
1610 	int val;
1611 	u32 features;
1612 
1613 	features = (SUPPORTED_TP | SUPPORTED_MII
1614 			| SUPPORTED_AUI | SUPPORTED_FIBRE |
1615 			SUPPORTED_BNC | SUPPORTED_Pause | SUPPORTED_Asym_Pause);
1616 
1617 	/* Do we support autonegotiation? */
1618 	val = phy_read(phydev, MII_BMSR);
1619 	if (val < 0)
1620 		return val;
1621 
1622 	if (val & BMSR_ANEGCAPABLE)
1623 		features |= SUPPORTED_Autoneg;
1624 
1625 	if (val & BMSR_100FULL)
1626 		features |= SUPPORTED_100baseT_Full;
1627 	if (val & BMSR_100HALF)
1628 		features |= SUPPORTED_100baseT_Half;
1629 	if (val & BMSR_10FULL)
1630 		features |= SUPPORTED_10baseT_Full;
1631 	if (val & BMSR_10HALF)
1632 		features |= SUPPORTED_10baseT_Half;
1633 
1634 	if (val & BMSR_ESTATEN) {
1635 		val = phy_read(phydev, MII_ESTATUS);
1636 		if (val < 0)
1637 			return val;
1638 
1639 		if (val & ESTATUS_1000_TFULL)
1640 			features |= SUPPORTED_1000baseT_Full;
1641 		if (val & ESTATUS_1000_THALF)
1642 			features |= SUPPORTED_1000baseT_Half;
1643 	}
1644 
1645 	phydev->supported &= features;
1646 	phydev->advertising &= features;
1647 
1648 	return 0;
1649 }
1650 EXPORT_SYMBOL(genphy_config_init);
1651 
1652 /* This is used for the phy device which doesn't support the MMD extended
1653  * register access, but it does have side effect when we are trying to access
1654  * the MMD register via indirect method.
1655  */
genphy_read_mmd_unsupported(struct phy_device * phdev,int devad,u16 regnum)1656 int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad, u16 regnum)
1657 {
1658 	return -EOPNOTSUPP;
1659 }
1660 EXPORT_SYMBOL(genphy_read_mmd_unsupported);
1661 
genphy_write_mmd_unsupported(struct phy_device * phdev,int devnum,u16 regnum,u16 val)1662 int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
1663 				 u16 regnum, u16 val)
1664 {
1665 	return -EOPNOTSUPP;
1666 }
1667 EXPORT_SYMBOL(genphy_write_mmd_unsupported);
1668 
genphy_suspend(struct phy_device * phydev)1669 int genphy_suspend(struct phy_device *phydev)
1670 {
1671 	int value;
1672 
1673 	mutex_lock(&phydev->lock);
1674 
1675 	value = phy_read(phydev, MII_BMCR);
1676 	phy_write(phydev, MII_BMCR, value | BMCR_PDOWN);
1677 
1678 	mutex_unlock(&phydev->lock);
1679 
1680 	return 0;
1681 }
1682 EXPORT_SYMBOL(genphy_suspend);
1683 
genphy_resume(struct phy_device * phydev)1684 int genphy_resume(struct phy_device *phydev)
1685 {
1686 	int value;
1687 
1688 	value = phy_read(phydev, MII_BMCR);
1689 	phy_write(phydev, MII_BMCR, value & ~BMCR_PDOWN);
1690 
1691 	return 0;
1692 }
1693 EXPORT_SYMBOL(genphy_resume);
1694 
genphy_loopback(struct phy_device * phydev,bool enable)1695 int genphy_loopback(struct phy_device *phydev, bool enable)
1696 {
1697 	int value;
1698 
1699 	value = phy_read(phydev, MII_BMCR);
1700 	if (value < 0)
1701 		return value;
1702 
1703 	if (enable)
1704 		value |= BMCR_LOOPBACK;
1705 	else
1706 		value &= ~BMCR_LOOPBACK;
1707 
1708 	return phy_write(phydev, MII_BMCR, value);
1709 }
1710 EXPORT_SYMBOL(genphy_loopback);
1711 
__set_phy_supported(struct phy_device * phydev,u32 max_speed)1712 static int __set_phy_supported(struct phy_device *phydev, u32 max_speed)
1713 {
1714 	switch (max_speed) {
1715 	case SPEED_10:
1716 		phydev->supported &= ~PHY_100BT_FEATURES;
1717 		/* fall through */
1718 	case SPEED_100:
1719 		phydev->supported &= ~PHY_1000BT_FEATURES;
1720 		break;
1721 	case SPEED_1000:
1722 		break;
1723 	default:
1724 		return -ENOTSUPP;
1725 	}
1726 
1727 	return 0;
1728 }
1729 
phy_set_max_speed(struct phy_device * phydev,u32 max_speed)1730 int phy_set_max_speed(struct phy_device *phydev, u32 max_speed)
1731 {
1732 	int err;
1733 
1734 	err = __set_phy_supported(phydev, max_speed);
1735 	if (err)
1736 		return err;
1737 
1738 	phydev->advertising = phydev->supported;
1739 
1740 	return 0;
1741 }
1742 EXPORT_SYMBOL(phy_set_max_speed);
1743 
of_set_phy_supported(struct phy_device * phydev)1744 static void of_set_phy_supported(struct phy_device *phydev)
1745 {
1746 	struct device_node *node = phydev->mdio.dev.of_node;
1747 	u32 max_speed;
1748 
1749 	if (!IS_ENABLED(CONFIG_OF_MDIO))
1750 		return;
1751 
1752 	if (!node)
1753 		return;
1754 
1755 	if (!of_property_read_u32(node, "max-speed", &max_speed))
1756 		__set_phy_supported(phydev, max_speed);
1757 }
1758 
of_set_phy_eee_broken(struct phy_device * phydev)1759 static void of_set_phy_eee_broken(struct phy_device *phydev)
1760 {
1761 	struct device_node *node = phydev->mdio.dev.of_node;
1762 	u32 broken = 0;
1763 
1764 	if (!IS_ENABLED(CONFIG_OF_MDIO))
1765 		return;
1766 
1767 	if (!node)
1768 		return;
1769 
1770 	if (of_property_read_bool(node, "eee-broken-100tx"))
1771 		broken |= MDIO_EEE_100TX;
1772 	if (of_property_read_bool(node, "eee-broken-1000t"))
1773 		broken |= MDIO_EEE_1000T;
1774 	if (of_property_read_bool(node, "eee-broken-10gt"))
1775 		broken |= MDIO_EEE_10GT;
1776 	if (of_property_read_bool(node, "eee-broken-1000kx"))
1777 		broken |= MDIO_EEE_1000KX;
1778 	if (of_property_read_bool(node, "eee-broken-10gkx4"))
1779 		broken |= MDIO_EEE_10GKX4;
1780 	if (of_property_read_bool(node, "eee-broken-10gkr"))
1781 		broken |= MDIO_EEE_10GKR;
1782 
1783 	phydev->eee_broken_modes = broken;
1784 }
1785 
1786 /**
1787  * phy_probe - probe and init a PHY device
1788  * @dev: device to probe and init
1789  *
1790  * Description: Take care of setting up the phy_device structure,
1791  *   set the state to READY (the driver's init function should
1792  *   set it to STARTING if needed).
1793  */
phy_probe(struct device * dev)1794 static int phy_probe(struct device *dev)
1795 {
1796 	struct phy_device *phydev = to_phy_device(dev);
1797 	struct device_driver *drv = phydev->mdio.dev.driver;
1798 	struct phy_driver *phydrv = to_phy_driver(drv);
1799 	int err = 0;
1800 
1801 	phydev->drv = phydrv;
1802 
1803 	/* Disable the interrupt if the PHY doesn't support it
1804 	 * but the interrupt is still a valid one
1805 	 */
1806 	if (!(phydrv->flags & PHY_HAS_INTERRUPT) &&
1807 	    phy_interrupt_is_valid(phydev))
1808 		phydev->irq = PHY_POLL;
1809 
1810 	if (phydrv->flags & PHY_IS_INTERNAL)
1811 		phydev->is_internal = true;
1812 
1813 	mutex_lock(&phydev->lock);
1814 
1815 	/* Start out supporting everything. Eventually,
1816 	 * a controller will attach, and may modify one
1817 	 * or both of these values
1818 	 */
1819 	phydev->supported = phydrv->features;
1820 	of_set_phy_supported(phydev);
1821 	phydev->advertising = phydev->supported;
1822 
1823 	/* Get the EEE modes we want to prohibit. We will ask
1824 	 * the PHY stop advertising these mode later on
1825 	 */
1826 	of_set_phy_eee_broken(phydev);
1827 
1828 	/* The Pause Frame bits indicate that the PHY can support passing
1829 	 * pause frames. During autonegotiation, the PHYs will determine if
1830 	 * they should allow pause frames to pass.  The MAC driver should then
1831 	 * use that result to determine whether to enable flow control via
1832 	 * pause frames.
1833 	 *
1834 	 * Normally, PHY drivers should not set the Pause bits, and instead
1835 	 * allow phylib to do that.  However, there may be some situations
1836 	 * (e.g. hardware erratum) where the driver wants to set only one
1837 	 * of these bits.
1838 	 */
1839 	if (phydrv->features & (SUPPORTED_Pause | SUPPORTED_Asym_Pause)) {
1840 		phydev->supported &= ~(SUPPORTED_Pause | SUPPORTED_Asym_Pause);
1841 		phydev->supported |= phydrv->features &
1842 				     (SUPPORTED_Pause | SUPPORTED_Asym_Pause);
1843 	} else {
1844 		phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
1845 	}
1846 
1847 	/* Set the state to READY by default */
1848 	phydev->state = PHY_READY;
1849 
1850 	if (phydev->drv->probe)
1851 		err = phydev->drv->probe(phydev);
1852 
1853 	mutex_unlock(&phydev->lock);
1854 
1855 	return err;
1856 }
1857 
phy_remove(struct device * dev)1858 static int phy_remove(struct device *dev)
1859 {
1860 	struct phy_device *phydev = to_phy_device(dev);
1861 
1862 	cancel_delayed_work_sync(&phydev->state_queue);
1863 
1864 	mutex_lock(&phydev->lock);
1865 	phydev->state = PHY_DOWN;
1866 	mutex_unlock(&phydev->lock);
1867 
1868 	if (phydev->drv && phydev->drv->remove)
1869 		phydev->drv->remove(phydev);
1870 	phydev->drv = NULL;
1871 
1872 	return 0;
1873 }
1874 
1875 /**
1876  * phy_driver_register - register a phy_driver with the PHY layer
1877  * @new_driver: new phy_driver to register
1878  * @owner: module owning this PHY
1879  */
phy_driver_register(struct phy_driver * new_driver,struct module * owner)1880 int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
1881 {
1882 	int retval;
1883 
1884 	new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY;
1885 	new_driver->mdiodrv.driver.name = new_driver->name;
1886 	new_driver->mdiodrv.driver.bus = &mdio_bus_type;
1887 	new_driver->mdiodrv.driver.probe = phy_probe;
1888 	new_driver->mdiodrv.driver.remove = phy_remove;
1889 	new_driver->mdiodrv.driver.owner = owner;
1890 
1891 	retval = driver_register(&new_driver->mdiodrv.driver);
1892 	if (retval) {
1893 		pr_err("%s: Error %d in registering driver\n",
1894 		       new_driver->name, retval);
1895 
1896 		return retval;
1897 	}
1898 
1899 	pr_debug("%s: Registered new driver\n", new_driver->name);
1900 
1901 	return 0;
1902 }
1903 EXPORT_SYMBOL(phy_driver_register);
1904 
phy_drivers_register(struct phy_driver * new_driver,int n,struct module * owner)1905 int phy_drivers_register(struct phy_driver *new_driver, int n,
1906 			 struct module *owner)
1907 {
1908 	int i, ret = 0;
1909 
1910 	for (i = 0; i < n; i++) {
1911 		ret = phy_driver_register(new_driver + i, owner);
1912 		if (ret) {
1913 			while (i-- > 0)
1914 				phy_driver_unregister(new_driver + i);
1915 			break;
1916 		}
1917 	}
1918 	return ret;
1919 }
1920 EXPORT_SYMBOL(phy_drivers_register);
1921 
phy_driver_unregister(struct phy_driver * drv)1922 void phy_driver_unregister(struct phy_driver *drv)
1923 {
1924 	driver_unregister(&drv->mdiodrv.driver);
1925 }
1926 EXPORT_SYMBOL(phy_driver_unregister);
1927 
phy_drivers_unregister(struct phy_driver * drv,int n)1928 void phy_drivers_unregister(struct phy_driver *drv, int n)
1929 {
1930 	int i;
1931 
1932 	for (i = 0; i < n; i++)
1933 		phy_driver_unregister(drv + i);
1934 }
1935 EXPORT_SYMBOL(phy_drivers_unregister);
1936 
1937 static struct phy_driver genphy_driver = {
1938 	.phy_id		= 0xffffffff,
1939 	.phy_id_mask	= 0xffffffff,
1940 	.name		= "Generic PHY",
1941 	.soft_reset	= genphy_no_soft_reset,
1942 	.config_init	= genphy_config_init,
1943 	.features	= PHY_GBIT_FEATURES | SUPPORTED_MII |
1944 			  SUPPORTED_AUI | SUPPORTED_FIBRE |
1945 			  SUPPORTED_BNC,
1946 	.config_aneg	= genphy_config_aneg,
1947 	.aneg_done	= genphy_aneg_done,
1948 	.read_status	= genphy_read_status,
1949 	.suspend	= genphy_suspend,
1950 	.resume		= genphy_resume,
1951 	.set_loopback   = genphy_loopback,
1952 };
1953 
phy_init(void)1954 static int __init phy_init(void)
1955 {
1956 	int rc;
1957 
1958 	rc = mdio_bus_init();
1959 	if (rc)
1960 		return rc;
1961 
1962 	rc = phy_driver_register(&genphy_10g_driver, THIS_MODULE);
1963 	if (rc)
1964 		goto err_10g;
1965 
1966 	rc = phy_driver_register(&genphy_driver, THIS_MODULE);
1967 	if (rc) {
1968 		phy_driver_unregister(&genphy_10g_driver);
1969 err_10g:
1970 		mdio_bus_exit();
1971 	}
1972 
1973 	return rc;
1974 }
1975 
phy_exit(void)1976 static void __exit phy_exit(void)
1977 {
1978 	phy_driver_unregister(&genphy_10g_driver);
1979 	phy_driver_unregister(&genphy_driver);
1980 	mdio_bus_exit();
1981 }
1982 
1983 subsys_initcall(phy_init);
1984 module_exit(phy_exit);
1985