86 lines
2.9 KiB
Diff
86 lines
2.9 KiB
Diff
|
From c87bfec5830d104e564d536a2f5ff19f46eabf89 Mon Sep 17 00:00:00 2001
|
||
|
From: Asmaa Mnebhi <asmaa@nvidia.com>
|
||
|
Date: Tue, 28 Feb 2023 18:03:12 -0500
|
||
|
Subject: [PATCH backport v5.10 30/70] UBUNTU: SAUCE: mlxbf-gige: Fix
|
||
|
intermittent no ip issue
|
||
|
|
||
|
BugLink: https://bugs.launchpad.net/bugs/2008833
|
||
|
|
||
|
During the reboot test, the OOB might not get an ip assigned.
|
||
|
This is due to a race condition between phy_startcall and the
|
||
|
RX DMA being enabled and depends on the amount of background
|
||
|
traffic received by the OOB. Enable the RX DMA after teh phy
|
||
|
is started.
|
||
|
|
||
|
Signed-off-by: Asmaa Mnebhi <asmaa@nvidia.com>
|
||
|
Acked-by: Tim Gardner <tim.gardner@canonical.com>
|
||
|
Acked-by: Bartlomiej Zolnierkiewicz <bartlomiej.zolnierkiewicz@canonical.com>
|
||
|
Signed-off-by: Bartlomiej Zolnierkiewicz <bartlomiej.zolnierkiewicz@canonical.com>
|
||
|
---
|
||
|
.../ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c | 14 +++++++-------
|
||
|
.../ethernet/mellanox/mlxbf_gige/mlxbf_gige_rx.c | 6 +++---
|
||
|
2 files changed, 10 insertions(+), 10 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
|
||
|
index e8f9290a8..085240890 100644
|
||
|
--- a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
|
||
|
+++ b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
|
||
|
@@ -147,14 +147,14 @@ static int mlxbf_gige_open(struct net_device *netdev)
|
||
|
*/
|
||
|
priv->valid_polarity = 0;
|
||
|
|
||
|
- err = mlxbf_gige_rx_init(priv);
|
||
|
+ phy_start(phydev);
|
||
|
+
|
||
|
+ err = mlxbf_gige_tx_init(priv);
|
||
|
if (err)
|
||
|
goto free_irqs;
|
||
|
- err = mlxbf_gige_tx_init(priv);
|
||
|
+ err = mlxbf_gige_rx_init(priv);
|
||
|
if (err)
|
||
|
- goto rx_deinit;
|
||
|
-
|
||
|
- phy_start(phydev);
|
||
|
+ goto tx_deinit;
|
||
|
|
||
|
netif_napi_add(netdev, &priv->napi, mlxbf_gige_poll, NAPI_POLL_WEIGHT);
|
||
|
napi_enable(&priv->napi);
|
||
|
@@ -176,8 +176,8 @@ static int mlxbf_gige_open(struct net_device *netdev)
|
||
|
|
||
|
return 0;
|
||
|
|
||
|
-rx_deinit:
|
||
|
- mlxbf_gige_rx_deinit(priv);
|
||
|
+tx_deinit:
|
||
|
+ mlxbf_gige_tx_deinit(priv);
|
||
|
|
||
|
free_irqs:
|
||
|
mlxbf_gige_free_irqs(priv);
|
||
|
diff --git a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_rx.c b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_rx.c
|
||
|
index 96230763c..f21dafde4 100644
|
||
|
--- a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_rx.c
|
||
|
+++ b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_rx.c
|
||
|
@@ -142,6 +142,9 @@ int mlxbf_gige_rx_init(struct mlxbf_gige *priv)
|
||
|
writeq(MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS_EN,
|
||
|
priv->base + MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS);
|
||
|
|
||
|
+ writeq(ilog2(priv->rx_q_entries),
|
||
|
+ priv->base + MLXBF_GIGE_RX_WQE_SIZE_LOG2);
|
||
|
+
|
||
|
/* Clear MLXBF_GIGE_INT_MASK 'receive pkt' bit to
|
||
|
* indicate readiness to receive interrupts
|
||
|
*/
|
||
|
@@ -154,9 +157,6 @@ int mlxbf_gige_rx_init(struct mlxbf_gige *priv)
|
||
|
data |= MLXBF_GIGE_RX_DMA_EN;
|
||
|
writeq(data, priv->base + MLXBF_GIGE_RX_DMA);
|
||
|
|
||
|
- writeq(ilog2(priv->rx_q_entries),
|
||
|
- priv->base + MLXBF_GIGE_RX_WQE_SIZE_LOG2);
|
||
|
-
|
||
|
return 0;
|
||
|
|
||
|
free_wqe_and_skb:
|
||
|
--
|
||
|
2.20.1
|
||
|
|