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