[SRU][J:linux-bluefield][PATCH v1 1/1] UBUNTU: SAUCE: mlxbf-gige: Fix intermittent no ip issue
Asmaa Mnebhi
asmaa at nvidia.com
Wed Mar 1 18:31:32 UTC 2023
++ at Vladimir Sokolovsky<mailto:vlad at nvidia.com> @Karin Feldman<mailto:karinf at nvidia.com> @Peter Kjersgard<mailto:pkjersgard at nvidia.com> @David Thompson<mailto:davthompson at nvidia.com>
> -----Original Message-----
> From: Asmaa Mnebhi <asmaa at nvidia.com>
> Sent: Tuesday, February 28, 2023 6:04 PM
> To: kernel-team at lists.ubuntu.com
> Cc: Asmaa Mnebhi <asmaa at nvidia.com>
> Subject: [SRU][J:linux-bluefield][PATCH v1 1/1] 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 at nvidia.com<mailto:asmaa at nvidia.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 4cf058cdbba0..5e929867bd6c 100644
> --- a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
> +++ b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
> @@ -166,14 +166,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);
> @@ -195,8 +195,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 96230763cf6c..f21dafde490b 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.30.1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20230301/a38b521b/attachment-0001.html>
More information about the kernel-team
mailing list