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