Merge branch 'phylib-regressions-part-2'

Andrew Lunn says:

====================
Part 2 of v4.5-rc1 phylib regression

White list PHY compatible values which indicate PHYs.  Issue a warning
when one is encountered.

Update the documentation to make it clear what is expected in the
compatible string.

v2:
Fix Grammar, reword changelog, add Tested-by and Acked-by.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2016-01-28 22:53:17 -08:00
Родитель a77ce1bc12 e4bf797ac1
Коммит b64438853f
5 изменённых файлов: 33 добавлений и 20 удалений

Просмотреть файл

@ -68,7 +68,7 @@ ethernet@f0b60000 {
phy1: ethernet-phy@1 { phy1: ethernet-phy@1 {
max-speed = <1000>; max-speed = <1000>;
reg = <0x1>; reg = <0x1>;
compatible = "brcm,28nm-gphy", "ethernet-phy-ieee802.3-c22"; compatible = "ethernet-phy-ieee802.3-c22";
}; };
}; };
}; };
@ -115,7 +115,7 @@ ethernet@f0ba0000 {
phy0: ethernet-phy@0 { phy0: ethernet-phy@0 {
max-speed = <1000>; max-speed = <1000>;
reg = <0x0>; reg = <0x0>;
compatible = "brcm,bcm53125", "ethernet-phy-ieee802.3-c22"; compatible = "ethernet-phy-ieee802.3-c22";
}; };
}; };
}; };

Просмотреть файл

@ -38,7 +38,6 @@ Example :
phy11: ethernet-phy@1 { phy11: ethernet-phy@1 {
reg = <1>; reg = <1>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -48,7 +47,6 @@ Example :
}; };
phy12: ethernet-phy@2 { phy12: ethernet-phy@2 {
reg = <2>; reg = <2>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -58,7 +56,6 @@ Example :
}; };
phy13: ethernet-phy@3 { phy13: ethernet-phy@3 {
reg = <3>; reg = <3>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -68,7 +65,6 @@ Example :
}; };
phy14: ethernet-phy@4 { phy14: ethernet-phy@4 {
reg = <4>; reg = <4>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -85,7 +81,6 @@ Example :
phy21: ethernet-phy@1 { phy21: ethernet-phy@1 {
reg = <1>; reg = <1>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -95,7 +90,6 @@ Example :
}; };
phy22: ethernet-phy@2 { phy22: ethernet-phy@2 {
reg = <2>; reg = <2>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -105,7 +99,6 @@ Example :
}; };
phy23: ethernet-phy@3 { phy23: ethernet-phy@3 {
reg = <3>; reg = <3>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -115,7 +108,6 @@ Example :
}; };
phy24: ethernet-phy@4 { phy24: ethernet-phy@4 {
reg = <4>; reg = <4>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,

Просмотреть файл

@ -47,7 +47,6 @@ Example :
phy11: ethernet-phy@1 { phy11: ethernet-phy@1 {
reg = <1>; reg = <1>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -57,7 +56,6 @@ Example :
}; };
phy12: ethernet-phy@2 { phy12: ethernet-phy@2 {
reg = <2>; reg = <2>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -67,7 +65,6 @@ Example :
}; };
phy13: ethernet-phy@3 { phy13: ethernet-phy@3 {
reg = <3>; reg = <3>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -77,7 +74,6 @@ Example :
}; };
phy14: ethernet-phy@4 { phy14: ethernet-phy@4 {
reg = <4>; reg = <4>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -94,7 +90,6 @@ Example :
phy21: ethernet-phy@1 { phy21: ethernet-phy@1 {
reg = <1>; reg = <1>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -104,7 +99,6 @@ Example :
}; };
phy22: ethernet-phy@2 { phy22: ethernet-phy@2 {
reg = <2>; reg = <2>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -114,7 +108,6 @@ Example :
}; };
phy23: ethernet-phy@3 { phy23: ethernet-phy@3 {
reg = <3>; reg = <3>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,
@ -124,7 +117,6 @@ Example :
}; };
phy24: ethernet-phy@4 { phy24: ethernet-phy@4 {
reg = <4>; reg = <4>;
compatible = "marvell,88e1149r";
marvell,reg-init = <3 0x10 0 0x5777>, marvell,reg-init = <3 0x10 0 0x5777>,
<3 0x11 0 0x00aa>, <3 0x11 0 0x00aa>,
<3 0x12 0 0x4105>, <3 0x12 0 0x4105>,

Просмотреть файл

@ -17,8 +17,7 @@ Optional Properties:
"ethernet-phy-ieee802.3-c22" or "ethernet-phy-ieee802.3-c45" for "ethernet-phy-ieee802.3-c22" or "ethernet-phy-ieee802.3-c45" for
PHYs that implement IEEE802.3 clause 22 or IEEE802.3 clause 45 PHYs that implement IEEE802.3 clause 22 or IEEE802.3 clause 45
specifications. If neither of these are specified, the default is to specifications. If neither of these are specified, the default is to
assume clause 22. The compatible list may also contain other assume clause 22.
elements.
If the phy's identifier is known then the list may contain an entry If the phy's identifier is known then the list may contain an entry
of the form: "ethernet-phy-idAAAA.BBBB" where of the form: "ethernet-phy-idAAAA.BBBB" where
@ -28,6 +27,9 @@ Optional Properties:
4 hex digits. This is the chip vendor OUI bits 19:24, 4 hex digits. This is the chip vendor OUI bits 19:24,
followed by 10 bits of a vendor specific ID. followed by 10 bits of a vendor specific ID.
The compatible list should not contain other values than those
listed here.
- max-speed: Maximum PHY supported speed (10, 100, 1000...) - max-speed: Maximum PHY supported speed (10, 100, 1000...)
- broken-turn-around: If set, indicates the PHY device does not correctly - broken-turn-around: If set, indicates the PHY device does not correctly

Просмотреть файл

@ -143,11 +143,31 @@ int of_mdio_parse_addr(struct device *dev, const struct device_node *np)
} }
EXPORT_SYMBOL(of_mdio_parse_addr); EXPORT_SYMBOL(of_mdio_parse_addr);
/* The following is a list of PHY compatible strings which appear in
* some DTBs. The compatible string is never matched against a PHY
* driver, so is pointless. We only expect devices which are not PHYs
* to have a compatible string, so they can be matched to an MDIO
* driver. Encourage users to upgrade their DT blobs to remove these.
*/
static const struct of_device_id whitelist_phys[] = {
{ .compatible = "brcm,40nm-ephy" },
{ .compatible = "marvell,88E1111", },
{ .compatible = "marvell,88e1116", },
{ .compatible = "marvell,88e1118", },
{ .compatible = "marvell,88e1149r", },
{ .compatible = "marvell,88e1310", },
{ .compatible = "marvell,88E1510", },
{ .compatible = "marvell,88E1514", },
{ .compatible = "moxa,moxart-rtl8201cp", },
{}
};
/* /*
* Return true if the child node is for a phy. It must either: * Return true if the child node is for a phy. It must either:
* o Compatible string of "ethernet-phy-idX.X" * o Compatible string of "ethernet-phy-idX.X"
* o Compatible string of "ethernet-phy-ieee802.3-c45" * o Compatible string of "ethernet-phy-ieee802.3-c45"
* o Compatible string of "ethernet-phy-ieee802.3-c22" * o Compatible string of "ethernet-phy-ieee802.3-c22"
* o In the white list above (and issue a warning)
* o No compatibility string * o No compatibility string
* *
* A device which is not a phy is expected to have a compatible string * A device which is not a phy is expected to have a compatible string
@ -166,6 +186,13 @@ static bool of_mdiobus_child_is_phy(struct device_node *child)
if (of_device_is_compatible(child, "ethernet-phy-ieee802.3-c22")) if (of_device_is_compatible(child, "ethernet-phy-ieee802.3-c22"))
return true; return true;
if (of_match_node(whitelist_phys, child)) {
pr_warn(FW_WARN
"%s: Whitelisted compatible string. Please remove\n",
child->full_name);
return true;
}
if (!of_find_property(child, "compatible", NULL)) if (!of_find_property(child, "compatible", NULL))
return true; return true;