net/phy: Add VSC8662 support
[linux-2.6-block.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 */
367 phy_scan_fixups(phydev);
368
b2a43191 369 err = device_add(&phydev->dev);
4dea547f 370 if (err) {
b2a43191 371 pr_err("PHY %d failed to add\n", phydev->addr);
4dea547f
GL
372 goto out;
373 }
374
375 return 0;
376
377 out:
378 phydev->bus->phy_map[phydev->addr] = NULL;
379 return err;
380}
381EXPORT_SYMBOL(phy_device_register);
00db8189 382
f8f76db1
JP
383/**
384 * phy_find_first - finds the first PHY device on the bus
385 * @bus: the target MII bus
386 */
387struct 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}
397EXPORT_SYMBOL(phy_find_first);
398
b3df0da8
RD
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
00db8189 403 *
b3df0da8 404 * Description: Tells the PHY infrastructure to handle the
00db8189
AF
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
b3df0da8
RD
409 * this function.
410 */
89ff05ec 411static void phy_prepare_link(struct phy_device *phydev,
00db8189
AF
412 void (*handler)(struct net_device *))
413{
414 phydev->adjust_link = handler;
415}
416
fa94f6d9
GL
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
fa94f6d9
GL
422 * @interface: PHY device's interface
423 */
424int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
f9a8f83b 425 void (*handler)(struct net_device *),
fa94f6d9
GL
426 phy_interface_t interface)
427{
428 int rc;
429
f9a8f83b 430 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
fa94f6d9
GL
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}
441EXPORT_SYMBOL(phy_connect_direct);
442
b3df0da8
RD
443/**
444 * phy_connect - connect an ethernet device to a PHY device
445 * @dev: the network device to connect
5d12b132 446 * @bus_id: the id string of the PHY device to connect
b3df0da8 447 * @handler: callback function for state change notifications
b3df0da8 448 * @interface: PHY device's interface
e1393456 449 *
b3df0da8 450 * Description: Convenience function for connecting ethernet
e1393456
AF
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 */
f62220d3 458struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
f9a8f83b 459 void (*handler)(struct net_device *),
1a168934 460 phy_interface_t interface)
e1393456
AF
461{
462 struct phy_device *phydev;
fa94f6d9
GL
463 struct device *d;
464 int rc;
e1393456 465
fa94f6d9
GL
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);
e1393456 474
f9a8f83b 475 rc = phy_connect_direct(dev, phydev, handler, interface);
fa94f6d9
GL
476 if (rc)
477 return ERR_PTR(rc);
e1393456
AF
478
479 return phydev;
480}
481EXPORT_SYMBOL(phy_connect);
482
b3df0da8
RD
483/**
484 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
485 * @phydev: target phy_device struct
486 */
e1393456
AF
487void 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}
498EXPORT_SYMBOL(phy_disconnect);
499
2f5cb434
AV
500int 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
b3df0da8 514/**
fa94f6d9 515 * phy_attach_direct - attach a network device to a given PHY device pointer
b3df0da8 516 * @dev: network device to attach
fa94f6d9 517 * @phydev: Pointer to phy_device to attach
b3df0da8
RD
518 * @flags: PHY device's dev_flags
519 * @interface: PHY device's interface
e1393456 520 *
b3df0da8 521 * Description: Called by drivers to attach to a particular PHY
e1393456
AF
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
b3df0da8 526 * change. The phy_device is returned to the attaching driver.
e1393456 527 */
89ff05ec 528static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
529 u32 flags, phy_interface_t interface)
e1393456 530{
fa94f6d9 531 struct device *d = &phydev->dev;
d005a09e 532 int err;
e1393456
AF
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) {
ac28b9f8
DD
537 if (phydev->is_c45) {
538 pr_err("No driver for phy %x\n", phydev->phy_id);
539 return -ENODEV;
540 }
541
e1393456
AF
542 d->driver = &genphy_driver.driver;
543
544 err = d->driver->probe(d);
b7a00ecd
JG
545 if (err >= 0)
546 err = device_bind_driver(d);
e1393456 547
b7a00ecd 548 if (err)
fa94f6d9 549 return err;
e1393456
AF
550 }
551
552 if (phydev->attached_dev) {
fa94f6d9
GL
553 dev_err(&dev->dev, "PHY already attached\n");
554 return -EBUSY;
e1393456
AF
555 }
556
557 phydev->attached_dev = dev;
c1f19b51 558 dev->phydev = phydev;
e1393456
AF
559
560 phydev->dev_flags = flags;
561
e8a2b6a4
AF
562 phydev->interface = interface;
563
ef24b16b
AV
564 phydev->state = PHY_READY;
565
e8a2b6a4
AF
566 /* Do initial configuration here, now that
567 * we have certain key parameters
568 * (dev_flags and interface) */
d005a09e
MKB
569 err = phy_init_hw(phydev);
570 if (err)
571 phy_detach(phydev);
572
573 return err;
fa94f6d9 574}
fa94f6d9
GL
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
fa94f6d9
GL
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 */
585struct phy_device *phy_attach(struct net_device *dev,
f9a8f83b 586 const char *bus_id, phy_interface_t interface)
fa94f6d9
GL
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);
e8a2b6a4 599 }
fa94f6d9
GL
600 phydev = to_phy_device(d);
601
f9a8f83b 602 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
fa94f6d9
GL
603 if (rc)
604 return ERR_PTR(rc);
e8a2b6a4 605
e1393456
AF
606 return phydev;
607}
608EXPORT_SYMBOL(phy_attach);
609
b3df0da8
RD
610/**
611 * phy_detach - detach a PHY device from its network device
612 * @phydev: target phy_device struct
613 */
e1393456
AF
614void phy_detach(struct phy_device *phydev)
615{
c1f19b51 616 phydev->attached_dev->phydev = NULL;
e1393456
AF
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 */
87aebe07 623 if (phydev->dev.driver == &genphy_driver.driver)
e1393456 624 device_release_driver(&phydev->dev);
e1393456
AF
625}
626EXPORT_SYMBOL(phy_detach);
627
628
00db8189
AF
629/* Generic PHY support and helper functions */
630
b3df0da8 631/**
25985edc 632 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
b3df0da8 633 * @phydev: target phy_device struct
00db8189 634 *
b3df0da8 635 * Description: Writes MII_ADVERTISE with the appropriate values,
00db8189 636 * after sanitizing the values to make sure we only advertise
51e2a384
TP
637 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement
638 * hasn't changed, and > 0 if it has changed.
00db8189 639 */
89ff05ec 640static int genphy_config_advert(struct phy_device *phydev)
00db8189
AF
641{
642 u32 advertise;
51e2a384
TP
643 int oldadv, adv;
644 int err, changed = 0;
00db8189
AF
645
646 /* Only allow advertising what
647 * this PHY supports */
648 phydev->advertising &= phydev->supported;
649 advertise = phydev->advertising;
650
651 /* Setup standard advertisement */
51e2a384 652 oldadv = adv = phy_read(phydev, MII_ADVERTISE);
00db8189
AF
653
654 if (adv < 0)
655 return adv;
656
28011cf1 657 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
00db8189 658 ADVERTISE_PAUSE_ASYM);
37f07023 659 adv |= ethtool_adv_to_mii_adv_t(advertise);
00db8189 660
51e2a384
TP
661 if (adv != oldadv) {
662 err = phy_write(phydev, MII_ADVERTISE, adv);
00db8189 663
51e2a384
TP
664 if (err < 0)
665 return err;
666 changed = 1;
667 }
00db8189
AF
668
669 /* Configure gigabit if it's supported */
670 if (phydev->supported & (SUPPORTED_1000baseT_Half |
671 SUPPORTED_1000baseT_Full)) {
51e2a384 672 oldadv = adv = phy_read(phydev, MII_CTRL1000);
00db8189
AF
673
674 if (adv < 0)
675 return adv;
676
677 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
37f07023 678 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
00db8189 679
51e2a384
TP
680 if (adv != oldadv) {
681 err = phy_write(phydev, MII_CTRL1000, adv);
682
683 if (err < 0)
684 return err;
685 changed = 1;
686 }
00db8189
AF
687 }
688
51e2a384 689 return changed;
00db8189 690}
00db8189 691
b3df0da8
RD
692/**
693 * genphy_setup_forced - configures/forces speed/duplex from @phydev
694 * @phydev: target phy_device struct
00db8189 695 *
b3df0da8 696 * Description: Configures MII_BMCR to force speed/duplex
00db8189 697 * to the values in phydev. Assumes that the values are valid.
b3df0da8
RD
698 * Please see phy_sanitize_settings().
699 */
89ff05ec 700static int genphy_setup_forced(struct phy_device *phydev)
00db8189 701{
f62220d3 702 int err;
bc1e0a09 703 int ctl = 0;
00db8189
AF
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
f62220d3 715 err = phy_write(phydev, MII_BMCR, ctl);
00db8189 716
f62220d3 717 return err;
00db8189
AF
718}
719
720
b3df0da8
RD
721/**
722 * genphy_restart_aneg - Enable and Restart Autonegotiation
723 * @phydev: target phy_device struct
724 */
00db8189
AF
725int 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}
892871dc 743EXPORT_SYMBOL(genphy_restart_aneg);
00db8189
AF
744
745
b3df0da8
RD
746/**
747 * genphy_config_aneg - restart auto-negotiation or write BMCR
748 * @phydev: target phy_device struct
00db8189 749 *
b3df0da8 750 * Description: If auto-negotiation is enabled, we configure the
00db8189 751 * advertising, and then restart auto-negotiation. If it is not
b3df0da8 752 * enabled, then we write the BMCR.
00db8189
AF
753 */
754int genphy_config_aneg(struct phy_device *phydev)
755{
de339c2a 756 int result;
00db8189 757
de339c2a
TP
758 if (AUTONEG_ENABLE != phydev->autoneg)
759 return genphy_setup_forced(phydev);
00db8189 760
de339c2a 761 result = genphy_config_advert(phydev);
00db8189 762
de339c2a
TP
763 if (result < 0) /* error */
764 return result;
765
766 if (result == 0) {
25985edc 767 /* Advertisement hasn't changed, but maybe aneg was never on to
de339c2a
TP
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);
00db8189 782
51e2a384 783 return result;
00db8189
AF
784}
785EXPORT_SYMBOL(genphy_config_aneg);
786
b3df0da8
RD
787/**
788 * genphy_update_link - update link status in @phydev
789 * @phydev: target phy_device struct
00db8189 790 *
b3df0da8 791 * Description: Update the value in phydev->link to reflect the
00db8189 792 * current link value. In order to do this, we need to read
b3df0da8 793 * the status register twice, keeping the second value.
00db8189
AF
794 */
795int 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}
6b655529 818EXPORT_SYMBOL(genphy_update_link);
00db8189 819
b3df0da8
RD
820/**
821 * genphy_read_status - check the link status and update current link state
822 * @phydev: target phy_device struct
00db8189 823 *
b3df0da8 824 * Description: Check the link, then figure out the current state
00db8189
AF
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 */
829int 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}
914EXPORT_SYMBOL(genphy_read_status);
915
916static int genphy_config_init(struct phy_device *phydev)
917{
84c22d79 918 int val;
00db8189
AF
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}
0f0ca340
GC
962int 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}
975EXPORT_SYMBOL(genphy_suspend);
00db8189 976
0f0ca340
GC
977int 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}
990EXPORT_SYMBOL(genphy_resume);
00db8189 991
b3df0da8
RD
992/**
993 * phy_probe - probe and init a PHY device
994 * @dev: device to probe and init
00db8189 995 *
b3df0da8 996 * Description: Take care of setting up the phy_device structure,
00db8189
AF
997 * set the state to READY (the driver's init function should
998 * set it to STARTING if needed).
999 */
1000static 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
f3ff9247 1009 drv = phydev->dev.driver;
00db8189
AF
1010 phydrv = to_phy_driver(drv);
1011 phydev->drv = phydrv;
1012
2c7b4921
FF
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))
00db8189
AF
1018 phydev->irq = PHY_POLL;
1019
4284b6a5
FF
1020 if (phydrv->flags & PHY_IS_INTERNAL)
1021 phydev->is_internal = true;
1022
35b5f6b1 1023 mutex_lock(&phydev->lock);
00db8189
AF
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
35b5f6b1 1037 mutex_unlock(&phydev->lock);
00db8189 1038
00db8189 1039 return err;
e8a2b6a4 1040
00db8189
AF
1041}
1042
1043static int phy_remove(struct device *dev)
1044{
1045 struct phy_device *phydev;
1046
1047 phydev = to_phy_device(dev);
1048
35b5f6b1 1049 mutex_lock(&phydev->lock);
00db8189 1050 phydev->state = PHY_DOWN;
35b5f6b1 1051 mutex_unlock(&phydev->lock);
00db8189
AF
1052
1053 if (phydev->drv->remove)
1054 phydev->drv->remove(phydev);
00db8189
AF
1055 phydev->drv = NULL;
1056
1057 return 0;
1058}
1059
b3df0da8
RD
1060/**
1061 * phy_driver_register - register a phy_driver with the PHY layer
1062 * @new_driver: new phy_driver to register
1063 */
00db8189
AF
1064int phy_driver_register(struct phy_driver *new_driver)
1065{
1066 int retval;
1067
00db8189
AF
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) {
8d242488
JP
1076 pr_err("%s: Error %d in registering driver\n",
1077 new_driver->name, retval);
00db8189
AF
1078
1079 return retval;
1080 }
1081
f2511f13 1082 pr_debug("%s: Registered new driver\n", new_driver->name);
00db8189
AF
1083
1084 return 0;
1085}
1086EXPORT_SYMBOL(phy_driver_register);
1087
d5bf9071
CH
1088int 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}
1102EXPORT_SYMBOL(phy_drivers_register);
1103
00db8189
AF
1104void phy_driver_unregister(struct phy_driver *drv)
1105{
1106 driver_unregister(&drv->driver);
1107}
1108EXPORT_SYMBOL(phy_driver_unregister);
1109
d5bf9071
CH
1110void 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}
1117EXPORT_SYMBOL(phy_drivers_unregister);
1118
e1393456
AF
1119static 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,
0f0ca340
GC
1127 .suspend = genphy_suspend,
1128 .resume = genphy_resume,
e1393456
AF
1129 .driver = {.owner= THIS_MODULE, },
1130};
00db8189 1131
67c4f3fa 1132static int __init phy_init(void)
00db8189 1133{
67c4f3fa 1134 int rc;
67c4f3fa
JG
1135
1136 rc = mdio_bus_init();
1137 if (rc)
e1393456 1138 return rc;
00db8189 1139
e1393456
AF
1140 rc = phy_driver_register(&genphy_driver);
1141 if (rc)
1142 mdio_bus_exit();
67c4f3fa 1143
67c4f3fa 1144 return rc;
00db8189
AF
1145}
1146
67c4f3fa 1147static void __exit phy_exit(void)
00db8189
AF
1148{
1149 phy_driver_unregister(&genphy_driver);
e1393456 1150 mdio_bus_exit();
00db8189
AF
1151}
1152
e1393456 1153subsys_initcall(phy_init);
67c4f3fa 1154module_exit(phy_exit);