]> git.itanic.dy.fi Git - linux-stable/commitdiff
mlxbf_gige: clear MDIO gateway lock after read
authorDavid Thompson <davthompson@nvidia.com>
Fri, 2 Sep 2022 16:42:47 +0000 (12:42 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 28 Sep 2022 09:11:49 +0000 (11:11 +0200)
[ Upstream commit 182447b12144b7be9b63a273d27c5a11bd54960a ]

The MDIO gateway (GW) lock in BlueField-2 GIGE logic is
set after read.  This patch adds logic to make sure the
lock is always cleared at the end of each MDIO transaction.

Fixes: f92e1869d74e ("Add Mellanox BlueField Gigabit Ethernet driver")
Reviewed-by: Asmaa Mnebhi <asmaa@nvidia.com>
Signed-off-by: David Thompson <davthompson@nvidia.com>
Link: https://lore.kernel.org/r/20220902164247.19862-1-davthompson@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_mdio.c

index f979ba7e5effc0102d15307e26290186504bc653..caa4380ada138deb4c003fc52ebaf30a3ccf46a9 100644 (file)
@@ -178,6 +178,9 @@ static int mlxbf_gige_mdio_read(struct mii_bus *bus, int phy_add, int phy_reg)
        /* Only return ad bits of the gw register */
        ret &= MLXBF_GIGE_MDIO_GW_AD_MASK;
 
+       /* The MDIO lock is set on read. To release it, clear gw register */
+       writel(0, priv->mdio_io + MLXBF_GIGE_MDIO_GW_OFFSET);
+
        return ret;
 }
 
@@ -201,6 +204,9 @@ static int mlxbf_gige_mdio_write(struct mii_bus *bus, int phy_add,
        ret = readl_poll_timeout_atomic(priv->mdio_io + MLXBF_GIGE_MDIO_GW_OFFSET,
                                        temp, !(temp & MLXBF_GIGE_MDIO_GW_BUSY_MASK), 100, 1000000);
 
+       /* The MDIO lock is set on read. To release it, clear gw register */
+       writel(0, priv->mdio_io + MLXBF_GIGE_MDIO_GW_OFFSET);
+
        return ret;
 }