All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII
@ 2020-02-20 16:36 Nicolas Saenz Julienne
  2020-02-20 17:48 ` Nicolas Saenz Julienne
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Nicolas Saenz Julienne @ 2020-02-20 16:36 UTC (permalink / raw)
  To: u-boot

As per Linux's driver, ID_MODE_DIS is only set when the PHY interface is
RGMII. Don't enable it for the rest of setups.

This has been seen to misconfigure RPi4's PHY when booting Linux.

Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
 drivers/net/bcmgenet.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bcmgenet.c b/drivers/net/bcmgenet.c
index 8f4848aec6..e971b556ac 100644
--- a/drivers/net/bcmgenet.c
+++ b/drivers/net/bcmgenet.c
@@ -448,7 +448,10 @@ static int bcmgenet_adjust_link(struct bcmgenet_eth_priv *priv)
 	}
 
 	clrsetbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, OOB_DISABLE,
-			RGMII_LINK | RGMII_MODE_EN | ID_MODE_DIS);
+			RGMII_LINK | RGMII_MODE_EN);
+
+	if (phy_dev->interface == PHY_INTERFACE_MODE_RGMII)
+		setbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, ID_MODE_DIS);
 
 	writel(speed << CMD_SPEED_SHIFT, (priv->mac_reg + UMAC_CMD));
 
-- 
2.25.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII
  2020-02-20 16:36 [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII Nicolas Saenz Julienne
@ 2020-02-20 17:48 ` Nicolas Saenz Julienne
  2020-03-11 15:23   ` Nicolas Saenz Julienne
  2020-02-20 18:58 ` Matthias Brugger
  2020-02-20 19:05 ` Florian Fainelli
  2 siblings, 1 reply; 8+ messages in thread
From: Nicolas Saenz Julienne @ 2020-02-20 17:48 UTC (permalink / raw)
  To: u-boot

On Thu, 2020-02-20 at 17:36 +0100, Nicolas Saenz Julienne wrote:
> As per Linux's driver, ID_MODE_DIS is only set when the PHY interface is
> RGMII. Don't enable it for the rest of setups.
> 
> This has been seen to misconfigure RPi4's PHY when booting Linux.
> 
> Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>

I forgot to add:

Fixes: d53e3fa385 ("net: Add support for Broadcom GENETv5 Ethernet controller")

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200220/9d3f1075/attachment-0001.sig>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII
  2020-02-20 16:36 [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII Nicolas Saenz Julienne
  2020-02-20 17:48 ` Nicolas Saenz Julienne
@ 2020-02-20 18:58 ` Matthias Brugger
  2020-02-21 10:54   ` Nicolas Saenz Julienne
  2020-02-20 19:05 ` Florian Fainelli
  2 siblings, 1 reply; 8+ messages in thread
From: Matthias Brugger @ 2020-02-20 18:58 UTC (permalink / raw)
  To: u-boot



On 20/02/2020 17:36, Nicolas Saenz Julienne wrote:
> As per Linux's driver, ID_MODE_DIS is only set when the PHY interface is
> RGMII. Don't enable it for the rest of setups.
> 
> This has been seen to misconfigure RPi4's PHY when booting Linux.
> 
> Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> ---
>  drivers/net/bcmgenet.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/bcmgenet.c b/drivers/net/bcmgenet.c
> index 8f4848aec6..e971b556ac 100644
> --- a/drivers/net/bcmgenet.c
> +++ b/drivers/net/bcmgenet.c
> @@ -448,7 +448,10 @@ static int bcmgenet_adjust_link(struct bcmgenet_eth_priv *priv)
>  	}
>  
>  	clrsetbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, OOB_DISABLE,
> -			RGMII_LINK | RGMII_MODE_EN | ID_MODE_DIS);
> +			RGMII_LINK | RGMII_MODE_EN);
> +
> +	if (phy_dev->interface == PHY_INTERFACE_MODE_RGMII)
> +		setbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, ID_MODE_DIS);

Is this given because by different DTS? Shouldn't that be uniform on the RPi4?

BTW Joe, will you take patches for this driver through your branch? For now I
delegated it to me, but I'm fine either way.

Regards,
Matthias

>  
>  	writel(speed << CMD_SPEED_SHIFT, (priv->mac_reg + UMAC_CMD));
>  
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII
  2020-02-20 16:36 [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII Nicolas Saenz Julienne
  2020-02-20 17:48 ` Nicolas Saenz Julienne
  2020-02-20 18:58 ` Matthias Brugger
@ 2020-02-20 19:05 ` Florian Fainelli
  2020-02-21 10:57   ` Nicolas Saenz Julienne
  2 siblings, 1 reply; 8+ messages in thread
From: Florian Fainelli @ 2020-02-20 19:05 UTC (permalink / raw)
  To: u-boot

On 2/20/20 8:36 AM, Nicolas Saenz Julienne wrote:
> As per Linux's driver, ID_MODE_DIS is only set when the PHY interface is
> RGMII. Don't enable it for the rest of setups.
> 
> This has been seen to misconfigure RPi4's PHY when booting Linux.
> 
> Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>

Does the failure look like the following: you have a driver for the
Broadcom PHY used on the Pi4 in u-boot, and the phy_dev->interface value
is being used to configure the Ethernet PHY chip in a certain way.

Later when you boot Linux, you do not have CONFIG_BROADCOM_PHY enabled
so the Generic PHY driver gets used instead, and there is a disagreement
between the AMAC and PHY as to whom should be adding the delays?

At any rate:

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

> ---
>  drivers/net/bcmgenet.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/bcmgenet.c b/drivers/net/bcmgenet.c
> index 8f4848aec6..e971b556ac 100644
> --- a/drivers/net/bcmgenet.c
> +++ b/drivers/net/bcmgenet.c
> @@ -448,7 +448,10 @@ static int bcmgenet_adjust_link(struct bcmgenet_eth_priv *priv)
>  	}
>  
>  	clrsetbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, OOB_DISABLE,
> -			RGMII_LINK | RGMII_MODE_EN | ID_MODE_DIS);
> +			RGMII_LINK | RGMII_MODE_EN);
> +
> +	if (phy_dev->interface == PHY_INTERFACE_MODE_RGMII)
> +		setbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, ID_MODE_DIS);
>  
>  	writel(speed << CMD_SPEED_SHIFT, (priv->mac_reg + UMAC_CMD));
>  
> 


-- 
Florian

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII
  2020-02-20 18:58 ` Matthias Brugger
@ 2020-02-21 10:54   ` Nicolas Saenz Julienne
  2020-02-21 11:02     ` Nicolas Saenz Julienne
  0 siblings, 1 reply; 8+ messages in thread
From: Nicolas Saenz Julienne @ 2020-02-21 10:54 UTC (permalink / raw)
  To: u-boot

Hi Matthias,

On Thu, 2020-02-20 at 19:58 +0100, Matthias Brugger wrote:
> 
> On 20/02/2020 17:36, Nicolas Saenz Julienne wrote:
> > As per Linux's driver, ID_MODE_DIS is only set when the PHY interface is
> > RGMII. Don't enable it for the rest of setups.
> > 
> > This has been seen to misconfigure RPi4's PHY when booting Linux.
> > 
> > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> > ---
> >  drivers/net/bcmgenet.c | 5 ++++-
> >  1 file changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/net/bcmgenet.c b/drivers/net/bcmgenet.c
> > index 8f4848aec6..e971b556ac 100644
> > --- a/drivers/net/bcmgenet.c
> > +++ b/drivers/net/bcmgenet.c
> > @@ -448,7 +448,10 @@ static int bcmgenet_adjust_link(struct
> > bcmgenet_eth_priv *priv)
> >  	}
> >  
> >  	clrsetbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, OOB_DISABLE,
> > -			RGMII_LINK | RGMII_MODE_EN | ID_MODE_DIS);
> > +			RGMII_LINK | RGMII_MODE_EN);
> > +
> > +	if (phy_dev->interface == PHY_INTERFACE_MODE_RGMII)
> > +		setbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, ID_MODE_DIS);
> 
> Is this given because by different DTS? Shouldn't that be uniform on the RPi4?

The interface type is read from DT, the 'phy-mode' property. In the case of the
RPi4 it's 'rgmii-rxid'.

The downstream DT used to be configured differently ('rgmii' and using
'ethernet-phy-ieee802.3-c22'), that's why you might have seen the board working
at some point with this driver. But as we updated the DT to match upstream's we
switched to 'rgmii-rxid' which is being misconfigured as 'rgmii' in u-boot. So
you have u-boot configuring 'rgmii' while Linux configures 'rgmii-rxid', which
fails to clear the ID_MODE_DIS bit. This, I imagine, blocks the delay
configuration process from the PHY (I don't have any documentation).

Regards,
Nicolas

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200221/f0024b31/attachment.sig>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII
  2020-02-20 19:05 ` Florian Fainelli
@ 2020-02-21 10:57   ` Nicolas Saenz Julienne
  0 siblings, 0 replies; 8+ messages in thread
From: Nicolas Saenz Julienne @ 2020-02-21 10:57 UTC (permalink / raw)
  To: u-boot

Hi Florian,

On Thu, 2020-02-20 at 11:05 -0800, Florian Fainelli wrote:
> On 2/20/20 8:36 AM, Nicolas Saenz Julienne wrote:
> > As per Linux's driver, ID_MODE_DIS is only set when the PHY interface is
> > RGMII. Don't enable it for the rest of setups.
> > 
> > This has been seen to misconfigure RPi4's PHY when booting Linux.
> > 
> > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> 
> Does the failure look like the following: you have a driver for the
> Broadcom PHY used on the Pi4 in u-boot, and the phy_dev->interface value
> is being used to configure the Ethernet PHY chip in a certain way.
> 
> Later when you boot Linux, you do not have CONFIG_BROADCOM_PHY enabled
> so the Generic PHY driver gets used instead, and there is a disagreement
> between the AMAC and PHY as to whom should be adding the delays?

I added an explanation to Matthias' response. I think it fits yours, modulo my
limited knowledge in the area :)

> At any rate:
> 
> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

Thanks!

Regards,
Nicolas

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200221/8431dedf/attachment.sig>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII
  2020-02-21 10:54   ` Nicolas Saenz Julienne
@ 2020-02-21 11:02     ` Nicolas Saenz Julienne
  0 siblings, 0 replies; 8+ messages in thread
From: Nicolas Saenz Julienne @ 2020-02-21 11:02 UTC (permalink / raw)
  To: u-boot

Florian,

On Fri, 2020-02-21 at 11:54 +0100, Nicolas Saenz Julienne wrote:
> Hi Matthias,
> 
> On Thu, 2020-02-20 at 19:58 +0100, Matthias Brugger wrote:
> > On 20/02/2020 17:36, Nicolas Saenz Julienne wrote:
> > > As per Linux's driver, ID_MODE_DIS is only set when the PHY interface is
> > > RGMII. Don't enable it for the rest of setups.
> > > 
> > > This has been seen to misconfigure RPi4's PHY when booting Linux.
> > > 
> > > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> > > ---
> > >  drivers/net/bcmgenet.c | 5 ++++-
> > >  1 file changed, 4 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/net/bcmgenet.c b/drivers/net/bcmgenet.c
> > > index 8f4848aec6..e971b556ac 100644
> > > --- a/drivers/net/bcmgenet.c
> > > +++ b/drivers/net/bcmgenet.c
> > > @@ -448,7 +448,10 @@ static int bcmgenet_adjust_link(struct
> > > bcmgenet_eth_priv *priv)
> > >  	}
> > >  
> > >  	clrsetbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, OOB_DISABLE,
> > > -			RGMII_LINK | RGMII_MODE_EN | ID_MODE_DIS);
> > > +			RGMII_LINK | RGMII_MODE_EN);
> > > +
> > > +	if (phy_dev->interface == PHY_INTERFACE_MODE_RGMII)
> > > +		setbits_32(priv->mac_reg + EXT_RGMII_OOB_CTRL, ID_MODE_DIS);
> > 
> > Is this given because by different DTS? Shouldn't that be uniform on the
> > RPi4?
> 
> The interface type is read from DT, the 'phy-mode' property. In the case of
> the
> RPi4 it's 'rgmii-rxid'.
> 
> The downstream DT used to be configured differently ('rgmii' and using
> 'ethernet-phy-ieee802.3-c22'), that's why you might have seen the board
> working
> at some point with this driver. But as we updated the DT to match upstream's
> we
> switched to 'rgmii-rxid' which is being misconfigured as 'rgmii' in u-boot. So
> you have u-boot configuring 'rgmii' while Linux configures 'rgmii-rxid', which
> fails to clear the ID_MODE_DIS bit. This, I imagine, blocks the delay
> configuration process from the PHY (I don't have any documentation).

With this in mind, would it make sens to do this in the Linux driver?

diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c
b/drivers/net/ethernet/broadcom/genet/bcmmii.c
index 6392a2530183..10244941a7a6 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
@@ -294,6 +294,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
	*/
	if (priv->ext_phy) {
		reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
+               reg &= ~ID_MODE_DIS;
		reg |= id_mode_dis;
		if (GENET_IS_V1(priv) || GENET_IS_V2(priv) || GENET_IS_V3(priv))
			reg |= RGMII_MODE_EN_V123;

It all comes down to wheter we trust bootloader's config or not.

Regards,
Nicolas

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200221/b3b0b39d/attachment.sig>

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII
  2020-02-20 17:48 ` Nicolas Saenz Julienne
@ 2020-03-11 15:23   ` Nicolas Saenz Julienne
  0 siblings, 0 replies; 8+ messages in thread
From: Nicolas Saenz Julienne @ 2020-03-11 15:23 UTC (permalink / raw)
  To: u-boot

On Thu, 2020-02-20 at 18:48 +0100, Nicolas Saenz Julienne wrote:
> On Thu, 2020-02-20 at 17:36 +0100, Nicolas Saenz Julienne wrote:
> > As per Linux's driver, ID_MODE_DIS is only set when the PHY interface is
> > RGMII. Don't enable it for the rest of setups.
> > 
> > This has been seen to misconfigure RPi4's PHY when booting Linux.
> > 
> > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> 
> I forgot to add:
> 
> Fixes: d53e3fa385 ("net: Add support for Broadcom GENETv5 Ethernet
> controller")

Ping :)

Regards,
Nicolas

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200311/81793e0e/attachment.sig>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-03-11 15:23 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-20 16:36 [PATCH] net: bcmgenet: Don't set ID_MODE_DIS when not using RGMII Nicolas Saenz Julienne
2020-02-20 17:48 ` Nicolas Saenz Julienne
2020-03-11 15:23   ` Nicolas Saenz Julienne
2020-02-20 18:58 ` Matthias Brugger
2020-02-21 10:54   ` Nicolas Saenz Julienne
2020-02-21 11:02     ` Nicolas Saenz Julienne
2020-02-20 19:05 ` Florian Fainelli
2020-02-21 10:57   ` Nicolas Saenz Julienne

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.