From: Wong Vee Khee <vee.khee.wong@linux.intel.com> To: Andrew Lunn <andrew@lunn.ch>, Vivien Didelot <vivien.didelot@gmail.com>, Florian Fainelli <f.fainelli@gmail.com>, "David S . Miller" <davem@davemloft.net>, Jakub Kicinski <kuba@kernel.org>, Giuseppe Cavallaro <peppe.cavallaro@st.com>, Alexandre Torgue <alexandre.torgue@foss.st.com>, Jose Abreu <joabreu@synopsys.com>, Maxime Coquelin <mcoquelin.stm32@gmail.com>, Heiner Kallweit <hkallweit1@gmail.com>, Russell King <linux@armlinux.org.uk> Cc: Voon Weifeng <weifeng.voon@intel.com>, Wong Vee Khee <vee.khee.wong@linux.intel.com>, Michael Sit Wei Hong <michael.wei.hong.sit@intel.com>, Vladimir Oltean <olteanv@gmail.com>, linux-arm-kernel@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 1/2] net: pcs: xpcs: enable skip xPCS soft reset Date: Mon, 9 Aug 2021 18:22:28 +0800 [thread overview] Message-ID: <20210809102229.933748-2-vee.khee.wong@linux.intel.com> (raw) In-Reply-To: <20210809102229.933748-1-vee.khee.wong@linux.intel.com> From: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> Unlike any other platforms, Intel AlderLake-S uses Synopsys SerDes where all the SerDes PLL configurations are controlled by the xPCS at the BIOS level. If the driver perform a xPCS soft reset on initialization, these settings will be switched back to the power on reset values. This changes the xpcs_create function to take in an additional argument to check if the platform request to skip xPCS soft reset during device initialization. Cc: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> Signed-off-by: Wong Vee Khee <vee.khee.wong@linux.intel.com> --- drivers/net/dsa/sja1105/sja1105_mdio.c | 2 +- .../net/ethernet/stmicro/stmmac/stmmac_mdio.c | 4 +++- drivers/net/pcs/pcs-xpcs.c | 16 ++++++++++++---- include/linux/pcs/pcs-xpcs.h | 3 ++- include/linux/stmmac.h | 1 + 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105_mdio.c b/drivers/net/dsa/sja1105/sja1105_mdio.c index 19aea8fb76f6..73b43a5da68a 100644 --- a/drivers/net/dsa/sja1105/sja1105_mdio.c +++ b/drivers/net/dsa/sja1105/sja1105_mdio.c @@ -437,7 +437,7 @@ static int sja1105_mdiobus_pcs_register(struct sja1105_private *priv) goto out_pcs_free; } - xpcs = xpcs_create(mdiodev, priv->phy_mode[port]); + xpcs = xpcs_create(mdiodev, priv->phy_mode[port], false); if (IS_ERR(xpcs)) { rc = PTR_ERR(xpcs); goto out_pcs_free; diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c index a5d150c5f3d8..803a4e61105b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c @@ -401,12 +401,14 @@ int stmmac_xpcs_setup(struct mii_bus *bus) { struct net_device *ndev = bus->priv; struct mdio_device *mdiodev; + bool skip_xpcs_soft_reset; struct stmmac_priv *priv; struct dw_xpcs *xpcs; int mode, addr; priv = netdev_priv(ndev); mode = priv->plat->phy_interface; + skip_xpcs_soft_reset = priv->plat->skip_xpcs_soft_reset; /* Try to probe the XPCS by scanning all addresses. */ for (addr = 0; addr < PHY_MAX_ADDR; addr++) { @@ -414,7 +416,7 @@ int stmmac_xpcs_setup(struct mii_bus *bus) if (IS_ERR(mdiodev)) continue; - xpcs = xpcs_create(mdiodev, mode); + xpcs = xpcs_create(mdiodev, mode, skip_xpcs_soft_reset); if (IS_ERR_OR_NULL(xpcs)) { mdio_device_free(mdiodev); continue; diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c index 63fda3fc40aa..c7a3aa862079 100644 --- a/drivers/net/pcs/pcs-xpcs.c +++ b/drivers/net/pcs/pcs-xpcs.c @@ -1081,7 +1081,8 @@ static const struct phylink_pcs_ops xpcs_phylink_ops = { }; struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev, - phy_interface_t interface) + phy_interface_t interface, + bool skip_reset) { struct dw_xpcs *xpcs; u32 xpcs_id; @@ -1113,9 +1114,16 @@ struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev, xpcs->pcs.ops = &xpcs_phylink_ops; xpcs->pcs.poll = true; - ret = xpcs_soft_reset(xpcs, compat); - if (ret) - goto out; + if (!skip_reset) { + dev_info(&xpcs->mdiodev->dev, "%s: xPCS soft reset\n", + __func__); + ret = xpcs_soft_reset(xpcs, compat); + if (ret) + goto out; + } else { + dev_info(&xpcs->mdiodev->dev, + "%s: skip xpcs soft reset\n", __func__); + } return xpcs; } diff --git a/include/linux/pcs/pcs-xpcs.h b/include/linux/pcs/pcs-xpcs.h index add077a81b21..0c05a63f3446 100644 --- a/include/linux/pcs/pcs-xpcs.h +++ b/include/linux/pcs/pcs-xpcs.h @@ -36,7 +36,8 @@ void xpcs_validate(struct dw_xpcs *xpcs, unsigned long *supported, int xpcs_config_eee(struct dw_xpcs *xpcs, int mult_fact_100ns, int enable); struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev, - phy_interface_t interface); + phy_interface_t interface, + bool xpcs_reset); void xpcs_destroy(struct dw_xpcs *xpcs); #endif /* __LINUX_PCS_XPCS_H */ diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index a6f03b36fc4f..0f901773c5e4 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h @@ -268,5 +268,6 @@ struct plat_stmmacenet_data { int msi_rx_base_vec; int msi_tx_base_vec; bool use_phy_wol; + bool skip_xpcs_soft_reset; }; #endif -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Wong Vee Khee <vee.khee.wong@linux.intel.com> To: Andrew Lunn <andrew@lunn.ch>, Vivien Didelot <vivien.didelot@gmail.com>, Florian Fainelli <f.fainelli@gmail.com>, "David S . Miller" <davem@davemloft.net>, Jakub Kicinski <kuba@kernel.org>, Giuseppe Cavallaro <peppe.cavallaro@st.com>, Alexandre Torgue <alexandre.torgue@foss.st.com>, Jose Abreu <joabreu@synopsys.com>, Maxime Coquelin <mcoquelin.stm32@gmail.com>, Heiner Kallweit <hkallweit1@gmail.com>, Russell King <linux@armlinux.org.uk> Cc: Voon Weifeng <weifeng.voon@intel.com>, Wong Vee Khee <vee.khee.wong@linux.intel.com>, Michael Sit Wei Hong <michael.wei.hong.sit@intel.com>, Vladimir Oltean <olteanv@gmail.com>, linux-arm-kernel@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 1/2] net: pcs: xpcs: enable skip xPCS soft reset Date: Mon, 9 Aug 2021 18:22:28 +0800 [thread overview] Message-ID: <20210809102229.933748-2-vee.khee.wong@linux.intel.com> (raw) In-Reply-To: <20210809102229.933748-1-vee.khee.wong@linux.intel.com> From: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> Unlike any other platforms, Intel AlderLake-S uses Synopsys SerDes where all the SerDes PLL configurations are controlled by the xPCS at the BIOS level. If the driver perform a xPCS soft reset on initialization, these settings will be switched back to the power on reset values. This changes the xpcs_create function to take in an additional argument to check if the platform request to skip xPCS soft reset during device initialization. Cc: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> Signed-off-by: Wong Vee Khee <vee.khee.wong@linux.intel.com> --- drivers/net/dsa/sja1105/sja1105_mdio.c | 2 +- .../net/ethernet/stmicro/stmmac/stmmac_mdio.c | 4 +++- drivers/net/pcs/pcs-xpcs.c | 16 ++++++++++++---- include/linux/pcs/pcs-xpcs.h | 3 ++- include/linux/stmmac.h | 1 + 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105_mdio.c b/drivers/net/dsa/sja1105/sja1105_mdio.c index 19aea8fb76f6..73b43a5da68a 100644 --- a/drivers/net/dsa/sja1105/sja1105_mdio.c +++ b/drivers/net/dsa/sja1105/sja1105_mdio.c @@ -437,7 +437,7 @@ static int sja1105_mdiobus_pcs_register(struct sja1105_private *priv) goto out_pcs_free; } - xpcs = xpcs_create(mdiodev, priv->phy_mode[port]); + xpcs = xpcs_create(mdiodev, priv->phy_mode[port], false); if (IS_ERR(xpcs)) { rc = PTR_ERR(xpcs); goto out_pcs_free; diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c index a5d150c5f3d8..803a4e61105b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c @@ -401,12 +401,14 @@ int stmmac_xpcs_setup(struct mii_bus *bus) { struct net_device *ndev = bus->priv; struct mdio_device *mdiodev; + bool skip_xpcs_soft_reset; struct stmmac_priv *priv; struct dw_xpcs *xpcs; int mode, addr; priv = netdev_priv(ndev); mode = priv->plat->phy_interface; + skip_xpcs_soft_reset = priv->plat->skip_xpcs_soft_reset; /* Try to probe the XPCS by scanning all addresses. */ for (addr = 0; addr < PHY_MAX_ADDR; addr++) { @@ -414,7 +416,7 @@ int stmmac_xpcs_setup(struct mii_bus *bus) if (IS_ERR(mdiodev)) continue; - xpcs = xpcs_create(mdiodev, mode); + xpcs = xpcs_create(mdiodev, mode, skip_xpcs_soft_reset); if (IS_ERR_OR_NULL(xpcs)) { mdio_device_free(mdiodev); continue; diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c index 63fda3fc40aa..c7a3aa862079 100644 --- a/drivers/net/pcs/pcs-xpcs.c +++ b/drivers/net/pcs/pcs-xpcs.c @@ -1081,7 +1081,8 @@ static const struct phylink_pcs_ops xpcs_phylink_ops = { }; struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev, - phy_interface_t interface) + phy_interface_t interface, + bool skip_reset) { struct dw_xpcs *xpcs; u32 xpcs_id; @@ -1113,9 +1114,16 @@ struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev, xpcs->pcs.ops = &xpcs_phylink_ops; xpcs->pcs.poll = true; - ret = xpcs_soft_reset(xpcs, compat); - if (ret) - goto out; + if (!skip_reset) { + dev_info(&xpcs->mdiodev->dev, "%s: xPCS soft reset\n", + __func__); + ret = xpcs_soft_reset(xpcs, compat); + if (ret) + goto out; + } else { + dev_info(&xpcs->mdiodev->dev, + "%s: skip xpcs soft reset\n", __func__); + } return xpcs; } diff --git a/include/linux/pcs/pcs-xpcs.h b/include/linux/pcs/pcs-xpcs.h index add077a81b21..0c05a63f3446 100644 --- a/include/linux/pcs/pcs-xpcs.h +++ b/include/linux/pcs/pcs-xpcs.h @@ -36,7 +36,8 @@ void xpcs_validate(struct dw_xpcs *xpcs, unsigned long *supported, int xpcs_config_eee(struct dw_xpcs *xpcs, int mult_fact_100ns, int enable); struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev, - phy_interface_t interface); + phy_interface_t interface, + bool xpcs_reset); void xpcs_destroy(struct dw_xpcs *xpcs); #endif /* __LINUX_PCS_XPCS_H */ diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index a6f03b36fc4f..0f901773c5e4 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h @@ -268,5 +268,6 @@ struct plat_stmmacenet_data { int msi_rx_base_vec; int msi_tx_base_vec; bool use_phy_wol; + bool skip_xpcs_soft_reset; }; #endif -- 2.25.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-08-09 10:17 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-08-09 10:22 [PATCH net-next 0/2] Intel AlderLake-S 2.5Gbps link speed support Wong Vee Khee 2021-08-09 10:22 ` Wong Vee Khee 2021-08-09 10:22 ` Wong Vee Khee [this message] 2021-08-09 10:22 ` [PATCH net-next 1/2] net: pcs: xpcs: enable skip xPCS soft reset Wong Vee Khee 2021-08-09 11:06 ` Vladimir Oltean 2021-08-09 11:06 ` Vladimir Oltean 2021-08-10 23:50 ` Wong Vee Khee 2021-08-10 23:50 ` Wong Vee Khee 2021-08-09 13:35 ` Andrew Lunn 2021-08-09 13:35 ` Andrew Lunn 2021-08-10 23:55 ` Wong Vee Khee 2021-08-10 23:55 ` Wong Vee Khee 2021-08-11 8:36 ` Florian Fainelli 2021-08-11 8:36 ` Florian Fainelli 2021-08-11 14:20 ` Andrew Lunn 2021-08-11 14:20 ` Andrew Lunn 2021-08-26 11:50 ` Wong Vee Khee 2021-08-26 11:50 ` Wong Vee Khee 2021-08-09 10:22 ` [PATCH net-next 2/2] stmmac: intel: Enable 2.5Gbps on Intel AlderLake-S Wong Vee Khee 2021-08-09 10:22 ` Wong Vee Khee
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210809102229.933748-2-vee.khee.wong@linux.intel.com \ --to=vee.khee.wong@linux.intel.com \ --cc=alexandre.torgue@foss.st.com \ --cc=andrew@lunn.ch \ --cc=davem@davemloft.net \ --cc=f.fainelli@gmail.com \ --cc=hkallweit1@gmail.com \ --cc=joabreu@synopsys.com \ --cc=kuba@kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-stm32@st-md-mailman.stormreply.com \ --cc=linux@armlinux.org.uk \ --cc=mcoquelin.stm32@gmail.com \ --cc=michael.wei.hong.sit@intel.com \ --cc=netdev@vger.kernel.org \ --cc=olteanv@gmail.com \ --cc=peppe.cavallaro@st.com \ --cc=vivien.didelot@gmail.com \ --cc=weifeng.voon@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.