Browse Source

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>
David S. Miller 9 years ago
parent
commit
b64438853f

+ 2 - 2
Documentation/devicetree/bindings/net/brcm,bcmgenet.txt

@@ -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";
 		};
 		};
 	};
 	};
 };
 };

+ 0 - 8
Documentation/devicetree/bindings/net/mdio-mux-gpio.txt

@@ -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>,

+ 0 - 8
Documentation/devicetree/bindings/net/mdio-mux.txt

@@ -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>,

+ 4 - 2
Documentation/devicetree/bindings/net/phy.txt

@@ -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
-  elements.
+  assume clause 22.
 
 
   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

+ 27 - 0
drivers/of/of_mdio.c

@@ -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;