* [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac
@ 2025-02-27 11:06 Kever Yang
2025-02-27 11:06 ` [PATCH v2 2/3] ethernet: stmmac: dwmac-rk: Add gmac support for rk3562 Kever Yang
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Kever Yang @ 2025-02-27 11:06 UTC (permalink / raw)
To: heiko
Cc: linux-rockchip, Kever Yang, Jose Abreu, devicetree, Conor Dooley,
Giuseppe Cavallaro, Rob Herring, netdev, linux-kernel,
David S. Miller, Jakub Kicinski, Andrew Lunn, David Wu,
Paolo Abeni, Alexandre Torgue, Krzysztof Kozlowski, Eric Dumazet,
linux-arm-kernel
Add a rockchip,rk3562-gmac compatible for supporting the 2 gmac
devices on the rk3562.
rk3562 only has 4 clocks availabl for gmac module.
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---
Changes in v2:
- Fix schema entry and add clocks minItem change
.../bindings/net/rockchip-dwmac.yaml | 23 +++++++++++++++----
.../devicetree/bindings/net/snps,dwmac.yaml | 1 +
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml b/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml
index f8a576611d6c..81ddad924e35 100644
--- a/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml
+++ b/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml
@@ -24,6 +24,7 @@ select:
- rockchip,rk3366-gmac
- rockchip,rk3368-gmac
- rockchip,rk3399-gmac
+ - rockchip,rk3562-gmac
- rockchip,rk3568-gmac
- rockchip,rk3576-gmac
- rockchip,rk3588-gmac
@@ -32,9 +33,6 @@ select:
required:
- compatible
-allOf:
- - $ref: snps,dwmac.yaml#
-
properties:
compatible:
oneOf:
@@ -52,6 +50,7 @@ properties:
- rockchip,rv1108-gmac
- items:
- enum:
+ - rockchip,rk3562-gmac
- rockchip,rk3568-gmac
- rockchip,rk3576-gmac
- rockchip,rk3588-gmac
@@ -59,7 +58,7 @@ properties:
- const: snps,dwmac-4.20a
clocks:
- minItems: 5
+ minItems: 4
maxItems: 8
clock-names:
@@ -117,6 +116,22 @@ required:
unevaluatedProperties: false
+allOf:
+ - $ref: snps,dwmac.yaml#
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: rockchip,rk3562-gmac
+ then:
+ properties:
+ clocks:
+ minItems: 4
+ else:
+ properties:
+ clocks:
+ minItems: 5
+
examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
diff --git a/Documentation/devicetree/bindings/net/snps,dwmac.yaml b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
index 91e75eb3f329..97d42ab8d374 100644
--- a/Documentation/devicetree/bindings/net/snps,dwmac.yaml
+++ b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
@@ -82,6 +82,7 @@ properties:
- rockchip,rk3328-gmac
- rockchip,rk3366-gmac
- rockchip,rk3368-gmac
+ - rockchip,rk3562-gmac
- rockchip,rk3576-gmac
- rockchip,rk3588-gmac
- rockchip,rk3399-gmac
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v2 2/3] ethernet: stmmac: dwmac-rk: Add gmac support for rk3562 2025-02-27 11:06 [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac Kever Yang @ 2025-02-27 11:06 ` Kever Yang 2025-02-27 13:47 ` Andrew Lunn 2025-02-27 11:06 ` [PATCH v2 3/3] ethernet: stmmac: dwmac-rk: Make the phy clock could be used for external phy Kever Yang ` (2 subsequent siblings) 3 siblings, 1 reply; 7+ messages in thread From: Kever Yang @ 2025-02-27 11:06 UTC (permalink / raw) To: heiko Cc: linux-rockchip, David Wu, Kever Yang, linux-arm-kernel, Jan Petrous (OSS), netdev, Detlev Casanova, linux-stm32, linux-kernel, David S. Miller, Jakub Kicinski, Andy Shevchenko, Andrew Lunn, Maxime Coquelin, Uwe Kleine-König, Alexandre Torgue, Eric Dumazet, Paolo Abeni From: David Wu <david.wu@rock-chips.com> Add constants and callback functions for the dwmac on RK3562 soc. As can be seen, the base structure is the same. Signed-off-by: David Wu <david.wu@rock-chips.com> Signed-off-by: Kever Yang <kever.yang@rock-chips.com> Reviewed-by: Heiko Stuebner <heiko@sntech.de> --- Changes in v2: - Collect review tag .../net/ethernet/stmicro/stmmac/dwmac-rk.c | 207 +++++++++++++++++- 1 file changed, 205 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c index a4dc89e23a68..ccf4ecdffad3 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c @@ -2,8 +2,7 @@ /** * DOC: dwmac-rk.c - Rockchip RK3288 DWMAC specific glue layer * - * Copyright (C) 2014 Chen-Zhi (Roger Chen) - * + * Copyright (c) 2014 Rockchip Electronics Co., Ltd. * Chen-Zhi (Roger Chen) <roger.chen@rock-chips.com> */ @@ -91,6 +90,16 @@ struct rk_priv_data { (((tx) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \ ((rx) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE)) +#define DELAY_VALUE(soc, tx, rx) \ + ((((tx) >= 0) ? soc##_GMAC_CLK_TX_DL_CFG(tx) : 0) | \ + (((rx) >= 0) ? soc##_GMAC_CLK_RX_DL_CFG(rx) : 0)) + +#define GMAC_RGMII_CLK_DIV_BY_ID(soc, id, div) \ + (soc##_GMAC##id##_CLK_RGMII_DIV##div) + +#define GMAC_RMII_CLK_DIV_BY_ID(soc, id, div) \ + (soc##_GMAC##id##_CLK_RMII_DIV##div) + #define PX30_GRF_GMAC_CON1 0x0904 /* PX30_GRF_GMAC_CON1 */ @@ -1013,6 +1022,199 @@ static const struct rk_gmac_ops rk3399_ops = { .set_rmii_speed = rk3399_set_rmii_speed, }; +/* sys_grf */ +#define RK3562_GRF_SYS_SOC_CON0 0X0400 +#define RK3562_GRF_SYS_SOC_CON1 0X0404 + +#define RK3562_GMAC0_CLK_RMII_MODE GRF_BIT(5) +#define RK3562_GMAC0_CLK_RGMII_MODE GRF_CLR_BIT(5) + +#define RK3562_GMAC0_CLK_RMII_GATE GRF_BIT(6) +#define RK3562_GMAC0_CLK_RMII_NOGATE GRF_CLR_BIT(6) + +#define RK3562_GMAC0_CLK_RMII_DIV2 GRF_BIT(7) +#define RK3562_GMAC0_CLK_RMII_DIV20 GRF_CLR_BIT(7) + +#define RK3562_GMAC0_CLK_RGMII_DIV1 \ + (GRF_CLR_BIT(7) | GRF_CLR_BIT(8)) +#define RK3562_GMAC0_CLK_RGMII_DIV5 \ + (GRF_BIT(7) | GRF_BIT(8)) +#define RK3562_GMAC0_CLK_RGMII_DIV50 \ + (GRF_CLR_BIT(7) | GRF_BIT(8)) + +#define RK3562_GMAC0_CLK_RMII_DIV2 GRF_BIT(7) +#define RK3562_GMAC0_CLK_RMII_DIV20 GRF_CLR_BIT(7) + +#define RK3562_GMAC0_CLK_SELET_CRU GRF_CLR_BIT(9) +#define RK3562_GMAC0_CLK_SELET_IO GRF_BIT(9) + +#define RK3562_GMAC1_CLK_RMII_GATE GRF_BIT(12) +#define RK3562_GMAC1_CLK_RMII_NOGATE GRF_CLR_BIT(12) + +#define RK3562_GMAC1_CLK_RMII_DIV2 GRF_BIT(13) +#define RK3562_GMAC1_CLK_RMII_DIV20 GRF_CLR_BIT(13) + +#define RK3562_GMAC1_RMII_SPEED100 GRF_BIT(11) +#define RK3562_GMAC1_RMII_SPEED10 GRF_CLR_BIT(11) + +#define RK3562_GMAC1_CLK_SELET_CRU GRF_CLR_BIT(15) +#define RK3562_GMAC1_CLK_SELET_IO GRF_BIT(15) + +/* ioc_grf */ +#define RK3562_GRF_IOC_GMAC_IOFUNC0_CON0 0X10400 +#define RK3562_GRF_IOC_GMAC_IOFUNC0_CON1 0X10404 +#define RK3562_GRF_IOC_GMAC_IOFUNC1_CON0 0X00400 +#define RK3562_GRF_IOC_GMAC_IOFUNC1_CON1 0X00404 + +#define RK3562_GMAC_RXCLK_DLY_ENABLE GRF_BIT(1) +#define RK3562_GMAC_RXCLK_DLY_DISABLE GRF_CLR_BIT(1) +#define RK3562_GMAC_TXCLK_DLY_ENABLE GRF_BIT(0) +#define RK3562_GMAC_TXCLK_DLY_DISABLE GRF_CLR_BIT(0) + +#define RK3562_GMAC_CLK_RX_DL_CFG(val) HIWORD_UPDATE(val, 0xFF, 8) +#define RK3562_GMAC_CLK_TX_DL_CFG(val) HIWORD_UPDATE(val, 0xFF, 0) + +#define RK3562_GMAC0_IO_EXTCLK_SELET_CRU GRF_CLR_BIT(2) +#define RK3562_GMAC0_IO_EXTCLK_SELET_IO GRF_BIT(2) + +#define RK3562_GMAC1_IO_EXTCLK_SELET_CRU GRF_CLR_BIT(3) +#define RK3562_GMAC1_IO_EXTCLK_SELET_IO GRF_BIT(3) + +static void rk3562_set_to_rgmii(struct rk_priv_data *bsp_priv, + int tx_delay, int rx_delay) +{ + struct device *dev = &bsp_priv->pdev->dev; + + if (IS_ERR(bsp_priv->grf) || IS_ERR(bsp_priv->php_grf)) { + dev_err(dev, "Missing rockchip,grf or rockchip,php_grf property\n"); + return; + } + + if (bsp_priv->id > 0) + return; + + regmap_write(bsp_priv->grf, RK3562_GRF_SYS_SOC_CON0, + RK3562_GMAC0_CLK_RGMII_MODE); + + regmap_write(bsp_priv->php_grf, RK3562_GRF_IOC_GMAC_IOFUNC0_CON1, + DELAY_ENABLE(RK3562, tx_delay, rx_delay)); + regmap_write(bsp_priv->php_grf, RK3562_GRF_IOC_GMAC_IOFUNC0_CON0, + DELAY_VALUE(RK3562, tx_delay, rx_delay)); + + regmap_write(bsp_priv->php_grf, RK3562_GRF_IOC_GMAC_IOFUNC1_CON1, + DELAY_ENABLE(RK3562, tx_delay, rx_delay)); + regmap_write(bsp_priv->php_grf, RK3562_GRF_IOC_GMAC_IOFUNC1_CON0, + DELAY_VALUE(RK3562, tx_delay, rx_delay)); +} + +static void rk3562_set_to_rmii(struct rk_priv_data *bsp_priv) +{ + struct device *dev = &bsp_priv->pdev->dev; + + if (IS_ERR(bsp_priv->grf)) { + dev_err(dev, "%s: Missing rockchip,grf property\n", __func__); + return; + } + + if (!bsp_priv->id) + regmap_write(bsp_priv->grf, RK3562_GRF_SYS_SOC_CON0, + RK3562_GMAC0_CLK_RMII_MODE); +} + +static void rk3562_set_gmac_speed(struct rk_priv_data *bsp_priv, int speed) +{ + struct device *dev = &bsp_priv->pdev->dev; + unsigned int val = 0, offset, id = bsp_priv->id; + + switch (speed) { + case 10: + if (bsp_priv->phy_iface == PHY_INTERFACE_MODE_RMII) { + if (id > 0) { + val = GMAC_RMII_CLK_DIV_BY_ID(RK3562, 1, 20); + regmap_write(bsp_priv->grf, RK3562_GRF_SYS_SOC_CON0, + RK3562_GMAC1_RMII_SPEED10); + } else { + val = GMAC_RMII_CLK_DIV_BY_ID(RK3562, 0, 20); + } + } else { + val = GMAC_RGMII_CLK_DIV_BY_ID(RK3562, 0, 50); + } + break; + case 100: + if (bsp_priv->phy_iface == PHY_INTERFACE_MODE_RMII) { + if (id > 0) { + val = GMAC_RMII_CLK_DIV_BY_ID(RK3562, 1, 2); + regmap_write(bsp_priv->grf, RK3562_GRF_SYS_SOC_CON0, + RK3562_GMAC1_RMII_SPEED100); + } else { + val = GMAC_RMII_CLK_DIV_BY_ID(RK3562, 0, 2); + } + } else { + val = GMAC_RGMII_CLK_DIV_BY_ID(RK3562, 0, 5); + } + break; + case 1000: + if (bsp_priv->phy_iface != PHY_INTERFACE_MODE_RMII) + val = GMAC_RGMII_CLK_DIV_BY_ID(RK3562, 0, 1); + else + goto err; + break; + default: + goto err; + } + + offset = (bsp_priv->id > 0) ? RK3562_GRF_SYS_SOC_CON1 : + RK3562_GRF_SYS_SOC_CON0; + regmap_write(bsp_priv->grf, offset, val); + + return; +err: + dev_err(dev, "unknown speed value for GMAC speed=%d", speed); +} + +static void rk3562_set_clock_selection(struct rk_priv_data *bsp_priv, bool input, + bool enable) +{ + struct device *dev = &bsp_priv->pdev->dev; + unsigned int value; + + if (IS_ERR(bsp_priv->grf) || IS_ERR(bsp_priv->php_grf)) { + dev_err(dev, "Missing rockchip,grf or rockchip,php_grf property\n"); + return; + } + + if (!bsp_priv->id) { + value = input ? RK3562_GMAC0_CLK_SELET_IO : + RK3562_GMAC0_CLK_SELET_CRU; + value |= enable ? RK3562_GMAC0_CLK_RMII_NOGATE : + RK3562_GMAC0_CLK_RMII_GATE; + regmap_write(bsp_priv->grf, RK3562_GRF_SYS_SOC_CON0, value); + + value = input ? RK3562_GMAC0_IO_EXTCLK_SELET_IO : + RK3562_GMAC0_IO_EXTCLK_SELET_CRU; + regmap_write(bsp_priv->php_grf, RK3562_GRF_IOC_GMAC_IOFUNC0_CON1, value); + regmap_write(bsp_priv->php_grf, RK3562_GRF_IOC_GMAC_IOFUNC1_CON1, value); + } else { + value = input ? RK3562_GMAC1_CLK_SELET_IO : + RK3562_GMAC1_CLK_SELET_CRU; + value |= enable ? RK3562_GMAC1_CLK_RMII_NOGATE : + RK3562_GMAC1_CLK_RMII_GATE; + regmap_write(bsp_priv->grf, RK3562_GRF_SYS_SOC_CON1, value); + + value = input ? RK3562_GMAC1_IO_EXTCLK_SELET_IO : + RK3562_GMAC1_IO_EXTCLK_SELET_CRU; + regmap_write(bsp_priv->php_grf, RK3562_GRF_IOC_GMAC_IOFUNC1_CON1, value); + } +} + +static const struct rk_gmac_ops rk3562_ops = { + .set_to_rgmii = rk3562_set_to_rgmii, + .set_to_rmii = rk3562_set_to_rmii, + .set_rgmii_speed = rk3562_set_gmac_speed, + .set_rmii_speed = rk3562_set_gmac_speed, + .set_clock_selection = rk3562_set_clock_selection, +}; + #define RK3568_GRF_GMAC0_CON0 0x0380 #define RK3568_GRF_GMAC0_CON1 0x0384 #define RK3568_GRF_GMAC1_CON0 0x0388 @@ -2044,6 +2246,7 @@ static const struct of_device_id rk_gmac_dwmac_match[] = { { .compatible = "rockchip,rk3366-gmac", .data = &rk3366_ops }, { .compatible = "rockchip,rk3368-gmac", .data = &rk3368_ops }, { .compatible = "rockchip,rk3399-gmac", .data = &rk3399_ops }, + { .compatible = "rockchip,rk3562-gmac", .data = &rk3562_ops }, { .compatible = "rockchip,rk3568-gmac", .data = &rk3568_ops }, { .compatible = "rockchip,rk3576-gmac", .data = &rk3576_ops }, { .compatible = "rockchip,rk3588-gmac", .data = &rk3588_ops }, -- 2.25.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/3] ethernet: stmmac: dwmac-rk: Add gmac support for rk3562 2025-02-27 11:06 ` [PATCH v2 2/3] ethernet: stmmac: dwmac-rk: Add gmac support for rk3562 Kever Yang @ 2025-02-27 13:47 ` Andrew Lunn 0 siblings, 0 replies; 7+ messages in thread From: Andrew Lunn @ 2025-02-27 13:47 UTC (permalink / raw) To: Kever Yang Cc: heiko, linux-rockchip, David Wu, linux-arm-kernel, Jan Petrous (OSS), netdev, Detlev Casanova, linux-stm32, linux-kernel, David S. Miller, Jakub Kicinski, Andy Shevchenko, Andrew Lunn, Maxime Coquelin, Uwe Kleine-König, Alexandre Torgue, Eric Dumazet, Paolo Abeni On Thu, Feb 27, 2025 at 07:06:51PM +0800, Kever Yang wrote: > From: David Wu <david.wu@rock-chips.com> > > Add constants and callback functions for the dwmac on RK3562 soc. > As can be seen, the base structure is the same. > > Signed-off-by: David Wu <david.wu@rock-chips.com> > Signed-off-by: Kever Yang <kever.yang@rock-chips.com> > Reviewed-by: Heiko Stuebner <heiko@sntech.de> > --- > > Changes in v2: > - Collect review tag > > .../net/ethernet/stmicro/stmmac/dwmac-rk.c | 207 +++++++++++++++++- > 1 file changed, 205 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > index a4dc89e23a68..ccf4ecdffad3 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > @@ -2,8 +2,7 @@ > /** > * DOC: dwmac-rk.c - Rockchip RK3288 DWMAC specific glue layer > * > - * Copyright (C) 2014 Chen-Zhi (Roger Chen) > - * > + * Copyright (c) 2014 Rockchip Electronics Co., Ltd. > * Chen-Zhi (Roger Chen) <roger.chen@rock-chips.com> > */ IANAL, but generally, you add additional copyright notices, not replace them. > +#define DELAY_VALUE(soc, tx, rx) \ > + ((((tx) >= 0) ? soc##_GMAC_CLK_TX_DL_CFG(tx) : 0) | \ > + (((rx) >= 0) ? soc##_GMAC_CLK_RX_DL_CFG(rx) : 0)) > + > +#define GMAC_RGMII_CLK_DIV_BY_ID(soc, id, div) \ > + (soc##_GMAC##id##_CLK_RGMII_DIV##div) > + > +#define GMAC_RMII_CLK_DIV_BY_ID(soc, id, div) \ > + (soc##_GMAC##id##_CLK_RMII_DIV##div) > + This macro magic is pretty unreadable. Please consider another way to do this. Some wise developer once said, code is written once, read 100 times. So please make code readable by default, unless it is hot path. > +static void rk3562_set_gmac_speed(struct rk_priv_data *bsp_priv, int speed) > +{ > + struct device *dev = &bsp_priv->pdev->dev; > + unsigned int val = 0, offset, id = bsp_priv->id; > + > + switch (speed) { > + case 10: > + if (bsp_priv->phy_iface == PHY_INTERFACE_MODE_RMII) { > + if (id > 0) { > + val = GMAC_RMII_CLK_DIV_BY_ID(RK3562, 1, 20); > + regmap_write(bsp_priv->grf, RK3562_GRF_SYS_SOC_CON0, > + RK3562_GMAC1_RMII_SPEED10); > + } else { > + val = GMAC_RMII_CLK_DIV_BY_ID(RK3562, 0, 20); > + } > + } else { > + val = GMAC_RGMII_CLK_DIV_BY_ID(RK3562, 0, 50); > + } > + break; It seems like this function would be a lot more readable if it was split into two, one dealing with RMII and another with RGMII. > +static void rk3562_set_clock_selection(struct rk_priv_data *bsp_priv, bool input, > + bool enable) > +{ > + struct device *dev = &bsp_priv->pdev->dev; > + unsigned int value; > + > + if (IS_ERR(bsp_priv->grf) || IS_ERR(bsp_priv->php_grf)) { > + dev_err(dev, "Missing rockchip,grf or rockchip,php_grf property\n"); > + return; > + } That should of been checked much earlier, at probe. Andrew ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 3/3] ethernet: stmmac: dwmac-rk: Make the phy clock could be used for external phy 2025-02-27 11:06 [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac Kever Yang 2025-02-27 11:06 ` [PATCH v2 2/3] ethernet: stmmac: dwmac-rk: Add gmac support for rk3562 Kever Yang @ 2025-02-27 11:06 ` Kever Yang 2025-02-27 13:53 ` Andrew Lunn 2025-02-27 13:37 ` [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac Andrew Lunn 2025-02-28 19:04 ` Conor Dooley 3 siblings, 1 reply; 7+ messages in thread From: Kever Yang @ 2025-02-27 11:06 UTC (permalink / raw) To: heiko Cc: linux-rockchip, David Wu, Kever Yang, linux-arm-kernel, Andy Shevchenko, netdev, Detlev Casanova, linux-stm32, linux-kernel, David S. Miller, Jakub Kicinski, Andrew Lunn, Paolo Abeni, Maxime Coquelin, Uwe Kleine-König, Jan Petrous (OSS), Alexandre Torgue, Eric Dumazet From: David Wu <david.wu@rock-chips.com> Use the phy_clk to prepare_enable and unprepare_disable related phy clock. Signed-off-by: David Wu <david.wu@rock-chips.com> Signed-off-by: Kever Yang <kever.yang@rock-chips.com> --- Changes in v2: None drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c index ccf4ecdffad3..cc90c74ec70c 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c @@ -1867,12 +1867,14 @@ static int rk_gmac_clk_init(struct plat_stmmacenet_data *plat) clk_set_rate(bsp_priv->clk_mac, 50000000); } - if (plat->phy_node && bsp_priv->integrated_phy) { + if (plat->phy_node) { bsp_priv->clk_phy = of_clk_get(plat->phy_node, 0); ret = PTR_ERR_OR_ZERO(bsp_priv->clk_phy); if (ret) return dev_err_probe(dev, ret, "Cannot get PHY clock\n"); - clk_set_rate(bsp_priv->clk_phy, 50000000); + /* If it is not integrated_phy, clk_phy is optional */ + if (bsp_priv->integrated_phy) + clk_set_rate(bsp_priv->clk_phy, 50000000); } return 0; -- 2.25.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 3/3] ethernet: stmmac: dwmac-rk: Make the phy clock could be used for external phy 2025-02-27 11:06 ` [PATCH v2 3/3] ethernet: stmmac: dwmac-rk: Make the phy clock could be used for external phy Kever Yang @ 2025-02-27 13:53 ` Andrew Lunn 0 siblings, 0 replies; 7+ messages in thread From: Andrew Lunn @ 2025-02-27 13:53 UTC (permalink / raw) To: Kever Yang Cc: heiko, linux-rockchip, David Wu, linux-arm-kernel, Andy Shevchenko, netdev, Detlev Casanova, linux-stm32, linux-kernel, David S. Miller, Jakub Kicinski, Andrew Lunn, Paolo Abeni, Maxime Coquelin, Uwe Kleine-König, Jan Petrous (OSS), Alexandre Torgue, Eric Dumazet On Thu, Feb 27, 2025 at 07:06:52PM +0800, Kever Yang wrote: > From: David Wu <david.wu@rock-chips.com> > > Use the phy_clk to prepare_enable and unprepare_disable related phy clock. > > Signed-off-by: David Wu <david.wu@rock-chips.com> > Signed-off-by: Kever Yang <kever.yang@rock-chips.com> > --- > > Changes in v2: None > > drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > index ccf4ecdffad3..cc90c74ec70c 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > @@ -1867,12 +1867,14 @@ static int rk_gmac_clk_init(struct plat_stmmacenet_data *plat) > clk_set_rate(bsp_priv->clk_mac, 50000000); > } > > - if (plat->phy_node && bsp_priv->integrated_phy) { > + if (plat->phy_node) { > bsp_priv->clk_phy = of_clk_get(plat->phy_node, 0); > ret = PTR_ERR_OR_ZERO(bsp_priv->clk_phy); > if (ret) > return dev_err_probe(dev, ret, "Cannot get PHY clock\n"); > - clk_set_rate(bsp_priv->clk_phy, 50000000); > + /* If it is not integrated_phy, clk_phy is optional */ > + if (bsp_priv->integrated_phy) > + clk_set_rate(bsp_priv->clk_phy, 50000000); That does not look backwards compatible. Older DT blobs which don't have an integrated PHY won't have a clock in the node, so of_clk_get() will return an error, and this function then exits with an error code. Andrew --- pw-bot: cr ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac 2025-02-27 11:06 [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac Kever Yang 2025-02-27 11:06 ` [PATCH v2 2/3] ethernet: stmmac: dwmac-rk: Add gmac support for rk3562 Kever Yang 2025-02-27 11:06 ` [PATCH v2 3/3] ethernet: stmmac: dwmac-rk: Make the phy clock could be used for external phy Kever Yang @ 2025-02-27 13:37 ` Andrew Lunn 2025-02-28 19:04 ` Conor Dooley 3 siblings, 0 replies; 7+ messages in thread From: Andrew Lunn @ 2025-02-27 13:37 UTC (permalink / raw) To: Kever Yang Cc: heiko, linux-rockchip, Jose Abreu, devicetree, Conor Dooley, Giuseppe Cavallaro, Rob Herring, netdev, linux-kernel, David S. Miller, Jakub Kicinski, Andrew Lunn, David Wu, Paolo Abeni, Alexandre Torgue, Krzysztof Kozlowski, Eric Dumazet, linux-arm-kernel On Thu, Feb 27, 2025 at 07:06:50PM +0800, Kever Yang wrote: > Add a rockchip,rk3562-gmac compatible for supporting the 2 gmac > devices on the rk3562. > rk3562 only has 4 clocks availabl for gmac module. available Andrew ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac 2025-02-27 11:06 [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac Kever Yang ` (2 preceding siblings ...) 2025-02-27 13:37 ` [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac Andrew Lunn @ 2025-02-28 19:04 ` Conor Dooley 3 siblings, 0 replies; 7+ messages in thread From: Conor Dooley @ 2025-02-28 19:04 UTC (permalink / raw) To: Kever Yang Cc: heiko, linux-rockchip, Jose Abreu, devicetree, Conor Dooley, Giuseppe Cavallaro, Rob Herring, netdev, linux-kernel, David S. Miller, Jakub Kicinski, Andrew Lunn, David Wu, Paolo Abeni, Alexandre Torgue, Krzysztof Kozlowski, Eric Dumazet, linux-arm-kernel [-- Attachment #1: Type: text/plain, Size: 324 bytes --] On Thu, Feb 27, 2025 at 07:06:50PM +0800, Kever Yang wrote: > Add a rockchip,rk3562-gmac compatible for supporting the 2 gmac > devices on the rk3562. > rk3562 only has 4 clocks availabl for gmac module. > > Signed-off-by: Kever Yang <kever.yang@rock-chips.com> Acked-by: Conor Dooley <conor.dooley@microchip.com> [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-02-28 19:04 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-02-27 11:06 [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac Kever Yang 2025-02-27 11:06 ` [PATCH v2 2/3] ethernet: stmmac: dwmac-rk: Add gmac support for rk3562 Kever Yang 2025-02-27 13:47 ` Andrew Lunn 2025-02-27 11:06 ` [PATCH v2 3/3] ethernet: stmmac: dwmac-rk: Make the phy clock could be used for external phy Kever Yang 2025-02-27 13:53 ` Andrew Lunn 2025-02-27 13:37 ` [PATCH v2 1/3] dt-bindings: net: Add support for rk3562 dwmac Andrew Lunn 2025-02-28 19:04 ` Conor Dooley
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox