xref: /linux/drivers/net/phy/phy_device.c (revision 2d87650a3bf1b80f7d0d150ee1af3f8a89e5b7aa)
1 /*
2  * drivers/net/phy/phy_device.c
3  *
4  * Framework for finding and configuring PHYs.
5  * Also contains generic PHY driver
6  *
7  * Author: Andy Fleming
8  *
9  * Copyright (c) 2004 Freescale Semiconductor, Inc.
10  *
11  * This program is free software; you can redistribute  it and/or modify it
12  * under  the terms of  the GNU General  Public License as published by the
13  * Free Software Foundation;  either version 2 of the  License, or (at your
14  * option) any later version.
15  *
16  */
17 
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19 
20 #include <linux/kernel.h>
21 #include <linux/string.h>
22 #include <linux/errno.h>
23 #include <linux/unistd.h>
24 #include <linux/slab.h>
25 #include <linux/interrupt.h>
26 #include <linux/init.h>
27 #include <linux/delay.h>
28 #include <linux/netdevice.h>
29 #include <linux/etherdevice.h>
30 #include <linux/skbuff.h>
31 #include <linux/mm.h>
32 #include <linux/module.h>
33 #include <linux/mii.h>
34 #include <linux/ethtool.h>
35 #include <linux/phy.h>
36 
37 #include <asm/io.h>
38 #include <asm/irq.h>
39 #include <asm/uaccess.h>
40 
41 MODULE_DESCRIPTION("PHY library");
42 MODULE_AUTHOR("Andy Fleming");
43 MODULE_LICENSE("GPL");
44 
45 void phy_device_free(struct phy_device *phydev)
46 {
47 	put_device(&phydev->dev);
48 }
49 EXPORT_SYMBOL(phy_device_free);
50 
51 static void phy_device_release(struct device *dev)
52 {
53 	kfree(to_phy_device(dev));
54 }
55 
56 static struct phy_driver genphy_driver;
57 extern int mdio_bus_init(void);
58 extern void mdio_bus_exit(void);
59 
60 static LIST_HEAD(phy_fixup_list);
61 static DEFINE_MUTEX(phy_fixup_lock);
62 
63 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
64 			     u32 flags, phy_interface_t interface);
65 
66 /*
67  * Creates a new phy_fixup and adds it to the list
68  * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID)
69  * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
70  * 	It can also be PHY_ANY_UID
71  * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
72  * 	comparison
73  * @run: The actual code to be run when a matching PHY is found
74  */
75 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
76 		int (*run)(struct phy_device *))
77 {
78 	struct phy_fixup *fixup;
79 
80 	fixup = kzalloc(sizeof(struct phy_fixup), GFP_KERNEL);
81 	if (!fixup)
82 		return -ENOMEM;
83 
84 	strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
85 	fixup->phy_uid = phy_uid;
86 	fixup->phy_uid_mask = phy_uid_mask;
87 	fixup->run = run;
88 
89 	mutex_lock(&phy_fixup_lock);
90 	list_add_tail(&fixup->list, &phy_fixup_list);
91 	mutex_unlock(&phy_fixup_lock);
92 
93 	return 0;
94 }
95 EXPORT_SYMBOL(phy_register_fixup);
96 
97 /* Registers a fixup to be run on any PHY with the UID in phy_uid */
98 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
99 		int (*run)(struct phy_device *))
100 {
101 	return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
102 }
103 EXPORT_SYMBOL(phy_register_fixup_for_uid);
104 
105 /* Registers a fixup to be run on the PHY with id string bus_id */
106 int phy_register_fixup_for_id(const char *bus_id,
107 		int (*run)(struct phy_device *))
108 {
109 	return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
110 }
111 EXPORT_SYMBOL(phy_register_fixup_for_id);
112 
113 /*
114  * Returns 1 if fixup matches phydev in bus_id and phy_uid.
115  * Fixups can be set to match any in one or more fields.
116  */
117 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
118 {
119 	if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
120 		if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
121 			return 0;
122 
123 	if ((fixup->phy_uid & fixup->phy_uid_mask) !=
124 			(phydev->phy_id & fixup->phy_uid_mask))
125 		if (fixup->phy_uid != PHY_ANY_UID)
126 			return 0;
127 
128 	return 1;
129 }
130 
131 /* Runs any matching fixups for this phydev */
132 int phy_scan_fixups(struct phy_device *phydev)
133 {
134 	struct phy_fixup *fixup;
135 
136 	mutex_lock(&phy_fixup_lock);
137 	list_for_each_entry(fixup, &phy_fixup_list, list) {
138 		if (phy_needs_fixup(phydev, fixup)) {
139 			int err;
140 
141 			err = fixup->run(phydev);
142 
143 			if (err < 0) {
144 				mutex_unlock(&phy_fixup_lock);
145 				return err;
146 			}
147 		}
148 	}
149 	mutex_unlock(&phy_fixup_lock);
150 
151 	return 0;
152 }
153 EXPORT_SYMBOL(phy_scan_fixups);
154 
155 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
156 			bool is_c45, struct phy_c45_device_ids *c45_ids)
157 {
158 	struct phy_device *dev;
159 
160 	/* We allocate the device, and initialize the
161 	 * default values */
162 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
163 
164 	if (NULL == dev)
165 		return (struct phy_device *)PTR_ERR((void *)-ENOMEM);
166 
167 	dev->dev.release = phy_device_release;
168 
169 	dev->speed = 0;
170 	dev->duplex = -1;
171 	dev->pause = dev->asym_pause = 0;
172 	dev->link = 1;
173 	dev->interface = PHY_INTERFACE_MODE_GMII;
174 
175 	dev->autoneg = AUTONEG_ENABLE;
176 
177 	dev->is_c45 = is_c45;
178 	dev->addr = addr;
179 	dev->phy_id = phy_id;
180 	if (c45_ids)
181 		dev->c45_ids = *c45_ids;
182 	dev->bus = bus;
183 	dev->dev.parent = bus->parent;
184 	dev->dev.bus = &mdio_bus_type;
185 	dev->irq = bus->irq != NULL ? bus->irq[addr] : PHY_POLL;
186 	dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
187 
188 	dev->state = PHY_DOWN;
189 
190 	mutex_init(&dev->lock);
191 	INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
192 	INIT_WORK(&dev->phy_queue, phy_change);
193 
194 	/* Request the appropriate module unconditionally; don't
195 	   bother trying to do so only if it isn't already loaded,
196 	   because that gets complicated. A hotplug event would have
197 	   done an unconditional modprobe anyway.
198 	   We don't do normal hotplug because it won't work for MDIO
199 	   -- because it relies on the device staying around for long
200 	   enough for the driver to get loaded. With MDIO, the NIC
201 	   driver will get bored and give up as soon as it finds that
202 	   there's no driver _already_ loaded. */
203 	request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
204 
205 	device_initialize(&dev->dev);
206 
207 	return dev;
208 }
209 EXPORT_SYMBOL(phy_device_create);
210 
211 /**
212  * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs.
213  * @bus: the target MII bus
214  * @addr: PHY address on the MII bus
215  * @phy_id: where to store the ID retrieved.
216  * @c45_ids: where to store the c45 ID information.
217  *
218  *   If the PHY devices-in-package appears to be valid, it and the
219  *   corresponding identifiers are stored in @c45_ids, zero is stored
220  *   in @phy_id.  Otherwise 0xffffffff is stored in @phy_id.  Returns
221  *   zero on success.
222  *
223  */
224 static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
225 			   struct phy_c45_device_ids *c45_ids) {
226 	int phy_reg;
227 	int i, reg_addr;
228 	const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
229 
230 	/* Find first non-zero Devices In package.  Device
231 	 * zero is reserved, so don't probe it.
232 	 */
233 	for (i = 1;
234 	     i < num_ids && c45_ids->devices_in_package == 0;
235 	     i++) {
236 		reg_addr = MII_ADDR_C45 | i << 16 | 6;
237 		phy_reg = mdiobus_read(bus, addr, reg_addr);
238 		if (phy_reg < 0)
239 			return -EIO;
240 		c45_ids->devices_in_package = (phy_reg & 0xffff) << 16;
241 
242 		reg_addr = MII_ADDR_C45 | i << 16 | 5;
243 		phy_reg = mdiobus_read(bus, addr, reg_addr);
244 		if (phy_reg < 0)
245 			return -EIO;
246 		c45_ids->devices_in_package |= (phy_reg & 0xffff);
247 
248 		/* If mostly Fs, there is no device there,
249 		 * let's get out of here.
250 		 */
251 		if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
252 			*phy_id = 0xffffffff;
253 			return 0;
254 		}
255 	}
256 
257 	/* Now probe Device Identifiers for each device present. */
258 	for (i = 1; i < num_ids; i++) {
259 		if (!(c45_ids->devices_in_package & (1 << i)))
260 			continue;
261 
262 		reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
263 		phy_reg = mdiobus_read(bus, addr, reg_addr);
264 		if (phy_reg < 0)
265 			return -EIO;
266 		c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
267 
268 		reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2;
269 		phy_reg = mdiobus_read(bus, addr, reg_addr);
270 		if (phy_reg < 0)
271 			return -EIO;
272 		c45_ids->device_ids[i] |= (phy_reg & 0xffff);
273 	}
274 	*phy_id = 0;
275 	return 0;
276 }
277 
278 /**
279  * get_phy_id - reads the specified addr for its ID.
280  * @bus: the target MII bus
281  * @addr: PHY address on the MII bus
282  * @phy_id: where to store the ID retrieved.
283  * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
284  * @c45_ids: where to store the c45 ID information.
285  *
286  * Description: In the case of a 802.3-c22 PHY, reads the ID registers
287  *   of the PHY at @addr on the @bus, stores it in @phy_id and returns
288  *   zero on success.
289  *
290  *   In the case of a 802.3-c45 PHY, get_phy_c45_ids() is invoked, and
291  *   its return value is in turn returned.
292  *
293  */
294 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
295 		      bool is_c45, struct phy_c45_device_ids *c45_ids)
296 {
297 	int phy_reg;
298 
299 	if (is_c45)
300 		return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
301 
302 	/* Grab the bits from PHYIR1, and put them
303 	 * in the upper half */
304 	phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
305 
306 	if (phy_reg < 0)
307 		return -EIO;
308 
309 	*phy_id = (phy_reg & 0xffff) << 16;
310 
311 	/* Grab the bits from PHYIR2, and put them in the lower half */
312 	phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
313 
314 	if (phy_reg < 0)
315 		return -EIO;
316 
317 	*phy_id |= (phy_reg & 0xffff);
318 
319 	return 0;
320 }
321 
322 /**
323  * get_phy_device - reads the specified PHY device and returns its @phy_device struct
324  * @bus: the target MII bus
325  * @addr: PHY address on the MII bus
326  * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
327  *
328  * Description: Reads the ID registers of the PHY at @addr on the
329  *   @bus, then allocates and returns the phy_device to represent it.
330  */
331 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
332 {
333 	struct phy_c45_device_ids c45_ids = {0};
334 	struct phy_device *dev = NULL;
335 	u32 phy_id = 0;
336 	int r;
337 
338 	r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
339 	if (r)
340 		return ERR_PTR(r);
341 
342 	/* If the phy_id is mostly Fs, there is no device there */
343 	if ((phy_id & 0x1fffffff) == 0x1fffffff)
344 		return NULL;
345 
346 	dev = phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
347 
348 	return dev;
349 }
350 EXPORT_SYMBOL(get_phy_device);
351 
352 /**
353  * phy_device_register - Register the phy device on the MDIO bus
354  * @phydev: phy_device structure to be added to the MDIO bus
355  */
356 int phy_device_register(struct phy_device *phydev)
357 {
358 	int err;
359 
360 	/* Don't register a phy if one is already registered at this
361 	 * address */
362 	if (phydev->bus->phy_map[phydev->addr])
363 		return -EINVAL;
364 	phydev->bus->phy_map[phydev->addr] = phydev;
365 
366 	/* Run all of the fixups for this PHY */
367 	err = phy_init_hw(phydev);
368 	if (err) {
369 		pr_err("PHY %d failed to initialize\n", phydev->addr);
370 		goto out;
371 	}
372 
373 	err = device_add(&phydev->dev);
374 	if (err) {
375 		pr_err("PHY %d failed to add\n", phydev->addr);
376 		goto out;
377 	}
378 
379 	return 0;
380 
381  out:
382 	phydev->bus->phy_map[phydev->addr] = NULL;
383 	return err;
384 }
385 EXPORT_SYMBOL(phy_device_register);
386 
387 /**
388  * phy_find_first - finds the first PHY device on the bus
389  * @bus: the target MII bus
390  */
391 struct phy_device *phy_find_first(struct mii_bus *bus)
392 {
393 	int addr;
394 
395 	for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
396 		if (bus->phy_map[addr])
397 			return bus->phy_map[addr];
398 	}
399 	return NULL;
400 }
401 EXPORT_SYMBOL(phy_find_first);
402 
403 /**
404  * phy_prepare_link - prepares the PHY layer to monitor link status
405  * @phydev: target phy_device struct
406  * @handler: callback function for link status change notifications
407  *
408  * Description: Tells the PHY infrastructure to handle the
409  *   gory details on monitoring link status (whether through
410  *   polling or an interrupt), and to call back to the
411  *   connected device driver when the link status changes.
412  *   If you want to monitor your own link state, don't call
413  *   this function.
414  */
415 static void phy_prepare_link(struct phy_device *phydev,
416 		void (*handler)(struct net_device *))
417 {
418 	phydev->adjust_link = handler;
419 }
420 
421 /**
422  * phy_connect_direct - connect an ethernet device to a specific phy_device
423  * @dev: the network device to connect
424  * @phydev: the pointer to the phy device
425  * @handler: callback function for state change notifications
426  * @interface: PHY device's interface
427  */
428 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
429 		       void (*handler)(struct net_device *),
430 		       phy_interface_t interface)
431 {
432 	int rc;
433 
434 	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
435 	if (rc)
436 		return rc;
437 
438 	phy_prepare_link(phydev, handler);
439 	phy_start_machine(phydev, NULL);
440 	if (phydev->irq > 0)
441 		phy_start_interrupts(phydev);
442 
443 	return 0;
444 }
445 EXPORT_SYMBOL(phy_connect_direct);
446 
447 /**
448  * phy_connect - connect an ethernet device to a PHY device
449  * @dev: the network device to connect
450  * @bus_id: the id string of the PHY device to connect
451  * @handler: callback function for state change notifications
452  * @interface: PHY device's interface
453  *
454  * Description: Convenience function for connecting ethernet
455  *   devices to PHY devices.  The default behavior is for
456  *   the PHY infrastructure to handle everything, and only notify
457  *   the connected driver when the link status changes.  If you
458  *   don't want, or can't use the provided functionality, you may
459  *   choose to call only the subset of functions which provide
460  *   the desired functionality.
461  */
462 struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
463 		void (*handler)(struct net_device *),
464 		phy_interface_t interface)
465 {
466 	struct phy_device *phydev;
467 	struct device *d;
468 	int rc;
469 
470 	/* Search the list of PHY devices on the mdio bus for the
471 	 * PHY with the requested name */
472 	d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
473 	if (!d) {
474 		pr_err("PHY %s not found\n", bus_id);
475 		return ERR_PTR(-ENODEV);
476 	}
477 	phydev = to_phy_device(d);
478 
479 	rc = phy_connect_direct(dev, phydev, handler, interface);
480 	if (rc)
481 		return ERR_PTR(rc);
482 
483 	return phydev;
484 }
485 EXPORT_SYMBOL(phy_connect);
486 
487 /**
488  * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
489  * @phydev: target phy_device struct
490  */
491 void phy_disconnect(struct phy_device *phydev)
492 {
493 	if (phydev->irq > 0)
494 		phy_stop_interrupts(phydev);
495 
496 	phy_stop_machine(phydev);
497 
498 	phydev->adjust_link = NULL;
499 
500 	phy_detach(phydev);
501 }
502 EXPORT_SYMBOL(phy_disconnect);
503 
504 /**
505  * phy_poll_reset - Safely wait until a PHY reset has properly completed
506  * @phydev: The PHY device to poll
507  *
508  * Description: According to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as
509  *   published in 2008, a PHY reset may take up to 0.5 seconds.  The MII BMCR
510  *   register must be polled until the BMCR_RESET bit clears.
511  *
512  *   Furthermore, any attempts to write to PHY registers may have no effect
513  *   or even generate MDIO bus errors until this is complete.
514  *
515  *   Some PHYs (such as the Marvell 88E1111) don't entirely conform to the
516  *   standard and do not fully reset after the BMCR_RESET bit is set, and may
517  *   even *REQUIRE* a soft-reset to properly restart autonegotiation.  In an
518  *   effort to support such broken PHYs, this function is separate from the
519  *   standard phy_init_hw() which will zero all the other bits in the BMCR
520  *   and reapply all driver-specific and board-specific fixups.
521  */
522 static int phy_poll_reset(struct phy_device *phydev)
523 {
524 	/* Poll until the reset bit clears (50ms per retry == 0.6 sec) */
525 	unsigned int retries = 12;
526 	int ret;
527 
528 	do {
529 		msleep(50);
530 		ret = phy_read(phydev, MII_BMCR);
531 		if (ret < 0)
532 			return ret;
533 	} while (ret & BMCR_RESET && --retries);
534 	if (ret & BMCR_RESET)
535 		return -ETIMEDOUT;
536 
537 	/*
538 	 * Some chips (smsc911x) may still need up to another 1ms after the
539 	 * BMCR_RESET bit is cleared before they are usable.
540 	 */
541 	msleep(1);
542 	return 0;
543 }
544 
545 int phy_init_hw(struct phy_device *phydev)
546 {
547 	int ret;
548 
549 	if (!phydev->drv || !phydev->drv->config_init)
550 		return 0;
551 
552 	ret = phy_write(phydev, MII_BMCR, BMCR_RESET);
553 	if (ret < 0)
554 		return ret;
555 
556 	ret = phy_poll_reset(phydev);
557 	if (ret < 0)
558 		return ret;
559 
560 	ret = phy_scan_fixups(phydev);
561 	if (ret < 0)
562 		return ret;
563 
564 	return phydev->drv->config_init(phydev);
565 }
566 EXPORT_SYMBOL(phy_init_hw);
567 
568 /**
569  * phy_attach_direct - attach a network device to a given PHY device pointer
570  * @dev: network device to attach
571  * @phydev: Pointer to phy_device to attach
572  * @flags: PHY device's dev_flags
573  * @interface: PHY device's interface
574  *
575  * Description: Called by drivers to attach to a particular PHY
576  *     device. The phy_device is found, and properly hooked up
577  *     to the phy_driver.  If no driver is attached, then the
578  *     genphy_driver is used.  The phy_device is given a ptr to
579  *     the attaching device, and given a callback for link status
580  *     change.  The phy_device is returned to the attaching driver.
581  */
582 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
583 			     u32 flags, phy_interface_t interface)
584 {
585 	struct device *d = &phydev->dev;
586 	int err;
587 
588 	/* Assume that if there is no driver, that it doesn't
589 	 * exist, and we should use the genphy driver. */
590 	if (NULL == d->driver) {
591 		if (phydev->is_c45) {
592 			pr_err("No driver for phy %x\n", phydev->phy_id);
593 			return -ENODEV;
594 		}
595 
596 		d->driver = &genphy_driver.driver;
597 
598 		err = d->driver->probe(d);
599 		if (err >= 0)
600 			err = device_bind_driver(d);
601 
602 		if (err)
603 			return err;
604 	}
605 
606 	if (phydev->attached_dev) {
607 		dev_err(&dev->dev, "PHY already attached\n");
608 		return -EBUSY;
609 	}
610 
611 	phydev->attached_dev = dev;
612 	dev->phydev = phydev;
613 
614 	phydev->dev_flags = flags;
615 
616 	phydev->interface = interface;
617 
618 	phydev->state = PHY_READY;
619 
620 	/* Do initial configuration here, now that
621 	 * we have certain key parameters
622 	 * (dev_flags and interface) */
623 	err = phy_init_hw(phydev);
624 	if (err)
625 		phy_detach(phydev);
626 
627 	phy_resume(phydev);
628 
629 	return err;
630 }
631 
632 /**
633  * phy_attach - attach a network device to a particular PHY device
634  * @dev: network device to attach
635  * @bus_id: Bus ID of PHY device to attach
636  * @interface: PHY device's interface
637  *
638  * Description: Same as phy_attach_direct() except that a PHY bus_id
639  *     string is passed instead of a pointer to a struct phy_device.
640  */
641 struct phy_device *phy_attach(struct net_device *dev,
642 		const char *bus_id, phy_interface_t interface)
643 {
644 	struct bus_type *bus = &mdio_bus_type;
645 	struct phy_device *phydev;
646 	struct device *d;
647 	int rc;
648 
649 	/* Search the list of PHY devices on the mdio bus for the
650 	 * PHY with the requested name */
651 	d = bus_find_device_by_name(bus, NULL, bus_id);
652 	if (!d) {
653 		pr_err("PHY %s not found\n", bus_id);
654 		return ERR_PTR(-ENODEV);
655 	}
656 	phydev = to_phy_device(d);
657 
658 	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
659 	if (rc)
660 		return ERR_PTR(rc);
661 
662 	return phydev;
663 }
664 EXPORT_SYMBOL(phy_attach);
665 
666 /**
667  * phy_detach - detach a PHY device from its network device
668  * @phydev: target phy_device struct
669  */
670 void phy_detach(struct phy_device *phydev)
671 {
672 	phydev->attached_dev->phydev = NULL;
673 	phydev->attached_dev = NULL;
674 	phy_suspend(phydev);
675 
676 	/* If the device had no specific driver before (i.e. - it
677 	 * was using the generic driver), we unbind the device
678 	 * from the generic driver so that there's a chance a
679 	 * real driver could be loaded */
680 	if (phydev->dev.driver == &genphy_driver.driver)
681 		device_release_driver(&phydev->dev);
682 }
683 EXPORT_SYMBOL(phy_detach);
684 
685 int phy_suspend(struct phy_device *phydev)
686 {
687 	struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
688 	struct ethtool_wolinfo wol;
689 
690 	/* If the device has WOL enabled, we cannot suspend the PHY */
691 	wol.cmd = ETHTOOL_GWOL;
692 	phy_ethtool_get_wol(phydev, &wol);
693 	if (wol.wolopts)
694 		return -EBUSY;
695 
696 	if (phydrv->suspend)
697 		return phydrv->suspend(phydev);
698 	return 0;
699 }
700 
701 int phy_resume(struct phy_device *phydev)
702 {
703 	struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
704 
705 	if (phydrv->resume)
706 		return phydrv->resume(phydev);
707 	return 0;
708 }
709 
710 /* Generic PHY support and helper functions */
711 
712 /**
713  * genphy_config_advert - sanitize and advertise auto-negotiation parameters
714  * @phydev: target phy_device struct
715  *
716  * Description: Writes MII_ADVERTISE with the appropriate values,
717  *   after sanitizing the values to make sure we only advertise
718  *   what is supported.  Returns < 0 on error, 0 if the PHY's advertisement
719  *   hasn't changed, and > 0 if it has changed.
720  */
721 static int genphy_config_advert(struct phy_device *phydev)
722 {
723 	u32 advertise;
724 	int oldadv, adv;
725 	int err, changed = 0;
726 
727 	/* Only allow advertising what
728 	 * this PHY supports */
729 	phydev->advertising &= phydev->supported;
730 	advertise = phydev->advertising;
731 
732 	/* Setup standard advertisement */
733 	oldadv = adv = phy_read(phydev, MII_ADVERTISE);
734 
735 	if (adv < 0)
736 		return adv;
737 
738 	adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
739 		 ADVERTISE_PAUSE_ASYM);
740 	adv |= ethtool_adv_to_mii_adv_t(advertise);
741 
742 	if (adv != oldadv) {
743 		err = phy_write(phydev, MII_ADVERTISE, adv);
744 
745 		if (err < 0)
746 			return err;
747 		changed = 1;
748 	}
749 
750 	/* Configure gigabit if it's supported */
751 	if (phydev->supported & (SUPPORTED_1000baseT_Half |
752 				SUPPORTED_1000baseT_Full)) {
753 		oldadv = adv = phy_read(phydev, MII_CTRL1000);
754 
755 		if (adv < 0)
756 			return adv;
757 
758 		adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
759 		adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
760 
761 		if (adv != oldadv) {
762 			err = phy_write(phydev, MII_CTRL1000, adv);
763 
764 			if (err < 0)
765 				return err;
766 			changed = 1;
767 		}
768 	}
769 
770 	return changed;
771 }
772 
773 /**
774  * genphy_setup_forced - configures/forces speed/duplex from @phydev
775  * @phydev: target phy_device struct
776  *
777  * Description: Configures MII_BMCR to force speed/duplex
778  *   to the values in phydev. Assumes that the values are valid.
779  *   Please see phy_sanitize_settings().
780  */
781 int genphy_setup_forced(struct phy_device *phydev)
782 {
783 	int err;
784 	int ctl = 0;
785 
786 	phydev->pause = phydev->asym_pause = 0;
787 
788 	if (SPEED_1000 == phydev->speed)
789 		ctl |= BMCR_SPEED1000;
790 	else if (SPEED_100 == phydev->speed)
791 		ctl |= BMCR_SPEED100;
792 
793 	if (DUPLEX_FULL == phydev->duplex)
794 		ctl |= BMCR_FULLDPLX;
795 
796 	err = phy_write(phydev, MII_BMCR, ctl);
797 
798 	return err;
799 }
800 EXPORT_SYMBOL(genphy_setup_forced);
801 
802 /**
803  * genphy_restart_aneg - Enable and Restart Autonegotiation
804  * @phydev: target phy_device struct
805  */
806 int genphy_restart_aneg(struct phy_device *phydev)
807 {
808 	int ctl;
809 
810 	ctl = phy_read(phydev, MII_BMCR);
811 
812 	if (ctl < 0)
813 		return ctl;
814 
815 	ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
816 
817 	/* Don't isolate the PHY if we're negotiating */
818 	ctl &= ~(BMCR_ISOLATE);
819 
820 	ctl = phy_write(phydev, MII_BMCR, ctl);
821 
822 	return ctl;
823 }
824 EXPORT_SYMBOL(genphy_restart_aneg);
825 
826 
827 /**
828  * genphy_config_aneg - restart auto-negotiation or write BMCR
829  * @phydev: target phy_device struct
830  *
831  * Description: If auto-negotiation is enabled, we configure the
832  *   advertising, and then restart auto-negotiation.  If it is not
833  *   enabled, then we write the BMCR.
834  */
835 int genphy_config_aneg(struct phy_device *phydev)
836 {
837 	int result;
838 
839 	if (AUTONEG_ENABLE != phydev->autoneg)
840 		return genphy_setup_forced(phydev);
841 
842 	result = genphy_config_advert(phydev);
843 
844 	if (result < 0) /* error */
845 		return result;
846 
847 	if (result == 0) {
848 		/* Advertisement hasn't changed, but maybe aneg was never on to
849 		 * begin with?  Or maybe phy was isolated? */
850 		int ctl = phy_read(phydev, MII_BMCR);
851 
852 		if (ctl < 0)
853 			return ctl;
854 
855 		if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
856 			result = 1; /* do restart aneg */
857 	}
858 
859 	/* Only restart aneg if we are advertising something different
860 	 * than we were before.	 */
861 	if (result > 0)
862 		result = genphy_restart_aneg(phydev);
863 
864 	return result;
865 }
866 EXPORT_SYMBOL(genphy_config_aneg);
867 
868 /**
869  * genphy_update_link - update link status in @phydev
870  * @phydev: target phy_device struct
871  *
872  * Description: Update the value in phydev->link to reflect the
873  *   current link value.  In order to do this, we need to read
874  *   the status register twice, keeping the second value.
875  */
876 int genphy_update_link(struct phy_device *phydev)
877 {
878 	int status;
879 
880 	/* Do a fake read */
881 	status = phy_read(phydev, MII_BMSR);
882 
883 	if (status < 0)
884 		return status;
885 
886 	/* Read link and autonegotiation status */
887 	status = phy_read(phydev, MII_BMSR);
888 
889 	if (status < 0)
890 		return status;
891 
892 	if ((status & BMSR_LSTATUS) == 0)
893 		phydev->link = 0;
894 	else
895 		phydev->link = 1;
896 
897 	return 0;
898 }
899 EXPORT_SYMBOL(genphy_update_link);
900 
901 /**
902  * genphy_read_status - check the link status and update current link state
903  * @phydev: target phy_device struct
904  *
905  * Description: Check the link, then figure out the current state
906  *   by comparing what we advertise with what the link partner
907  *   advertises.  Start by checking the gigabit possibilities,
908  *   then move on to 10/100.
909  */
910 int genphy_read_status(struct phy_device *phydev)
911 {
912 	int adv;
913 	int err;
914 	int lpa;
915 	int lpagb = 0;
916 
917 	/* Update the link, but return if there
918 	 * was an error */
919 	err = genphy_update_link(phydev);
920 	if (err)
921 		return err;
922 
923 	phydev->lp_advertising = 0;
924 
925 	if (AUTONEG_ENABLE == phydev->autoneg) {
926 		if (phydev->supported & (SUPPORTED_1000baseT_Half
927 					| SUPPORTED_1000baseT_Full)) {
928 			lpagb = phy_read(phydev, MII_STAT1000);
929 
930 			if (lpagb < 0)
931 				return lpagb;
932 
933 			adv = phy_read(phydev, MII_CTRL1000);
934 
935 			if (adv < 0)
936 				return adv;
937 
938 			phydev->lp_advertising =
939 				mii_stat1000_to_ethtool_lpa_t(lpagb);
940 			lpagb &= adv << 2;
941 		}
942 
943 		lpa = phy_read(phydev, MII_LPA);
944 
945 		if (lpa < 0)
946 			return lpa;
947 
948 		phydev->lp_advertising |= mii_lpa_to_ethtool_lpa_t(lpa);
949 
950 		adv = phy_read(phydev, MII_ADVERTISE);
951 
952 		if (adv < 0)
953 			return adv;
954 
955 		lpa &= adv;
956 
957 		phydev->speed = SPEED_10;
958 		phydev->duplex = DUPLEX_HALF;
959 		phydev->pause = phydev->asym_pause = 0;
960 
961 		if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
962 			phydev->speed = SPEED_1000;
963 
964 			if (lpagb & LPA_1000FULL)
965 				phydev->duplex = DUPLEX_FULL;
966 		} else if (lpa & (LPA_100FULL | LPA_100HALF)) {
967 			phydev->speed = SPEED_100;
968 
969 			if (lpa & LPA_100FULL)
970 				phydev->duplex = DUPLEX_FULL;
971 		} else
972 			if (lpa & LPA_10FULL)
973 				phydev->duplex = DUPLEX_FULL;
974 
975 		if (phydev->duplex == DUPLEX_FULL) {
976 			phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
977 			phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
978 		}
979 	} else {
980 		int bmcr = phy_read(phydev, MII_BMCR);
981 		if (bmcr < 0)
982 			return bmcr;
983 
984 		if (bmcr & BMCR_FULLDPLX)
985 			phydev->duplex = DUPLEX_FULL;
986 		else
987 			phydev->duplex = DUPLEX_HALF;
988 
989 		if (bmcr & BMCR_SPEED1000)
990 			phydev->speed = SPEED_1000;
991 		else if (bmcr & BMCR_SPEED100)
992 			phydev->speed = SPEED_100;
993 		else
994 			phydev->speed = SPEED_10;
995 
996 		phydev->pause = phydev->asym_pause = 0;
997 	}
998 
999 	return 0;
1000 }
1001 EXPORT_SYMBOL(genphy_read_status);
1002 
1003 static int genphy_config_init(struct phy_device *phydev)
1004 {
1005 	int val;
1006 	u32 features;
1007 
1008 	/* For now, I'll claim that the generic driver supports
1009 	 * all possible port types */
1010 	features = (SUPPORTED_TP | SUPPORTED_MII
1011 			| SUPPORTED_AUI | SUPPORTED_FIBRE |
1012 			SUPPORTED_BNC);
1013 
1014 	/* Do we support autonegotiation? */
1015 	val = phy_read(phydev, MII_BMSR);
1016 
1017 	if (val < 0)
1018 		return val;
1019 
1020 	if (val & BMSR_ANEGCAPABLE)
1021 		features |= SUPPORTED_Autoneg;
1022 
1023 	if (val & BMSR_100FULL)
1024 		features |= SUPPORTED_100baseT_Full;
1025 	if (val & BMSR_100HALF)
1026 		features |= SUPPORTED_100baseT_Half;
1027 	if (val & BMSR_10FULL)
1028 		features |= SUPPORTED_10baseT_Full;
1029 	if (val & BMSR_10HALF)
1030 		features |= SUPPORTED_10baseT_Half;
1031 
1032 	if (val & BMSR_ESTATEN) {
1033 		val = phy_read(phydev, MII_ESTATUS);
1034 
1035 		if (val < 0)
1036 			return val;
1037 
1038 		if (val & ESTATUS_1000_TFULL)
1039 			features |= SUPPORTED_1000baseT_Full;
1040 		if (val & ESTATUS_1000_THALF)
1041 			features |= SUPPORTED_1000baseT_Half;
1042 	}
1043 
1044 	phydev->supported = features;
1045 	phydev->advertising = features;
1046 
1047 	return 0;
1048 }
1049 int genphy_suspend(struct phy_device *phydev)
1050 {
1051 	int value;
1052 
1053 	mutex_lock(&phydev->lock);
1054 
1055 	value = phy_read(phydev, MII_BMCR);
1056 	phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
1057 
1058 	mutex_unlock(&phydev->lock);
1059 
1060 	return 0;
1061 }
1062 EXPORT_SYMBOL(genphy_suspend);
1063 
1064 int genphy_resume(struct phy_device *phydev)
1065 {
1066 	int value;
1067 
1068 	mutex_lock(&phydev->lock);
1069 
1070 	value = phy_read(phydev, MII_BMCR);
1071 	phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
1072 
1073 	mutex_unlock(&phydev->lock);
1074 
1075 	return 0;
1076 }
1077 EXPORT_SYMBOL(genphy_resume);
1078 
1079 /**
1080  * phy_probe - probe and init a PHY device
1081  * @dev: device to probe and init
1082  *
1083  * Description: Take care of setting up the phy_device structure,
1084  *   set the state to READY (the driver's init function should
1085  *   set it to STARTING if needed).
1086  */
1087 static int phy_probe(struct device *dev)
1088 {
1089 	struct phy_device *phydev;
1090 	struct phy_driver *phydrv;
1091 	struct device_driver *drv;
1092 	int err = 0;
1093 
1094 	phydev = to_phy_device(dev);
1095 
1096 	drv = phydev->dev.driver;
1097 	phydrv = to_phy_driver(drv);
1098 	phydev->drv = phydrv;
1099 
1100 	/* Disable the interrupt if the PHY doesn't support it
1101 	 * but the interrupt is still a valid one
1102 	 */
1103 	if (!(phydrv->flags & PHY_HAS_INTERRUPT) &&
1104 			phy_interrupt_is_valid(phydev))
1105 		phydev->irq = PHY_POLL;
1106 
1107 	if (phydrv->flags & PHY_IS_INTERNAL)
1108 		phydev->is_internal = true;
1109 
1110 	mutex_lock(&phydev->lock);
1111 
1112 	/* Start out supporting everything. Eventually,
1113 	 * a controller will attach, and may modify one
1114 	 * or both of these values */
1115 	phydev->supported = phydrv->features;
1116 	phydev->advertising = phydrv->features;
1117 
1118 	/* Set the state to READY by default */
1119 	phydev->state = PHY_READY;
1120 
1121 	if (phydev->drv->probe)
1122 		err = phydev->drv->probe(phydev);
1123 
1124 	mutex_unlock(&phydev->lock);
1125 
1126 	return err;
1127 
1128 }
1129 
1130 static int phy_remove(struct device *dev)
1131 {
1132 	struct phy_device *phydev;
1133 
1134 	phydev = to_phy_device(dev);
1135 
1136 	mutex_lock(&phydev->lock);
1137 	phydev->state = PHY_DOWN;
1138 	mutex_unlock(&phydev->lock);
1139 
1140 	if (phydev->drv->remove)
1141 		phydev->drv->remove(phydev);
1142 	phydev->drv = NULL;
1143 
1144 	return 0;
1145 }
1146 
1147 /**
1148  * phy_driver_register - register a phy_driver with the PHY layer
1149  * @new_driver: new phy_driver to register
1150  */
1151 int phy_driver_register(struct phy_driver *new_driver)
1152 {
1153 	int retval;
1154 
1155 	new_driver->driver.name = new_driver->name;
1156 	new_driver->driver.bus = &mdio_bus_type;
1157 	new_driver->driver.probe = phy_probe;
1158 	new_driver->driver.remove = phy_remove;
1159 
1160 	retval = driver_register(&new_driver->driver);
1161 
1162 	if (retval) {
1163 		pr_err("%s: Error %d in registering driver\n",
1164 		       new_driver->name, retval);
1165 
1166 		return retval;
1167 	}
1168 
1169 	pr_debug("%s: Registered new driver\n", new_driver->name);
1170 
1171 	return 0;
1172 }
1173 EXPORT_SYMBOL(phy_driver_register);
1174 
1175 int phy_drivers_register(struct phy_driver *new_driver, int n)
1176 {
1177 	int i, ret = 0;
1178 
1179 	for (i = 0; i < n; i++) {
1180 		ret = phy_driver_register(new_driver + i);
1181 		if (ret) {
1182 			while (i-- > 0)
1183 				phy_driver_unregister(new_driver + i);
1184 			break;
1185 		}
1186 	}
1187 	return ret;
1188 }
1189 EXPORT_SYMBOL(phy_drivers_register);
1190 
1191 void phy_driver_unregister(struct phy_driver *drv)
1192 {
1193 	driver_unregister(&drv->driver);
1194 }
1195 EXPORT_SYMBOL(phy_driver_unregister);
1196 
1197 void phy_drivers_unregister(struct phy_driver *drv, int n)
1198 {
1199 	int i;
1200 	for (i = 0; i < n; i++) {
1201 		phy_driver_unregister(drv + i);
1202 	}
1203 }
1204 EXPORT_SYMBOL(phy_drivers_unregister);
1205 
1206 static struct phy_driver genphy_driver = {
1207 	.phy_id		= 0xffffffff,
1208 	.phy_id_mask	= 0xffffffff,
1209 	.name		= "Generic PHY",
1210 	.config_init	= genphy_config_init,
1211 	.features	= 0,
1212 	.config_aneg	= genphy_config_aneg,
1213 	.read_status	= genphy_read_status,
1214 	.suspend	= genphy_suspend,
1215 	.resume		= genphy_resume,
1216 	.driver		= { .owner = THIS_MODULE, },
1217 };
1218 
1219 static int __init phy_init(void)
1220 {
1221 	int rc;
1222 
1223 	rc = mdio_bus_init();
1224 	if (rc)
1225 		return rc;
1226 
1227 	rc = phy_driver_register(&genphy_driver);
1228 	if (rc)
1229 		mdio_bus_exit();
1230 
1231 	return rc;
1232 }
1233 
1234 static void __exit phy_exit(void)
1235 {
1236 	phy_driver_unregister(&genphy_driver);
1237 	mdio_bus_exit();
1238 }
1239 
1240 subsys_initcall(phy_init);
1241 module_exit(phy_exit);
1242