Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1185930 > unrolled thread

[PATCH v4 0/3] net: enable inband link state negotiation only when explicitly requested

Started byStas Sergeev <stsp@list.ru>
First post2015-07-16 16:50 +0200
Last post2015-07-16 17:00 +0200
Articles 8 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v4 0/3] net: enable inband link state negotiation only when  explicitly requested Stas Sergeev <stsp@list.ru> - 2015-07-16 16:50 +0200
    [PATCH 3/3] mvneta: use inband status only when explicitly enabled Stas Sergeev <stsp@list.ru> - 2015-07-16 17:00 +0200
    [PATCH 1/3] fixed_phy: handle link-down case Stas Sergeev <stsp@list.ru> - 2015-07-16 17:00 +0200
      Re: [PATCH 1/3] fixed_phy: handle link-down case Florian Fainelli <f.fainelli@gmail.com> - 2015-07-17 01:30 +0200
        Re: [PATCH 1/3] fixed_phy: handle link-down case Stas Sergeev <stsp@list.ru> - 2015-07-17 13:30 +0200
          Re: [PATCH 1/3] fixed_phy: handle link-down case Florian Fainelli <f.fainelli@gmail.com> - 2015-07-18 00:10 +0200
            Re: [PATCH 1/3] fixed_phy: handle link-down case Stas Sergeev <stsp@list.ru> - 2015-07-18 23:20 +0200
    [PATCH 2/3] of_mdio: add new DT property 'managed' to specify the  PHY management type Stas Sergeev <stsp@list.ru> - 2015-07-16 17:00 +0200

#1185930 — [PATCH v4 0/3] net: enable inband link state negotiation only when explicitly requested

FromStas Sergeev <stsp@list.ru>
Date2015-07-16 16:50 +0200
Subject[PATCH v4 0/3] net: enable inband link state negotiation only when explicitly requested
Message-ID<pMSE2-1eX-15@gated-at.bofh.it>
Hello.

Currently the link status auto-negotiation is enabled
for any SGMII link with fixed-link DT binding.
The regression was reported:
https://lkml.org/lkml/2015/7/8/865
Apparently not all HW that implements SGMII protocol, generates the
inband status for the auto-negotiation to work.
More details here:
https://lkml.org/lkml/2015/7/10/206

The following patches reverts to the old behavior by default,
which is to not enable the auto-negotiation for fixed-link.
The new DT property is added that allows to explicitly request
the auto-negotiation.

Those who were affected by the change, please send your Tested-by,
Thanks!
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1185935 — [PATCH 3/3] mvneta: use inband status only when explicitly enabled

FromStas Sergeev <stsp@list.ru>
Date2015-07-16 17:00 +0200
Subject[PATCH 3/3] mvneta: use inband status only when explicitly enabled
Message-ID<pMSNI-1qq-13@gated-at.bofh.it>
In reply to#1185930
The commit 898b2970e2c9 ("mvneta: implement SGMII-based in-band link state
signaling") implemented the link parameters auto-negotiation unconditionally.
Unfortunately it appears that some HW that implements SGMII protocol,
doesn't generate the inband status, so it is not possible to auto-negotiate
anything with such HW.

This patch enables the auto-negotiation only if explicitly requested with
the 'managed' DT property.

This patch fixes the following regression:
https://lkml.org/lkml/2015/7/8/865

Signed-off-by: Stas Sergeev <stsp@users.sourceforge.net>

CC: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
CC: netdev@vger.kernel.org
CC: linux-kernel@vger.kernel.org
---
 drivers/net/ethernet/marvell/mvneta.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index 74176ec..7a1deee 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -3008,8 +3008,8 @@ static int mvneta_probe(struct platform_device *pdev)
 	const char *dt_mac_addr;
 	char hw_mac_addr[ETH_ALEN];
 	const char *mac_from;
+	const char *managed;
 	int phy_mode;
-	int fixed_phy = 0;
 	int err;

 	/* Our multiqueue support is not complete, so for now, only
@@ -3043,7 +3043,6 @@ static int mvneta_probe(struct platform_device *pdev)
 			dev_err(&pdev->dev, "cannot register fixed PHY\n");
 			goto err_free_irq;
 		}
-		fixed_phy = 1;

 		/* In the case of a fixed PHY, the DT node associated
 		 * to the PHY is the Ethernet MAC DT node.
@@ -3067,8 +3066,10 @@ static int mvneta_probe(struct platform_device *pdev)
 	pp = netdev_priv(dev);
 	pp->phy_node = phy_node;
 	pp->phy_interface = phy_mode;
-	pp->use_inband_status = (phy_mode == PHY_INTERFACE_MODE_SGMII) &&
-				fixed_phy;
+
+	err = of_property_read_string(dn, "managed", &managed);
+	pp->use_inband_status = (err == 0 &&
+				 strcmp(managed, "in-band-status") == 0);

 	pp->clk = devm_clk_get(&pdev->dev, NULL);
 	if (IS_ERR(pp->clk)) {
-- 
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1185936 — [PATCH 1/3] fixed_phy: handle link-down case

FromStas Sergeev <stsp@list.ru>
Date2015-07-16 17:00 +0200
Subject[PATCH 1/3] fixed_phy: handle link-down case
Message-ID<pMSNI-1qq-19@gated-at.bofh.it>
In reply to#1185930
Currently fixed_phy driver recognizes only the link-up state.
This simple patch adds an implementation of link-down state.
It fixes the status registers when link is down, and also allows
to register the fixed-phy with link down without specifying the speed.

Signed-off-by: Stas Sergeev <stsp@users.sourceforge.net>

CC: Florian Fainelli <f.fainelli@gmail.com>
CC: netdev@vger.kernel.org
CC: linux-kernel@vger.kernel.org
---
 drivers/net/phy/fixed_phy.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c
index 1960b46..479b93f 100644
--- a/drivers/net/phy/fixed_phy.c
+++ b/drivers/net/phy/fixed_phy.c
@@ -52,6 +52,10 @@ static int fixed_phy_update_regs(struct fixed_phy *fp)
 	u16 lpagb = 0;
 	u16 lpa = 0;

+	if (!fp->status.link)
+		goto done;
+	bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE;
+
 	if (fp->status.duplex) {
 		bmcr |= BMCR_FULLDPLX;

@@ -96,15 +100,13 @@ static int fixed_phy_update_regs(struct fixed_phy *fp)
 		}
 	}

-	if (fp->status.link)
-		bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE;
-
 	if (fp->status.pause)
 		lpa |= LPA_PAUSE_CAP;

 	if (fp->status.asym_pause)
 		lpa |= LPA_PAUSE_ASYM;

+done:
 	fp->regs[MII_PHYSID1] = 0;
 	fp->regs[MII_PHYSID2] = 0;

-- 
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1186317 — Re: [PATCH 1/3] fixed_phy: handle link-down case

FromFlorian Fainelli <f.fainelli@gmail.com>
Date2015-07-17 01:30 +0200
SubjectRe: [PATCH 1/3] fixed_phy: handle link-down case
Message-ID<pN0Lf-4CQ-3@gated-at.bofh.it>
In reply to#1185936
On 16/07/15 07:50, Stas Sergeev wrote:
> 
> Currently fixed_phy driver recognizes only the link-up state.
> This simple patch adds an implementation of link-down state.
> It fixes the status registers when link is down, and also allows
> to register the fixed-phy with link down without specifying the speed.

This patch still breaks my setups here, e.g: drivers/net/dsa/bcm_sf2.c,
but I will look into it.

Do we really need this for now for your two other patches to work
properly, or is it just nicer to have?

> 
> Signed-off-by: Stas Sergeev <stsp@users.sourceforge.net>
> 
> CC: Florian Fainelli <f.fainelli@gmail.com>
> CC: netdev@vger.kernel.org
> CC: linux-kernel@vger.kernel.org
> ---
>  drivers/net/phy/fixed_phy.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c
> index 1960b46..479b93f 100644
> --- a/drivers/net/phy/fixed_phy.c
> +++ b/drivers/net/phy/fixed_phy.c
> @@ -52,6 +52,10 @@ static int fixed_phy_update_regs(struct fixed_phy *fp)
>  	u16 lpagb = 0;
>  	u16 lpa = 0;
> 
> +	if (!fp->status.link)
> +		goto done;
> +	bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE;
> +
>  	if (fp->status.duplex) {
>  		bmcr |= BMCR_FULLDPLX;
> 
> @@ -96,15 +100,13 @@ static int fixed_phy_update_regs(struct fixed_phy *fp)
>  		}
>  	}
> 
> -	if (fp->status.link)
> -		bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE;
> -
>  	if (fp->status.pause)
>  		lpa |= LPA_PAUSE_CAP;
> 
>  	if (fp->status.asym_pause)
>  		lpa |= LPA_PAUSE_ASYM;
> 
> +done:
>  	fp->regs[MII_PHYSID1] = 0;
>  	fp->regs[MII_PHYSID2] = 0;
> 


-- 
Florian
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1186721 — Re: [PATCH 1/3] fixed_phy: handle link-down case

FromStas Sergeev <stsp@list.ru>
Date2015-07-17 13:30 +0200
SubjectRe: [PATCH 1/3] fixed_phy: handle link-down case
Message-ID<pNc02-3ZN-5@gated-at.bofh.it>
In reply to#1186317
17.07.2015 02:25, Florian Fainelli пишет:
> On 16/07/15 07:50, Stas Sergeev wrote:
>>
>> Currently fixed_phy driver recognizes only the link-up state.
>> This simple patch adds an implementation of link-down state.
>> It fixes the status registers when link is down, and also allows
>> to register the fixed-phy with link down without specifying the speed.
> 
> This patch still breaks my setups here, e.g: drivers/net/dsa/bcm_sf2.c,
> but I will look into it.
> 
> Do we really need this for now for your two other patches to work
> properly, or is it just nicer to have?
Yes, absolutely.
Otherwise registering fixed phy will return -EINVAL
because of the missing link speed (even though the link
is down).

Please, see what makes a problem. I can't reproduce what you report.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1187227 — Re: [PATCH 1/3] fixed_phy: handle link-down case

FromFlorian Fainelli <f.fainelli@gmail.com>
Date2015-07-18 00:10 +0200
SubjectRe: [PATCH 1/3] fixed_phy: handle link-down case
Message-ID<pNlZo-1wR-9@gated-at.bofh.it>
In reply to#1186721
On 17/07/15 13:03, Stas Sergeev wrote:
> 17.07.2015 21:50, Florian Fainelli пишет:
>> On 17/07/15 04:26, Stas Sergeev wrote:
>>> 17.07.2015 02:25, Florian Fainelli пишет:
>>>> On 16/07/15 07:50, Stas Sergeev wrote:
>>>>> Currently fixed_phy driver recognizes only the link-up state.
>>>>> This simple patch adds an implementation of link-down state.
>>>>> It fixes the status registers when link is down, and also allows
>>>>> to register the fixed-phy with link down without specifying the speed.
>>>> This patch still breaks my setups here, e.g: drivers/net/dsa/bcm_sf2.c,
>>>> but I will look into it.
>>>>
>>>> Do we really need this for now for your two other patches to work
>>>> properly, or is it just nicer to have?
>>> Yes, absolutely.
>>> Otherwise registering fixed phy will return -EINVAL
>>> because of the missing link speed (even though the link
>>> is down).
>> Ok, I see the problem that you have now. Arguably you could say that
>> according to the fixed-link binding, speed needs to be specified and the
>> code correctly errors out with such an error if you do not specify it. I
> Aren't you missing the fact that .link=0?
> I think what you say is true only for the link-up case, no?
> .speed==0 is valid for link-down IMHO: no link - zero speed.

Pardon me being very dense and stupid here, but your problem is that the
"speed" parameter is not specified in your DT, and we end-up returning
-EINVAL from of_phy_register_fixed_link(), is that what is happening?

And even if we silenced that error, we would end-up calling
fixed_phy_add() which would also return -EINVAL because then, we would
have status.link = 1, but no speed. So I better understand what is it
that you are after here, and that is also a broken Device Tree, is not
it? So this was the reason why in earlier versions of the patchset you
ended-up with a given speed which would make us pass this condition, right?

> 
>> So is different is that I use a link_update callback, and so we rely on
>> at least one call of this function to initialize the hardware in
>> drivers/net/dsa/bcm_sf2.c
> Do you mean this?:
> core_writel(priv, reg, CORE_STS_OVERRIDE_GMIIP_PORT(port));
> Maybe just moving the HW initialization bits to some init func
> will be a quick fix?

Well, the problem with that is that to know how we should be configuring
the hardware in the adjust_link function, we need to run the link_update
function first. By default, there is no auto-negotiation on these fixed
links at all, so we cannot rely on any value being programmed other than
those specified in DT.

> 
>>   for this to work, after that, the hardware
>> reflects the fixed link parameters we configured, and we feed the
>> fixed_phy_status information from the hardware directly.
>>
>> >From there I see two different ways to fix this:
>>
>> - we ignore the fixed_phy_update_regs return value in fixed_phy_add(),
>> but that will make us avoid doing verification on the speed, which is
>> not so great, but is essentially what your patch does anyway
> No, it does not. All it does is to allow no speed _when link is down_,
> which is IMHO a very logical fix. The speed checks for the link-up
> case are all still there.
> 
>> - we update the use of the fixed PHY link_update in drivers using it
> IMHO just 2 drivers: bcmii.c and bcm_sf2.c, and the change
> is likely trivial, although of course I am not sure in details.

The changes are not trivial, it took a while to get that logic done
correctly, and this would increase the number of patches to backport to
-stable, which is not ideal.

> 
>>   and
>> convert them to use fixed_phy_update_state instead, which can take some
>> time and effort to convert
> Maybe just move the initialization bits out of the link_update
> callback, but still use the callback for now? Should be simple, no?

Let me see if I have a smart idea other the weekend on how to do this.
-- 
Florian
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1187502 — Re: [PATCH 1/3] fixed_phy: handle link-down case

FromStas Sergeev <stsp@list.ru>
Date2015-07-18 23:20 +0200
SubjectRe: [PATCH 1/3] fixed_phy: handle link-down case
Message-ID<pNHGx-7ss-7@gated-at.bofh.it>
In reply to#1187227
18.07.2015 05:29, Florian Fainelli пишет:
> Le 07/17/15 16:53, Stas Sergeev a écrit :
>> 18.07.2015 02:35, Florian Fainelli пишет:
>>> On 17/07/15 16:24, Stas Sergeev wrote:
>>>> 18.07.2015 01:01, Florian Fainelli пишет:
>>>>> On 17/07/15 13:03, Stas Sergeev wrote:
>>>>>> 17.07.2015 21:50, Florian Fainelli пишет:
>>>>>>> On 17/07/15 04:26, Stas Sergeev wrote:
>>>>>>>> 17.07.2015 02:25, Florian Fainelli пишет:
>>>>>>>>> On 16/07/15 07:50, Stas Sergeev wrote:
>>>>>>>>>> Currently fixed_phy driver recognizes only the link-up state.
>>>>>>>>>> This simple patch adds an implementation of link-down state.
>>>>>>>>>> It fixes the status registers when link is down, and also allows
>>>>>>>>>> to register the fixed-phy with link down without specifying the
>>>>>>>>>> speed.
>>>>>>>>> This patch still breaks my setups here, e.g:
>>>>>>>>> drivers/net/dsa/bcm_sf2.c,
>>>>>>>>> but I will look into it.
>>>>>>>>>
>>>>>>>>> Do we really need this for now for your two other patches to work
>>>>>>>>> properly, or is it just nicer to have?
>>>>>>>> Yes, absolutely.
>>>>>>>> Otherwise registering fixed phy will return -EINVAL
>>>>>>>> because of the missing link speed (even though the link
>>>>>>>> is down).
>>>>>>> Ok, I see the problem that you have now. Arguably you could say that
>>>>>>> according to the fixed-link binding, speed needs to be specified and
>>>>>>> the
>>>>>>> code correctly errors out with such an error if you do not specify
>>>>>>> it. I
>>>>>> Aren't you missing the fact that .link=0?
>>>>>> I think what you say is true only for the link-up case, no?
>>>>>> .speed==0 is valid for link-down IMHO: no link - zero speed.
>>>>> Pardon me being very dense and stupid here, but your problem is that
>>>>> the
>>>>> "speed" parameter is not specified in your DT,
>>>> Not even a fixed-link at all, since the latest patches.
>>>> I removed fixed-link defs from my DT.
>>> Hummm, okay, so you just have the inband-status property and that's it,
>>> not even a fixed-link node anymore, right? How does
>>> mvneta_fixed_link_update() work then since it needs a fixed PHY to be
>>> registered?
>> You can see it from my patch:
>> ---
>>
>> +    err = of_property_read_string(np, "managed", &managed);
>> +    if (err == 0) {
>> +        if (strcmp(managed, "in-band-status") == 0) {
>> +            /* status is zeroed, namely its .link member */
>> +            phy = fixed_phy_register(PHY_POLL, &status, np);
>> +            return IS_ERR(phy) ? PTR_ERR(phy) : 0;
>> +        }
>> +    }
>>
>> ---
>> which is the hunk added to the of_phy_register_fixed_link().
>> So in that case we register fixed-phy, but do not parse the fixed-link.
> Ok, I missed that part. Could not you just override everything that is
> needed here to get past the point where you register your fixed PHY even
> with link = 0, this will be discarded anyway once you start in-band
> negotiation.
Maybe my English is bad, but I have problems understanding
some of your senteneces. What do you mean?
If you meant to re-use the existing registration code instead
of adding a new hunk, please note that there is no fixed-link
node at all, so we do not even enter the parsing code block.
As such, there is nothing to override.

> I will work on something anyway. 
Thanks, hope to hear from you soon.
This stream of regressions is disturbing. :)
Should finally be fixed for real.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1185938 — [PATCH 2/3] of_mdio: add new DT property 'managed' to specify the PHY management type

FromStas Sergeev <stsp@list.ru>
Date2015-07-16 17:00 +0200
Subject[PATCH 2/3] of_mdio: add new DT property 'managed' to specify the PHY management type
Message-ID<pMSNJ-1qq-23@gated-at.bofh.it>
In reply to#1185930
Currently the PHY management type is selected by the MAC driver arbitrary.
The decision is based on the presence of the "fixed-link" node and on a
will of the driver's authors.
This caused a regression recently, when mvneta driver suddenly started
to use the in-band status for auto-negotiation on fixed links.
It appears the auto-negotiation may not work when expected by the MAC driver.
Sebastien Rannou explains:
<< Yes, I confirm that my HW does not generate an in-band status. AFAIK, it's
a PHY that aggregates 4xSGMIIs to 1xQSGMII ; the MAC side of the PHY (with
inband status) is connected to the switch through QSGMII, and in this context
we are on the media side of the PHY. >>
https://lkml.org/lkml/2015/7/10/206

This patch introduces the new string property 'managed' that allows
the user to set the management type explicitly.
The supported values are:
"auto" - default. Uses either MDIO or nothing, depending on the presence
of the fixed-link node
"in-band-status" - use in-band status

Signed-off-by: Stas Sergeev <stsp@users.sourceforge.net>

CC: Rob Herring <robh+dt@kernel.org>
CC: Pawel Moll <pawel.moll@arm.com>
CC: Mark Rutland <mark.rutland@arm.com>
CC: Ian Campbell <ijc+devicetree@hellion.org.uk>
CC: Kumar Gala <galak@codeaurora.org>
CC: Florian Fainelli <f.fainelli@gmail.com>
CC: Grant Likely <grant.likely@linaro.org>
CC: devicetree@vger.kernel.org
CC: linux-kernel@vger.kernel.org
CC: netdev@vger.kernel.org
---
 Documentation/devicetree/bindings/net/ethernet.txt |  4 ++++
 drivers/of/of_mdio.c                               | 19 +++++++++++++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/ethernet.txt b/Documentation/devicetree/bindings/net/ethernet.txt
index 3fc3605..cb115a3 100644
--- a/Documentation/devicetree/bindings/net/ethernet.txt
+++ b/Documentation/devicetree/bindings/net/ethernet.txt
@@ -19,7 +19,11 @@ The following properties are common to the Ethernet controllers:
 - phy: the same as "phy-handle" property, not recommended for new bindings.
 - phy-device: the same as "phy-handle" property, not recommended for new
   bindings.
+- managed: string, specifies the PHY management type. Supported values are:
+  "auto", "in-band-status". "auto" is the default, it usess MDIO for
+  management if fixed-link is not specified.

 Child nodes of the Ethernet controller are typically the individual PHY devices
 connected via the MDIO bus (sometimes the MDIO bus controller is separate).
 They are described in the phy.txt file in this same directory.
+For non-MDIO PHY management see fixed-link.txt.
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index 1bd4305..5dc1ef95 100644
--- a/drivers/of/of_mdio.c
+++ b/drivers/of/of_mdio.c
@@ -262,7 +262,8 @@ EXPORT_SYMBOL(of_phy_attach);
 bool of_phy_is_fixed_link(struct device_node *np)
 {
 	struct device_node *dn;
-	int len;
+	int len, err;
+	const char *managed;

 	/* New binding */
 	dn = of_get_child_by_name(np, "fixed-link");
@@ -271,6 +272,10 @@ bool of_phy_is_fixed_link(struct device_node *np)
 		return true;
 	}

+	err = of_property_read_string(np, "managed", &managed);
+	if (err == 0 && strcmp(managed, "auto") != 0)
+		return true;
+
 	/* Old binding */
 	if (of_get_property(np, "fixed-link", &len) &&
 	    len == (5 * sizeof(__be32)))
@@ -285,8 +290,18 @@ int of_phy_register_fixed_link(struct device_node *np)
 	struct fixed_phy_status status = {};
 	struct device_node *fixed_link_node;
 	const __be32 *fixed_link_prop;
-	int len;
+	int len, err;
 	struct phy_device *phy;
+	const char *managed;
+
+	err = of_property_read_string(np, "managed", &managed);
+	if (err == 0) {
+		if (strcmp(managed, "in-band-status") == 0) {
+			/* status is zeroed, namely its .link member */
+			phy = fixed_phy_register(PHY_POLL, &status, np);
+			return IS_ERR(phy) ? PTR_ERR(phy) : 0;
+		}
+	}

 	/* New binding */
 	fixed_link_node = of_get_child_by_name(np, "fixed-link");
-- 
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web