net: phy: micrel: fix checkpath errors
[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
1211ce53
SH
627 phy_resume(phydev);
628
d005a09e 629 return err;
fa94f6d9 630}
fa94f6d9
GL
631
632/**
633 * phy_attach - attach a network device to a particular PHY device
634 * @dev: network device to attach
635 * @bus_id: Bus ID of PHY device to attach
fa94f6d9
GL
636 * @interface: PHY device's interface
637 *
638 * Description: Same as phy_attach_direct() except that a PHY bus_id
639 * string is passed instead of a pointer to a struct phy_device.
640 */
641struct phy_device *phy_attach(struct net_device *dev,
f9a8f83b 642 const char *bus_id, phy_interface_t interface)
fa94f6d9
GL
643{
644 struct bus_type *bus = &mdio_bus_type;
645 struct phy_device *phydev;
646 struct device *d;
647 int rc;
648
649 /* Search the list of PHY devices on the mdio bus for the
650 * PHY with the requested name */
651 d = bus_find_device_by_name(bus, NULL, bus_id);
652 if (!d) {
653 pr_err("PHY %s not found\n", bus_id);
654 return ERR_PTR(-ENODEV);
e8a2b6a4 655 }
fa94f6d9
GL
656 phydev = to_phy_device(d);
657
f9a8f83b 658 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
fa94f6d9
GL
659 if (rc)
660 return ERR_PTR(rc);
e8a2b6a4 661
e1393456
AF
662 return phydev;
663}
664EXPORT_SYMBOL(phy_attach);
665
b3df0da8
RD
666/**
667 * phy_detach - detach a PHY device from its network device
668 * @phydev: target phy_device struct
669 */
e1393456
AF
670void phy_detach(struct phy_device *phydev)
671{
c1f19b51 672 phydev->attached_dev->phydev = NULL;
e1393456 673 phydev->attached_dev = NULL;
1211ce53 674 phy_suspend(phydev);
e1393456
AF
675
676 /* If the device had no specific driver before (i.e. - it
677 * was using the generic driver), we unbind the device
678 * from the generic driver so that there's a chance a
679 * real driver could be loaded */
87aebe07 680 if (phydev->dev.driver == &genphy_driver.driver)
e1393456 681 device_release_driver(&phydev->dev);
e1393456
AF
682}
683EXPORT_SYMBOL(phy_detach);
684
481b5d93
SH
685int phy_suspend(struct phy_device *phydev)
686{
687 struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
688 struct ethtool_wolinfo wol;
689
690 /* If the device has WOL enabled, we cannot suspend the PHY */
691 wol.cmd = ETHTOOL_GWOL;
692 phy_ethtool_get_wol(phydev, &wol);
693 if (wol.wolopts)
694 return -EBUSY;
695
696 if (phydrv->suspend)
697 return phydrv->suspend(phydev);
698 return 0;
699}
700
701int phy_resume(struct phy_device *phydev)
702{
703 struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
704
705 if (phydrv->resume)
706 return phydrv->resume(phydev);
707 return 0;
708}
e1393456 709
00db8189
AF
710/* Generic PHY support and helper functions */
711
b3df0da8 712/**
25985edc 713 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
b3df0da8 714 * @phydev: target phy_device struct
00db8189 715 *
b3df0da8 716 * Description: Writes MII_ADVERTISE with the appropriate values,
00db8189 717 * after sanitizing the values to make sure we only advertise
51e2a384
TP
718 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement
719 * hasn't changed, and > 0 if it has changed.
00db8189 720 */
89ff05ec 721static int genphy_config_advert(struct phy_device *phydev)
00db8189
AF
722{
723 u32 advertise;
51e2a384
TP
724 int oldadv, adv;
725 int err, changed = 0;
00db8189
AF
726
727 /* Only allow advertising what
728 * this PHY supports */
729 phydev->advertising &= phydev->supported;
730 advertise = phydev->advertising;
731
732 /* Setup standard advertisement */
51e2a384 733 oldadv = adv = phy_read(phydev, MII_ADVERTISE);
00db8189
AF
734
735 if (adv < 0)
736 return adv;
737
28011cf1 738 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
00db8189 739 ADVERTISE_PAUSE_ASYM);
37f07023 740 adv |= ethtool_adv_to_mii_adv_t(advertise);
00db8189 741
51e2a384
TP
742 if (adv != oldadv) {
743 err = phy_write(phydev, MII_ADVERTISE, adv);
00db8189 744
51e2a384
TP
745 if (err < 0)
746 return err;
747 changed = 1;
748 }
00db8189
AF
749
750 /* Configure gigabit if it's supported */
751 if (phydev->supported & (SUPPORTED_1000baseT_Half |
752 SUPPORTED_1000baseT_Full)) {
51e2a384 753 oldadv = adv = phy_read(phydev, MII_CTRL1000);
00db8189
AF
754
755 if (adv < 0)
756 return adv;
757
758 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
37f07023 759 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
00db8189 760
51e2a384
TP
761 if (adv != oldadv) {
762 err = phy_write(phydev, MII_CTRL1000, adv);
763
764 if (err < 0)
765 return err;
766 changed = 1;
767 }
00db8189
AF
768 }
769
51e2a384 770 return changed;
00db8189 771}
00db8189 772
b3df0da8
RD
773/**
774 * genphy_setup_forced - configures/forces speed/duplex from @phydev
775 * @phydev: target phy_device struct
00db8189 776 *
b3df0da8 777 * Description: Configures MII_BMCR to force speed/duplex
00db8189 778 * to the values in phydev. Assumes that the values are valid.
b3df0da8
RD
779 * Please see phy_sanitize_settings().
780 */
3fb69bca 781int genphy_setup_forced(struct phy_device *phydev)
00db8189 782{
f62220d3 783 int err;
bc1e0a09 784 int ctl = 0;
00db8189
AF
785
786 phydev->pause = phydev->asym_pause = 0;
787
788 if (SPEED_1000 == phydev->speed)
789 ctl |= BMCR_SPEED1000;
790 else if (SPEED_100 == phydev->speed)
791 ctl |= BMCR_SPEED100;
792
793 if (DUPLEX_FULL == phydev->duplex)
794 ctl |= BMCR_FULLDPLX;
795
f62220d3 796 err = phy_write(phydev, MII_BMCR, ctl);
00db8189 797
f62220d3 798 return err;
00db8189 799}
3fb69bca 800EXPORT_SYMBOL(genphy_setup_forced);
00db8189 801
b3df0da8
RD
802/**
803 * genphy_restart_aneg - Enable and Restart Autonegotiation
804 * @phydev: target phy_device struct
805 */
00db8189
AF
806int genphy_restart_aneg(struct phy_device *phydev)
807{
808 int ctl;
809
810 ctl = phy_read(phydev, MII_BMCR);
811
812 if (ctl < 0)
813 return ctl;
814
815 ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
816
817 /* Don't isolate the PHY if we're negotiating */
818 ctl &= ~(BMCR_ISOLATE);
819
820 ctl = phy_write(phydev, MII_BMCR, ctl);
821
822 return ctl;
823}
892871dc 824EXPORT_SYMBOL(genphy_restart_aneg);
00db8189
AF
825
826
b3df0da8
RD
827/**
828 * genphy_config_aneg - restart auto-negotiation or write BMCR
829 * @phydev: target phy_device struct
00db8189 830 *
b3df0da8 831 * Description: If auto-negotiation is enabled, we configure the
00db8189 832 * advertising, and then restart auto-negotiation. If it is not
b3df0da8 833 * enabled, then we write the BMCR.
00db8189
AF
834 */
835int genphy_config_aneg(struct phy_device *phydev)
836{
de339c2a 837 int result;
00db8189 838
de339c2a
TP
839 if (AUTONEG_ENABLE != phydev->autoneg)
840 return genphy_setup_forced(phydev);
00db8189 841
de339c2a 842 result = genphy_config_advert(phydev);
00db8189 843
de339c2a
TP
844 if (result < 0) /* error */
845 return result;
846
847 if (result == 0) {
25985edc 848 /* Advertisement hasn't changed, but maybe aneg was never on to
de339c2a
TP
849 * begin with? Or maybe phy was isolated? */
850 int ctl = phy_read(phydev, MII_BMCR);
851
852 if (ctl < 0)
853 return ctl;
854
855 if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
856 result = 1; /* do restart aneg */
857 }
858
859 /* Only restart aneg if we are advertising something different
860 * than we were before. */
861 if (result > 0)
862 result = genphy_restart_aneg(phydev);
00db8189 863
51e2a384 864 return result;
00db8189
AF
865}
866EXPORT_SYMBOL(genphy_config_aneg);
867
b3df0da8
RD
868/**
869 * genphy_update_link - update link status in @phydev
870 * @phydev: target phy_device struct
00db8189 871 *
b3df0da8 872 * Description: Update the value in phydev->link to reflect the
00db8189 873 * current link value. In order to do this, we need to read
b3df0da8 874 * the status register twice, keeping the second value.
00db8189
AF
875 */
876int genphy_update_link(struct phy_device *phydev)
877{
878 int status;
879
880 /* Do a fake read */
881 status = phy_read(phydev, MII_BMSR);
882
883 if (status < 0)
884 return status;
885
886 /* Read link and autonegotiation status */
887 status = phy_read(phydev, MII_BMSR);
888
889 if (status < 0)
890 return status;
891
892 if ((status & BMSR_LSTATUS) == 0)
893 phydev->link = 0;
894 else
895 phydev->link = 1;
896
897 return 0;
898}
6b655529 899EXPORT_SYMBOL(genphy_update_link);
00db8189 900
b3df0da8
RD
901/**
902 * genphy_read_status - check the link status and update current link state
903 * @phydev: target phy_device struct
00db8189 904 *
b3df0da8 905 * Description: Check the link, then figure out the current state
00db8189
AF
906 * by comparing what we advertise with what the link partner
907 * advertises. Start by checking the gigabit possibilities,
908 * then move on to 10/100.
909 */
910int genphy_read_status(struct phy_device *phydev)
911{
912 int adv;
913 int err;
914 int lpa;
915 int lpagb = 0;
916
917 /* Update the link, but return if there
918 * was an error */
919 err = genphy_update_link(phydev);
920 if (err)
921 return err;
922
114002bc
FF
923 phydev->lp_advertising = 0;
924
00db8189
AF
925 if (AUTONEG_ENABLE == phydev->autoneg) {
926 if (phydev->supported & (SUPPORTED_1000baseT_Half
927 | SUPPORTED_1000baseT_Full)) {
928 lpagb = phy_read(phydev, MII_STAT1000);
929
930 if (lpagb < 0)
931 return lpagb;
932
933 adv = phy_read(phydev, MII_CTRL1000);
934
935 if (adv < 0)
936 return adv;
937
114002bc
FF
938 phydev->lp_advertising =
939 mii_stat1000_to_ethtool_lpa_t(lpagb);
00db8189
AF
940 lpagb &= adv << 2;
941 }
942
943 lpa = phy_read(phydev, MII_LPA);
944
945 if (lpa < 0)
946 return lpa;
947
114002bc
FF
948 phydev->lp_advertising |= mii_lpa_to_ethtool_lpa_t(lpa);
949
00db8189
AF
950 adv = phy_read(phydev, MII_ADVERTISE);
951
952 if (adv < 0)
953 return adv;
954
955 lpa &= adv;
956
957 phydev->speed = SPEED_10;
958 phydev->duplex = DUPLEX_HALF;
959 phydev->pause = phydev->asym_pause = 0;
960
961 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
962 phydev->speed = SPEED_1000;
963
964 if (lpagb & LPA_1000FULL)
965 phydev->duplex = DUPLEX_FULL;
966 } else if (lpa & (LPA_100FULL | LPA_100HALF)) {
967 phydev->speed = SPEED_100;
968
969 if (lpa & LPA_100FULL)
970 phydev->duplex = DUPLEX_FULL;
971 } else
972 if (lpa & LPA_10FULL)
973 phydev->duplex = DUPLEX_FULL;
974
975 if (phydev->duplex == DUPLEX_FULL){
976 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
977 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
978 }
979 } else {
980 int bmcr = phy_read(phydev, MII_BMCR);
981 if (bmcr < 0)
982 return bmcr;
983
984 if (bmcr & BMCR_FULLDPLX)
985 phydev->duplex = DUPLEX_FULL;
986 else
987 phydev->duplex = DUPLEX_HALF;
988
989 if (bmcr & BMCR_SPEED1000)
990 phydev->speed = SPEED_1000;
991 else if (bmcr & BMCR_SPEED100)
992 phydev->speed = SPEED_100;
993 else
994 phydev->speed = SPEED_10;
995
996 phydev->pause = phydev->asym_pause = 0;
997 }
998
999 return 0;
1000}
1001EXPORT_SYMBOL(genphy_read_status);
1002
1003static int genphy_config_init(struct phy_device *phydev)
1004{
84c22d79 1005 int val;
00db8189
AF
1006 u32 features;
1007
1008 /* For now, I'll claim that the generic driver supports
1009 * all possible port types */
1010 features = (SUPPORTED_TP | SUPPORTED_MII
1011 | SUPPORTED_AUI | SUPPORTED_FIBRE |
1012 SUPPORTED_BNC);
1013
1014 /* Do we support autonegotiation? */
1015 val = phy_read(phydev, MII_BMSR);
1016
1017 if (val < 0)
1018 return val;
1019
1020 if (val & BMSR_ANEGCAPABLE)
1021 features |= SUPPORTED_Autoneg;
1022
1023 if (val & BMSR_100FULL)
1024 features |= SUPPORTED_100baseT_Full;
1025 if (val & BMSR_100HALF)
1026 features |= SUPPORTED_100baseT_Half;
1027 if (val & BMSR_10FULL)
1028 features |= SUPPORTED_10baseT_Full;
1029 if (val & BMSR_10HALF)
1030 features |= SUPPORTED_10baseT_Half;
1031
1032 if (val & BMSR_ESTATEN) {
1033 val = phy_read(phydev, MII_ESTATUS);
1034
1035 if (val < 0)
1036 return val;
1037
1038 if (val & ESTATUS_1000_TFULL)
1039 features |= SUPPORTED_1000baseT_Full;
1040 if (val & ESTATUS_1000_THALF)
1041 features |= SUPPORTED_1000baseT_Half;
1042 }
1043
1044 phydev->supported = features;
1045 phydev->advertising = features;
1046
1047 return 0;
1048}
0f0ca340
GC
1049int genphy_suspend(struct phy_device *phydev)
1050{
1051 int value;
1052
1053 mutex_lock(&phydev->lock);
1054
1055 value = phy_read(phydev, MII_BMCR);
1056 phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
1057
1058 mutex_unlock(&phydev->lock);
1059
1060 return 0;
1061}
1062EXPORT_SYMBOL(genphy_suspend);
00db8189 1063
0f0ca340
GC
1064int genphy_resume(struct phy_device *phydev)
1065{
1066 int value;
1067
1068 mutex_lock(&phydev->lock);
1069
1070 value = phy_read(phydev, MII_BMCR);
1071 phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
1072
1073 mutex_unlock(&phydev->lock);
1074
1075 return 0;
1076}
1077EXPORT_SYMBOL(genphy_resume);
00db8189 1078
b3df0da8
RD
1079/**
1080 * phy_probe - probe and init a PHY device
1081 * @dev: device to probe and init
00db8189 1082 *
b3df0da8 1083 * Description: Take care of setting up the phy_device structure,
00db8189
AF
1084 * set the state to READY (the driver's init function should
1085 * set it to STARTING if needed).
1086 */
1087static int phy_probe(struct device *dev)
1088{
1089 struct phy_device *phydev;
1090 struct phy_driver *phydrv;
1091 struct device_driver *drv;
1092 int err = 0;
1093
1094 phydev = to_phy_device(dev);
1095
f3ff9247 1096 drv = phydev->dev.driver;
00db8189
AF
1097 phydrv = to_phy_driver(drv);
1098 phydev->drv = phydrv;
1099
2c7b4921
FF
1100 /* Disable the interrupt if the PHY doesn't support it
1101 * but the interrupt is still a valid one
1102 */
1103 if (!(phydrv->flags & PHY_HAS_INTERRUPT) &&
1104 phy_interrupt_is_valid(phydev))
00db8189
AF
1105 phydev->irq = PHY_POLL;
1106
4284b6a5
FF
1107 if (phydrv->flags & PHY_IS_INTERNAL)
1108 phydev->is_internal = true;
1109
35b5f6b1 1110 mutex_lock(&phydev->lock);
00db8189
AF
1111
1112 /* Start out supporting everything. Eventually,
1113 * a controller will attach, and may modify one
1114 * or both of these values */
1115 phydev->supported = phydrv->features;
1116 phydev->advertising = phydrv->features;
1117
1118 /* Set the state to READY by default */
1119 phydev->state = PHY_READY;
1120
1121 if (phydev->drv->probe)
1122 err = phydev->drv->probe(phydev);
1123
35b5f6b1 1124 mutex_unlock(&phydev->lock);
00db8189 1125
00db8189 1126 return err;
e8a2b6a4 1127
00db8189
AF
1128}
1129
1130static int phy_remove(struct device *dev)
1131{
1132 struct phy_device *phydev;
1133
1134 phydev = to_phy_device(dev);
1135
35b5f6b1 1136 mutex_lock(&phydev->lock);
00db8189 1137 phydev->state = PHY_DOWN;
35b5f6b1 1138 mutex_unlock(&phydev->lock);
00db8189
AF
1139
1140 if (phydev->drv->remove)
1141 phydev->drv->remove(phydev);
00db8189
AF
1142 phydev->drv = NULL;
1143
1144 return 0;
1145}
1146
b3df0da8
RD
1147/**
1148 * phy_driver_register - register a phy_driver with the PHY layer
1149 * @new_driver: new phy_driver to register
1150 */
00db8189
AF
1151int phy_driver_register(struct phy_driver *new_driver)
1152{
1153 int retval;
1154
00db8189
AF
1155 new_driver->driver.name = new_driver->name;
1156 new_driver->driver.bus = &mdio_bus_type;
1157 new_driver->driver.probe = phy_probe;
1158 new_driver->driver.remove = phy_remove;
1159
1160 retval = driver_register(&new_driver->driver);
1161
1162 if (retval) {
8d242488
JP
1163 pr_err("%s: Error %d in registering driver\n",
1164 new_driver->name, retval);
00db8189
AF
1165
1166 return retval;
1167 }
1168
f2511f13 1169 pr_debug("%s: Registered new driver\n", new_driver->name);
00db8189
AF
1170
1171 return 0;
1172}
1173EXPORT_SYMBOL(phy_driver_register);
1174
d5bf9071
CH
1175int phy_drivers_register(struct phy_driver *new_driver, int n)
1176{
1177 int i, ret = 0;
1178
1179 for (i = 0; i < n; i++) {
1180 ret = phy_driver_register(new_driver + i);
1181 if (ret) {
1182 while (i-- > 0)
1183 phy_driver_unregister(new_driver + i);
1184 break;
1185 }
1186 }
1187 return ret;
1188}
1189EXPORT_SYMBOL(phy_drivers_register);
1190
00db8189
AF
1191void phy_driver_unregister(struct phy_driver *drv)
1192{
1193 driver_unregister(&drv->driver);
1194}
1195EXPORT_SYMBOL(phy_driver_unregister);
1196
d5bf9071
CH
1197void phy_drivers_unregister(struct phy_driver *drv, int n)
1198{
1199 int i;
1200 for (i = 0; i < n; i++) {
1201 phy_driver_unregister(drv + i);
1202 }
1203}
1204EXPORT_SYMBOL(phy_drivers_unregister);
1205
e1393456
AF
1206static struct phy_driver genphy_driver = {
1207 .phy_id = 0xffffffff,
1208 .phy_id_mask = 0xffffffff,
1209 .name = "Generic PHY",
1210 .config_init = genphy_config_init,
1211 .features = 0,
1212 .config_aneg = genphy_config_aneg,
1213 .read_status = genphy_read_status,
0f0ca340
GC
1214 .suspend = genphy_suspend,
1215 .resume = genphy_resume,
e1393456
AF
1216 .driver = {.owner= THIS_MODULE, },
1217};
00db8189 1218
67c4f3fa 1219static int __init phy_init(void)
00db8189 1220{
67c4f3fa 1221 int rc;
67c4f3fa
JG
1222
1223 rc = mdio_bus_init();
1224 if (rc)
e1393456 1225 return rc;
00db8189 1226
e1393456
AF
1227 rc = phy_driver_register(&genphy_driver);
1228 if (rc)
1229 mdio_bus_exit();
67c4f3fa 1230
67c4f3fa 1231 return rc;
00db8189
AF
1232}
1233
67c4f3fa 1234static void __exit phy_exit(void)
00db8189
AF
1235{
1236 phy_driver_unregister(&genphy_driver);
e1393456 1237 mdio_bus_exit();
00db8189
AF
1238}
1239
e1393456 1240subsys_initcall(phy_init);
67c4f3fa 1241module_exit(phy_exit);
This page took 1.984386 seconds and 5 git commands to generate.