Commit 87f43e6f authored by Russell King (Oracle)'s avatar Russell King (Oracle) Committed by Jakub Kicinski
Browse files

net: stmmac: dwc-qos: calibrate tegra with mdio bus idle



Thierry states that there are prerequists for Tegra's calibration
that should be met before starting calibration - both the RGMII and
MDIO interfaces should be idle.

This commit adds the necessary MII bus locking to ensure that the MDIO
interface is idle during calibration.

Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Acked-by: default avatarThierry Reding <treding@nvidia.com>
Link: https://patch.msgid.link/E1u7EYR-001ZAS-Cr@rmk-PC.armlinux.org.uk


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 8ff61751
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -136,10 +136,11 @@ static int dwc_qos_probe(struct platform_device *pdev,
#define AUTO_CAL_STATUS 0x880c
#define  AUTO_CAL_STATUS_ACTIVE BIT(31)

static void tegra_eqos_fix_speed(void *priv, int speed, unsigned int mode)
static void tegra_eqos_fix_speed(void *bsp_priv, int speed, unsigned int mode)
{
	struct tegra_eqos *eqos = priv;
	struct tegra_eqos *eqos = bsp_priv;
	bool needs_calibration = false;
	struct stmmac_priv *priv;
	u32 value;
	int err;

@@ -158,6 +159,11 @@ static void tegra_eqos_fix_speed(void *priv, int speed, unsigned int mode)
	}

	if (needs_calibration) {
		priv = netdev_priv(dev_get_drvdata(eqos->dev));

		/* Calibration should be done with the MDIO bus idle */
		mutex_lock(&priv->mii->mdio_lock);

		/* calibrate */
		value = readl(eqos->regs + SDMEMCOMPPADCTRL);
		value |= SDMEMCOMPPADCTRL_PAD_E_INPUT_OR_E_PWRD;
@@ -191,6 +197,8 @@ static void tegra_eqos_fix_speed(void *priv, int speed, unsigned int mode)
		value = readl(eqos->regs + SDMEMCOMPPADCTRL);
		value &= ~SDMEMCOMPPADCTRL_PAD_E_INPUT_OR_E_PWRD;
		writel(value, eqos->regs + SDMEMCOMPPADCTRL);

		mutex_unlock(&priv->mii->mdio_lock);
	} else {
		value = readl(eqos->regs + AUTO_CAL_CONFIG);
		value &= ~AUTO_CAL_CONFIG_ENABLE;