net: phy: provide phy_resume/phy_suspend helpers
[deliverable/linux.git] / drivers / net / phy / phy_device.c
CommitLineData
00db8189
AF
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 */
8d242488
JP
17
18#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19
00db8189 20#include <linux/kernel.h>
00db8189
AF
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>
00db8189
AF
31#include <linux/mm.h>
32#include <linux/module.h>
00db8189
AF
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
afcceaa3
OH
41MODULE_DESCRIPTION("PHY library");
42MODULE_AUTHOR("Andy Fleming");
43MODULE_LICENSE("GPL");
44
6f4a7f41
AV
45void phy_device_free(struct phy_device *phydev)
46{
b2a43191 47 put_device(&phydev->dev);
6f4a7f41 48}
4dea547f 49EXPORT_SYMBOL(phy_device_free);
6f4a7f41
AV
50
51static void phy_device_release(struct device *dev)
52{
b2a43191 53 kfree(to_phy_device(dev));
6f4a7f41
AV
54}
55
4dea547f
GL
56static struct phy_driver genphy_driver;
57extern int mdio_bus_init(void);
58extern void mdio_bus_exit(void);
59
f62220d3
AF
60static LIST_HEAD(phy_fixup_list);
61static DEFINE_MUTEX(phy_fixup_lock);
62
89ff05ec 63static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
64 u32 flags, phy_interface_t interface);
65
f62220d3
AF
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 */
75int 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
fb28ad35 84 strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
f62220d3
AF
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}
95EXPORT_SYMBOL(phy_register_fixup);
96
97/* Registers a fixup to be run on any PHY with the UID in phy_uid */
98int 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}
103EXPORT_SYMBOL(phy_register_fixup_for_uid);
104
105/* Registers a fixup to be run on the PHY with id string bus_id */
106int 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}
111EXPORT_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 */
117static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
118{
fb28ad35 119 if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
f62220d3
AF
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 */
132int 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
bc23283c
JS
143 if (err < 0) {
144 mutex_unlock(&phy_fixup_lock);
f62220d3 145 return err;
bc23283c 146 }
f62220d3
AF
147 }
148 }
149 mutex_unlock(&phy_fixup_lock);
150
151 return 0;
152}
153EXPORT_SYMBOL(phy_scan_fixups);
154
ac28b9f8
DD
155struct 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)
11b0bacd
VB
157{
158 struct phy_device *dev;
8626d3b4 159
11b0bacd
VB
160 /* We allocate the device, and initialize the
161 * default values */
cd861280 162 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
11b0bacd
VB
163
164 if (NULL == dev)
165 return (struct phy_device*) PTR_ERR((void*)-ENOMEM);
166
6f4a7f41
AV
167 dev->dev.release = phy_device_release;
168
11b0bacd
VB
169 dev->speed = 0;
170 dev->duplex = -1;
171 dev->pause = dev->asym_pause = 0;
172 dev->link = 1;
e8a2b6a4 173 dev->interface = PHY_INTERFACE_MODE_GMII;
11b0bacd
VB
174
175 dev->autoneg = AUTONEG_ENABLE;
176
ac28b9f8 177 dev->is_c45 = is_c45;
11b0bacd
VB
178 dev->addr = addr;
179 dev->phy_id = phy_id;
ac28b9f8
DD
180 if (c45_ids)
181 dev->c45_ids = *c45_ids;
11b0bacd 182 dev->bus = bus;
4dea547f
GL
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);
11b0bacd
VB
187
188 dev->state = PHY_DOWN;
189
35b5f6b1 190 mutex_init(&dev->lock);
4f9c85a1 191 INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
5ea94e76 192 INIT_WORK(&dev->phy_queue, phy_change);
11b0bacd 193
8626d3b4
DW
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
b2a43191
PM
205 device_initialize(&dev->dev);
206
11b0bacd
VB
207 return dev;
208}
ac28b9f8
DD
209EXPORT_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 */
224static 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}
11b0bacd 277
b3df0da8 278/**
cac1f3c8 279 * get_phy_id - reads the specified addr for its ID.
b3df0da8
RD
280 * @bus: the target MII bus
281 * @addr: PHY address on the MII bus
cac1f3c8 282 * @phy_id: where to store the ID retrieved.
ac28b9f8
DD
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.
00db8189 292 *
00db8189 293 */
ac28b9f8
DD
294static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
295 bool is_c45, struct phy_c45_device_ids *c45_ids)
00db8189
AF
296{
297 int phy_reg;
00db8189 298
ac28b9f8
DD
299 if (is_c45)
300 return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
301
00db8189
AF
302 /* Grab the bits from PHYIR1, and put them
303 * in the upper half */
6fe32649 304 phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
00db8189
AF
305
306 if (phy_reg < 0)
cac1f3c8 307 return -EIO;
00db8189 308
cac1f3c8 309 *phy_id = (phy_reg & 0xffff) << 16;
00db8189
AF
310
311 /* Grab the bits from PHYIR2, and put them in the lower half */
6fe32649 312 phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
00db8189
AF
313
314 if (phy_reg < 0)
cac1f3c8
PG
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
ac28b9f8 326 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
cac1f3c8
PG
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 */
ac28b9f8 331struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
cac1f3c8 332{
ac28b9f8 333 struct phy_c45_device_ids c45_ids = {0};
160c85f0
DM
334 struct phy_device *dev = NULL;
335 u32 phy_id = 0;
cac1f3c8 336 int r;
00db8189 337
ac28b9f8 338 r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
cac1f3c8
PG
339 if (r)
340 return ERR_PTR(r);
00db8189 341
6436cbcd
GC
342 /* If the phy_id is mostly Fs, there is no device there */
343 if ((phy_id & 0x1fffffff) == 0x1fffffff)
344 return NULL;
345
ac28b9f8 346 dev = phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
00db8189
AF
347
348 return dev;
349}
4dea547f
GL
350EXPORT_SYMBOL(get_phy_device);
351
352/**
353 * phy_device_register - Register the phy device on the MDIO bus
1d4ac5d5 354 * @phydev: phy_device structure to be added to the MDIO bus
4dea547f
GL
355 */
356int 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 */
87aa9f9c
FF
367 err = phy_init_hw(phydev);
368 if (err) {
369 pr_err("PHY %d failed to initialize\n", phydev->addr);
370 goto out;
371 }
4dea547f 372
b2a43191 373 err = device_add(&phydev->dev);
4dea547f 374 if (err) {
b2a43191 375 pr_err("PHY %d failed to add\n", phydev->addr);
4dea547f
GL
376 goto out;
377 }
378
379 return 0;
380
381 out:
382 phydev->bus->phy_map[phydev->addr] = NULL;
383 return err;
384}
385EXPORT_SYMBOL(phy_device_register);
00db8189 386
f8f76db1
JP
387/**
388 * phy_find_first - finds the first PHY device on the bus
389 * @bus: the target MII bus
390 */
391struct phy_device *phy_find_first(struct mii_bus *bus)
392{
393 int addr;
394
395 for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
396 if (bus->phy_map[addr])
397 return bus->phy_map[addr];
398 }
399 return NULL;
400}
401EXPORT_SYMBOL(phy_find_first);
402
b3df0da8
RD
403/**
404 * phy_prepare_link - prepares the PHY layer to monitor link status
405 * @phydev: target phy_device struct
406 * @handler: callback function for link status change notifications
00db8189 407 *
b3df0da8 408 * Description: Tells the PHY infrastructure to handle the
00db8189
AF
409 * gory details on monitoring link status (whether through
410 * polling or an interrupt), and to call back to the
411 * connected device driver when the link status changes.
412 * If you want to monitor your own link state, don't call
b3df0da8
RD
413 * this function.
414 */
89ff05ec 415static void phy_prepare_link(struct phy_device *phydev,
00db8189
AF
416 void (*handler)(struct net_device *))
417{
418 phydev->adjust_link = handler;
419}
420
fa94f6d9
GL
421/**
422 * phy_connect_direct - connect an ethernet device to a specific phy_device
423 * @dev: the network device to connect
424 * @phydev: the pointer to the phy device
425 * @handler: callback function for state change notifications
fa94f6d9
GL
426 * @interface: PHY device's interface
427 */
428int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
f9a8f83b 429 void (*handler)(struct net_device *),
fa94f6d9
GL
430 phy_interface_t interface)
431{
432 int rc;
433
f9a8f83b 434 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
fa94f6d9
GL
435 if (rc)
436 return rc;
437
438 phy_prepare_link(phydev, handler);
439 phy_start_machine(phydev, NULL);
440 if (phydev->irq > 0)
441 phy_start_interrupts(phydev);
442
443 return 0;
444}
445EXPORT_SYMBOL(phy_connect_direct);
446
b3df0da8
RD
447/**
448 * phy_connect - connect an ethernet device to a PHY device
449 * @dev: the network device to connect
5d12b132 450 * @bus_id: the id string of the PHY device to connect
b3df0da8 451 * @handler: callback function for state change notifications
b3df0da8 452 * @interface: PHY device's interface
e1393456 453 *
b3df0da8 454 * Description: Convenience function for connecting ethernet
e1393456
AF
455 * devices to PHY devices. The default behavior is for
456 * the PHY infrastructure to handle everything, and only notify
457 * the connected driver when the link status changes. If you
458 * don't want, or can't use the provided functionality, you may
459 * choose to call only the subset of functions which provide
460 * the desired functionality.
461 */
f62220d3 462struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
f9a8f83b 463 void (*handler)(struct net_device *),
1a168934 464 phy_interface_t interface)
e1393456
AF
465{
466 struct phy_device *phydev;
fa94f6d9
GL
467 struct device *d;
468 int rc;
e1393456 469
fa94f6d9
GL
470 /* Search the list of PHY devices on the mdio bus for the
471 * PHY with the requested name */
472 d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
473 if (!d) {
474 pr_err("PHY %s not found\n", bus_id);
475 return ERR_PTR(-ENODEV);
476 }
477 phydev = to_phy_device(d);
e1393456 478
f9a8f83b 479 rc = phy_connect_direct(dev, phydev, handler, interface);
fa94f6d9
GL
480 if (rc)
481 return ERR_PTR(rc);
e1393456
AF
482
483 return phydev;
484}
485EXPORT_SYMBOL(phy_connect);
486
b3df0da8
RD
487/**
488 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
489 * @phydev: target phy_device struct
490 */
e1393456
AF
491void phy_disconnect(struct phy_device *phydev)
492{
493 if (phydev->irq > 0)
494 phy_stop_interrupts(phydev);
495
496 phy_stop_machine(phydev);
497
498 phydev->adjust_link = NULL;
499
500 phy_detach(phydev);
501}
502EXPORT_SYMBOL(phy_disconnect);
503
87aa9f9c
FF
504/**
505 * phy_poll_reset - Safely wait until a PHY reset has properly completed
506 * @phydev: The PHY device to poll
507 *
508 * Description: According to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as
509 * published in 2008, a PHY reset may take up to 0.5 seconds. The MII BMCR
510 * register must be polled until the BMCR_RESET bit clears.
511 *
512 * Furthermore, any attempts to write to PHY registers may have no effect
513 * or even generate MDIO bus errors until this is complete.
514 *
515 * Some PHYs (such as the Marvell 88E1111) don't entirely conform to the
516 * standard and do not fully reset after the BMCR_RESET bit is set, and may
517 * even *REQUIRE* a soft-reset to properly restart autonegotiation. In an
518 * effort to support such broken PHYs, this function is separate from the
519 * standard phy_init_hw() which will zero all the other bits in the BMCR
520 * and reapply all driver-specific and board-specific fixups.
521 */
522static int phy_poll_reset(struct phy_device *phydev)
523{
524 /* Poll until the reset bit clears (50ms per retry == 0.6 sec) */
525 unsigned int retries = 12;
526 int ret;
527
528 do {
529 msleep(50);
530 ret = phy_read(phydev, MII_BMCR);
531 if (ret < 0)
532 return ret;
533 } while (ret & BMCR_RESET && --retries);
534 if (ret & BMCR_RESET)
535 return -ETIMEDOUT;
536
537 /*
538 * Some chips (smsc911x) may still need up to another 1ms after the
539 * BMCR_RESET bit is cleared before they are usable.
540 */
541 msleep(1);
542 return 0;
543}
544
2f5cb434
AV
545int phy_init_hw(struct phy_device *phydev)
546{
547 int ret;
548
549 if (!phydev->drv || !phydev->drv->config_init)
550 return 0;
551
87aa9f9c
FF
552 ret = phy_write(phydev, MII_BMCR, BMCR_RESET);
553 if (ret < 0)
554 return ret;
555
556 ret = phy_poll_reset(phydev);
557 if (ret < 0)
558 return ret;
559
2f5cb434
AV
560 ret = phy_scan_fixups(phydev);
561 if (ret < 0)
562 return ret;
563
564 return phydev->drv->config_init(phydev);
565}
87aa9f9c 566EXPORT_SYMBOL(phy_init_hw);
2f5cb434 567
b3df0da8 568/**
fa94f6d9 569 * phy_attach_direct - attach a network device to a given PHY device pointer
b3df0da8 570 * @dev: network device to attach
fa94f6d9 571 * @phydev: Pointer to phy_device to attach
b3df0da8
RD
572 * @flags: PHY device's dev_flags
573 * @interface: PHY device's interface
e1393456 574 *
b3df0da8 575 * Description: Called by drivers to attach to a particular PHY
e1393456
AF
576 * device. The phy_device is found, and properly hooked up
577 * to the phy_driver. If no driver is attached, then the
578 * genphy_driver is used. The phy_device is given a ptr to
579 * the attaching device, and given a callback for link status
b3df0da8 580 * change. The phy_device is returned to the attaching driver.
e1393456 581 */
89ff05ec 582static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
583 u32 flags, phy_interface_t interface)
e1393456 584{
fa94f6d9 585 struct device *d = &phydev->dev;
d005a09e 586 int err;
e1393456
AF
587
588 /* Assume that if there is no driver, that it doesn't
589 * exist, and we should use the genphy driver. */
590 if (NULL == d->driver) {
ac28b9f8
DD
591 if (phydev->is_c45) {
592 pr_err("No driver for phy %x\n", phydev->phy_id);
593 return -ENODEV;
594 }
595
e1393456
AF
596 d->driver = &genphy_driver.driver;
597
598 err = d->driver->probe(d);
b7a00ecd
JG
599 if (err >= 0)
600 err = device_bind_driver(d);
e1393456 601
b7a00ecd 602 if (err)
fa94f6d9 603 return err;
e1393456
AF
604 }
605
606 if (phydev->attached_dev) {
fa94f6d9
GL
607 dev_err(&dev->dev, "PHY already attached\n");
608 return -EBUSY;
e1393456
AF
609 }
610
611 phydev->attached_dev = dev;
c1f19b51 612 dev->phydev = phydev;
e1393456
AF
613
614 phydev->dev_flags = flags;
615
e8a2b6a4
AF
616 phydev->interface = interface;
617
ef24b16b
AV
618 phydev->state = PHY_READY;
619
e8a2b6a4
AF
620 /* Do initial configuration here, now that
621 * we have certain key parameters
622 * (dev_flags and interface) */
d005a09e
MKB
623 err = phy_init_hw(phydev);
624 if (err)
625 phy_detach(phydev);
626
627 return err;
fa94f6d9 628}
fa94f6d9
GL
629
630/**
631 * phy_attach - attach a network device to a particular PHY device
632 * @dev: network device to attach
633 * @bus_id: Bus ID of PHY device to attach
fa94f6d9
GL
634 * @interface: PHY device's interface
635 *
636 * Description: Same as phy_attach_direct() except that a PHY bus_id
637 * string is passed instead of a pointer to a struct phy_device.
638 */
639struct phy_device *phy_attach(struct net_device *dev,
f9a8f83b 640 const char *bus_id, phy_interface_t interface)
fa94f6d9
GL
641{
642 struct bus_type *bus = &mdio_bus_type;
643 struct phy_device *phydev;
644 struct device *d;
645 int rc;
646
647 /* Search the list of PHY devices on the mdio bus for the
648 * PHY with the requested name */
649 d = bus_find_device_by_name(bus, NULL, bus_id);
650 if (!d) {
651 pr_err("PHY %s not found\n", bus_id);
652 return ERR_PTR(-ENODEV);
e8a2b6a4 653 }
fa94f6d9
GL
654 phydev = to_phy_device(d);
655
f9a8f83b 656 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
fa94f6d9
GL
657 if (rc)
658 return ERR_PTR(rc);
e8a2b6a4 659
e1393456
AF
660 return phydev;
661}
662EXPORT_SYMBOL(phy_attach);
663
b3df0da8
RD
664/**
665 * phy_detach - detach a PHY device from its network device
666 * @phydev: target phy_device struct
667 */
e1393456
AF
668void phy_detach(struct phy_device *phydev)
669{
c1f19b51 670 phydev->attached_dev->phydev = NULL;
e1393456
AF
671 phydev->attached_dev = NULL;
672
673 /* If the device had no specific driver before (i.e. - it
674 * was using the generic driver), we unbind the device
675 * from the generic driver so that there's a chance a
676 * real driver could be loaded */
87aebe07 677 if (phydev->dev.driver == &genphy_driver.driver)
e1393456 678 device_release_driver(&phydev->dev);
e1393456
AF
679}
680EXPORT_SYMBOL(phy_detach);
681
481b5d93
SH
682int phy_suspend(struct phy_device *phydev)
683{
684 struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
685 struct ethtool_wolinfo wol;
686
687 /* If the device has WOL enabled, we cannot suspend the PHY */
688 wol.cmd = ETHTOOL_GWOL;
689 phy_ethtool_get_wol(phydev, &wol);
690 if (wol.wolopts)
691 return -EBUSY;
692
693 if (phydrv->suspend)
694 return phydrv->suspend(phydev);
695 return 0;
696}
697
698int phy_resume(struct phy_device *phydev)
699{
700 struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
701
702 if (phydrv->resume)
703 return phydrv->resume(phydev);
704 return 0;
705}
e1393456 706
00db8189
AF
707/* Generic PHY support and helper functions */
708
b3df0da8 709/**
25985edc 710 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
b3df0da8 711 * @phydev: target phy_device struct
00db8189 712 *
b3df0da8 713 * Description: Writes MII_ADVERTISE with the appropriate values,
00db8189 714 * after sanitizing the values to make sure we only advertise
51e2a384
TP
715 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement
716 * hasn't changed, and > 0 if it has changed.
00db8189 717 */
89ff05ec 718static int genphy_config_advert(struct phy_device *phydev)
00db8189
AF
719{
720 u32 advertise;
51e2a384
TP
721 int oldadv, adv;
722 int err, changed = 0;
00db8189
AF
723
724 /* Only allow advertising what
725 * this PHY supports */
726 phydev->advertising &= phydev->supported;
727 advertise = phydev->advertising;
728
729 /* Setup standard advertisement */
51e2a384 730 oldadv = adv = phy_read(phydev, MII_ADVERTISE);
00db8189
AF
731
732 if (adv < 0)
733 return adv;
734
28011cf1 735 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
00db8189 736 ADVERTISE_PAUSE_ASYM);
37f07023 737 adv |= ethtool_adv_to_mii_adv_t(advertise);
00db8189 738
51e2a384
TP
739 if (adv != oldadv) {
740 err = phy_write(phydev, MII_ADVERTISE, adv);
00db8189 741
51e2a384
TP
742 if (err < 0)
743 return err;
744 changed = 1;
745 }
00db8189
AF
746
747 /* Configure gigabit if it's supported */
748 if (phydev->supported & (SUPPORTED_1000baseT_Half |
749 SUPPORTED_1000baseT_Full)) {
51e2a384 750 oldadv = adv = phy_read(phydev, MII_CTRL1000);
00db8189
AF
751
752 if (adv < 0)
753 return adv;
754
755 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
37f07023 756 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
00db8189 757
51e2a384
TP
758 if (adv != oldadv) {
759 err = phy_write(phydev, MII_CTRL1000, adv);
760
761 if (err < 0)
762 return err;
763 changed = 1;
764 }
00db8189
AF
765 }
766
51e2a384 767 return changed;
00db8189 768}
00db8189 769
b3df0da8
RD
770/**
771 * genphy_setup_forced - configures/forces speed/duplex from @phydev
772 * @phydev: target phy_device struct
00db8189 773 *
b3df0da8 774 * Description: Configures MII_BMCR to force speed/duplex
00db8189 775 * to the values in phydev. Assumes that the values are valid.
b3df0da8
RD
776 * Please see phy_sanitize_settings().
777 */
3fb69bca 778int genphy_setup_forced(struct phy_device *phydev)
00db8189 779{
f62220d3 780 int err;
bc1e0a09 781 int ctl = 0;
00db8189
AF
782
783 phydev->pause = phydev->asym_pause = 0;
784
785 if (SPEED_1000 == phydev->speed)
786 ctl |= BMCR_SPEED1000;
787 else if (SPEED_100 == phydev->speed)
788 ctl |= BMCR_SPEED100;
789
790 if (DUPLEX_FULL == phydev->duplex)
791 ctl |= BMCR_FULLDPLX;
792
f62220d3 793 err = phy_write(phydev, MII_BMCR, ctl);
00db8189 794
f62220d3 795 return err;
00db8189 796}
3fb69bca 797EXPORT_SYMBOL(genphy_setup_forced);
00db8189 798
b3df0da8
RD
799/**
800 * genphy_restart_aneg - Enable and Restart Autonegotiation
801 * @phydev: target phy_device struct
802 */
00db8189
AF
803int genphy_restart_aneg(struct phy_device *phydev)
804{
805 int ctl;
806
807 ctl = phy_read(phydev, MII_BMCR);
808
809 if (ctl < 0)
810 return ctl;
811
812 ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
813
814 /* Don't isolate the PHY if we're negotiating */
815 ctl &= ~(BMCR_ISOLATE);
816
817 ctl = phy_write(phydev, MII_BMCR, ctl);
818
819 return ctl;
820}
892871dc 821EXPORT_SYMBOL(genphy_restart_aneg);
00db8189
AF
822
823
b3df0da8
RD
824/**
825 * genphy_config_aneg - restart auto-negotiation or write BMCR
826 * @phydev: target phy_device struct
00db8189 827 *
b3df0da8 828 * Description: If auto-negotiation is enabled, we configure the
00db8189 829 * advertising, and then restart auto-negotiation. If it is not
b3df0da8 830 * enabled, then we write the BMCR.
00db8189
AF
831 */
832int genphy_config_aneg(struct phy_device *phydev)
833{
de339c2a 834 int result;
00db8189 835
de339c2a
TP
836 if (AUTONEG_ENABLE != phydev->autoneg)
837 return genphy_setup_forced(phydev);
00db8189 838
de339c2a 839 result = genphy_config_advert(phydev);
00db8189 840
de339c2a
TP
841 if (result < 0) /* error */
842 return result;
843
844 if (result == 0) {
25985edc 845 /* Advertisement hasn't changed, but maybe aneg was never on to
de339c2a
TP
846 * begin with? Or maybe phy was isolated? */
847 int ctl = phy_read(phydev, MII_BMCR);
848
849 if (ctl < 0)
850 return ctl;
851
852 if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
853 result = 1; /* do restart aneg */
854 }
855
856 /* Only restart aneg if we are advertising something different
857 * than we were before. */
858 if (result > 0)
859 result = genphy_restart_aneg(phydev);
00db8189 860
51e2a384 861 return result;
00db8189
AF
862}
863EXPORT_SYMBOL(genphy_config_aneg);
864
b3df0da8
RD
865/**
866 * genphy_update_link - update link status in @phydev
867 * @phydev: target phy_device struct
00db8189 868 *
b3df0da8 869 * Description: Update the value in phydev->link to reflect the
00db8189 870 * current link value. In order to do this, we need to read
b3df0da8 871 * the status register twice, keeping the second value.
00db8189
AF
872 */
873int genphy_update_link(struct phy_device *phydev)
874{
875 int status;
876
877 /* Do a fake read */
878 status = phy_read(phydev, MII_BMSR);
879
880 if (status < 0)
881 return status;
882
883 /* Read link and autonegotiation status */
884 status = phy_read(phydev, MII_BMSR);
885
886 if (status < 0)
887 return status;
888
889 if ((status & BMSR_LSTATUS) == 0)
890 phydev->link = 0;
891 else
892 phydev->link = 1;
893
894 return 0;
895}
6b655529 896EXPORT_SYMBOL(genphy_update_link);
00db8189 897
b3df0da8
RD
898/**
899 * genphy_read_status - check the link status and update current link state
900 * @phydev: target phy_device struct
00db8189 901 *
b3df0da8 902 * Description: Check the link, then figure out the current state
00db8189
AF
903 * by comparing what we advertise with what the link partner
904 * advertises. Start by checking the gigabit possibilities,
905 * then move on to 10/100.
906 */
907int genphy_read_status(struct phy_device *phydev)
908{
909 int adv;
910 int err;
911 int lpa;
912 int lpagb = 0;
913
914 /* Update the link, but return if there
915 * was an error */
916 err = genphy_update_link(phydev);
917 if (err)
918 return err;
919
114002bc
FF
920 phydev->lp_advertising = 0;
921
00db8189
AF
922 if (AUTONEG_ENABLE == phydev->autoneg) {
923 if (phydev->supported & (SUPPORTED_1000baseT_Half
924 | SUPPORTED_1000baseT_Full)) {
925 lpagb = phy_read(phydev, MII_STAT1000);
926
927 if (lpagb < 0)
928 return lpagb;
929
930 adv = phy_read(phydev, MII_CTRL1000);
931
932 if (adv < 0)
933 return adv;
934
114002bc
FF
935 phydev->lp_advertising =
936 mii_stat1000_to_ethtool_lpa_t(lpagb);
00db8189
AF
937 lpagb &= adv << 2;
938 }
939
940 lpa = phy_read(phydev, MII_LPA);
941
942 if (lpa < 0)
943 return lpa;
944
114002bc
FF
945 phydev->lp_advertising |= mii_lpa_to_ethtool_lpa_t(lpa);
946
00db8189
AF
947 adv = phy_read(phydev, MII_ADVERTISE);
948
949 if (adv < 0)
950 return adv;
951
952 lpa &= adv;
953
954 phydev->speed = SPEED_10;
955 phydev->duplex = DUPLEX_HALF;
956 phydev->pause = phydev->asym_pause = 0;
957
958 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
959 phydev->speed = SPEED_1000;
960
961 if (lpagb & LPA_1000FULL)
962 phydev->duplex = DUPLEX_FULL;
963 } else if (lpa & (LPA_100FULL | LPA_100HALF)) {
964 phydev->speed = SPEED_100;
965
966 if (lpa & LPA_100FULL)
967 phydev->duplex = DUPLEX_FULL;
968 } else
969 if (lpa & LPA_10FULL)
970 phydev->duplex = DUPLEX_FULL;
971
972 if (phydev->duplex == DUPLEX_FULL){
973 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
974 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
975 }
976 } else {
977 int bmcr = phy_read(phydev, MII_BMCR);
978 if (bmcr < 0)
979 return bmcr;
980
981 if (bmcr & BMCR_FULLDPLX)
982 phydev->duplex = DUPLEX_FULL;
983 else
984 phydev->duplex = DUPLEX_HALF;
985
986 if (bmcr & BMCR_SPEED1000)
987 phydev->speed = SPEED_1000;
988 else if (bmcr & BMCR_SPEED100)
989 phydev->speed = SPEED_100;
990 else
991 phydev->speed = SPEED_10;
992
993 phydev->pause = phydev->asym_pause = 0;
994 }
995
996 return 0;
997}
998EXPORT_SYMBOL(genphy_read_status);
999
1000static int genphy_config_init(struct phy_device *phydev)
1001{
84c22d79 1002 int val;
00db8189
AF
1003 u32 features;
1004
1005 /* For now, I'll claim that the generic driver supports
1006 * all possible port types */
1007 features = (SUPPORTED_TP | SUPPORTED_MII
1008 | SUPPORTED_AUI | SUPPORTED_FIBRE |
1009 SUPPORTED_BNC);
1010
1011 /* Do we support autonegotiation? */
1012 val = phy_read(phydev, MII_BMSR);
1013
1014 if (val < 0)
1015 return val;
1016
1017 if (val & BMSR_ANEGCAPABLE)
1018 features |= SUPPORTED_Autoneg;
1019
1020 if (val & BMSR_100FULL)
1021 features |= SUPPORTED_100baseT_Full;
1022 if (val & BMSR_100HALF)
1023 features |= SUPPORTED_100baseT_Half;
1024 if (val & BMSR_10FULL)
1025 features |= SUPPORTED_10baseT_Full;
1026 if (val & BMSR_10HALF)
1027 features |= SUPPORTED_10baseT_Half;
1028
1029 if (val & BMSR_ESTATEN) {
1030 val = phy_read(phydev, MII_ESTATUS);
1031
1032 if (val < 0)
1033 return val;
1034
1035 if (val & ESTATUS_1000_TFULL)
1036 features |= SUPPORTED_1000baseT_Full;
1037 if (val & ESTATUS_1000_THALF)
1038 features |= SUPPORTED_1000baseT_Half;
1039 }
1040
1041 phydev->supported = features;
1042 phydev->advertising = features;
1043
1044 return 0;
1045}
0f0ca340
GC
1046int genphy_suspend(struct phy_device *phydev)
1047{
1048 int value;
1049
1050 mutex_lock(&phydev->lock);
1051
1052 value = phy_read(phydev, MII_BMCR);
1053 phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
1054
1055 mutex_unlock(&phydev->lock);
1056
1057 return 0;
1058}
1059EXPORT_SYMBOL(genphy_suspend);
00db8189 1060
0f0ca340
GC
1061int genphy_resume(struct phy_device *phydev)
1062{
1063 int value;
1064
1065 mutex_lock(&phydev->lock);
1066
1067 value = phy_read(phydev, MII_BMCR);
1068 phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
1069
1070 mutex_unlock(&phydev->lock);
1071
1072 return 0;
1073}
1074EXPORT_SYMBOL(genphy_resume);
00db8189 1075
b3df0da8
RD
1076/**
1077 * phy_probe - probe and init a PHY device
1078 * @dev: device to probe and init
00db8189 1079 *
b3df0da8 1080 * Description: Take care of setting up the phy_device structure,
00db8189
AF
1081 * set the state to READY (the driver's init function should
1082 * set it to STARTING if needed).
1083 */
1084static int phy_probe(struct device *dev)
1085{
1086 struct phy_device *phydev;
1087 struct phy_driver *phydrv;
1088 struct device_driver *drv;
1089 int err = 0;
1090
1091 phydev = to_phy_device(dev);
1092
f3ff9247 1093 drv = phydev->dev.driver;
00db8189
AF
1094 phydrv = to_phy_driver(drv);
1095 phydev->drv = phydrv;
1096
2c7b4921
FF
1097 /* Disable the interrupt if the PHY doesn't support it
1098 * but the interrupt is still a valid one
1099 */
1100 if (!(phydrv->flags & PHY_HAS_INTERRUPT) &&
1101 phy_interrupt_is_valid(phydev))
00db8189
AF
1102 phydev->irq = PHY_POLL;
1103
4284b6a5
FF
1104 if (phydrv->flags & PHY_IS_INTERNAL)
1105 phydev->is_internal = true;
1106
35b5f6b1 1107 mutex_lock(&phydev->lock);
00db8189
AF
1108
1109 /* Start out supporting everything. Eventually,
1110 * a controller will attach, and may modify one
1111 * or both of these values */
1112 phydev->supported = phydrv->features;
1113 phydev->advertising = phydrv->features;
1114
1115 /* Set the state to READY by default */
1116 phydev->state = PHY_READY;
1117
1118 if (phydev->drv->probe)
1119 err = phydev->drv->probe(phydev);
1120
35b5f6b1 1121 mutex_unlock(&phydev->lock);
00db8189 1122
00db8189 1123 return err;
e8a2b6a4 1124
00db8189
AF
1125}
1126
1127static int phy_remove(struct device *dev)
1128{
1129 struct phy_device *phydev;
1130
1131 phydev = to_phy_device(dev);
1132
35b5f6b1 1133 mutex_lock(&phydev->lock);
00db8189 1134 phydev->state = PHY_DOWN;
35b5f6b1 1135 mutex_unlock(&phydev->lock);
00db8189
AF
1136
1137 if (phydev->drv->remove)
1138 phydev->drv->remove(phydev);
00db8189
AF
1139 phydev->drv = NULL;
1140
1141 return 0;
1142}
1143
b3df0da8
RD
1144/**
1145 * phy_driver_register - register a phy_driver with the PHY layer
1146 * @new_driver: new phy_driver to register
1147 */
00db8189
AF
1148int phy_driver_register(struct phy_driver *new_driver)
1149{
1150 int retval;
1151
00db8189
AF
1152 new_driver->driver.name = new_driver->name;
1153 new_driver->driver.bus = &mdio_bus_type;
1154 new_driver->driver.probe = phy_probe;
1155 new_driver->driver.remove = phy_remove;
1156
1157 retval = driver_register(&new_driver->driver);
1158
1159 if (retval) {
8d242488
JP
1160 pr_err("%s: Error %d in registering driver\n",
1161 new_driver->name, retval);
00db8189
AF
1162
1163 return retval;
1164 }
1165
f2511f13 1166 pr_debug("%s: Registered new driver\n", new_driver->name);
00db8189
AF
1167
1168 return 0;
1169}
1170EXPORT_SYMBOL(phy_driver_register);
1171
d5bf9071
CH
1172int phy_drivers_register(struct phy_driver *new_driver, int n)
1173{
1174 int i, ret = 0;
1175
1176 for (i = 0; i < n; i++) {
1177 ret = phy_driver_register(new_driver + i);
1178 if (ret) {
1179 while (i-- > 0)
1180 phy_driver_unregister(new_driver + i);
1181 break;
1182 }
1183 }
1184 return ret;
1185}
1186EXPORT_SYMBOL(phy_drivers_register);
1187
00db8189
AF
1188void phy_driver_unregister(struct phy_driver *drv)
1189{
1190 driver_unregister(&drv->driver);
1191}
1192EXPORT_SYMBOL(phy_driver_unregister);
1193
d5bf9071
CH
1194void phy_drivers_unregister(struct phy_driver *drv, int n)
1195{
1196 int i;
1197 for (i = 0; i < n; i++) {
1198 phy_driver_unregister(drv + i);
1199 }
1200}
1201EXPORT_SYMBOL(phy_drivers_unregister);
1202
e1393456
AF
1203static struct phy_driver genphy_driver = {
1204 .phy_id = 0xffffffff,
1205 .phy_id_mask = 0xffffffff,
1206 .name = "Generic PHY",
1207 .config_init = genphy_config_init,
1208 .features = 0,
1209 .config_aneg = genphy_config_aneg,
1210 .read_status = genphy_read_status,
0f0ca340
GC
1211 .suspend = genphy_suspend,
1212 .resume = genphy_resume,
e1393456
AF
1213 .driver = {.owner= THIS_MODULE, },
1214};
00db8189 1215
67c4f3fa 1216static int __init phy_init(void)
00db8189 1217{
67c4f3fa 1218 int rc;
67c4f3fa
JG
1219
1220 rc = mdio_bus_init();
1221 if (rc)
e1393456 1222 return rc;
00db8189 1223
e1393456
AF
1224 rc = phy_driver_register(&genphy_driver);
1225 if (rc)
1226 mdio_bus_exit();
67c4f3fa 1227
67c4f3fa 1228 return rc;
00db8189
AF
1229}
1230
67c4f3fa 1231static void __exit phy_exit(void)
00db8189
AF
1232{
1233 phy_driver_unregister(&genphy_driver);
e1393456 1234 mdio_bus_exit();
00db8189
AF
1235}
1236
e1393456 1237subsys_initcall(phy_init);
67c4f3fa 1238module_exit(phy_exit);
This page took 0.979313 seconds and 5 git commands to generate.