xref: /openbmc/linux/drivers/net/phy/phy_device.c (revision 12eb4683)
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 	phy_scan_fixups(phydev);
368 
369 	err = device_add(&phydev->dev);
370 	if (err) {
371 		pr_err("PHY %d failed to add\n", phydev->addr);
372 		goto out;
373 	}
374 
375 	return 0;
376 
377  out:
378 	phydev->bus->phy_map[phydev->addr] = NULL;
379 	return err;
380 }
381 EXPORT_SYMBOL(phy_device_register);
382 
383 /**
384  * phy_find_first - finds the first PHY device on the bus
385  * @bus: the target MII bus
386  */
387 struct phy_device *phy_find_first(struct mii_bus *bus)
388 {
389 	int addr;
390 
391 	for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
392 		if (bus->phy_map[addr])
393 			return bus->phy_map[addr];
394 	}
395 	return NULL;
396 }
397 EXPORT_SYMBOL(phy_find_first);
398 
399 /**
400  * phy_prepare_link - prepares the PHY layer to monitor link status
401  * @phydev: target phy_device struct
402  * @handler: callback function for link status change notifications
403  *
404  * Description: Tells the PHY infrastructure to handle the
405  *   gory details on monitoring link status (whether through
406  *   polling or an interrupt), and to call back to the
407  *   connected device driver when the link status changes.
408  *   If you want to monitor your own link state, don't call
409  *   this function.
410  */
411 static void phy_prepare_link(struct phy_device *phydev,
412 		void (*handler)(struct net_device *))
413 {
414 	phydev->adjust_link = handler;
415 }
416 
417 /**
418  * phy_connect_direct - connect an ethernet device to a specific phy_device
419  * @dev: the network device to connect
420  * @phydev: the pointer to the phy device
421  * @handler: callback function for state change notifications
422  * @interface: PHY device's interface
423  */
424 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
425 		       void (*handler)(struct net_device *),
426 		       phy_interface_t interface)
427 {
428 	int rc;
429 
430 	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
431 	if (rc)
432 		return rc;
433 
434 	phy_prepare_link(phydev, handler);
435 	phy_start_machine(phydev, NULL);
436 	if (phydev->irq > 0)
437 		phy_start_interrupts(phydev);
438 
439 	return 0;
440 }
441 EXPORT_SYMBOL(phy_connect_direct);
442 
443 /**
444  * phy_connect - connect an ethernet device to a PHY device
445  * @dev: the network device to connect
446  * @bus_id: the id string of the PHY device to connect
447  * @handler: callback function for state change notifications
448  * @interface: PHY device's interface
449  *
450  * Description: Convenience function for connecting ethernet
451  *   devices to PHY devices.  The default behavior is for
452  *   the PHY infrastructure to handle everything, and only notify
453  *   the connected driver when the link status changes.  If you
454  *   don't want, or can't use the provided functionality, you may
455  *   choose to call only the subset of functions which provide
456  *   the desired functionality.
457  */
458 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
459 		void (*handler)(struct net_device *),
460 		phy_interface_t interface)
461 {
462 	struct phy_device *phydev;
463 	struct device *d;
464 	int rc;
465 
466 	/* Search the list of PHY devices on the mdio bus for the
467 	 * PHY with the requested name */
468 	d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
469 	if (!d) {
470 		pr_err("PHY %s not found\n", bus_id);
471 		return ERR_PTR(-ENODEV);
472 	}
473 	phydev = to_phy_device(d);
474 
475 	rc = phy_connect_direct(dev, phydev, handler, interface);
476 	if (rc)
477 		return ERR_PTR(rc);
478 
479 	return phydev;
480 }
481 EXPORT_SYMBOL(phy_connect);
482 
483 /**
484  * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
485  * @phydev: target phy_device struct
486  */
487 void phy_disconnect(struct phy_device *phydev)
488 {
489 	if (phydev->irq > 0)
490 		phy_stop_interrupts(phydev);
491 
492 	phy_stop_machine(phydev);
493 
494 	phydev->adjust_link = NULL;
495 
496 	phy_detach(phydev);
497 }
498 EXPORT_SYMBOL(phy_disconnect);
499 
500 int phy_init_hw(struct phy_device *phydev)
501 {
502 	int ret;
503 
504 	if (!phydev->drv || !phydev->drv->config_init)
505 		return 0;
506 
507 	ret = phy_scan_fixups(phydev);
508 	if (ret < 0)
509 		return ret;
510 
511 	return phydev->drv->config_init(phydev);
512 }
513 
514 /**
515  * phy_attach_direct - attach a network device to a given PHY device pointer
516  * @dev: network device to attach
517  * @phydev: Pointer to phy_device to attach
518  * @flags: PHY device's dev_flags
519  * @interface: PHY device's interface
520  *
521  * Description: Called by drivers to attach to a particular PHY
522  *     device. The phy_device is found, and properly hooked up
523  *     to the phy_driver.  If no driver is attached, then the
524  *     genphy_driver is used.  The phy_device is given a ptr to
525  *     the attaching device, and given a callback for link status
526  *     change.  The phy_device is returned to the attaching driver.
527  */
528 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
529 			     u32 flags, phy_interface_t interface)
530 {
531 	struct device *d = &phydev->dev;
532 	int err;
533 
534 	/* Assume that if there is no driver, that it doesn't
535 	 * exist, and we should use the genphy driver. */
536 	if (NULL == d->driver) {
537 		if (phydev->is_c45) {
538 			pr_err("No driver for phy %x\n", phydev->phy_id);
539 			return -ENODEV;
540 		}
541 
542 		d->driver = &genphy_driver.driver;
543 
544 		err = d->driver->probe(d);
545 		if (err >= 0)
546 			err = device_bind_driver(d);
547 
548 		if (err)
549 			return err;
550 	}
551 
552 	if (phydev->attached_dev) {
553 		dev_err(&dev->dev, "PHY already attached\n");
554 		return -EBUSY;
555 	}
556 
557 	phydev->attached_dev = dev;
558 	dev->phydev = phydev;
559 
560 	phydev->dev_flags = flags;
561 
562 	phydev->interface = interface;
563 
564 	phydev->state = PHY_READY;
565 
566 	/* Do initial configuration here, now that
567 	 * we have certain key parameters
568 	 * (dev_flags and interface) */
569 	err = phy_init_hw(phydev);
570 	if (err)
571 		phy_detach(phydev);
572 
573 	return err;
574 }
575 
576 /**
577  * phy_attach - attach a network device to a particular PHY device
578  * @dev: network device to attach
579  * @bus_id: Bus ID of PHY device to attach
580  * @interface: PHY device's interface
581  *
582  * Description: Same as phy_attach_direct() except that a PHY bus_id
583  *     string is passed instead of a pointer to a struct phy_device.
584  */
585 struct phy_device *phy_attach(struct net_device *dev,
586 		const char *bus_id, phy_interface_t interface)
587 {
588 	struct bus_type *bus = &mdio_bus_type;
589 	struct phy_device *phydev;
590 	struct device *d;
591 	int rc;
592 
593 	/* Search the list of PHY devices on the mdio bus for the
594 	 * PHY with the requested name */
595 	d = bus_find_device_by_name(bus, NULL, bus_id);
596 	if (!d) {
597 		pr_err("PHY %s not found\n", bus_id);
598 		return ERR_PTR(-ENODEV);
599 	}
600 	phydev = to_phy_device(d);
601 
602 	rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
603 	if (rc)
604 		return ERR_PTR(rc);
605 
606 	return phydev;
607 }
608 EXPORT_SYMBOL(phy_attach);
609 
610 /**
611  * phy_detach - detach a PHY device from its network device
612  * @phydev: target phy_device struct
613  */
614 void phy_detach(struct phy_device *phydev)
615 {
616 	phydev->attached_dev->phydev = NULL;
617 	phydev->attached_dev = NULL;
618 
619 	/* If the device had no specific driver before (i.e. - it
620 	 * was using the generic driver), we unbind the device
621 	 * from the generic driver so that there's a chance a
622 	 * real driver could be loaded */
623 	if (phydev->dev.driver == &genphy_driver.driver)
624 		device_release_driver(&phydev->dev);
625 }
626 EXPORT_SYMBOL(phy_detach);
627 
628 
629 /* Generic PHY support and helper functions */
630 
631 /**
632  * genphy_config_advert - sanitize and advertise auto-negotiation parameters
633  * @phydev: target phy_device struct
634  *
635  * Description: Writes MII_ADVERTISE with the appropriate values,
636  *   after sanitizing the values to make sure we only advertise
637  *   what is supported.  Returns < 0 on error, 0 if the PHY's advertisement
638  *   hasn't changed, and > 0 if it has changed.
639  */
640 static int genphy_config_advert(struct phy_device *phydev)
641 {
642 	u32 advertise;
643 	int oldadv, adv;
644 	int err, changed = 0;
645 
646 	/* Only allow advertising what
647 	 * this PHY supports */
648 	phydev->advertising &= phydev->supported;
649 	advertise = phydev->advertising;
650 
651 	/* Setup standard advertisement */
652 	oldadv = adv = phy_read(phydev, MII_ADVERTISE);
653 
654 	if (adv < 0)
655 		return adv;
656 
657 	adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
658 		 ADVERTISE_PAUSE_ASYM);
659 	adv |= ethtool_adv_to_mii_adv_t(advertise);
660 
661 	if (adv != oldadv) {
662 		err = phy_write(phydev, MII_ADVERTISE, adv);
663 
664 		if (err < 0)
665 			return err;
666 		changed = 1;
667 	}
668 
669 	/* Configure gigabit if it's supported */
670 	if (phydev->supported & (SUPPORTED_1000baseT_Half |
671 				SUPPORTED_1000baseT_Full)) {
672 		oldadv = adv = phy_read(phydev, MII_CTRL1000);
673 
674 		if (adv < 0)
675 			return adv;
676 
677 		adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
678 		adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
679 
680 		if (adv != oldadv) {
681 			err = phy_write(phydev, MII_CTRL1000, adv);
682 
683 			if (err < 0)
684 				return err;
685 			changed = 1;
686 		}
687 	}
688 
689 	return changed;
690 }
691 
692 /**
693  * genphy_setup_forced - configures/forces speed/duplex from @phydev
694  * @phydev: target phy_device struct
695  *
696  * Description: Configures MII_BMCR to force speed/duplex
697  *   to the values in phydev. Assumes that the values are valid.
698  *   Please see phy_sanitize_settings().
699  */
700 int genphy_setup_forced(struct phy_device *phydev)
701 {
702 	int err;
703 	int ctl = 0;
704 
705 	phydev->pause = phydev->asym_pause = 0;
706 
707 	if (SPEED_1000 == phydev->speed)
708 		ctl |= BMCR_SPEED1000;
709 	else if (SPEED_100 == phydev->speed)
710 		ctl |= BMCR_SPEED100;
711 
712 	if (DUPLEX_FULL == phydev->duplex)
713 		ctl |= BMCR_FULLDPLX;
714 
715 	err = phy_write(phydev, MII_BMCR, ctl);
716 
717 	return err;
718 }
719 EXPORT_SYMBOL(genphy_setup_forced);
720 
721 /**
722  * genphy_restart_aneg - Enable and Restart Autonegotiation
723  * @phydev: target phy_device struct
724  */
725 int genphy_restart_aneg(struct phy_device *phydev)
726 {
727 	int ctl;
728 
729 	ctl = phy_read(phydev, MII_BMCR);
730 
731 	if (ctl < 0)
732 		return ctl;
733 
734 	ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
735 
736 	/* Don't isolate the PHY if we're negotiating */
737 	ctl &= ~(BMCR_ISOLATE);
738 
739 	ctl = phy_write(phydev, MII_BMCR, ctl);
740 
741 	return ctl;
742 }
743 EXPORT_SYMBOL(genphy_restart_aneg);
744 
745 
746 /**
747  * genphy_config_aneg - restart auto-negotiation or write BMCR
748  * @phydev: target phy_device struct
749  *
750  * Description: If auto-negotiation is enabled, we configure the
751  *   advertising, and then restart auto-negotiation.  If it is not
752  *   enabled, then we write the BMCR.
753  */
754 int genphy_config_aneg(struct phy_device *phydev)
755 {
756 	int result;
757 
758 	if (AUTONEG_ENABLE != phydev->autoneg)
759 		return genphy_setup_forced(phydev);
760 
761 	result = genphy_config_advert(phydev);
762 
763 	if (result < 0) /* error */
764 		return result;
765 
766 	if (result == 0) {
767 		/* Advertisement hasn't changed, but maybe aneg was never on to
768 		 * begin with?  Or maybe phy was isolated? */
769 		int ctl = phy_read(phydev, MII_BMCR);
770 
771 		if (ctl < 0)
772 			return ctl;
773 
774 		if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
775 			result = 1; /* do restart aneg */
776 	}
777 
778 	/* Only restart aneg if we are advertising something different
779 	 * than we were before.	 */
780 	if (result > 0)
781 		result = genphy_restart_aneg(phydev);
782 
783 	return result;
784 }
785 EXPORT_SYMBOL(genphy_config_aneg);
786 
787 /**
788  * genphy_update_link - update link status in @phydev
789  * @phydev: target phy_device struct
790  *
791  * Description: Update the value in phydev->link to reflect the
792  *   current link value.  In order to do this, we need to read
793  *   the status register twice, keeping the second value.
794  */
795 int genphy_update_link(struct phy_device *phydev)
796 {
797 	int status;
798 
799 	/* Do a fake read */
800 	status = phy_read(phydev, MII_BMSR);
801 
802 	if (status < 0)
803 		return status;
804 
805 	/* Read link and autonegotiation status */
806 	status = phy_read(phydev, MII_BMSR);
807 
808 	if (status < 0)
809 		return status;
810 
811 	if ((status & BMSR_LSTATUS) == 0)
812 		phydev->link = 0;
813 	else
814 		phydev->link = 1;
815 
816 	return 0;
817 }
818 EXPORT_SYMBOL(genphy_update_link);
819 
820 /**
821  * genphy_read_status - check the link status and update current link state
822  * @phydev: target phy_device struct
823  *
824  * Description: Check the link, then figure out the current state
825  *   by comparing what we advertise with what the link partner
826  *   advertises.  Start by checking the gigabit possibilities,
827  *   then move on to 10/100.
828  */
829 int genphy_read_status(struct phy_device *phydev)
830 {
831 	int adv;
832 	int err;
833 	int lpa;
834 	int lpagb = 0;
835 
836 	/* Update the link, but return if there
837 	 * was an error */
838 	err = genphy_update_link(phydev);
839 	if (err)
840 		return err;
841 
842 	if (AUTONEG_ENABLE == phydev->autoneg) {
843 		if (phydev->supported & (SUPPORTED_1000baseT_Half
844 					| SUPPORTED_1000baseT_Full)) {
845 			lpagb = phy_read(phydev, MII_STAT1000);
846 
847 			if (lpagb < 0)
848 				return lpagb;
849 
850 			adv = phy_read(phydev, MII_CTRL1000);
851 
852 			if (adv < 0)
853 				return adv;
854 
855 			lpagb &= adv << 2;
856 		}
857 
858 		lpa = phy_read(phydev, MII_LPA);
859 
860 		if (lpa < 0)
861 			return lpa;
862 
863 		adv = phy_read(phydev, MII_ADVERTISE);
864 
865 		if (adv < 0)
866 			return adv;
867 
868 		lpa &= adv;
869 
870 		phydev->speed = SPEED_10;
871 		phydev->duplex = DUPLEX_HALF;
872 		phydev->pause = phydev->asym_pause = 0;
873 
874 		if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
875 			phydev->speed = SPEED_1000;
876 
877 			if (lpagb & LPA_1000FULL)
878 				phydev->duplex = DUPLEX_FULL;
879 		} else if (lpa & (LPA_100FULL | LPA_100HALF)) {
880 			phydev->speed = SPEED_100;
881 
882 			if (lpa & LPA_100FULL)
883 				phydev->duplex = DUPLEX_FULL;
884 		} else
885 			if (lpa & LPA_10FULL)
886 				phydev->duplex = DUPLEX_FULL;
887 
888 		if (phydev->duplex == DUPLEX_FULL){
889 			phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
890 			phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
891 		}
892 	} else {
893 		int bmcr = phy_read(phydev, MII_BMCR);
894 		if (bmcr < 0)
895 			return bmcr;
896 
897 		if (bmcr & BMCR_FULLDPLX)
898 			phydev->duplex = DUPLEX_FULL;
899 		else
900 			phydev->duplex = DUPLEX_HALF;
901 
902 		if (bmcr & BMCR_SPEED1000)
903 			phydev->speed = SPEED_1000;
904 		else if (bmcr & BMCR_SPEED100)
905 			phydev->speed = SPEED_100;
906 		else
907 			phydev->speed = SPEED_10;
908 
909 		phydev->pause = phydev->asym_pause = 0;
910 	}
911 
912 	return 0;
913 }
914 EXPORT_SYMBOL(genphy_read_status);
915 
916 static int genphy_config_init(struct phy_device *phydev)
917 {
918 	int val;
919 	u32 features;
920 
921 	/* For now, I'll claim that the generic driver supports
922 	 * all possible port types */
923 	features = (SUPPORTED_TP | SUPPORTED_MII
924 			| SUPPORTED_AUI | SUPPORTED_FIBRE |
925 			SUPPORTED_BNC);
926 
927 	/* Do we support autonegotiation? */
928 	val = phy_read(phydev, MII_BMSR);
929 
930 	if (val < 0)
931 		return val;
932 
933 	if (val & BMSR_ANEGCAPABLE)
934 		features |= SUPPORTED_Autoneg;
935 
936 	if (val & BMSR_100FULL)
937 		features |= SUPPORTED_100baseT_Full;
938 	if (val & BMSR_100HALF)
939 		features |= SUPPORTED_100baseT_Half;
940 	if (val & BMSR_10FULL)
941 		features |= SUPPORTED_10baseT_Full;
942 	if (val & BMSR_10HALF)
943 		features |= SUPPORTED_10baseT_Half;
944 
945 	if (val & BMSR_ESTATEN) {
946 		val = phy_read(phydev, MII_ESTATUS);
947 
948 		if (val < 0)
949 			return val;
950 
951 		if (val & ESTATUS_1000_TFULL)
952 			features |= SUPPORTED_1000baseT_Full;
953 		if (val & ESTATUS_1000_THALF)
954 			features |= SUPPORTED_1000baseT_Half;
955 	}
956 
957 	phydev->supported = features;
958 	phydev->advertising = features;
959 
960 	return 0;
961 }
962 int genphy_suspend(struct phy_device *phydev)
963 {
964 	int value;
965 
966 	mutex_lock(&phydev->lock);
967 
968 	value = phy_read(phydev, MII_BMCR);
969 	phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
970 
971 	mutex_unlock(&phydev->lock);
972 
973 	return 0;
974 }
975 EXPORT_SYMBOL(genphy_suspend);
976 
977 int genphy_resume(struct phy_device *phydev)
978 {
979 	int value;
980 
981 	mutex_lock(&phydev->lock);
982 
983 	value = phy_read(phydev, MII_BMCR);
984 	phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
985 
986 	mutex_unlock(&phydev->lock);
987 
988 	return 0;
989 }
990 EXPORT_SYMBOL(genphy_resume);
991 
992 /**
993  * phy_probe - probe and init a PHY device
994  * @dev: device to probe and init
995  *
996  * Description: Take care of setting up the phy_device structure,
997  *   set the state to READY (the driver's init function should
998  *   set it to STARTING if needed).
999  */
1000 static int phy_probe(struct device *dev)
1001 {
1002 	struct phy_device *phydev;
1003 	struct phy_driver *phydrv;
1004 	struct device_driver *drv;
1005 	int err = 0;
1006 
1007 	phydev = to_phy_device(dev);
1008 
1009 	drv = phydev->dev.driver;
1010 	phydrv = to_phy_driver(drv);
1011 	phydev->drv = phydrv;
1012 
1013 	/* Disable the interrupt if the PHY doesn't support it
1014 	 * but the interrupt is still a valid one
1015 	 */
1016 	if (!(phydrv->flags & PHY_HAS_INTERRUPT) &&
1017 			phy_interrupt_is_valid(phydev))
1018 		phydev->irq = PHY_POLL;
1019 
1020 	if (phydrv->flags & PHY_IS_INTERNAL)
1021 		phydev->is_internal = true;
1022 
1023 	mutex_lock(&phydev->lock);
1024 
1025 	/* Start out supporting everything. Eventually,
1026 	 * a controller will attach, and may modify one
1027 	 * or both of these values */
1028 	phydev->supported = phydrv->features;
1029 	phydev->advertising = phydrv->features;
1030 
1031 	/* Set the state to READY by default */
1032 	phydev->state = PHY_READY;
1033 
1034 	if (phydev->drv->probe)
1035 		err = phydev->drv->probe(phydev);
1036 
1037 	mutex_unlock(&phydev->lock);
1038 
1039 	return err;
1040 
1041 }
1042 
1043 static int phy_remove(struct device *dev)
1044 {
1045 	struct phy_device *phydev;
1046 
1047 	phydev = to_phy_device(dev);
1048 
1049 	mutex_lock(&phydev->lock);
1050 	phydev->state = PHY_DOWN;
1051 	mutex_unlock(&phydev->lock);
1052 
1053 	if (phydev->drv->remove)
1054 		phydev->drv->remove(phydev);
1055 	phydev->drv = NULL;
1056 
1057 	return 0;
1058 }
1059 
1060 /**
1061  * phy_driver_register - register a phy_driver with the PHY layer
1062  * @new_driver: new phy_driver to register
1063  */
1064 int phy_driver_register(struct phy_driver *new_driver)
1065 {
1066 	int retval;
1067 
1068 	new_driver->driver.name = new_driver->name;
1069 	new_driver->driver.bus = &mdio_bus_type;
1070 	new_driver->driver.probe = phy_probe;
1071 	new_driver->driver.remove = phy_remove;
1072 
1073 	retval = driver_register(&new_driver->driver);
1074 
1075 	if (retval) {
1076 		pr_err("%s: Error %d in registering driver\n",
1077 		       new_driver->name, retval);
1078 
1079 		return retval;
1080 	}
1081 
1082 	pr_debug("%s: Registered new driver\n", new_driver->name);
1083 
1084 	return 0;
1085 }
1086 EXPORT_SYMBOL(phy_driver_register);
1087 
1088 int phy_drivers_register(struct phy_driver *new_driver, int n)
1089 {
1090 	int i, ret = 0;
1091 
1092 	for (i = 0; i < n; i++) {
1093 		ret = phy_driver_register(new_driver + i);
1094 		if (ret) {
1095 			while (i-- > 0)
1096 				phy_driver_unregister(new_driver + i);
1097 			break;
1098 		}
1099 	}
1100 	return ret;
1101 }
1102 EXPORT_SYMBOL(phy_drivers_register);
1103 
1104 void phy_driver_unregister(struct phy_driver *drv)
1105 {
1106 	driver_unregister(&drv->driver);
1107 }
1108 EXPORT_SYMBOL(phy_driver_unregister);
1109 
1110 void phy_drivers_unregister(struct phy_driver *drv, int n)
1111 {
1112 	int i;
1113 	for (i = 0; i < n; i++) {
1114 		phy_driver_unregister(drv + i);
1115 	}
1116 }
1117 EXPORT_SYMBOL(phy_drivers_unregister);
1118 
1119 static struct phy_driver genphy_driver = {
1120 	.phy_id		= 0xffffffff,
1121 	.phy_id_mask	= 0xffffffff,
1122 	.name		= "Generic PHY",
1123 	.config_init	= genphy_config_init,
1124 	.features	= 0,
1125 	.config_aneg	= genphy_config_aneg,
1126 	.read_status	= genphy_read_status,
1127 	.suspend	= genphy_suspend,
1128 	.resume		= genphy_resume,
1129 	.driver		= {.owner= THIS_MODULE, },
1130 };
1131 
1132 static int __init phy_init(void)
1133 {
1134 	int rc;
1135 
1136 	rc = mdio_bus_init();
1137 	if (rc)
1138 		return rc;
1139 
1140 	rc = phy_driver_register(&genphy_driver);
1141 	if (rc)
1142 		mdio_bus_exit();
1143 
1144 	return rc;
1145 }
1146 
1147 static void __exit phy_exit(void)
1148 {
1149 	phy_driver_unregister(&genphy_driver);
1150 	mdio_bus_exit();
1151 }
1152 
1153 subsys_initcall(phy_init);
1154 module_exit(phy_exit);
1155