Merge tag 'md-3.9' of git://neil.brown.name/md
[firefly-linux-kernel-4.4.55.git] / drivers / net / phy / phy_device.c
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);