From: Andrew Halaney <ahalaney@redhat.com>
To: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Vinod Koul <vkoul@kernel.org>,
Bhupesh Sharma <bhupesh.sharma@linaro.org>,
Andy Gross <agross@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
Kishon Vijay Abraham I <kishon@kernel.org>,
Giuseppe Cavallaro <peppe.cavallaro@st.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Jose Abreu <joabreu@synopsys.com>,
netdev@vger.kernel.org, linux-arm-msm@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-phy@lists.infradead.org,
linux-arm-kernel@lists.infradead.org,
linux-stm32@st-md-mailman.stormreply.com,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: Re: [PATCH 12/26] net: stmmac: dwmac-qcom-ethqos: add support for the optional serdes phy
Date: Mon, 12 Jun 2023 15:32:55 -0500 [thread overview]
Message-ID: <20230612203255.72t52ucry7zzq3em@halaney-x13s> (raw)
In-Reply-To: <20230612092355.87937-13-brgl@bgdev.pl>
On Mon, Jun 12, 2023 at 11:23:41AM +0200, Bartosz Golaszewski wrote:
> From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
>
> On sa8775p platforms, there's a SGMII SerDes PHY between the MAC and
> external PHY that we need to enable and configure.
>
> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
> ---
> .../stmicro/stmmac/dwmac-qcom-ethqos.c | 37 +++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
> index 8ed05f29fe8b..3438b6229351 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
> @@ -6,6 +6,7 @@
> #include <linux/of_device.h>
> #include <linux/platform_device.h>
> #include <linux/phy.h>
> +#include <linux/phy/phy.h>
> #include <linux/property.h>
>
> #include "stmmac.h"
> @@ -93,6 +94,7 @@ struct qcom_ethqos {
>
> unsigned int rgmii_clk_rate;
> struct clk *rgmii_clk;
> + struct phy *serdes_phy;
> unsigned int speed;
>
> const struct ethqos_emac_por *por;
> @@ -566,6 +568,30 @@ static void ethqos_fix_mac_speed(void *priv, unsigned int speed)
> ethqos_configure(ethqos);
> }
>
> +static int qcom_ethqos_serdes_powerup(struct net_device *ndev, void *priv)
> +{
> + struct qcom_ethqos *ethqos = priv;
> + int ret;
> +
> + ret = phy_set_speed(ethqos->serdes_phy, ethqos->speed);
> + if (ret)
> + return ret;
> +
> + ret = phy_init(ethqos->serdes_phy);
> + if (ret)
> + return ret;
> +
> + return phy_power_on(ethqos->serdes_phy);
The docs say (phy.rst):
The general order of calls should be::
[devm_][of_]phy_get()
phy_init()
phy_power_on()
[phy_set_mode[_ext]()]
...
phy_power_off()
phy_exit()
[[of_]phy_put()]
Some PHY drivers may not implement :c:func:`phy_init` or :c:func:`phy_power_on`,
but controllers should always call these functions to be compatible with other
PHYs. Some PHYs may require :c:func:`phy_set_mode <phy_set_mode_ext>`, while
others may use a default mode (typically configured via devicetree or other
firmware). For compatibility, you should always call this function if you know
what mode you will be using. Generally, this function should be called after
:c:func:`phy_power_on`, although some PHY drivers may allow it at any time.
Not really dictating you need to do that order, but if possible I think
calling phy_set_speed after init + power_on is more generic. Not sure if
that plays nice with the phy driver in this series or not.
Otherwise, I think this looks good.
> +}
> +
> +static void qcom_ethqos_serdes_powerdown(struct net_device *ndev, void *priv)
> +{
> + struct qcom_ethqos *ethqos = priv;
> +
> + phy_power_off(ethqos->serdes_phy);
> + phy_exit(ethqos->serdes_phy);
> +}
> +
> static int ethqos_clks_config(void *priv, bool enabled)
> {
> struct qcom_ethqos *ethqos = priv;
> @@ -651,6 +677,12 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
> if (ret)
> goto out_config_dt;
>
> + ethqos->serdes_phy = devm_phy_optional_get(dev, "serdes");
> + if (IS_ERR(ethqos->serdes_phy)) {
> + ret = PTR_ERR(ethqos->serdes_phy);
> + goto out_config_dt;
> + }
> +
> ethqos->speed = SPEED_1000;
> ethqos_update_rgmii_clk(ethqos, SPEED_1000);
> ethqos_set_func_clk_en(ethqos);
> @@ -666,6 +698,11 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
> if (of_device_is_compatible(np, "qcom,qcs404-ethqos"))
> plat_dat->rx_clk_runs_in_lpi = 1;
>
> + if (ethqos->serdes_phy) {
> + plat_dat->serdes_powerup = qcom_ethqos_serdes_powerup;
> + plat_dat->serdes_powerdown = qcom_ethqos_serdes_powerdown;
> + }
> +
> ret = stmmac_dvr_probe(dev, plat_dat, &stmmac_res);
> if (ret)
> goto out_config_dt;
> --
> 2.39.2
>
next prev parent reply other threads:[~2023-06-12 20:33 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-12 9:23 [PATCH 00/26] arm64: qcom: sa8775p-ride: enable the first ethernet port Bartosz Golaszewski
2023-06-12 9:23 ` [PATCH 01/26] phy: qualcomm: fix indentation in Makefile Bartosz Golaszewski
2023-06-12 17:20 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 02/26] dt-bindings: phy: describe the Qualcomm SGMII PHY Bartosz Golaszewski
2023-06-14 7:13 ` Krzysztof Kozlowski
2023-06-12 9:23 ` [PATCH 03/26] phy: qcom: add the SGMII SerDes PHY driver Bartosz Golaszewski
2023-06-12 9:45 ` Konrad Dybcio
2023-06-14 7:18 ` Bartosz Golaszewski
2023-06-13 17:39 ` Bjorn Andersson
2023-06-12 9:23 ` [PATCH 04/26] arm64: defconfig: enable the SerDes PHY for Qualcomm DWMAC Bartosz Golaszewski
2023-06-14 7:13 ` Krzysztof Kozlowski
2023-06-12 9:23 ` [PATCH 05/26] net: stmmac: dwmac-qcom-ethqos: shrink clock code with devres Bartosz Golaszewski
2023-06-12 18:22 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 06/26] net: stmmac: dwmac-qcom-ethqos: rename a label in probe() Bartosz Golaszewski
2023-06-12 18:32 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 07/26] net: stmmac: dwmac-qcom-ethqos: tweak the order of local variables Bartosz Golaszewski
2023-06-12 18:34 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 08/26] net: stmmac: dwmac-qcom-ethqos: use a helper variable for &pdev->dev Bartosz Golaszewski
2023-06-12 18:38 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 09/26] net: stmmac: dwmac-qcom-ethqos: add missing include Bartosz Golaszewski
2023-06-12 20:06 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 10/26] net: stmmac: dwmac-qcom-ethqos: add a newline between headers Bartosz Golaszewski
2023-06-12 20:06 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 11/26] net: stmmac: dwmac-qcom-ethqos: remove stray space Bartosz Golaszewski
2023-06-12 20:07 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 12/26] net: stmmac: dwmac-qcom-ethqos: add support for the optional serdes phy Bartosz Golaszewski
2023-06-12 20:32 ` Andrew Halaney [this message]
2023-06-13 7:52 ` Bartosz Golaszewski
2023-06-12 9:23 ` [PATCH 13/26] net: stmmac: dwmac-qcom-ethqos: make the rgmii clock optional Bartosz Golaszewski
2023-06-12 20:40 ` Andrew Halaney
2023-06-13 7:58 ` Bartosz Golaszewski
2023-06-12 9:23 ` [PATCH 14/26] net: stmmac: dwmac-qcom-ethqos: add optional phyaux clock Bartosz Golaszewski
2023-06-12 20:42 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 15/26] net: stmmac: dwmac-qcom-ethqos: add support for the optional phy-supply Bartosz Golaszewski
2023-06-12 21:06 ` Andrew Halaney
2023-06-13 9:02 ` Bartosz Golaszewski
2023-06-12 9:23 ` [PATCH 16/26] net: stmmac: dwmac-qcom-ethqos: prepare the driver for more PHY modes Bartosz Golaszewski
2023-06-13 16:59 ` Andrew Halaney
2023-06-12 9:23 ` [PATCH 17/26] net: stmmac: dwmac-qcom-ethqos: add support for SGMII Bartosz Golaszewski
2023-06-12 9:23 ` [PATCH 18/26] net: stmmac: add new switch to struct plat_stmmacenet_data Bartosz Golaszewski
2023-06-12 9:49 ` Jose Abreu
2023-06-12 9:23 ` [PATCH 19/26] dt-bindings: net: snps,dwmac: add compatible for sa8775p ethqos Bartosz Golaszewski
2023-06-14 7:23 ` Krzysztof Kozlowski
2023-06-12 9:23 ` [PATCH 20/26] dt-bindings: net: qcom,ethqos: add description for sa8775p Bartosz Golaszewski
2023-06-14 7:25 ` Krzysztof Kozlowski
2023-06-14 7:28 ` Bartosz Golaszewski
2023-06-12 9:23 ` [PATCH 21/26] net: stmmac: dwmac-qcom-ethqos: add support for emac4 on sa8775p platforms Bartosz Golaszewski
2023-06-12 9:23 ` [PATCH 22/26] arm64: dts: qcom: sa8775p-ride: add the SGMII PHY node Bartosz Golaszewski
2023-06-12 9:35 ` Konrad Dybcio
2023-06-12 9:23 ` [PATCH 23/26] arm64: dts: qcom: sa8775p: add the first 1Gb ethernet interface Bartosz Golaszewski
2023-06-13 18:57 ` Konrad Dybcio
2023-06-12 9:23 ` [PATCH 24/26] arm64: dts: qcom: sa8775p-ride: enable the SerDes PHY Bartosz Golaszewski
2023-06-13 19:02 ` Konrad Dybcio
2023-06-14 14:51 ` Bjorn Andersson
2023-06-12 9:23 ` [PATCH 25/26] arm64: dts: qcom: sa8775p-ride: add pin functions for ethernet0 Bartosz Golaszewski
2023-06-13 19:04 ` Konrad Dybcio
2023-06-12 9:23 ` [PATCH 26/26] arm64: dts: qcom: sa8775p-ride: enable ethernet0 Bartosz Golaszewski
2023-06-13 19:08 ` Konrad Dybcio
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=20230612203255.72t52ucry7zzq3em@halaney-x13s \
--to=ahalaney@redhat.com \
--cc=agross@kernel.org \
--cc=alexandre.torgue@foss.st.com \
--cc=andersson@kernel.org \
--cc=bartosz.golaszewski@linaro.org \
--cc=bhupesh.sharma@linaro.org \
--cc=brgl@bgdev.pl \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=joabreu@synopsys.com \
--cc=kishon@kernel.org \
--cc=konrad.dybcio@linaro.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=peppe.cavallaro@st.com \
--cc=robh+dt@kernel.org \
--cc=vkoul@kernel.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox