2 * drivers/net/phy/phy_device.c
4 * Framework for finding and configuring PHYs.
5 * Also contains generic PHY driver
9 * Copyright (c) 2004 Freescale Semiconductor, Inc.
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.
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
20 #include <linux/kernel.h>
21 #include <linux/string.h>
22 #include <linux/errno.h>
23 #include <linux/unistd.h>
24 #include <linux/slab.h>
25 #include <linux/interrupt.h>
26 #include <linux/init.h>
27 #include <linux/delay.h>
28 #include <linux/netdevice.h>
29 #include <linux/etherdevice.h>
30 #include <linux/skbuff.h>
32 #include <linux/module.h>
33 #include <linux/mii.h>
34 #include <linux/ethtool.h>
35 #include <linux/phy.h>
39 #include <asm/uaccess.h>
41 MODULE_DESCRIPTION("PHY library");
42 MODULE_AUTHOR("Andy Fleming");
43 MODULE_LICENSE("GPL");
45 void phy_device_free(struct phy_device
*phydev
)
47 put_device(&phydev
->dev
);
49 EXPORT_SYMBOL(phy_device_free
);
51 static void phy_device_release(struct device
*dev
)
53 kfree(to_phy_device(dev
));
56 static struct phy_driver genphy_driver
;
57 extern int mdio_bus_init(void);
58 extern void mdio_bus_exit(void);
60 static LIST_HEAD(phy_fixup_list
);
61 static DEFINE_MUTEX(phy_fixup_lock
);
63 static int phy_attach_direct(struct net_device
*dev
, struct phy_device
*phydev
,
64 u32 flags
, phy_interface_t interface
);
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
73 * @run: The actual code to be run when a matching PHY is found
75 int phy_register_fixup(const char *bus_id
, u32 phy_uid
, u32 phy_uid_mask
,
76 int (*run
)(struct phy_device
*))
78 struct phy_fixup
*fixup
;
80 fixup
= kzalloc(sizeof(struct phy_fixup
), GFP_KERNEL
);
84 strlcpy(fixup
->bus_id
, bus_id
, sizeof(fixup
->bus_id
));
85 fixup
->phy_uid
= phy_uid
;
86 fixup
->phy_uid_mask
= phy_uid_mask
;
89 mutex_lock(&phy_fixup_lock
);
90 list_add_tail(&fixup
->list
, &phy_fixup_list
);
91 mutex_unlock(&phy_fixup_lock
);
95 EXPORT_SYMBOL(phy_register_fixup
);
97 /* Registers a fixup to be run on any PHY with the UID in phy_uid */
98 int phy_register_fixup_for_uid(u32 phy_uid
, u32 phy_uid_mask
,
99 int (*run
)(struct phy_device
*))
101 return phy_register_fixup(PHY_ANY_ID
, phy_uid
, phy_uid_mask
, run
);
103 EXPORT_SYMBOL(phy_register_fixup_for_uid
);
105 /* Registers a fixup to be run on the PHY with id string bus_id */
106 int phy_register_fixup_for_id(const char *bus_id
,
107 int (*run
)(struct phy_device
*))
109 return phy_register_fixup(bus_id
, PHY_ANY_UID
, 0xffffffff, run
);
111 EXPORT_SYMBOL(phy_register_fixup_for_id
);
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.
117 static int phy_needs_fixup(struct phy_device
*phydev
, struct phy_fixup
*fixup
)
119 if (strcmp(fixup
->bus_id
, dev_name(&phydev
->dev
)) != 0)
120 if (strcmp(fixup
->bus_id
, PHY_ANY_ID
) != 0)
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
)
131 /* Runs any matching fixups for this phydev */
132 int phy_scan_fixups(struct phy_device
*phydev
)
134 struct phy_fixup
*fixup
;
136 mutex_lock(&phy_fixup_lock
);
137 list_for_each_entry(fixup
, &phy_fixup_list
, list
) {
138 if (phy_needs_fixup(phydev
, fixup
)) {
141 err
= fixup
->run(phydev
);
144 mutex_unlock(&phy_fixup_lock
);
149 mutex_unlock(&phy_fixup_lock
);
153 EXPORT_SYMBOL(phy_scan_fixups
);
155 struct phy_device
*phy_device_create(struct mii_bus
*bus
, int addr
, int phy_id
,
156 bool is_c45
, struct phy_c45_device_ids
*c45_ids
)
158 struct phy_device
*dev
;
160 /* We allocate the device, and initialize the
162 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
165 return (struct phy_device
*) PTR_ERR((void*)-ENOMEM
);
167 dev
->dev
.release
= phy_device_release
;
171 dev
->pause
= dev
->asym_pause
= 0;
173 dev
->interface
= PHY_INTERFACE_MODE_GMII
;
175 dev
->autoneg
= AUTONEG_ENABLE
;
177 dev
->is_c45
= is_c45
;
179 dev
->phy_id
= phy_id
;
181 dev
->c45_ids
= *c45_ids
;
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
);
188 dev
->state
= PHY_DOWN
;
190 mutex_init(&dev
->lock
);
191 INIT_DELAYED_WORK(&dev
->state_queue
, phy_state_machine
);
192 INIT_WORK(&dev
->phy_queue
, phy_change
);
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
));
205 device_initialize(&dev
->dev
);
209 EXPORT_SYMBOL(phy_device_create
);
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.
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
224 static int get_phy_c45_ids(struct mii_bus
*bus
, int addr
, u32
*phy_id
,
225 struct phy_c45_device_ids
*c45_ids
) {
228 const int num_ids
= ARRAY_SIZE(c45_ids
->device_ids
);
230 /* Find first non-zero Devices In package. Device
231 * zero is reserved, so don't probe it.
234 i
< num_ids
&& c45_ids
->devices_in_package
== 0;
236 reg_addr
= MII_ADDR_C45
| i
<< 16 | 6;
237 phy_reg
= mdiobus_read(bus
, addr
, reg_addr
);
240 c45_ids
->devices_in_package
= (phy_reg
& 0xffff) << 16;
242 reg_addr
= MII_ADDR_C45
| i
<< 16 | 5;
243 phy_reg
= mdiobus_read(bus
, addr
, reg_addr
);
246 c45_ids
->devices_in_package
|= (phy_reg
& 0xffff);
248 /* If mostly Fs, there is no device there,
249 * let's get out of here.
251 if ((c45_ids
->devices_in_package
& 0x1fffffff) == 0x1fffffff) {
252 *phy_id
= 0xffffffff;
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
)))
262 reg_addr
= MII_ADDR_C45
| i
<< 16 | MII_PHYSID1
;
263 phy_reg
= mdiobus_read(bus
, addr
, reg_addr
);
266 c45_ids
->device_ids
[i
] = (phy_reg
& 0xffff) << 16;
268 reg_addr
= MII_ADDR_C45
| i
<< 16 | MII_PHYSID2
;
269 phy_reg
= mdiobus_read(bus
, addr
, reg_addr
);
272 c45_ids
->device_ids
[i
] |= (phy_reg
& 0xffff);
279 * get_phy_id - reads the specified addr for its ID.
280 * @bus: the target MII bus
281 * @addr: PHY address on the MII bus
282 * @phy_id: where to store the ID retrieved.
283 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
284 * @c45_ids: where to store the c45 ID information.
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
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.
294 static int get_phy_id(struct mii_bus
*bus
, int addr
, u32
*phy_id
,
295 bool is_c45
, struct phy_c45_device_ids
*c45_ids
)
300 return get_phy_c45_ids(bus
, addr
, phy_id
, c45_ids
);
302 /* Grab the bits from PHYIR1, and put them
303 * in the upper half */
304 phy_reg
= mdiobus_read(bus
, addr
, MII_PHYSID1
);
309 *phy_id
= (phy_reg
& 0xffff) << 16;
311 /* Grab the bits from PHYIR2, and put them in the lower half */
312 phy_reg
= mdiobus_read(bus
, addr
, MII_PHYSID2
);
317 *phy_id
|= (phy_reg
& 0xffff);
323 * get_phy_device - reads the specified PHY device and returns its @phy_device struct
324 * @bus: the target MII bus
325 * @addr: PHY address on the MII bus
326 * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
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.
331 struct phy_device
*get_phy_device(struct mii_bus
*bus
, int addr
, bool is_c45
)
333 struct phy_c45_device_ids c45_ids
= {0};
334 struct phy_device
*dev
= NULL
;
338 r
= get_phy_id(bus
, addr
, &phy_id
, is_c45
, &c45_ids
);
342 /* If the phy_id is mostly Fs, there is no device there */
343 if ((phy_id
& 0x1fffffff) == 0x1fffffff)
346 dev
= phy_device_create(bus
, addr
, phy_id
, is_c45
, &c45_ids
);
350 EXPORT_SYMBOL(get_phy_device
);
353 * phy_device_register - Register the phy device on the MDIO bus
354 * @phydev: phy_device structure to be added to the MDIO bus
356 int phy_device_register(struct phy_device
*phydev
)
360 /* Don't register a phy if one is already registered at this
362 if (phydev
->bus
->phy_map
[phydev
->addr
])
364 phydev
->bus
->phy_map
[phydev
->addr
] = phydev
;
366 /* Run all of the fixups for this PHY */
367 phy_scan_fixups(phydev
);
369 err
= device_add(&phydev
->dev
);
371 pr_err("PHY %d failed to add\n", phydev
->addr
);
378 phydev
->bus
->phy_map
[phydev
->addr
] = NULL
;
381 EXPORT_SYMBOL(phy_device_register
);
384 * phy_find_first - finds the first PHY device on the bus
385 * @bus: the target MII bus
387 struct phy_device
*phy_find_first(struct mii_bus
*bus
)
391 for (addr
= 0; addr
< PHY_MAX_ADDR
; addr
++) {
392 if (bus
->phy_map
[addr
])
393 return bus
->phy_map
[addr
];
397 EXPORT_SYMBOL(phy_find_first
);
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
404 * Description: Tells the PHY infrastructure to handle the
405 * gory details on monitoring link status (whether through
406 * polling or an interrupt), and to call back to the
407 * connected device driver when the link status changes.
408 * If you want to monitor your own link state, don't call
411 static void phy_prepare_link(struct phy_device
*phydev
,
412 void (*handler
)(struct net_device
*))
414 phydev
->adjust_link
= handler
;
418 * phy_connect_direct - connect an ethernet device to a specific phy_device
419 * @dev: the network device to connect
420 * @phydev: the pointer to the phy device
421 * @handler: callback function for state change notifications
422 * @interface: PHY device's interface
424 int phy_connect_direct(struct net_device
*dev
, struct phy_device
*phydev
,
425 void (*handler
)(struct net_device
*),
426 phy_interface_t interface
)
430 rc
= phy_attach_direct(dev
, phydev
, phydev
->dev_flags
, interface
);
434 phy_prepare_link(phydev
, handler
);
435 phy_start_machine(phydev
, NULL
);
437 phy_start_interrupts(phydev
);
441 EXPORT_SYMBOL(phy_connect_direct
);
444 * phy_connect - connect an ethernet device to a PHY device
445 * @dev: the network device to connect
446 * @bus_id: the id string of the PHY device to connect
447 * @handler: callback function for state change notifications
448 * @interface: PHY device's interface
450 * Description: Convenience function for connecting ethernet
451 * devices to PHY devices. The default behavior is for
452 * the PHY infrastructure to handle everything, and only notify
453 * the connected driver when the link status changes. If you
454 * don't want, or can't use the provided functionality, you may
455 * choose to call only the subset of functions which provide
456 * the desired functionality.
458 struct phy_device
* phy_connect(struct net_device
*dev
, const char *bus_id
,
459 void (*handler
)(struct net_device
*),
460 phy_interface_t interface
)
462 struct phy_device
*phydev
;
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
);
470 pr_err("PHY %s not found\n", bus_id
);
471 return ERR_PTR(-ENODEV
);
473 phydev
= to_phy_device(d
);
475 rc
= phy_connect_direct(dev
, phydev
, handler
, interface
);
481 EXPORT_SYMBOL(phy_connect
);
484 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
485 * @phydev: target phy_device struct
487 void phy_disconnect(struct phy_device
*phydev
)
490 phy_stop_interrupts(phydev
);
492 phy_stop_machine(phydev
);
494 phydev
->adjust_link
= NULL
;
498 EXPORT_SYMBOL(phy_disconnect
);
500 int phy_init_hw(struct phy_device
*phydev
)
504 if (!phydev
->drv
|| !phydev
->drv
->config_init
)
507 ret
= phy_scan_fixups(phydev
);
511 return phydev
->drv
->config_init(phydev
);
515 * phy_attach_direct - attach a network device to a given PHY device pointer
516 * @dev: network device to attach
517 * @phydev: Pointer to phy_device to attach
518 * @flags: PHY device's dev_flags
519 * @interface: PHY device's interface
521 * Description: Called by drivers to attach to a particular PHY
522 * device. The phy_device is found, and properly hooked up
523 * to the phy_driver. If no driver is attached, then the
524 * genphy_driver is used. The phy_device is given a ptr to
525 * the attaching device, and given a callback for link status
526 * change. The phy_device is returned to the attaching driver.
528 static int phy_attach_direct(struct net_device
*dev
, struct phy_device
*phydev
,
529 u32 flags
, phy_interface_t interface
)
531 struct device
*d
= &phydev
->dev
;
534 /* Assume that if there is no driver, that it doesn't
535 * exist, and we should use the genphy driver. */
536 if (NULL
== d
->driver
) {
537 if (phydev
->is_c45
) {
538 pr_err("No driver for phy %x\n", phydev
->phy_id
);
542 d
->driver
= &genphy_driver
.driver
;
544 err
= d
->driver
->probe(d
);
546 err
= device_bind_driver(d
);
552 if (phydev
->attached_dev
) {
553 dev_err(&dev
->dev
, "PHY already attached\n");
557 phydev
->attached_dev
= dev
;
558 dev
->phydev
= phydev
;
560 phydev
->dev_flags
= flags
;
562 phydev
->interface
= interface
;
564 phydev
->state
= PHY_READY
;
566 /* Do initial configuration here, now that
567 * we have certain key parameters
568 * (dev_flags and interface) */
569 err
= phy_init_hw(phydev
);
577 * phy_attach - attach a network device to a particular PHY device
578 * @dev: network device to attach
579 * @bus_id: Bus ID of PHY device to attach
580 * @interface: PHY device's interface
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.
585 struct phy_device
*phy_attach(struct net_device
*dev
,
586 const char *bus_id
, phy_interface_t interface
)
588 struct bus_type
*bus
= &mdio_bus_type
;
589 struct phy_device
*phydev
;
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
);
597 pr_err("PHY %s not found\n", bus_id
);
598 return ERR_PTR(-ENODEV
);
600 phydev
= to_phy_device(d
);
602 rc
= phy_attach_direct(dev
, phydev
, phydev
->dev_flags
, interface
);
608 EXPORT_SYMBOL(phy_attach
);
611 * phy_detach - detach a PHY device from its network device
612 * @phydev: target phy_device struct
614 void phy_detach(struct phy_device
*phydev
)
616 phydev
->attached_dev
->phydev
= NULL
;
617 phydev
->attached_dev
= NULL
;
619 /* If the device had no specific driver before (i.e. - it
620 * was using the generic driver), we unbind the device
621 * from the generic driver so that there's a chance a
622 * real driver could be loaded */
623 if (phydev
->dev
.driver
== &genphy_driver
.driver
)
624 device_release_driver(&phydev
->dev
);
626 EXPORT_SYMBOL(phy_detach
);
629 /* Generic PHY support and helper functions */
632 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
633 * @phydev: target phy_device struct
635 * Description: Writes MII_ADVERTISE with the appropriate values,
636 * after sanitizing the values to make sure we only advertise
637 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement
638 * hasn't changed, and > 0 if it has changed.
640 static int genphy_config_advert(struct phy_device
*phydev
)
644 int err
, changed
= 0;
646 /* Only allow advertising what
647 * this PHY supports */
648 phydev
->advertising
&= phydev
->supported
;
649 advertise
= phydev
->advertising
;
651 /* Setup standard advertisement */
652 oldadv
= adv
= phy_read(phydev
, MII_ADVERTISE
);
657 adv
&= ~(ADVERTISE_ALL
| ADVERTISE_100BASE4
| ADVERTISE_PAUSE_CAP
|
658 ADVERTISE_PAUSE_ASYM
);
659 adv
|= ethtool_adv_to_mii_adv_t(advertise
);
662 err
= phy_write(phydev
, MII_ADVERTISE
, adv
);
669 /* Configure gigabit if it's supported */
670 if (phydev
->supported
& (SUPPORTED_1000baseT_Half
|
671 SUPPORTED_1000baseT_Full
)) {
672 oldadv
= adv
= phy_read(phydev
, MII_CTRL1000
);
677 adv
&= ~(ADVERTISE_1000FULL
| ADVERTISE_1000HALF
);
678 adv
|= ethtool_adv_to_mii_ctrl1000_t(advertise
);
681 err
= phy_write(phydev
, MII_CTRL1000
, adv
);
693 * genphy_setup_forced - configures/forces speed/duplex from @phydev
694 * @phydev: target phy_device struct
696 * Description: Configures MII_BMCR to force speed/duplex
697 * to the values in phydev. Assumes that the values are valid.
698 * Please see phy_sanitize_settings().
700 static int genphy_setup_forced(struct phy_device
*phydev
)
705 phydev
->pause
= phydev
->asym_pause
= 0;
707 if (SPEED_1000
== phydev
->speed
)
708 ctl
|= BMCR_SPEED1000
;
709 else if (SPEED_100
== phydev
->speed
)
710 ctl
|= BMCR_SPEED100
;
712 if (DUPLEX_FULL
== phydev
->duplex
)
713 ctl
|= BMCR_FULLDPLX
;
715 err
= phy_write(phydev
, MII_BMCR
, ctl
);
722 * genphy_restart_aneg - Enable and Restart Autonegotiation
723 * @phydev: target phy_device struct
725 int genphy_restart_aneg(struct phy_device
*phydev
)
729 ctl
= phy_read(phydev
, MII_BMCR
);
734 ctl
|= (BMCR_ANENABLE
| BMCR_ANRESTART
);
736 /* Don't isolate the PHY if we're negotiating */
737 ctl
&= ~(BMCR_ISOLATE
);
739 ctl
= phy_write(phydev
, MII_BMCR
, ctl
);
743 EXPORT_SYMBOL(genphy_restart_aneg
);
747 * genphy_config_aneg - restart auto-negotiation or write BMCR
748 * @phydev: target phy_device struct
750 * Description: If auto-negotiation is enabled, we configure the
751 * advertising, and then restart auto-negotiation. If it is not
752 * enabled, then we write the BMCR.
754 int genphy_config_aneg(struct phy_device
*phydev
)
758 if (AUTONEG_ENABLE
!= phydev
->autoneg
)
759 return genphy_setup_forced(phydev
);
761 result
= genphy_config_advert(phydev
);
763 if (result
< 0) /* error */
767 /* Advertisement hasn't changed, but maybe aneg was never on to
768 * begin with? Or maybe phy was isolated? */
769 int ctl
= phy_read(phydev
, MII_BMCR
);
774 if (!(ctl
& BMCR_ANENABLE
) || (ctl
& BMCR_ISOLATE
))
775 result
= 1; /* do restart aneg */
778 /* Only restart aneg if we are advertising something different
779 * than we were before. */
781 result
= genphy_restart_aneg(phydev
);
785 EXPORT_SYMBOL(genphy_config_aneg
);
788 * genphy_update_link - update link status in @phydev
789 * @phydev: target phy_device struct
791 * Description: Update the value in phydev->link to reflect the
792 * current link value. In order to do this, we need to read
793 * the status register twice, keeping the second value.
795 int genphy_update_link(struct phy_device
*phydev
)
800 status
= phy_read(phydev
, MII_BMSR
);
805 /* Read link and autonegotiation status */
806 status
= phy_read(phydev
, MII_BMSR
);
811 if ((status
& BMSR_LSTATUS
) == 0)
818 EXPORT_SYMBOL(genphy_update_link
);
821 * genphy_read_status - check the link status and update current link state
822 * @phydev: target phy_device struct
824 * Description: Check the link, then figure out the current state
825 * by comparing what we advertise with what the link partner
826 * advertises. Start by checking the gigabit possibilities,
827 * then move on to 10/100.
829 int genphy_read_status(struct phy_device
*phydev
)
836 /* Update the link, but return if there
838 err
= genphy_update_link(phydev
);
842 if (AUTONEG_ENABLE
== phydev
->autoneg
) {
843 if (phydev
->supported
& (SUPPORTED_1000baseT_Half
844 | SUPPORTED_1000baseT_Full
)) {
845 lpagb
= phy_read(phydev
, MII_STAT1000
);
850 adv
= phy_read(phydev
, MII_CTRL1000
);
858 lpa
= phy_read(phydev
, MII_LPA
);
863 adv
= phy_read(phydev
, MII_ADVERTISE
);
870 phydev
->speed
= SPEED_10
;
871 phydev
->duplex
= DUPLEX_HALF
;
872 phydev
->pause
= phydev
->asym_pause
= 0;
874 if (lpagb
& (LPA_1000FULL
| LPA_1000HALF
)) {
875 phydev
->speed
= SPEED_1000
;
877 if (lpagb
& LPA_1000FULL
)
878 phydev
->duplex
= DUPLEX_FULL
;
879 } else if (lpa
& (LPA_100FULL
| LPA_100HALF
)) {
880 phydev
->speed
= SPEED_100
;
882 if (lpa
& LPA_100FULL
)
883 phydev
->duplex
= DUPLEX_FULL
;
885 if (lpa
& LPA_10FULL
)
886 phydev
->duplex
= DUPLEX_FULL
;
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;
893 int bmcr
= phy_read(phydev
, MII_BMCR
);
897 if (bmcr
& BMCR_FULLDPLX
)
898 phydev
->duplex
= DUPLEX_FULL
;
900 phydev
->duplex
= DUPLEX_HALF
;
902 if (bmcr
& BMCR_SPEED1000
)
903 phydev
->speed
= SPEED_1000
;
904 else if (bmcr
& BMCR_SPEED100
)
905 phydev
->speed
= SPEED_100
;
907 phydev
->speed
= SPEED_10
;
909 phydev
->pause
= phydev
->asym_pause
= 0;
914 EXPORT_SYMBOL(genphy_read_status
);
916 static int genphy_config_init(struct phy_device
*phydev
)
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
|
927 /* Do we support autonegotiation? */
928 val
= phy_read(phydev
, MII_BMSR
);
933 if (val
& BMSR_ANEGCAPABLE
)
934 features
|= SUPPORTED_Autoneg
;
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
;
945 if (val
& BMSR_ESTATEN
) {
946 val
= phy_read(phydev
, MII_ESTATUS
);
951 if (val
& ESTATUS_1000_TFULL
)
952 features
|= SUPPORTED_1000baseT_Full
;
953 if (val
& ESTATUS_1000_THALF
)
954 features
|= SUPPORTED_1000baseT_Half
;
957 phydev
->supported
= features
;
958 phydev
->advertising
= features
;
962 int genphy_suspend(struct phy_device
*phydev
)
966 mutex_lock(&phydev
->lock
);
968 value
= phy_read(phydev
, MII_BMCR
);
969 phy_write(phydev
, MII_BMCR
, (value
| BMCR_PDOWN
));
971 mutex_unlock(&phydev
->lock
);
975 EXPORT_SYMBOL(genphy_suspend
);
977 int genphy_resume(struct phy_device
*phydev
)
981 mutex_lock(&phydev
->lock
);
983 value
= phy_read(phydev
, MII_BMCR
);
984 phy_write(phydev
, MII_BMCR
, (value
& ~BMCR_PDOWN
));
986 mutex_unlock(&phydev
->lock
);
990 EXPORT_SYMBOL(genphy_resume
);
993 * phy_probe - probe and init a PHY device
994 * @dev: device to probe and init
996 * Description: Take care of setting up the phy_device structure,
997 * set the state to READY (the driver's init function should
998 * set it to STARTING if needed).
1000 static int phy_probe(struct device
*dev
)
1002 struct phy_device
*phydev
;
1003 struct phy_driver
*phydrv
;
1004 struct device_driver
*drv
;
1007 phydev
= to_phy_device(dev
);
1009 drv
= phydev
->dev
.driver
;
1010 phydrv
= to_phy_driver(drv
);
1011 phydev
->drv
= phydrv
;
1013 /* Disable the interrupt if the PHY doesn't support it
1014 * but the interrupt is still a valid one
1016 if (!(phydrv
->flags
& PHY_HAS_INTERRUPT
) &&
1017 phy_interrupt_is_valid(phydev
))
1018 phydev
->irq
= PHY_POLL
;
1020 if (phydrv
->flags
& PHY_IS_INTERNAL
)
1021 phydev
->is_internal
= true;
1023 mutex_lock(&phydev
->lock
);
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
;
1031 /* Set the state to READY by default */
1032 phydev
->state
= PHY_READY
;
1034 if (phydev
->drv
->probe
)
1035 err
= phydev
->drv
->probe(phydev
);
1037 mutex_unlock(&phydev
->lock
);
1043 static int phy_remove(struct device
*dev
)
1045 struct phy_device
*phydev
;
1047 phydev
= to_phy_device(dev
);
1049 mutex_lock(&phydev
->lock
);
1050 phydev
->state
= PHY_DOWN
;
1051 mutex_unlock(&phydev
->lock
);
1053 if (phydev
->drv
->remove
)
1054 phydev
->drv
->remove(phydev
);
1061 * phy_driver_register - register a phy_driver with the PHY layer
1062 * @new_driver: new phy_driver to register
1064 int phy_driver_register(struct phy_driver
*new_driver
)
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
;
1073 retval
= driver_register(&new_driver
->driver
);
1076 pr_err("%s: Error %d in registering driver\n",
1077 new_driver
->name
, retval
);
1082 pr_debug("%s: Registered new driver\n", new_driver
->name
);
1086 EXPORT_SYMBOL(phy_driver_register
);
1088 int phy_drivers_register(struct phy_driver
*new_driver
, int n
)
1092 for (i
= 0; i
< n
; i
++) {
1093 ret
= phy_driver_register(new_driver
+ i
);
1096 phy_driver_unregister(new_driver
+ i
);
1102 EXPORT_SYMBOL(phy_drivers_register
);
1104 void phy_driver_unregister(struct phy_driver
*drv
)
1106 driver_unregister(&drv
->driver
);
1108 EXPORT_SYMBOL(phy_driver_unregister
);
1110 void phy_drivers_unregister(struct phy_driver
*drv
, int n
)
1113 for (i
= 0; i
< n
; i
++) {
1114 phy_driver_unregister(drv
+ i
);
1117 EXPORT_SYMBOL(phy_drivers_unregister
);
1119 static struct phy_driver genphy_driver
= {
1120 .phy_id
= 0xffffffff,
1121 .phy_id_mask
= 0xffffffff,
1122 .name
= "Generic PHY",
1123 .config_init
= genphy_config_init
,
1125 .config_aneg
= genphy_config_aneg
,
1126 .read_status
= genphy_read_status
,
1127 .suspend
= genphy_suspend
,
1128 .resume
= genphy_resume
,
1129 .driver
= {.owner
= THIS_MODULE
, },
1132 static int __init
phy_init(void)
1136 rc
= mdio_bus_init();
1140 rc
= phy_driver_register(&genphy_driver
);
1147 static void __exit
phy_exit(void)
1149 phy_driver_unregister(&genphy_driver
);
1153 subsys_initcall(phy_init
);
1154 module_exit(phy_exit
);