mirror of https://gitee.com/openkylin/linux.git
netdev/phy/of: Handle IEEE802.3 clause 45 Ethernet PHYs in of_mdiobus_register()
Define two new "compatible" values for Ethernet PHYs. "ethernet-phy-ieee802.3-c22" and "ethernet-phy-ieee802.3-c45" are used to indicate a PHY uses the corresponding protocol. If a PHY is "compatible" with "ethernet-phy-ieee802.3-c45", we indicate this so that get_phy_device() can properly probe the device. If get_phy_device() fails, it was probably due to failing the probe of the PHY identifier registers. Since we have the device tree telling us the PHY exists, go ahead and add it anyhow with a phy_id of zero. There may be a driver match based on the "compatible" property. Signed-off-by: David Daney <david.daney@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ac28b9f8cd
commit
6bd47ac2e4
|
@ -14,10 +14,20 @@ Required properties:
|
|||
- linux,phandle : phandle for this node; likely referenced by an
|
||||
ethernet controller node.
|
||||
|
||||
Optional Properties:
|
||||
|
||||
- compatible: Compatible list, may contain
|
||||
"ethernet-phy-ieee802.3-c22" or "ethernet-phy-ieee802.3-c45" for
|
||||
PHYs that implement IEEE802.3 clause 22 or IEEE802.3 clause 45
|
||||
specifications. If neither of these are specified, the default is to
|
||||
assume clause 22. The compatible list may also contain other
|
||||
elements.
|
||||
|
||||
Example:
|
||||
|
||||
ethernet-phy@0 {
|
||||
linux,phandle = <2452000>
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
linux,phandle = <2452000>;
|
||||
interrupt-parent = <40000>;
|
||||
interrupts = <35 1>;
|
||||
reg = <0>;
|
||||
|
|
|
@ -57,6 +57,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
|
|||
const __be32 *paddr;
|
||||
u32 addr;
|
||||
int len;
|
||||
bool is_c45;
|
||||
|
||||
/* A PHY must have a reg property in the range [0-31] */
|
||||
paddr = of_get_property(child, "reg", &len);
|
||||
|
@ -79,11 +80,18 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
|
|||
mdio->irq[addr] = PHY_POLL;
|
||||
}
|
||||
|
||||
phy = get_phy_device(mdio, addr, false);
|
||||
is_c45 = of_device_is_compatible(child,
|
||||
"ethernet-phy-ieee802.3-c45");
|
||||
phy = get_phy_device(mdio, addr, is_c45);
|
||||
|
||||
if (!phy || IS_ERR(phy)) {
|
||||
dev_err(&mdio->dev, "error probing PHY at address %i\n",
|
||||
addr);
|
||||
continue;
|
||||
phy = phy_device_create(mdio, addr, 0, false, NULL);
|
||||
if (!phy || IS_ERR(phy)) {
|
||||
dev_err(&mdio->dev,
|
||||
"error creating PHY at address %i\n",
|
||||
addr);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Associate the OF node with the device structure so it
|
||||
|
|
Loading…
Reference in New Issue