Commit f7bff228 authored by Romain Gantois's avatar Romain Gantois Committed by Jakub Kicinski
Browse files

net: stmmac: Support a generic PCS field in mac_device_info



Global stmmac support for early initialization of PCS devices requires a
generic PCS reference that can be passed to phylink_pcs_pre_init().
Currently, the mac_device_info struct contains only one PCS field, which is
specific to the Lynx model.

As PCS models are hardware-specific, it is more appropriate to have a
generic PCS field in the mac_device_info struct.

Refactor the lynx_pcs field into a generic phylink_pcs field.

Signed-off-by: default avatarRomain Gantois <romain.gantois@bootlin.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20240326-rxc_bugfix-v6-4-24a74e5c761f@bootlin.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 10658e99
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -593,7 +593,7 @@ struct mac_device_info {
	const struct stmmac_mmc_ops *mmc;
	const struct stmmac_est_ops *est;
	struct dw_xpcs *xpcs;
	struct phylink_pcs *lynx_pcs; /* Lynx external PCS */
	struct phylink_pcs *phylink_pcs;
	struct mii_regs mii;	/* MII register Addresses */
	struct mac_link link;
	void __iomem *pcsr;     /* vpointer to device CSRs */
+4 −4
Original line number Diff line number Diff line
@@ -479,9 +479,9 @@ static int socfpga_dwmac_probe(struct platform_device *pdev)
			goto err_dvr_remove;
		}

		stpriv->hw->lynx_pcs = lynx_pcs_create_mdiodev(pcs_bus, 0);
		if (IS_ERR(stpriv->hw->lynx_pcs)) {
			ret = PTR_ERR(stpriv->hw->lynx_pcs);
		stpriv->hw->phylink_pcs = lynx_pcs_create_mdiodev(pcs_bus, 0);
		if (IS_ERR(stpriv->hw->phylink_pcs)) {
			ret = PTR_ERR(stpriv->hw->phylink_pcs);
			goto err_dvr_remove;
		}
	}
@@ -498,7 +498,7 @@ static void socfpga_dwmac_remove(struct platform_device *pdev)
{
	struct net_device *ndev = platform_get_drvdata(pdev);
	struct stmmac_priv *priv = netdev_priv(ndev);
	struct phylink_pcs *pcs = priv->hw->lynx_pcs;
	struct phylink_pcs *pcs = priv->hw->phylink_pcs;

	stmmac_pltfr_remove(pdev);

+1 −4
Original line number Diff line number Diff line
@@ -944,10 +944,7 @@ static struct phylink_pcs *stmmac_mac_select_pcs(struct phylink_config *config,
	if (priv->hw->xpcs)
		return &priv->hw->xpcs->pcs;

	if (priv->hw->lynx_pcs)
		return priv->hw->lynx_pcs;

	return NULL;
	return priv->hw->phylink_pcs;
}

static void stmmac_mac_config(struct phylink_config *config, unsigned int mode,