diff mbox

[net,2/2] DT: phy.txt: Clarify expected compatible values

Message ID 1453853499-11248-3-git-send-email-andrew@lunn.ch
State Superseded, archived
Delegated to: David Miller
Headers show

Commit Message

Andrew Lunn Jan. 27, 2016, 12:11 a.m. UTC
PHY devices may only list clause 22, 45, and their PHY identifier
values as compatible values. No other compatible strings are allowed.
Make this clear in the documentation, and remove examples where
make/model compatible strings are listed.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
---
 Documentation/devicetree/bindings/net/brcm,bcmgenet.txt | 4 ++--
 Documentation/devicetree/bindings/net/mdio-mux-gpio.txt | 8 --------
 Documentation/devicetree/bindings/net/mdio-mux.txt      | 8 --------
 Documentation/devicetree/bindings/net/phy.txt           | 6 ++++--
 4 files changed, 6 insertions(+), 20 deletions(-)

Comments

Florian Fainelli Jan. 27, 2016, 12:33 a.m. UTC | #1
On 26/01/16 16:11, Andrew Lunn wrote:
> PHY devices may only list clause 22, 45, and their PHY identifier
> values as compatible values. No other compatible strings are allowed.
> Make this clear in the documentation, and remove examples where
> make/model compatible strings are listed.

Humm, should not we rather require Ethernet PHY Device Tree nodes to
have *at least* a "ethernet-phy-ieee802.3-c22" or
"ethernet-phy-ieee802.3-c45", and any other compatible string which
further specifies the hardware is also welcome?

Do you think this deserves another commit when net-next opens up again?
Andrew Lunn Jan. 27, 2016, 1:06 a.m. UTC | #2
On Tue, Jan 26, 2016 at 04:33:11PM -0800, Florian Fainelli wrote:
> On 26/01/16 16:11, Andrew Lunn wrote:
> > PHY devices may only list clause 22, 45, and their PHY identifier
> > values as compatible values. No other compatible strings are allowed.
> > Make this clear in the documentation, and remove examples where
> > make/model compatible strings are listed.
> 
> Humm, should not we rather require Ethernet PHY Device Tree nodes to
> have *at least* a "ethernet-phy-ieee802.3-c22" or
> "ethernet-phy-ieee802.3-c45", and any other compatible string which
> further specifies the hardware is also welcome?

At the moment, "ethernet-phy-ieee802.3-c45" is used, we look for it
and act upon it. "ethernet-phy-ieee802.3-c22" is not used anywhere,
other than my new of_mdiobus_child_is_phy(). Also, for backwards
compatibility with older blobs, we can never assume one or the other
will be present.

So you are suggesting we change around 200 ethphy nodes to add in
"ethernet-phy-ieee802.3-c22", yet we don't actually do anything with
it?

  Andrew
Florian Fainelli Jan. 27, 2016, 1:25 a.m. UTC | #3
On 26/01/16 17:06, Andrew Lunn wrote:
> On Tue, Jan 26, 2016 at 04:33:11PM -0800, Florian Fainelli wrote:
>> On 26/01/16 16:11, Andrew Lunn wrote:
>>> PHY devices may only list clause 22, 45, and their PHY identifier
>>> values as compatible values. No other compatible strings are allowed.
>>> Make this clear in the documentation, and remove examples where
>>> make/model compatible strings are listed.
>>
>> Humm, should not we rather require Ethernet PHY Device Tree nodes to
>> have *at least* a "ethernet-phy-ieee802.3-c22" or
>> "ethernet-phy-ieee802.3-c45", and any other compatible string which
>> further specifies the hardware is also welcome?
> 
> At the moment, "ethernet-phy-ieee802.3-c45" is used, we look for it
> and act upon it. "ethernet-phy-ieee802.3-c22" is not used anywhere,
> other than my new of_mdiobus_child_is_phy(). Also, for backwards
> compatibility with older blobs, we can never assume one or the other
> will be present.
> 
> So you are suggesting we change around 200 ethphy nodes to add in
> "ethernet-phy-ieee802.3-c22", yet we don't actually do anything with
> it?

Well, we do now, since that is one of the results used by
of_mdiobus_child_is_phy(), but you are right, this does not scale.

What I would prefer seeing though is not removing nodes that have at
least two compatible strings, including one that is
"ethernet-phy-ieee802.3-c22", but those which have only one, like the
marvell ones that you patch, should have either an additional
"ethernet-phy-ieee802.3-c22", or none.

Does that make sense?
Andrew Lunn Jan. 27, 2016, 1:57 a.m. UTC | #4
> Well, we do now, since that is one of the results used by
> of_mdiobus_child_is_phy(),

It uses it, but do not rely on it, since for backwards compatibility,
we cannot assume it is there.

You can never change an optional parameter to a mandatory parameter in
DT. To do so breaks backwards compatibility.

> What I would prefer seeing though is not removing nodes that have at
> least two compatible strings, including one that is
> "ethernet-phy-ieee802.3-c22", but those which have only one, like the
> marvell ones that you patch, should have either an additional
> "ethernet-phy-ieee802.3-c22", or none.

So you are saying, if there is an "ethernet-phy-ieee802.3-c22" or an
"ethernet-phy-ieee802.3-45" you can also have any other random junk,
which we are going to ignore, since we have no way to verify, hence we
have to assume it is broken, yet we need to be backwards compatible
with it.

Did you notice:

+       { .compatible = "marvell,88e1310", },
+       { .compatible = "marvell,88E1510", },

No consistency with the 'e'. We would just be encouraging people to
add more inconsistent stuff.

    Andrew
Florian Fainelli Jan. 27, 2016, 4:31 p.m. UTC | #5
On January 26, 2016 5:57:55 PM PST, Andrew Lunn <andrew@lunn.ch> wrote:
>> Well, we do now, since that is one of the results used by
>> of_mdiobus_child_is_phy(),
>
>It uses it, but do not rely on it, since for backwards compatibility,
>we cannot assume it is there.
>
>You can never change an optional parameter to a mandatory parameter in
>DT. To do so breaks backwards compatibility.
>
>> What I would prefer seeing though is not removing nodes that have at
>> least two compatible strings, including one that is
>> "ethernet-phy-ieee802.3-c22", but those which have only one, like the
>> marvell ones that you patch, should have either an additional
>> "ethernet-phy-ieee802.3-c22", or none.
>
>So you are saying, if there is an "ethernet-phy-ieee802.3-c22" or an
>"ethernet-phy-ieee802.3-45" you can also have any other random junk,
>which we are going to ignore, since we have no way to verify, hence we
>have to assume it is broken, yet we need to be backwards compatible
>with it.
>
>Did you notice:
>
>+       { .compatible = "marvell,88e1310", },
>+       { .compatible = "marvell,88E1510", },
>
>No consistency with the 'e'. We would just be encouraging people to
>add more inconsistent stuff.

You are right, I am convinced now. If somebody needs to know the exact PHY ID a priori, then you are also likely to use the more descriptive compatible string including that ID.

So:

Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Olof Johansson Jan. 27, 2016, 4:41 p.m. UTC | #6
On Tue, Jan 26, 2016 at 4:11 PM, Andrew Lunn <andrew@lunn.ch> wrote:
> PHY devices may only list clause 22, 45, and their PHY identifier
> values as compatible values. No other compatible strings are allowed.
> Make this clear in the documentation, and remove examples where
> make/model compatible strings are listed.
>
> Signed-off-by: Andrew Lunn <andrew@lunn.ch>

I'm not sure I agree with the disallowing here. It's common practice
to use a specific compatible to describe the actual hardware used, in
case it's needed in the future for some driver to distinguish
behavior, etc.

So while it should be required to include the clause compats, having a
more specific one in there should be acceptable.


-Olof
Andrew Lunn Jan. 27, 2016, 5:11 p.m. UTC | #7
On Wed, Jan 27, 2016 at 08:41:56AM -0800, Olof Johansson wrote:
> On Tue, Jan 26, 2016 at 4:11 PM, Andrew Lunn <andrew@lunn.ch> wrote:
> > PHY devices may only list clause 22, 45, and their PHY identifier
> > values as compatible values. No other compatible strings are allowed.
> > Make this clear in the documentation, and remove examples where
> > make/model compatible strings are listed.
> >
> > Signed-off-by: Andrew Lunn <andrew@lunn.ch>
> 
> I'm not sure I agree with the disallowing here. It's common practice
> to use a specific compatible to describe the actual hardware used, in
> case it's needed in the future for some driver to distinguish
> behavior, etc.
> 
> So while it should be required to include the clause compats, having a
> more specific one in there should be acceptable.

Hi Olof

Matching PHY devices to drivers has never used to compatible string,
other than the "ethernet-phy-XXXX.YYYY" string.  The PHY has two
registers containing a manufacture id, device id and revision,
registers 2 and 3. These are the XXXX and YYYY. The core code reads
these values, or uses the values from the ethernet-phy-XXXX.YYYY, and
uses them to find a driver which supports these values.

A make/model string is less specific than ethernet-phy-XXXX.YYYY.

I will reword the changelog to make it clear that
"ethernet-phy-XXXX.YYYY" is allowed.

Thanks
	Andrew
Olof Johansson Jan. 27, 2016, 5:32 p.m. UTC | #8
On Wed, Jan 27, 2016 at 9:11 AM, Andrew Lunn <andrew@lunn.ch> wrote:
> On Wed, Jan 27, 2016 at 08:41:56AM -0800, Olof Johansson wrote:
>> On Tue, Jan 26, 2016 at 4:11 PM, Andrew Lunn <andrew@lunn.ch> wrote:
>> > PHY devices may only list clause 22, 45, and their PHY identifier
>> > values as compatible values. No other compatible strings are allowed.
>> > Make this clear in the documentation, and remove examples where
>> > make/model compatible strings are listed.
>> >
>> > Signed-off-by: Andrew Lunn <andrew@lunn.ch>
>>
>> I'm not sure I agree with the disallowing here. It's common practice
>> to use a specific compatible to describe the actual hardware used, in
>> case it's needed in the future for some driver to distinguish
>> behavior, etc.
>>
>> So while it should be required to include the clause compats, having a
>> more specific one in there should be acceptable.
>
> Hi Olof
>
> Matching PHY devices to drivers has never used to compatible string,
> other than the "ethernet-phy-XXXX.YYYY" string.  The PHY has two
> registers containing a manufacture id, device id and revision,
> registers 2 and 3. These are the XXXX and YYYY. The core code reads
> these values, or uses the values from the ethernet-phy-XXXX.YYYY, and
> uses them to find a driver which supports these values.
>
> A make/model string is less specific than ethernet-phy-XXXX.YYYY.
>
> I will reword the changelog to make it clear that
> "ethernet-phy-XXXX.YYYY" is allowed.

Only case I can see the need for a make/model string is if there's a
need to add model-specific properties since you'd need a compatible
then (or make those properties shared between all phy bindings).


Anyway, we've never had a huge issue with this on other probable
busses, so we should be fine with the above. With the clarification
I'm OK with this change.


-Olof
Andrew Lunn Jan. 27, 2016, 5:36 p.m. UTC | #9
> Only case I can see the need for a make/model string is if there's a
> need to add model-specific properties since you'd need a compatible
> then (or make those properties shared between all phy bindings).

Documentation/devicetree/bindings/net/micrel-ksz90x1.txt

It adds optional properties to the phy node.

> Anyway, we've never had a huge issue with this on other probable
> busses, so we should be fine with the above. With the clarification
> I'm OK with this change.

Great.

Thanks
	Andrew
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/net/brcm,bcmgenet.txt b/Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
index 451fef26b4df..10587bdadbbe 100644
--- a/Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
+++ b/Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
@@ -68,7 +68,7 @@  ethernet@f0b60000 {
 		phy1: ethernet-phy@1 {
 			max-speed = <1000>;
 			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 {
 			max-speed = <1000>;
 			reg = <0x0>;
-			compatible = "brcm,bcm53125", "ethernet-phy-ieee802.3-c22";
+			compatible = "ethernet-phy-ieee802.3-c22";
 		};
 	};
 };
diff --git a/Documentation/devicetree/bindings/net/mdio-mux-gpio.txt b/Documentation/devicetree/bindings/net/mdio-mux-gpio.txt
index 79384113c2b0..694987d3c17a 100644
--- a/Documentation/devicetree/bindings/net/mdio-mux-gpio.txt
+++ b/Documentation/devicetree/bindings/net/mdio-mux-gpio.txt
@@ -38,7 +38,6 @@  Example :
 
 			phy11: ethernet-phy@1 {
 				reg = <1>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -48,7 +47,6 @@  Example :
 			};
 			phy12: ethernet-phy@2 {
 				reg = <2>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -58,7 +56,6 @@  Example :
 			};
 			phy13: ethernet-phy@3 {
 				reg = <3>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -68,7 +65,6 @@  Example :
 			};
 			phy14: ethernet-phy@4 {
 				reg = <4>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -85,7 +81,6 @@  Example :
 
 			phy21: ethernet-phy@1 {
 				reg = <1>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -95,7 +90,6 @@  Example :
 			};
 			phy22: ethernet-phy@2 {
 				reg = <2>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -105,7 +99,6 @@  Example :
 			};
 			phy23: ethernet-phy@3 {
 				reg = <3>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -115,7 +108,6 @@  Example :
 			};
 			phy24: ethernet-phy@4 {
 				reg = <4>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
diff --git a/Documentation/devicetree/bindings/net/mdio-mux.txt b/Documentation/devicetree/bindings/net/mdio-mux.txt
index f65606f8d632..491f5bd55203 100644
--- a/Documentation/devicetree/bindings/net/mdio-mux.txt
+++ b/Documentation/devicetree/bindings/net/mdio-mux.txt
@@ -47,7 +47,6 @@  Example :
 
 			phy11: ethernet-phy@1 {
 				reg = <1>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -57,7 +56,6 @@  Example :
 			};
 			phy12: ethernet-phy@2 {
 				reg = <2>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -67,7 +65,6 @@  Example :
 			};
 			phy13: ethernet-phy@3 {
 				reg = <3>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -77,7 +74,6 @@  Example :
 			};
 			phy14: ethernet-phy@4 {
 				reg = <4>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -94,7 +90,6 @@  Example :
 
 			phy21: ethernet-phy@1 {
 				reg = <1>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -104,7 +99,6 @@  Example :
 			};
 			phy22: ethernet-phy@2 {
 				reg = <2>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -114,7 +108,6 @@  Example :
 			};
 			phy23: ethernet-phy@3 {
 				reg = <3>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
@@ -124,7 +117,6 @@  Example :
 			};
 			phy24: ethernet-phy@4 {
 				reg = <4>;
-				compatible = "marvell,88e1149r";
 				marvell,reg-init = <3 0x10 0 0x5777>,
 					<3 0x11 0 0x00aa>,
 					<3 0x12 0 0x4105>,
diff --git a/Documentation/devicetree/bindings/net/phy.txt b/Documentation/devicetree/bindings/net/phy.txt
index 525e1658f2da..bc1c3c8bf8fa 100644
--- a/Documentation/devicetree/bindings/net/phy.txt
+++ b/Documentation/devicetree/bindings/net/phy.txt
@@ -17,8 +17,7 @@  Optional Properties:
   "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.
+  assume clause 22.
 
   If the phy's identifier is known then the list may contain an entry
   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,
             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...)
 
 - broken-turn-around: If set, indicates the PHY device does not correctly