* [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).