Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
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
> 


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2023-06-12 20:33 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20230612092355.87937-1-brgl@bgdev.pl>
     [not found] ` <20230612092355.87937-2-brgl@bgdev.pl>
2023-06-12 17:20   ` [PATCH 01/26] phy: qualcomm: fix indentation in Makefile Andrew Halaney
     [not found] ` <20230612092355.87937-6-brgl@bgdev.pl>
2023-06-12 18:22   ` [PATCH 05/26] net: stmmac: dwmac-qcom-ethqos: shrink clock code with devres Andrew Halaney
     [not found] ` <20230612092355.87937-7-brgl@bgdev.pl>
2023-06-12 18:32   ` [PATCH 06/26] net: stmmac: dwmac-qcom-ethqos: rename a label in probe() Andrew Halaney
     [not found] ` <20230612092355.87937-8-brgl@bgdev.pl>
2023-06-12 18:34   ` [PATCH 07/26] net: stmmac: dwmac-qcom-ethqos: tweak the order of local variables Andrew Halaney
     [not found] ` <20230612092355.87937-9-brgl@bgdev.pl>
2023-06-12 18:38   ` [PATCH 08/26] net: stmmac: dwmac-qcom-ethqos: use a helper variable for &pdev->dev Andrew Halaney
     [not found] ` <20230612092355.87937-10-brgl@bgdev.pl>
2023-06-12 20:06   ` [PATCH 09/26] net: stmmac: dwmac-qcom-ethqos: add missing include Andrew Halaney
     [not found] ` <20230612092355.87937-11-brgl@bgdev.pl>
2023-06-12 20:06   ` [PATCH 10/26] net: stmmac: dwmac-qcom-ethqos: add a newline between headers Andrew Halaney
     [not found] ` <20230612092355.87937-12-brgl@bgdev.pl>
2023-06-12 20:07   ` [PATCH 11/26] net: stmmac: dwmac-qcom-ethqos: remove stray space Andrew Halaney
     [not found] ` <20230612092355.87937-13-brgl@bgdev.pl>
2023-06-12 20:32   ` Andrew Halaney [this message]
2023-06-13  7:52     ` [PATCH 12/26] net: stmmac: dwmac-qcom-ethqos: add support for the optional serdes phy Bartosz Golaszewski
     [not found] ` <20230612092355.87937-14-brgl@bgdev.pl>
2023-06-12 20:40   ` [PATCH 13/26] net: stmmac: dwmac-qcom-ethqos: make the rgmii clock optional Andrew Halaney
2023-06-13  7:58     ` Bartosz Golaszewski
     [not found] ` <20230612092355.87937-15-brgl@bgdev.pl>
2023-06-12 20:42   ` [PATCH 14/26] net: stmmac: dwmac-qcom-ethqos: add optional phyaux clock Andrew Halaney
     [not found] ` <20230612092355.87937-16-brgl@bgdev.pl>
2023-06-12 21:06   ` [PATCH 15/26] net: stmmac: dwmac-qcom-ethqos: add support for the optional phy-supply Andrew Halaney
2023-06-13  9:02     ` Bartosz Golaszewski
     [not found] ` <20230612092355.87937-17-brgl@bgdev.pl>
2023-06-13 16:59   ` [PATCH 16/26] net: stmmac: dwmac-qcom-ethqos: prepare the driver for more PHY modes Andrew Halaney
     [not found] ` <20230612092355.87937-4-brgl@bgdev.pl>
2023-06-13 17:39   ` [PATCH 03/26] phy: qcom: add the SGMII SerDes PHY driver Bjorn Andersson
     [not found]   ` <7fe7078e-404d-28e5-0dd1-53b7f9cd7626@linaro.org>
2023-06-14  7:18     ` Bartosz Golaszewski
     [not found] ` <20230612092355.87937-24-brgl@bgdev.pl>
2023-06-13 18:57   ` [PATCH 23/26] arm64: dts: qcom: sa8775p: add the first 1Gb ethernet interface Konrad Dybcio
     [not found] ` <20230612092355.87937-25-brgl@bgdev.pl>
2023-06-13 19:02   ` [PATCH 24/26] arm64: dts: qcom: sa8775p-ride: enable the SerDes PHY Konrad Dybcio
2023-06-14 14:51     ` Bjorn Andersson
     [not found] ` <20230612092355.87937-26-brgl@bgdev.pl>
2023-06-13 19:04   ` [PATCH 25/26] arm64: dts: qcom: sa8775p-ride: add pin functions for ethernet0 Konrad Dybcio
     [not found] ` <20230612092355.87937-27-brgl@bgdev.pl>
2023-06-13 19:08   ` [PATCH 26/26] arm64: dts: qcom: sa8775p-ride: enable ethernet0 Konrad Dybcio
     [not found] ` <20230612092355.87937-3-brgl@bgdev.pl>
2023-06-14  7:13   ` [PATCH 02/26] dt-bindings: phy: describe the Qualcomm SGMII PHY Krzysztof Kozlowski
     [not found] ` <20230612092355.87937-5-brgl@bgdev.pl>
2023-06-14  7:13   ` [PATCH 04/26] arm64: defconfig: enable the SerDes PHY for Qualcomm DWMAC Krzysztof Kozlowski
     [not found] ` <20230612092355.87937-20-brgl@bgdev.pl>
2023-06-14  7:23   ` [PATCH 19/26] dt-bindings: net: snps,dwmac: add compatible for sa8775p ethqos Krzysztof Kozlowski
     [not found] ` <20230612092355.87937-21-brgl@bgdev.pl>
2023-06-14  7:25   ` [PATCH 20/26] dt-bindings: net: qcom,ethqos: add description for sa8775p Krzysztof Kozlowski
2023-06-14  7:28     ` Bartosz Golaszewski

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