[net] net: phy: mscc: fix packet loss due to RGMII delays

Message ID 20230627091109.3374701-1-vladimir.oltean@nxp.com
State New
Headers
Series [net] net: phy: mscc: fix packet loss due to RGMII delays |

Commit Message

Vladimir Oltean June 27, 2023, 9:11 a.m. UTC
  Two deadly typos break RX and TX traffic on the VSC8502 PHY using RGMII
if phy-mode = "rgmii-id" or "rgmii-txid", and no "tx-internal-delay-ps"
override exists. The negative error code from phy_get_internal_delay()
does not get overridden with the delay deduced from the phy-mode, and
later gets committed to hardware. Also, the rx_delay gets overridden by
what should have been the tx_delay.

Fixes: dbb050d2bfc8 ("phy: mscc: Add support for RGMII delay configuration")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
 drivers/net/phy/mscc/mscc_main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

Harini Katakam June 27, 2023, 9:19 a.m. UTC | #1
> -----Original Message-----
> From: Vladimir Oltean <vladimir.oltean@nxp.com>
> Sent: Tuesday, June 27, 2023 2:41 PM
> To: netdev@vger.kernel.org
> Cc: Jose Abreu <Jose.Abreu@synopsys.com>; Andrew Lunn
> <andrew@lunn.ch>; Heiner Kallweit <hkallweit1@gmail.com>; Russell King
> <linux@armlinux.org.uk>; David S. Miller <davem@davemloft.net>; Eric
> Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; Paolo
> Abeni <pabeni@redhat.com>; linux-kernel@vger.kernel.org; Katakam, Harini
> <harini.katakam@amd.com>
> Subject: [PATCH net] net: phy: mscc: fix packet loss due to RGMII delays
> 
> Two deadly typos break RX and TX traffic on the VSC8502 PHY using RGMII
> if phy-mode = "rgmii-id" or "rgmii-txid", and no "tx-internal-delay-ps"
> override exists. The negative error code from phy_get_internal_delay()
> does not get overridden with the delay deduced from the phy-mode, and
> later gets committed to hardware. Also, the rx_delay gets overridden by
> what should have been the tx_delay.
> 
> Fixes: dbb050d2bfc8 ("phy: mscc: Add support for RGMII delay
> configuration")
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>

Thanks
Reviewed-by: Harini Katakam <harini.katakam@amd.com>

Regards,
Harini
  
Vladimir Oltean June 27, 2023, 12:13 p.m. UTC | #2
On Tue, Jun 27, 2023 at 12:11:09PM +0300, Vladimir Oltean wrote:
> Two deadly typos break RX and TX traffic on the VSC8502 PHY using RGMII
> if phy-mode = "rgmii-id" or "rgmii-txid", and no "tx-internal-delay-ps"
> override exists. The negative error code from phy_get_internal_delay()
> does not get overridden with the delay deduced from the phy-mode, and
> later gets committed to hardware. Also, the rx_delay gets overridden by
> what should have been the tx_delay.
> 
> Fixes: dbb050d2bfc8 ("phy: mscc: Add support for RGMII delay configuration")
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> ---

I may have mis-targeted this patch towards "net" while the "net-next"
pull request has not been yet sent out. Can patchwork be instructed to
re-run the tests on net-next?
  
Paolo Abeni June 27, 2023, 12:47 p.m. UTC | #3
On Tue, 2023-06-27 at 15:13 +0300, Vladimir Oltean wrote:
> On Tue, Jun 27, 2023 at 12:11:09PM +0300, Vladimir Oltean wrote:
> > Two deadly typos break RX and TX traffic on the VSC8502 PHY using RGMII
> > if phy-mode = "rgmii-id" or "rgmii-txid", and no "tx-internal-delay-ps"
> > override exists. The negative error code from phy_get_internal_delay()
> > does not get overridden with the delay deduced from the phy-mode, and
> > later gets committed to hardware. Also, the rx_delay gets overridden by
> > what should have been the tx_delay.
> > 
> > Fixes: dbb050d2bfc8 ("phy: mscc: Add support for RGMII delay configuration")
> > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> > ---
> 
> I may have mis-targeted this patch towards "net" while the "net-next"
> pull request has not been yet sent out. Can patchwork be instructed to
> re-run the tests on net-next?

I'm not 110% sure, but I think you have to re-send the patch with a
different prefix to achieve the above.

Cheers,

Paolo
>
  

Patch

diff --git a/drivers/net/phy/mscc/mscc_main.c b/drivers/net/phy/mscc/mscc_main.c
index 669a4a7a28ce..4171f01d34e5 100644
--- a/drivers/net/phy/mscc/mscc_main.c
+++ b/drivers/net/phy/mscc/mscc_main.c
@@ -563,9 +563,9 @@  static int vsc85xx_update_rgmii_cntl(struct phy_device *phydev, u32 rgmii_cntl,
 	if (tx_delay < 0) {
 		if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID ||
 		    phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
-			rx_delay = RGMII_CLK_DELAY_2_0_NS;
+			tx_delay = RGMII_CLK_DELAY_2_0_NS;
 		else
-			rx_delay = RGMII_CLK_DELAY_0_2_NS;
+			tx_delay = RGMII_CLK_DELAY_0_2_NS;
 	}
 
 	reg_val |= rx_delay << rgmii_rx_delay_pos;