devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] net: phy: realtek: Support external PHY clock
@ 2023-06-05 15:40 Detlev Casanova
  2023-06-05 15:40 ` [PATCH v4 1/3] net: phy: realtek: Add optional " Detlev Casanova
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Detlev Casanova @ 2023-06-05 15:40 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andrew Lunn, Heiner Kallweit, Russell King, David S . Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Florian Fainelli, netdev,
	devicetree

Some PHYs can use an external clock that must be enabled before
communicating with them.

Changes since v3:
 * Do not call genphy_suspend if WoL is enabled.
Changes since v2:
 * Reword documentation commit message
Changes since v1:
 * Remove the clock name as it is not guaranteed to be identical across
   different PHYs
 * Disable/Enable the clock when suspending/resuming



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v4 1/3] net: phy: realtek: Add optional external PHY clock
  2023-06-05 15:40 [PATCH v4 0/3] net: phy: realtek: Support external PHY clock Detlev Casanova
@ 2023-06-05 15:40 ` Detlev Casanova
  2023-06-05 15:40 ` [PATCH v4 2/3] dt-bindings: net: phy: Document support for external PHY clk Detlev Casanova
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Detlev Casanova @ 2023-06-05 15:40 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andrew Lunn, Heiner Kallweit, Russell King, David S . Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Florian Fainelli, netdev,
	devicetree, Detlev Casanova, Florian Fainelli

In some cases, the PHY can use an external clock source instead of a
crystal.

Add an optional clock in the phy node to make sure that the clock source
is enabled, if specified, before probing.

Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
---
 drivers/net/phy/realtek.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
index 3d99fd6664d7..b13dd0b3c99e 100644
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
@@ -12,6 +12,7 @@
 #include <linux/phy.h>
 #include <linux/module.h>
 #include <linux/delay.h>
+#include <linux/clk.h>
 
 #define RTL821x_PHYSR				0x11
 #define RTL821x_PHYSR_DUPLEX			BIT(13)
@@ -80,6 +81,7 @@ struct rtl821x_priv {
 	u16 phycr1;
 	u16 phycr2;
 	bool has_phycr2;
+	struct clk *clk;
 };
 
 static int rtl821x_read_page(struct phy_device *phydev)
@@ -103,6 +105,11 @@ static int rtl821x_probe(struct phy_device *phydev)
 	if (!priv)
 		return -ENOMEM;
 
+	priv->clk = devm_clk_get_optional_enabled(dev, NULL);
+	if (IS_ERR(priv->clk))
+		return dev_err_probe(dev, PTR_ERR(priv->clk),
+				     "failed to get phy clock\n");
+
 	ret = phy_read_paged(phydev, 0xa43, RTL8211F_PHYCR1);
 	if (ret < 0)
 		return ret;
-- 
2.39.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v4 2/3] dt-bindings: net: phy: Document support for external PHY clk
  2023-06-05 15:40 [PATCH v4 0/3] net: phy: realtek: Support external PHY clock Detlev Casanova
  2023-06-05 15:40 ` [PATCH v4 1/3] net: phy: realtek: Add optional " Detlev Casanova
@ 2023-06-05 15:40 ` Detlev Casanova
  2023-06-05 15:40 ` [PATCH v4 3/3] net: phy: realtek: Disable clock on suspend Detlev Casanova
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Detlev Casanova @ 2023-06-05 15:40 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andrew Lunn, Heiner Kallweit, Russell King, David S . Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Florian Fainelli, netdev,
	devicetree, Detlev Casanova, Krzysztof Kozlowski

Ethern PHYs can have external an clock that needs to be activated before
communicating with the PHY.

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
---
 Documentation/devicetree/bindings/net/ethernet-phy.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/ethernet-phy.yaml b/Documentation/devicetree/bindings/net/ethernet-phy.yaml
index 4f574532ee13..c1241c8a3b77 100644
--- a/Documentation/devicetree/bindings/net/ethernet-phy.yaml
+++ b/Documentation/devicetree/bindings/net/ethernet-phy.yaml
@@ -93,6 +93,12 @@ properties:
       the turn around line low at end of the control phase of the
       MDIO transaction.
 
+  clocks:
+    maxItems: 1
+    description:
+      External clock connected to the PHY. If not specified it is assumed
+      that the PHY uses a fixed crystal or an internal oscillator.
+
   enet-phy-lane-swap:
     $ref: /schemas/types.yaml#/definitions/flag
     description:
-- 
2.39.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v4 3/3] net: phy: realtek: Disable clock on suspend
  2023-06-05 15:40 [PATCH v4 0/3] net: phy: realtek: Support external PHY clock Detlev Casanova
  2023-06-05 15:40 ` [PATCH v4 1/3] net: phy: realtek: Add optional " Detlev Casanova
  2023-06-05 15:40 ` [PATCH v4 2/3] dt-bindings: net: phy: Document support for external PHY clk Detlev Casanova
@ 2023-06-05 15:40 ` Detlev Casanova
  2023-06-05 20:33 ` [PATCH v4 0/3] net: phy: realtek: Support external PHY clock Heiner Kallweit
  2023-06-07  9:00 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: Detlev Casanova @ 2023-06-05 15:40 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andrew Lunn, Heiner Kallweit, Russell King, David S . Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Florian Fainelli, netdev,
	devicetree, Detlev Casanova, Florian Fainelli

For PHYs that call rtl821x_probe() where an external clock can be
configured, make sure that the clock is disabled
when ->suspend() is called and enabled on resume.

The PHY_ALWAYS_CALL_SUSPEND is added to ensure that the suspend function
is actually always called.

Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
---
 drivers/net/phy/realtek.c | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
index b13dd0b3c99e..894172a3e15f 100644
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
@@ -426,10 +426,31 @@ static int rtl8211f_config_init(struct phy_device *phydev)
 	return genphy_soft_reset(phydev);
 }
 
+static int rtl821x_suspend(struct phy_device *phydev)
+{
+	struct rtl821x_priv *priv = phydev->priv;
+	int ret = 0;
+
+	if (!phydev->wol_enabled) {
+		ret = genphy_suspend(phydev);
+
+		if (ret)
+			return ret;
+
+		clk_disable_unprepare(priv->clk);
+	}
+
+	return ret;
+}
+
 static int rtl821x_resume(struct phy_device *phydev)
 {
+	struct rtl821x_priv *priv = phydev->priv;
 	int ret;
 
+	if (!phydev->wol_enabled)
+		clk_prepare_enable(priv->clk);
+
 	ret = genphy_resume(phydev);
 	if (ret < 0)
 		return ret;
@@ -934,10 +955,11 @@ static struct phy_driver realtek_drvs[] = {
 		.read_status	= rtlgen_read_status,
 		.config_intr	= &rtl8211f_config_intr,
 		.handle_interrupt = rtl8211f_handle_interrupt,
-		.suspend	= genphy_suspend,
+		.suspend	= rtl821x_suspend,
 		.resume		= rtl821x_resume,
 		.read_page	= rtl821x_read_page,
 		.write_page	= rtl821x_write_page,
+		.flags		= PHY_ALWAYS_CALL_SUSPEND,
 	}, {
 		PHY_ID_MATCH_EXACT(RTL_8211FVD_PHYID),
 		.name		= "RTL8211F-VD Gigabit Ethernet",
@@ -946,10 +968,11 @@ static struct phy_driver realtek_drvs[] = {
 		.read_status	= rtlgen_read_status,
 		.config_intr	= &rtl8211f_config_intr,
 		.handle_interrupt = rtl8211f_handle_interrupt,
-		.suspend	= genphy_suspend,
+		.suspend	= rtl821x_suspend,
 		.resume		= rtl821x_resume,
 		.read_page	= rtl821x_read_page,
 		.write_page	= rtl821x_write_page,
+		.flags		= PHY_ALWAYS_CALL_SUSPEND,
 	}, {
 		.name		= "Generic FE-GE Realtek PHY",
 		.match_phy_device = rtlgen_match_phy_device,
-- 
2.39.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v4 0/3] net: phy: realtek: Support external PHY clock
  2023-06-05 15:40 [PATCH v4 0/3] net: phy: realtek: Support external PHY clock Detlev Casanova
                   ` (2 preceding siblings ...)
  2023-06-05 15:40 ` [PATCH v4 3/3] net: phy: realtek: Disable clock on suspend Detlev Casanova
@ 2023-06-05 20:33 ` Heiner Kallweit
  2023-06-07  9:00 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: Heiner Kallweit @ 2023-06-05 20:33 UTC (permalink / raw)
  To: Detlev Casanova, linux-kernel
  Cc: Andrew Lunn, Russell King, David S . Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Florian Fainelli, netdev, devicetree

On 05.06.2023 17:40, Detlev Casanova wrote:
> Some PHYs can use an external clock that must be enabled before
> communicating with them.
> 
> Changes since v3:
>  * Do not call genphy_suspend if WoL is enabled.
> Changes since v2:
>  * Reword documentation commit message
> Changes since v1:
>  * Remove the clock name as it is not guaranteed to be identical across
>    different PHYs
>  * Disable/Enable the clock when suspending/resuming
> 
> 
Not a big thing, but if a v5 should be needed:
Please annotate the series properly as net-next (see netdev FAQ).


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v4 0/3] net: phy: realtek: Support external PHY clock
  2023-06-05 15:40 [PATCH v4 0/3] net: phy: realtek: Support external PHY clock Detlev Casanova
                   ` (3 preceding siblings ...)
  2023-06-05 20:33 ` [PATCH v4 0/3] net: phy: realtek: Support external PHY clock Heiner Kallweit
@ 2023-06-07  9:00 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-06-07  9:00 UTC (permalink / raw)
  To: Detlev Casanova
  Cc: linux-kernel, andrew, hkallweit1, linux, davem, edumazet, kuba,
	pabeni, robh+dt, krzysztof.kozlowski+dt, conor+dt, f.fainelli,
	netdev, devicetree

Hello:

This series was applied to netdev/net-next.git (main)
by David S. Miller <davem@davemloft.net>:

On Mon,  5 Jun 2023 11:40:07 -0400 you wrote:
> Some PHYs can use an external clock that must be enabled before
> communicating with them.
> 
> Changes since v3:
>  * Do not call genphy_suspend if WoL is enabled.
> Changes since v2:
>  * Reword documentation commit message
> Changes since v1:
>  * Remove the clock name as it is not guaranteed to be identical across
>    different PHYs
>  * Disable/Enable the clock when suspending/resuming

Here is the summary with links:
  - [v4,1/3] net: phy: realtek: Add optional external PHY clock
    https://git.kernel.org/netdev/net-next/c/7300c9b574cc
  - [v4,2/3] dt-bindings: net: phy: Document support for external PHY clk
    https://git.kernel.org/netdev/net-next/c/350b7a258f20
  - [v4,3/3] net: phy: realtek: Disable clock on suspend
    https://git.kernel.org/netdev/net-next/c/59e227e2894b

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-06-07  9:02 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-05 15:40 [PATCH v4 0/3] net: phy: realtek: Support external PHY clock Detlev Casanova
2023-06-05 15:40 ` [PATCH v4 1/3] net: phy: realtek: Add optional " Detlev Casanova
2023-06-05 15:40 ` [PATCH v4 2/3] dt-bindings: net: phy: Document support for external PHY clk Detlev Casanova
2023-06-05 15:40 ` [PATCH v4 3/3] net: phy: realtek: Disable clock on suspend Detlev Casanova
2023-06-05 20:33 ` [PATCH v4 0/3] net: phy: realtek: Support external PHY clock Heiner Kallweit
2023-06-07  9:00 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).