xref: /openbmc/linux/drivers/net/phy/phy_device.c (revision 565d76cb)
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 #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 
34 #include <asm/io.h>
35 #include <asm/irq.h>
36 #include <asm/uaccess.h>
37 
38 MODULE_DESCRIPTION("PHY library");
39 MODULE_AUTHOR("Andy Fleming");
40 MODULE_LICENSE("GPL");
41 
42 void phy_device_free(struct phy_device *phydev)
43 {
44 	kfree(phydev);
45 }
46 EXPORT_SYMBOL(phy_device_free);
47 
48 static void phy_device_release(struct device *dev)
49 {
50 	phy_device_free(to_phy_device(dev));
51 }
52 
53 static struct phy_driver genphy_driver;
54 extern int mdio_bus_init(void);
55 extern void mdio_bus_exit(void);
56 
57 static LIST_HEAD(phy_fixup_list);
58 static DEFINE_MUTEX(phy_fixup_lock);
59 
60 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
61 			     u32 flags, phy_interface_t interface);
62 
63 /*
64  * Creates a new phy_fixup and adds it to the list
65  * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID)
66  * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
67  * 	It can also be PHY_ANY_UID
68  * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
69  * 	comparison
70  * @run: The actual code to be run when a matching PHY is found
71  */
72 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
73 		int (*run)(struct phy_device *))
74 {
75 	struct phy_fixup *fixup;
76 
77 	fixup = kzalloc(sizeof(struct phy_fixup), GFP_KERNEL);
78 	if (!fixup)
79 		return -ENOMEM;
80 
81 	strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
82 	fixup->phy_uid = phy_uid;
83 	fixup->phy_uid_mask = phy_uid_mask;
84 	fixup->run = run;
85 
86 	mutex_lock(&phy_fixup_lock);
87 	list_add_tail(&fixup->list, &phy_fixup_list);
88 	mutex_unlock(&phy_fixup_lock);
89 
90 	return 0;
91 }
92 EXPORT_SYMBOL(phy_register_fixup);
93 
94 /* Registers a fixup to be run on any PHY with the UID in phy_uid */
95 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
96 		int (*run)(struct phy_device *))
97 {
98 	return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
99 }
100 EXPORT_SYMBOL(phy_register_fixup_for_uid);
101 
102 /* Registers a fixup to be run on the PHY with id string bus_id */
103 int phy_register_fixup_for_id(const char *bus_id,
104 		int (*run)(struct phy_device *))
105 {
106 	return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
107 }
108 EXPORT_SYMBOL(phy_register_fixup_for_id);
109 
110 /*
111  * Returns 1 if fixup matches phydev in bus_id and phy_uid.
112  * Fixups can be set to match any in one or more fields.
113  */
114 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
115 {
116 	if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
117 		if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
118 			return 0;
119 
120 	if ((fixup->phy_uid & fixup->phy_uid_mask) !=
121 			(phydev->phy_id & fixup->phy_uid_mask))
122 		if (fixup->phy_uid != PHY_ANY_UID)
123 			return 0;
124 
125 	return 1;
126 }
127 
128 /* Runs any matching fixups for this phydev */
129 int phy_scan_fixups(struct phy_device *phydev)
130 {
131 	struct phy_fixup *fixup;
132 
133 	mutex_lock(&phy_fixup_lock);
134 	list_for_each_entry(fixup, &phy_fixup_list, list) {
135 		if (phy_needs_fixup(phydev, fixup)) {
136 			int err;
137 
138 			err = fixup->run(phydev);
139 
140 			if (err < 0) {
141 				mutex_unlock(&phy_fixup_lock);
142 				return err;
143 			}
144 		}
145 	}
146 	mutex_unlock(&phy_fixup_lock);
147 
148 	return 0;
149 }
150 EXPORT_SYMBOL(phy_scan_fixups);
151 
152 static struct phy_device* phy_device_create(struct mii_bus *bus,
153 					    int addr, int phy_id)
154 {
155 	struct phy_device *dev;
156 
157 	/* We allocate the device, and initialize the
158 	 * default values */
159 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
160 
161 	if (NULL == dev)
162 		return (struct phy_device*) PTR_ERR((void*)-ENOMEM);
163 
164 	dev->dev.release = phy_device_release;
165 
166 	dev->speed = 0;
167 	dev->duplex = -1;
168 	dev->pause = dev->asym_pause = 0;
169 	dev->link = 1;
170 	dev->interface = PHY_INTERFACE_MODE_GMII;
171 
172 	dev->autoneg = AUTONEG_ENABLE;
173 
174 	dev->addr = addr;
175 	dev->phy_id = phy_id;
176 	dev->bus = bus;
177 	dev->dev.parent = bus->parent;
178 	dev->dev.bus = &mdio_bus_type;
179 	dev->irq = bus->irq != NULL ? bus->irq[addr] : PHY_POLL;
180 	dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
181 
182 	dev->state = PHY_DOWN;
183 
184 	mutex_init(&dev->lock);
185 	INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
186 
187 	/* Request the appropriate module unconditionally; don't
188 	   bother trying to do so only if it isn't already loaded,
189 	   because that gets complicated. A hotplug event would have
190 	   done an unconditional modprobe anyway.
191 	   We don't do normal hotplug because it won't work for MDIO
192 	   -- because it relies on the device staying around for long
193 	   enough for the driver to get loaded. With MDIO, the NIC
194 	   driver will get bored and give up as soon as it finds that
195 	   there's no driver _already_ loaded. */
196 	request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
197 
198 	return dev;
199 }
200 
201 /**
202  * get_phy_id - reads the specified addr for its ID.
203  * @bus: the target MII bus
204  * @addr: PHY address on the MII bus
205  * @phy_id: where to store the ID retrieved.
206  *
207  * Description: Reads the ID registers of the PHY at @addr on the
208  *   @bus, stores it in @phy_id and returns zero on success.
209  */
210 int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id)
211 {
212 	int phy_reg;
213 
214 	/* Grab the bits from PHYIR1, and put them
215 	 * in the upper half */
216 	phy_reg = bus->read(bus, addr, MII_PHYSID1);
217 
218 	if (phy_reg < 0)
219 		return -EIO;
220 
221 	*phy_id = (phy_reg & 0xffff) << 16;
222 
223 	/* Grab the bits from PHYIR2, and put them in the lower half */
224 	phy_reg = bus->read(bus, addr, MII_PHYSID2);
225 
226 	if (phy_reg < 0)
227 		return -EIO;
228 
229 	*phy_id |= (phy_reg & 0xffff);
230 
231 	return 0;
232 }
233 EXPORT_SYMBOL(get_phy_id);
234 
235 /**
236  * get_phy_device - reads the specified PHY device and returns its @phy_device struct
237  * @bus: the target MII bus
238  * @addr: PHY address on the MII bus
239  *
240  * Description: Reads the ID registers of the PHY at @addr on the
241  *   @bus, then allocates and returns the phy_device to represent it.
242  */
243 struct phy_device * get_phy_device(struct mii_bus *bus, int addr)
244 {
245 	struct phy_device *dev = NULL;
246 	u32 phy_id;
247 	int r;
248 
249 	r = get_phy_id(bus, addr, &phy_id);
250 	if (r)
251 		return ERR_PTR(r);
252 
253 	/* If the phy_id is mostly Fs, there is no device there */
254 	if ((phy_id & 0x1fffffff) == 0x1fffffff)
255 		return NULL;
256 
257 	dev = phy_device_create(bus, addr, phy_id);
258 
259 	return dev;
260 }
261 EXPORT_SYMBOL(get_phy_device);
262 
263 /**
264  * phy_device_register - Register the phy device on the MDIO bus
265  * @phydev: phy_device structure to be added to the MDIO bus
266  */
267 int phy_device_register(struct phy_device *phydev)
268 {
269 	int err;
270 
271 	/* Don't register a phy if one is already registered at this
272 	 * address */
273 	if (phydev->bus->phy_map[phydev->addr])
274 		return -EINVAL;
275 	phydev->bus->phy_map[phydev->addr] = phydev;
276 
277 	/* Run all of the fixups for this PHY */
278 	phy_scan_fixups(phydev);
279 
280 	err = device_register(&phydev->dev);
281 	if (err) {
282 		pr_err("phy %d failed to register\n", phydev->addr);
283 		goto out;
284 	}
285 
286 	return 0;
287 
288  out:
289 	phydev->bus->phy_map[phydev->addr] = NULL;
290 	return err;
291 }
292 EXPORT_SYMBOL(phy_device_register);
293 
294 /**
295  * phy_find_first - finds the first PHY device on the bus
296  * @bus: the target MII bus
297  */
298 struct phy_device *phy_find_first(struct mii_bus *bus)
299 {
300 	int addr;
301 
302 	for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
303 		if (bus->phy_map[addr])
304 			return bus->phy_map[addr];
305 	}
306 	return NULL;
307 }
308 EXPORT_SYMBOL(phy_find_first);
309 
310 /**
311  * phy_prepare_link - prepares the PHY layer to monitor link status
312  * @phydev: target phy_device struct
313  * @handler: callback function for link status change notifications
314  *
315  * Description: Tells the PHY infrastructure to handle the
316  *   gory details on monitoring link status (whether through
317  *   polling or an interrupt), and to call back to the
318  *   connected device driver when the link status changes.
319  *   If you want to monitor your own link state, don't call
320  *   this function.
321  */
322 static void phy_prepare_link(struct phy_device *phydev,
323 		void (*handler)(struct net_device *))
324 {
325 	phydev->adjust_link = handler;
326 }
327 
328 /**
329  * phy_connect_direct - connect an ethernet device to a specific phy_device
330  * @dev: the network device to connect
331  * @phydev: the pointer to the phy device
332  * @handler: callback function for state change notifications
333  * @flags: PHY device's dev_flags
334  * @interface: PHY device's interface
335  */
336 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
337 		       void (*handler)(struct net_device *), u32 flags,
338 		       phy_interface_t interface)
339 {
340 	int rc;
341 
342 	rc = phy_attach_direct(dev, phydev, flags, interface);
343 	if (rc)
344 		return rc;
345 
346 	phy_prepare_link(phydev, handler);
347 	phy_start_machine(phydev, NULL);
348 	if (phydev->irq > 0)
349 		phy_start_interrupts(phydev);
350 
351 	return 0;
352 }
353 EXPORT_SYMBOL(phy_connect_direct);
354 
355 /**
356  * phy_connect - connect an ethernet device to a PHY device
357  * @dev: the network device to connect
358  * @bus_id: the id string of the PHY device to connect
359  * @handler: callback function for state change notifications
360  * @flags: PHY device's dev_flags
361  * @interface: PHY device's interface
362  *
363  * Description: Convenience function for connecting ethernet
364  *   devices to PHY devices.  The default behavior is for
365  *   the PHY infrastructure to handle everything, and only notify
366  *   the connected driver when the link status changes.  If you
367  *   don't want, or can't use the provided functionality, you may
368  *   choose to call only the subset of functions which provide
369  *   the desired functionality.
370  */
371 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
372 		void (*handler)(struct net_device *), u32 flags,
373 		phy_interface_t interface)
374 {
375 	struct phy_device *phydev;
376 	struct device *d;
377 	int rc;
378 
379 	/* Search the list of PHY devices on the mdio bus for the
380 	 * PHY with the requested name */
381 	d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
382 	if (!d) {
383 		pr_err("PHY %s not found\n", bus_id);
384 		return ERR_PTR(-ENODEV);
385 	}
386 	phydev = to_phy_device(d);
387 
388 	rc = phy_connect_direct(dev, phydev, handler, flags, interface);
389 	if (rc)
390 		return ERR_PTR(rc);
391 
392 	return phydev;
393 }
394 EXPORT_SYMBOL(phy_connect);
395 
396 /**
397  * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
398  * @phydev: target phy_device struct
399  */
400 void phy_disconnect(struct phy_device *phydev)
401 {
402 	if (phydev->irq > 0)
403 		phy_stop_interrupts(phydev);
404 
405 	phy_stop_machine(phydev);
406 
407 	phydev->adjust_link = NULL;
408 
409 	phy_detach(phydev);
410 }
411 EXPORT_SYMBOL(phy_disconnect);
412 
413 int phy_init_hw(struct phy_device *phydev)
414 {
415 	int ret;
416 
417 	if (!phydev->drv || !phydev->drv->config_init)
418 		return 0;
419 
420 	ret = phy_scan_fixups(phydev);
421 	if (ret < 0)
422 		return ret;
423 
424 	return phydev->drv->config_init(phydev);
425 }
426 
427 /**
428  * phy_attach_direct - attach a network device to a given PHY device pointer
429  * @dev: network device to attach
430  * @phydev: Pointer to phy_device to attach
431  * @flags: PHY device's dev_flags
432  * @interface: PHY device's interface
433  *
434  * Description: Called by drivers to attach to a particular PHY
435  *     device. The phy_device is found, and properly hooked up
436  *     to the phy_driver.  If no driver is attached, then the
437  *     genphy_driver is used.  The phy_device is given a ptr to
438  *     the attaching device, and given a callback for link status
439  *     change.  The phy_device is returned to the attaching driver.
440  */
441 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
442 			     u32 flags, phy_interface_t interface)
443 {
444 	struct device *d = &phydev->dev;
445 
446 	/* Assume that if there is no driver, that it doesn't
447 	 * exist, and we should use the genphy driver. */
448 	if (NULL == d->driver) {
449 		int err;
450 		d->driver = &genphy_driver.driver;
451 
452 		err = d->driver->probe(d);
453 		if (err >= 0)
454 			err = device_bind_driver(d);
455 
456 		if (err)
457 			return err;
458 	}
459 
460 	if (phydev->attached_dev) {
461 		dev_err(&dev->dev, "PHY already attached\n");
462 		return -EBUSY;
463 	}
464 
465 	phydev->attached_dev = dev;
466 	dev->phydev = phydev;
467 
468 	phydev->dev_flags = flags;
469 
470 	phydev->interface = interface;
471 
472 	phydev->state = PHY_READY;
473 
474 	/* Do initial configuration here, now that
475 	 * we have certain key parameters
476 	 * (dev_flags and interface) */
477 	return phy_init_hw(phydev);
478 }
479 
480 /**
481  * phy_attach - attach a network device to a particular PHY device
482  * @dev: network device to attach
483  * @bus_id: Bus ID of PHY device to attach
484  * @flags: PHY device's dev_flags
485  * @interface: PHY device's interface
486  *
487  * Description: Same as phy_attach_direct() except that a PHY bus_id
488  *     string is passed instead of a pointer to a struct phy_device.
489  */
490 struct phy_device *phy_attach(struct net_device *dev,
491 		const char *bus_id, u32 flags, phy_interface_t interface)
492 {
493 	struct bus_type *bus = &mdio_bus_type;
494 	struct phy_device *phydev;
495 	struct device *d;
496 	int rc;
497 
498 	/* Search the list of PHY devices on the mdio bus for the
499 	 * PHY with the requested name */
500 	d = bus_find_device_by_name(bus, NULL, bus_id);
501 	if (!d) {
502 		pr_err("PHY %s not found\n", bus_id);
503 		return ERR_PTR(-ENODEV);
504 	}
505 	phydev = to_phy_device(d);
506 
507 	rc = phy_attach_direct(dev, phydev, flags, interface);
508 	if (rc)
509 		return ERR_PTR(rc);
510 
511 	return phydev;
512 }
513 EXPORT_SYMBOL(phy_attach);
514 
515 /**
516  * phy_detach - detach a PHY device from its network device
517  * @phydev: target phy_device struct
518  */
519 void phy_detach(struct phy_device *phydev)
520 {
521 	phydev->attached_dev->phydev = NULL;
522 	phydev->attached_dev = NULL;
523 
524 	/* If the device had no specific driver before (i.e. - it
525 	 * was using the generic driver), we unbind the device
526 	 * from the generic driver so that there's a chance a
527 	 * real driver could be loaded */
528 	if (phydev->dev.driver == &genphy_driver.driver)
529 		device_release_driver(&phydev->dev);
530 }
531 EXPORT_SYMBOL(phy_detach);
532 
533 
534 /* Generic PHY support and helper functions */
535 
536 /**
537  * genphy_config_advert - sanitize and advertise auto-negotation parameters
538  * @phydev: target phy_device struct
539  *
540  * Description: Writes MII_ADVERTISE with the appropriate values,
541  *   after sanitizing the values to make sure we only advertise
542  *   what is supported.  Returns < 0 on error, 0 if the PHY's advertisement
543  *   hasn't changed, and > 0 if it has changed.
544  */
545 static int genphy_config_advert(struct phy_device *phydev)
546 {
547 	u32 advertise;
548 	int oldadv, adv;
549 	int err, changed = 0;
550 
551 	/* Only allow advertising what
552 	 * this PHY supports */
553 	phydev->advertising &= phydev->supported;
554 	advertise = phydev->advertising;
555 
556 	/* Setup standard advertisement */
557 	oldadv = adv = phy_read(phydev, MII_ADVERTISE);
558 
559 	if (adv < 0)
560 		return adv;
561 
562 	adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
563 		 ADVERTISE_PAUSE_ASYM);
564 	if (advertise & ADVERTISED_10baseT_Half)
565 		adv |= ADVERTISE_10HALF;
566 	if (advertise & ADVERTISED_10baseT_Full)
567 		adv |= ADVERTISE_10FULL;
568 	if (advertise & ADVERTISED_100baseT_Half)
569 		adv |= ADVERTISE_100HALF;
570 	if (advertise & ADVERTISED_100baseT_Full)
571 		adv |= ADVERTISE_100FULL;
572 	if (advertise & ADVERTISED_Pause)
573 		adv |= ADVERTISE_PAUSE_CAP;
574 	if (advertise & ADVERTISED_Asym_Pause)
575 		adv |= ADVERTISE_PAUSE_ASYM;
576 
577 	if (adv != oldadv) {
578 		err = phy_write(phydev, MII_ADVERTISE, adv);
579 
580 		if (err < 0)
581 			return err;
582 		changed = 1;
583 	}
584 
585 	/* Configure gigabit if it's supported */
586 	if (phydev->supported & (SUPPORTED_1000baseT_Half |
587 				SUPPORTED_1000baseT_Full)) {
588 		oldadv = adv = phy_read(phydev, MII_CTRL1000);
589 
590 		if (adv < 0)
591 			return adv;
592 
593 		adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
594 		if (advertise & SUPPORTED_1000baseT_Half)
595 			adv |= ADVERTISE_1000HALF;
596 		if (advertise & SUPPORTED_1000baseT_Full)
597 			adv |= ADVERTISE_1000FULL;
598 
599 		if (adv != oldadv) {
600 			err = phy_write(phydev, MII_CTRL1000, adv);
601 
602 			if (err < 0)
603 				return err;
604 			changed = 1;
605 		}
606 	}
607 
608 	return changed;
609 }
610 
611 /**
612  * genphy_setup_forced - configures/forces speed/duplex from @phydev
613  * @phydev: target phy_device struct
614  *
615  * Description: Configures MII_BMCR to force speed/duplex
616  *   to the values in phydev. Assumes that the values are valid.
617  *   Please see phy_sanitize_settings().
618  */
619 static int genphy_setup_forced(struct phy_device *phydev)
620 {
621 	int err;
622 	int ctl = 0;
623 
624 	phydev->pause = phydev->asym_pause = 0;
625 
626 	if (SPEED_1000 == phydev->speed)
627 		ctl |= BMCR_SPEED1000;
628 	else if (SPEED_100 == phydev->speed)
629 		ctl |= BMCR_SPEED100;
630 
631 	if (DUPLEX_FULL == phydev->duplex)
632 		ctl |= BMCR_FULLDPLX;
633 
634 	err = phy_write(phydev, MII_BMCR, ctl);
635 
636 	return err;
637 }
638 
639 
640 /**
641  * genphy_restart_aneg - Enable and Restart Autonegotiation
642  * @phydev: target phy_device struct
643  */
644 int genphy_restart_aneg(struct phy_device *phydev)
645 {
646 	int ctl;
647 
648 	ctl = phy_read(phydev, MII_BMCR);
649 
650 	if (ctl < 0)
651 		return ctl;
652 
653 	ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
654 
655 	/* Don't isolate the PHY if we're negotiating */
656 	ctl &= ~(BMCR_ISOLATE);
657 
658 	ctl = phy_write(phydev, MII_BMCR, ctl);
659 
660 	return ctl;
661 }
662 EXPORT_SYMBOL(genphy_restart_aneg);
663 
664 
665 /**
666  * genphy_config_aneg - restart auto-negotiation or write BMCR
667  * @phydev: target phy_device struct
668  *
669  * Description: If auto-negotiation is enabled, we configure the
670  *   advertising, and then restart auto-negotiation.  If it is not
671  *   enabled, then we write the BMCR.
672  */
673 int genphy_config_aneg(struct phy_device *phydev)
674 {
675 	int result;
676 
677 	if (AUTONEG_ENABLE != phydev->autoneg)
678 		return genphy_setup_forced(phydev);
679 
680 	result = genphy_config_advert(phydev);
681 
682 	if (result < 0) /* error */
683 		return result;
684 
685 	if (result == 0) {
686 		/* Advertisment hasn't changed, but maybe aneg was never on to
687 		 * begin with?  Or maybe phy was isolated? */
688 		int ctl = phy_read(phydev, MII_BMCR);
689 
690 		if (ctl < 0)
691 			return ctl;
692 
693 		if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
694 			result = 1; /* do restart aneg */
695 	}
696 
697 	/* Only restart aneg if we are advertising something different
698 	 * than we were before.	 */
699 	if (result > 0)
700 		result = genphy_restart_aneg(phydev);
701 
702 	return result;
703 }
704 EXPORT_SYMBOL(genphy_config_aneg);
705 
706 /**
707  * genphy_update_link - update link status in @phydev
708  * @phydev: target phy_device struct
709  *
710  * Description: Update the value in phydev->link to reflect the
711  *   current link value.  In order to do this, we need to read
712  *   the status register twice, keeping the second value.
713  */
714 int genphy_update_link(struct phy_device *phydev)
715 {
716 	int status;
717 
718 	/* Do a fake read */
719 	status = phy_read(phydev, MII_BMSR);
720 
721 	if (status < 0)
722 		return status;
723 
724 	/* Read link and autonegotiation status */
725 	status = phy_read(phydev, MII_BMSR);
726 
727 	if (status < 0)
728 		return status;
729 
730 	if ((status & BMSR_LSTATUS) == 0)
731 		phydev->link = 0;
732 	else
733 		phydev->link = 1;
734 
735 	return 0;
736 }
737 EXPORT_SYMBOL(genphy_update_link);
738 
739 /**
740  * genphy_read_status - check the link status and update current link state
741  * @phydev: target phy_device struct
742  *
743  * Description: Check the link, then figure out the current state
744  *   by comparing what we advertise with what the link partner
745  *   advertises.  Start by checking the gigabit possibilities,
746  *   then move on to 10/100.
747  */
748 int genphy_read_status(struct phy_device *phydev)
749 {
750 	int adv;
751 	int err;
752 	int lpa;
753 	int lpagb = 0;
754 
755 	/* Update the link, but return if there
756 	 * was an error */
757 	err = genphy_update_link(phydev);
758 	if (err)
759 		return err;
760 
761 	if (AUTONEG_ENABLE == phydev->autoneg) {
762 		if (phydev->supported & (SUPPORTED_1000baseT_Half
763 					| SUPPORTED_1000baseT_Full)) {
764 			lpagb = phy_read(phydev, MII_STAT1000);
765 
766 			if (lpagb < 0)
767 				return lpagb;
768 
769 			adv = phy_read(phydev, MII_CTRL1000);
770 
771 			if (adv < 0)
772 				return adv;
773 
774 			lpagb &= adv << 2;
775 		}
776 
777 		lpa = phy_read(phydev, MII_LPA);
778 
779 		if (lpa < 0)
780 			return lpa;
781 
782 		adv = phy_read(phydev, MII_ADVERTISE);
783 
784 		if (adv < 0)
785 			return adv;
786 
787 		lpa &= adv;
788 
789 		phydev->speed = SPEED_10;
790 		phydev->duplex = DUPLEX_HALF;
791 		phydev->pause = phydev->asym_pause = 0;
792 
793 		if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
794 			phydev->speed = SPEED_1000;
795 
796 			if (lpagb & LPA_1000FULL)
797 				phydev->duplex = DUPLEX_FULL;
798 		} else if (lpa & (LPA_100FULL | LPA_100HALF)) {
799 			phydev->speed = SPEED_100;
800 
801 			if (lpa & LPA_100FULL)
802 				phydev->duplex = DUPLEX_FULL;
803 		} else
804 			if (lpa & LPA_10FULL)
805 				phydev->duplex = DUPLEX_FULL;
806 
807 		if (phydev->duplex == DUPLEX_FULL){
808 			phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
809 			phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
810 		}
811 	} else {
812 		int bmcr = phy_read(phydev, MII_BMCR);
813 		if (bmcr < 0)
814 			return bmcr;
815 
816 		if (bmcr & BMCR_FULLDPLX)
817 			phydev->duplex = DUPLEX_FULL;
818 		else
819 			phydev->duplex = DUPLEX_HALF;
820 
821 		if (bmcr & BMCR_SPEED1000)
822 			phydev->speed = SPEED_1000;
823 		else if (bmcr & BMCR_SPEED100)
824 			phydev->speed = SPEED_100;
825 		else
826 			phydev->speed = SPEED_10;
827 
828 		phydev->pause = phydev->asym_pause = 0;
829 	}
830 
831 	return 0;
832 }
833 EXPORT_SYMBOL(genphy_read_status);
834 
835 static int genphy_config_init(struct phy_device *phydev)
836 {
837 	int val;
838 	u32 features;
839 
840 	/* For now, I'll claim that the generic driver supports
841 	 * all possible port types */
842 	features = (SUPPORTED_TP | SUPPORTED_MII
843 			| SUPPORTED_AUI | SUPPORTED_FIBRE |
844 			SUPPORTED_BNC);
845 
846 	/* Do we support autonegotiation? */
847 	val = phy_read(phydev, MII_BMSR);
848 
849 	if (val < 0)
850 		return val;
851 
852 	if (val & BMSR_ANEGCAPABLE)
853 		features |= SUPPORTED_Autoneg;
854 
855 	if (val & BMSR_100FULL)
856 		features |= SUPPORTED_100baseT_Full;
857 	if (val & BMSR_100HALF)
858 		features |= SUPPORTED_100baseT_Half;
859 	if (val & BMSR_10FULL)
860 		features |= SUPPORTED_10baseT_Full;
861 	if (val & BMSR_10HALF)
862 		features |= SUPPORTED_10baseT_Half;
863 
864 	if (val & BMSR_ESTATEN) {
865 		val = phy_read(phydev, MII_ESTATUS);
866 
867 		if (val < 0)
868 			return val;
869 
870 		if (val & ESTATUS_1000_TFULL)
871 			features |= SUPPORTED_1000baseT_Full;
872 		if (val & ESTATUS_1000_THALF)
873 			features |= SUPPORTED_1000baseT_Half;
874 	}
875 
876 	phydev->supported = features;
877 	phydev->advertising = features;
878 
879 	return 0;
880 }
881 int genphy_suspend(struct phy_device *phydev)
882 {
883 	int value;
884 
885 	mutex_lock(&phydev->lock);
886 
887 	value = phy_read(phydev, MII_BMCR);
888 	phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
889 
890 	mutex_unlock(&phydev->lock);
891 
892 	return 0;
893 }
894 EXPORT_SYMBOL(genphy_suspend);
895 
896 int genphy_resume(struct phy_device *phydev)
897 {
898 	int value;
899 
900 	mutex_lock(&phydev->lock);
901 
902 	value = phy_read(phydev, MII_BMCR);
903 	phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
904 
905 	mutex_unlock(&phydev->lock);
906 
907 	return 0;
908 }
909 EXPORT_SYMBOL(genphy_resume);
910 
911 /**
912  * phy_probe - probe and init a PHY device
913  * @dev: device to probe and init
914  *
915  * Description: Take care of setting up the phy_device structure,
916  *   set the state to READY (the driver's init function should
917  *   set it to STARTING if needed).
918  */
919 static int phy_probe(struct device *dev)
920 {
921 	struct phy_device *phydev;
922 	struct phy_driver *phydrv;
923 	struct device_driver *drv;
924 	int err = 0;
925 
926 	phydev = to_phy_device(dev);
927 
928 	/* Make sure the driver is held.
929 	 * XXX -- Is this correct? */
930 	drv = get_driver(phydev->dev.driver);
931 	phydrv = to_phy_driver(drv);
932 	phydev->drv = phydrv;
933 
934 	/* Disable the interrupt if the PHY doesn't support it */
935 	if (!(phydrv->flags & PHY_HAS_INTERRUPT))
936 		phydev->irq = PHY_POLL;
937 
938 	mutex_lock(&phydev->lock);
939 
940 	/* Start out supporting everything. Eventually,
941 	 * a controller will attach, and may modify one
942 	 * or both of these values */
943 	phydev->supported = phydrv->features;
944 	phydev->advertising = phydrv->features;
945 
946 	/* Set the state to READY by default */
947 	phydev->state = PHY_READY;
948 
949 	if (phydev->drv->probe)
950 		err = phydev->drv->probe(phydev);
951 
952 	mutex_unlock(&phydev->lock);
953 
954 	return err;
955 
956 }
957 
958 static int phy_remove(struct device *dev)
959 {
960 	struct phy_device *phydev;
961 
962 	phydev = to_phy_device(dev);
963 
964 	mutex_lock(&phydev->lock);
965 	phydev->state = PHY_DOWN;
966 	mutex_unlock(&phydev->lock);
967 
968 	if (phydev->drv->remove)
969 		phydev->drv->remove(phydev);
970 
971 	put_driver(dev->driver);
972 	phydev->drv = NULL;
973 
974 	return 0;
975 }
976 
977 /**
978  * phy_driver_register - register a phy_driver with the PHY layer
979  * @new_driver: new phy_driver to register
980  */
981 int phy_driver_register(struct phy_driver *new_driver)
982 {
983 	int retval;
984 
985 	new_driver->driver.name = new_driver->name;
986 	new_driver->driver.bus = &mdio_bus_type;
987 	new_driver->driver.probe = phy_probe;
988 	new_driver->driver.remove = phy_remove;
989 
990 	retval = driver_register(&new_driver->driver);
991 
992 	if (retval) {
993 		printk(KERN_ERR "%s: Error %d in registering driver\n",
994 				new_driver->name, retval);
995 
996 		return retval;
997 	}
998 
999 	pr_debug("%s: Registered new driver\n", new_driver->name);
1000 
1001 	return 0;
1002 }
1003 EXPORT_SYMBOL(phy_driver_register);
1004 
1005 void phy_driver_unregister(struct phy_driver *drv)
1006 {
1007 	driver_unregister(&drv->driver);
1008 }
1009 EXPORT_SYMBOL(phy_driver_unregister);
1010 
1011 static struct phy_driver genphy_driver = {
1012 	.phy_id		= 0xffffffff,
1013 	.phy_id_mask	= 0xffffffff,
1014 	.name		= "Generic PHY",
1015 	.config_init	= genphy_config_init,
1016 	.features	= 0,
1017 	.config_aneg	= genphy_config_aneg,
1018 	.read_status	= genphy_read_status,
1019 	.suspend	= genphy_suspend,
1020 	.resume		= genphy_resume,
1021 	.driver		= {.owner= THIS_MODULE, },
1022 };
1023 
1024 static int __init phy_init(void)
1025 {
1026 	int rc;
1027 
1028 	rc = mdio_bus_init();
1029 	if (rc)
1030 		return rc;
1031 
1032 	rc = phy_driver_register(&genphy_driver);
1033 	if (rc)
1034 		mdio_bus_exit();
1035 
1036 	return rc;
1037 }
1038 
1039 static void __exit phy_exit(void)
1040 {
1041 	phy_driver_unregister(&genphy_driver);
1042 	mdio_bus_exit();
1043 }
1044 
1045 subsys_initcall(phy_init);
1046 module_exit(phy_exit);
1047