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