xref: /openbmc/linux/drivers/net/phy/phy_device.c (revision 15e47304)
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 	kfree(phydev);
48 }
49 EXPORT_SYMBOL(phy_device_free);
50 
51 static void phy_device_release(struct device *dev)
52 {
53 	phy_device_free(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 
193 	/* Request the appropriate module unconditionally; don't
194 	   bother trying to do so only if it isn't already loaded,
195 	   because that gets complicated. A hotplug event would have
196 	   done an unconditional modprobe anyway.
197 	   We don't do normal hotplug because it won't work for MDIO
198 	   -- because it relies on the device staying around for long
199 	   enough for the driver to get loaded. With MDIO, the NIC
200 	   driver will get bored and give up as soon as it finds that
201 	   there's no driver _already_ loaded. */
202 	request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
203 
204 	return dev;
205 }
206 EXPORT_SYMBOL(phy_device_create);
207 
208 /**
209  * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs.
210  * @bus: the target MII bus
211  * @addr: PHY address on the MII bus
212  * @phy_id: where to store the ID retrieved.
213  * @c45_ids: where to store the c45 ID information.
214  *
215  *   If the PHY devices-in-package appears to be valid, it and the
216  *   corresponding identifiers are stored in @c45_ids, zero is stored
217  *   in @phy_id.  Otherwise 0xffffffff is stored in @phy_id.  Returns
218  *   zero on success.
219  *
220  */
221 static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
222 			   struct phy_c45_device_ids *c45_ids) {
223 	int phy_reg;
224 	int i, reg_addr;
225 	const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
226 
227 	/* Find first non-zero Devices In package.  Device
228 	 * zero is reserved, so don't probe it.
229 	 */
230 	for (i = 1;
231 	     i < num_ids && c45_ids->devices_in_package == 0;
232 	     i++) {
233 		reg_addr = MII_ADDR_C45 | i << 16 | 6;
234 		phy_reg = mdiobus_read(bus, addr, reg_addr);
235 		if (phy_reg < 0)
236 			return -EIO;
237 		c45_ids->devices_in_package = (phy_reg & 0xffff) << 16;
238 
239 		reg_addr = MII_ADDR_C45 | i << 16 | 5;
240 		phy_reg = mdiobus_read(bus, addr, reg_addr);
241 		if (phy_reg < 0)
242 			return -EIO;
243 		c45_ids->devices_in_package |= (phy_reg & 0xffff);
244 
245 		/* If mostly Fs, there is no device there,
246 		 * let's get out of here.
247 		 */
248 		if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
249 			*phy_id = 0xffffffff;
250 			return 0;
251 		}
252 	}
253 
254 	/* Now probe Device Identifiers for each device present. */
255 	for (i = 1; i < num_ids; i++) {
256 		if (!(c45_ids->devices_in_package & (1 << i)))
257 			continue;
258 
259 		reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
260 		phy_reg = mdiobus_read(bus, addr, reg_addr);
261 		if (phy_reg < 0)
262 			return -EIO;
263 		c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
264 
265 		reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2;
266 		phy_reg = mdiobus_read(bus, addr, reg_addr);
267 		if (phy_reg < 0)
268 			return -EIO;
269 		c45_ids->device_ids[i] |= (phy_reg & 0xffff);
270 	}
271 	*phy_id = 0;
272 	return 0;
273 }
274 
275 /**
276  * get_phy_id - reads the specified addr for its ID.
277  * @bus: the target MII bus
278  * @addr: PHY address on the MII bus
279  * @phy_id: where to store the ID retrieved.
280  * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
281  * @c45_ids: where to store the c45 ID information.
282  *
283  * Description: In the case of a 802.3-c22 PHY, reads the ID registers
284  *   of the PHY at @addr on the @bus, stores it in @phy_id and returns
285  *   zero on success.
286  *
287  *   In the case of a 802.3-c45 PHY, get_phy_c45_ids() is invoked, and
288  *   its return value is in turn returned.
289  *
290  */
291 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
292 		      bool is_c45, struct phy_c45_device_ids *c45_ids)
293 {
294 	int phy_reg;
295 
296 	if (is_c45)
297 		return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
298 
299 	/* Grab the bits from PHYIR1, and put them
300 	 * in the upper half */
301 	phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
302 
303 	if (phy_reg < 0)
304 		return -EIO;
305 
306 	*phy_id = (phy_reg & 0xffff) << 16;
307 
308 	/* Grab the bits from PHYIR2, and put them in the lower half */
309 	phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
310 
311 	if (phy_reg < 0)
312 		return -EIO;
313 
314 	*phy_id |= (phy_reg & 0xffff);
315 
316 	return 0;
317 }
318 
319 /**
320  * get_phy_device - reads the specified PHY device and returns its @phy_device struct
321  * @bus: the target MII bus
322  * @addr: PHY address on the MII bus
323  * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
324  *
325  * Description: Reads the ID registers of the PHY at @addr on the
326  *   @bus, then allocates and returns the phy_device to represent it.
327  */
328 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
329 {
330 	struct phy_c45_device_ids c45_ids = {0};
331 	struct phy_device *dev = NULL;
332 	u32 phy_id = 0;
333 	int r;
334 
335 	r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
336 	if (r)
337 		return ERR_PTR(r);
338 
339 	/* If the phy_id is mostly Fs, there is no device there */
340 	if ((phy_id & 0x1fffffff) == 0x1fffffff)
341 		return NULL;
342 
343 	dev = phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
344 
345 	return dev;
346 }
347 EXPORT_SYMBOL(get_phy_device);
348 
349 /**
350  * phy_device_register - Register the phy device on the MDIO bus
351  * @phydev: phy_device structure to be added to the MDIO bus
352  */
353 int phy_device_register(struct phy_device *phydev)
354 {
355 	int err;
356 
357 	/* Don't register a phy if one is already registered at this
358 	 * address */
359 	if (phydev->bus->phy_map[phydev->addr])
360 		return -EINVAL;
361 	phydev->bus->phy_map[phydev->addr] = phydev;
362 
363 	/* Run all of the fixups for this PHY */
364 	phy_scan_fixups(phydev);
365 
366 	err = device_register(&phydev->dev);
367 	if (err) {
368 		pr_err("phy %d failed to register\n", phydev->addr);
369 		goto out;
370 	}
371 
372 	return 0;
373 
374  out:
375 	phydev->bus->phy_map[phydev->addr] = NULL;
376 	return err;
377 }
378 EXPORT_SYMBOL(phy_device_register);
379 
380 /**
381  * phy_find_first - finds the first PHY device on the bus
382  * @bus: the target MII bus
383  */
384 struct phy_device *phy_find_first(struct mii_bus *bus)
385 {
386 	int addr;
387 
388 	for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
389 		if (bus->phy_map[addr])
390 			return bus->phy_map[addr];
391 	}
392 	return NULL;
393 }
394 EXPORT_SYMBOL(phy_find_first);
395 
396 /**
397  * phy_prepare_link - prepares the PHY layer to monitor link status
398  * @phydev: target phy_device struct
399  * @handler: callback function for link status change notifications
400  *
401  * Description: Tells the PHY infrastructure to handle the
402  *   gory details on monitoring link status (whether through
403  *   polling or an interrupt), and to call back to the
404  *   connected device driver when the link status changes.
405  *   If you want to monitor your own link state, don't call
406  *   this function.
407  */
408 static void phy_prepare_link(struct phy_device *phydev,
409 		void (*handler)(struct net_device *))
410 {
411 	phydev->adjust_link = handler;
412 }
413 
414 /**
415  * phy_connect_direct - connect an ethernet device to a specific phy_device
416  * @dev: the network device to connect
417  * @phydev: the pointer to the phy device
418  * @handler: callback function for state change notifications
419  * @flags: PHY device's dev_flags
420  * @interface: PHY device's interface
421  */
422 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
423 		       void (*handler)(struct net_device *), u32 flags,
424 		       phy_interface_t interface)
425 {
426 	int rc;
427 
428 	rc = phy_attach_direct(dev, phydev, flags, interface);
429 	if (rc)
430 		return rc;
431 
432 	phy_prepare_link(phydev, handler);
433 	phy_start_machine(phydev, NULL);
434 	if (phydev->irq > 0)
435 		phy_start_interrupts(phydev);
436 
437 	return 0;
438 }
439 EXPORT_SYMBOL(phy_connect_direct);
440 
441 /**
442  * phy_connect - connect an ethernet device to a PHY device
443  * @dev: the network device to connect
444  * @bus_id: the id string of the PHY device to connect
445  * @handler: callback function for state change notifications
446  * @flags: PHY device's dev_flags
447  * @interface: PHY device's interface
448  *
449  * Description: Convenience function for connecting ethernet
450  *   devices to PHY devices.  The default behavior is for
451  *   the PHY infrastructure to handle everything, and only notify
452  *   the connected driver when the link status changes.  If you
453  *   don't want, or can't use the provided functionality, you may
454  *   choose to call only the subset of functions which provide
455  *   the desired functionality.
456  */
457 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
458 		void (*handler)(struct net_device *), u32 flags,
459 		phy_interface_t interface)
460 {
461 	struct phy_device *phydev;
462 	struct device *d;
463 	int rc;
464 
465 	/* Search the list of PHY devices on the mdio bus for the
466 	 * PHY with the requested name */
467 	d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
468 	if (!d) {
469 		pr_err("PHY %s not found\n", bus_id);
470 		return ERR_PTR(-ENODEV);
471 	}
472 	phydev = to_phy_device(d);
473 
474 	rc = phy_connect_direct(dev, phydev, handler, flags, interface);
475 	if (rc)
476 		return ERR_PTR(rc);
477 
478 	return phydev;
479 }
480 EXPORT_SYMBOL(phy_connect);
481 
482 /**
483  * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
484  * @phydev: target phy_device struct
485  */
486 void phy_disconnect(struct phy_device *phydev)
487 {
488 	if (phydev->irq > 0)
489 		phy_stop_interrupts(phydev);
490 
491 	phy_stop_machine(phydev);
492 
493 	phydev->adjust_link = NULL;
494 
495 	phy_detach(phydev);
496 }
497 EXPORT_SYMBOL(phy_disconnect);
498 
499 int phy_init_hw(struct phy_device *phydev)
500 {
501 	int ret;
502 
503 	if (!phydev->drv || !phydev->drv->config_init)
504 		return 0;
505 
506 	ret = phy_scan_fixups(phydev);
507 	if (ret < 0)
508 		return ret;
509 
510 	return phydev->drv->config_init(phydev);
511 }
512 
513 /**
514  * phy_attach_direct - attach a network device to a given PHY device pointer
515  * @dev: network device to attach
516  * @phydev: Pointer to phy_device to attach
517  * @flags: PHY device's dev_flags
518  * @interface: PHY device's interface
519  *
520  * Description: Called by drivers to attach to a particular PHY
521  *     device. The phy_device is found, and properly hooked up
522  *     to the phy_driver.  If no driver is attached, then the
523  *     genphy_driver is used.  The phy_device is given a ptr to
524  *     the attaching device, and given a callback for link status
525  *     change.  The phy_device is returned to the attaching driver.
526  */
527 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
528 			     u32 flags, phy_interface_t interface)
529 {
530 	struct device *d = &phydev->dev;
531 	int err;
532 
533 	/* Assume that if there is no driver, that it doesn't
534 	 * exist, and we should use the genphy driver. */
535 	if (NULL == d->driver) {
536 		if (phydev->is_c45) {
537 			pr_err("No driver for phy %x\n", phydev->phy_id);
538 			return -ENODEV;
539 		}
540 
541 		d->driver = &genphy_driver.driver;
542 
543 		err = d->driver->probe(d);
544 		if (err >= 0)
545 			err = device_bind_driver(d);
546 
547 		if (err)
548 			return err;
549 	}
550 
551 	if (phydev->attached_dev) {
552 		dev_err(&dev->dev, "PHY already attached\n");
553 		return -EBUSY;
554 	}
555 
556 	phydev->attached_dev = dev;
557 	dev->phydev = phydev;
558 
559 	phydev->dev_flags = flags;
560 
561 	phydev->interface = interface;
562 
563 	phydev->state = PHY_READY;
564 
565 	/* Do initial configuration here, now that
566 	 * we have certain key parameters
567 	 * (dev_flags and interface) */
568 	err = phy_init_hw(phydev);
569 	if (err)
570 		phy_detach(phydev);
571 
572 	return err;
573 }
574 
575 /**
576  * phy_attach - attach a network device to a particular PHY device
577  * @dev: network device to attach
578  * @bus_id: Bus ID of PHY device to attach
579  * @flags: PHY device's dev_flags
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, u32 flags, 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, 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 static 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 
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 	if (!(phydrv->flags & PHY_HAS_INTERRUPT))
1015 		phydev->irq = PHY_POLL;
1016 
1017 	mutex_lock(&phydev->lock);
1018 
1019 	/* Start out supporting everything. Eventually,
1020 	 * a controller will attach, and may modify one
1021 	 * or both of these values */
1022 	phydev->supported = phydrv->features;
1023 	phydev->advertising = phydrv->features;
1024 
1025 	/* Set the state to READY by default */
1026 	phydev->state = PHY_READY;
1027 
1028 	if (phydev->drv->probe)
1029 		err = phydev->drv->probe(phydev);
1030 
1031 	mutex_unlock(&phydev->lock);
1032 
1033 	return err;
1034 
1035 }
1036 
1037 static int phy_remove(struct device *dev)
1038 {
1039 	struct phy_device *phydev;
1040 
1041 	phydev = to_phy_device(dev);
1042 
1043 	mutex_lock(&phydev->lock);
1044 	phydev->state = PHY_DOWN;
1045 	mutex_unlock(&phydev->lock);
1046 
1047 	if (phydev->drv->remove)
1048 		phydev->drv->remove(phydev);
1049 	phydev->drv = NULL;
1050 
1051 	return 0;
1052 }
1053 
1054 /**
1055  * phy_driver_register - register a phy_driver with the PHY layer
1056  * @new_driver: new phy_driver to register
1057  */
1058 int phy_driver_register(struct phy_driver *new_driver)
1059 {
1060 	int retval;
1061 
1062 	new_driver->driver.name = new_driver->name;
1063 	new_driver->driver.bus = &mdio_bus_type;
1064 	new_driver->driver.probe = phy_probe;
1065 	new_driver->driver.remove = phy_remove;
1066 
1067 	retval = driver_register(&new_driver->driver);
1068 
1069 	if (retval) {
1070 		pr_err("%s: Error %d in registering driver\n",
1071 		       new_driver->name, retval);
1072 
1073 		return retval;
1074 	}
1075 
1076 	pr_debug("%s: Registered new driver\n", new_driver->name);
1077 
1078 	return 0;
1079 }
1080 EXPORT_SYMBOL(phy_driver_register);
1081 
1082 int phy_drivers_register(struct phy_driver *new_driver, int n)
1083 {
1084 	int i, ret = 0;
1085 
1086 	for (i = 0; i < n; i++) {
1087 		ret = phy_driver_register(new_driver + i);
1088 		if (ret) {
1089 			while (i-- > 0)
1090 				phy_driver_unregister(new_driver + i);
1091 			break;
1092 		}
1093 	}
1094 	return ret;
1095 }
1096 EXPORT_SYMBOL(phy_drivers_register);
1097 
1098 void phy_driver_unregister(struct phy_driver *drv)
1099 {
1100 	driver_unregister(&drv->driver);
1101 }
1102 EXPORT_SYMBOL(phy_driver_unregister);
1103 
1104 void phy_drivers_unregister(struct phy_driver *drv, int n)
1105 {
1106 	int i;
1107 	for (i = 0; i < n; i++) {
1108 		phy_driver_unregister(drv + i);
1109 	}
1110 }
1111 EXPORT_SYMBOL(phy_drivers_unregister);
1112 
1113 static struct phy_driver genphy_driver = {
1114 	.phy_id		= 0xffffffff,
1115 	.phy_id_mask	= 0xffffffff,
1116 	.name		= "Generic PHY",
1117 	.config_init	= genphy_config_init,
1118 	.features	= 0,
1119 	.config_aneg	= genphy_config_aneg,
1120 	.read_status	= genphy_read_status,
1121 	.suspend	= genphy_suspend,
1122 	.resume		= genphy_resume,
1123 	.driver		= {.owner= THIS_MODULE, },
1124 };
1125 
1126 static int __init phy_init(void)
1127 {
1128 	int rc;
1129 
1130 	rc = mdio_bus_init();
1131 	if (rc)
1132 		return rc;
1133 
1134 	rc = phy_driver_register(&genphy_driver);
1135 	if (rc)
1136 		mdio_bus_exit();
1137 
1138 	return rc;
1139 }
1140 
1141 static void __exit phy_exit(void)
1142 {
1143 	phy_driver_unregister(&genphy_driver);
1144 	mdio_bus_exit();
1145 }
1146 
1147 subsys_initcall(phy_init);
1148 module_exit(phy_exit);
1149