* [PATCH 1/4] dt-bindings: net: rockchip-dwmac: Add compatible string for RK3528
2025-03-06 22:13 [PATCH 0/4] rockchip: Enable Ethernet controller on Radxa E20C Jonas Karlman
@ 2025-03-06 22:13 ` Jonas Karlman
2025-03-07 15:42 ` Conor Dooley
2025-03-06 22:13 ` [PATCH 2/4] ethernet: stmmac: dwmac-rk: Add GMAC support " Jonas Karlman
` (2 subsequent siblings)
3 siblings, 1 reply; 13+ messages in thread
From: Jonas Karlman @ 2025-03-06 22:13 UTC (permalink / raw)
To: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, David Wu
Cc: Yao Zi, linux-rockchip, netdev, devicetree, linux-arm-kernel,
linux-kernel, Jonas Karlman
Rockchip RK3528 has two Ethernet controllers based on Synopsys DWC
Ethernet QoS IP.
Add compatible string for the RK3528 variant.
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
---
I was not able to restrict the minItems change to only apply to the new
compatible, please advise on how to properly restrict the minItems
change if needed.
Also, because snps,dwmac-4.20a is already listed in snps,dwmac.yaml
adding the rockchip,rk3528-gmac compatible did not seem necessary.
---
Documentation/devicetree/bindings/net/rockchip-dwmac.yaml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml b/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml
index 05a5605f1b51..3c25b49bd78e 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,rk3528-gmac
- rockchip,rk3568-gmac
- rockchip,rk3576-gmac
- rockchip,rk3588-gmac
@@ -49,6 +50,7 @@ properties:
- rockchip,rv1108-gmac
- items:
- enum:
+ - rockchip,rk3528-gmac
- rockchip,rk3568-gmac
- rockchip,rk3576-gmac
- rockchip,rk3588-gmac
@@ -56,7 +58,7 @@ properties:
- const: snps,dwmac-4.20a
clocks:
- minItems: 5
+ minItems: 4
maxItems: 8
clock-names:
--
2.48.1
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH 1/4] dt-bindings: net: rockchip-dwmac: Add compatible string for RK3528
2025-03-06 22:13 ` [PATCH 1/4] dt-bindings: net: rockchip-dwmac: Add compatible string for RK3528 Jonas Karlman
@ 2025-03-07 15:42 ` Conor Dooley
2025-03-07 16:01 ` Jonas Karlman
0 siblings, 1 reply; 13+ messages in thread
From: Conor Dooley @ 2025-03-07 15:42 UTC (permalink / raw)
To: Jonas Karlman
Cc: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, David Wu, Yao Zi, linux-rockchip, netdev,
devicetree, linux-arm-kernel, linux-kernel
[-- Attachment #1.1: Type: text/plain, Size: 2022 bytes --]
On Thu, Mar 06, 2025 at 10:13:54PM +0000, Jonas Karlman wrote:
> Rockchip RK3528 has two Ethernet controllers based on Synopsys DWC
> Ethernet QoS IP.
>
> Add compatible string for the RK3528 variant.
>
> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
> ---
> I was not able to restrict the minItems change to only apply to the new
> compatible, please advise on how to properly restrict the minItems
> change if needed.
What do you mean by that? As in, what did you try and did not work?
Usually you do something like
if:
not:
compatible:
contains:
rockchip,rk3528-gmac
then:
properties:
clocks:
minItems: 5
>
> Also, because snps,dwmac-4.20a is already listed in snps,dwmac.yaml
> adding the rockchip,rk3528-gmac compatible did not seem necessary.
> ---
> Documentation/devicetree/bindings/net/rockchip-dwmac.yaml | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml b/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml
> index 05a5605f1b51..3c25b49bd78e 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,rk3528-gmac
> - rockchip,rk3568-gmac
> - rockchip,rk3576-gmac
> - rockchip,rk3588-gmac
> @@ -49,6 +50,7 @@ properties:
> - rockchip,rv1108-gmac
> - items:
> - enum:
> + - rockchip,rk3528-gmac
> - rockchip,rk3568-gmac
> - rockchip,rk3576-gmac
> - rockchip,rk3588-gmac
> @@ -56,7 +58,7 @@ properties:
> - const: snps,dwmac-4.20a
>
> clocks:
> - minItems: 5
> + minItems: 4
> maxItems: 8
>
> clock-names:
> --
> 2.48.1
>
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
[-- Attachment #2: Type: text/plain, Size: 170 bytes --]
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH 1/4] dt-bindings: net: rockchip-dwmac: Add compatible string for RK3528
2025-03-07 15:42 ` Conor Dooley
@ 2025-03-07 16:01 ` Jonas Karlman
0 siblings, 0 replies; 13+ messages in thread
From: Jonas Karlman @ 2025-03-07 16:01 UTC (permalink / raw)
To: Conor Dooley
Cc: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, David Wu, Yao Zi, linux-rockchip, netdev,
devicetree, linux-arm-kernel, linux-kernel
Hi Conor,
On 2025-03-07 16:42, Conor Dooley wrote:
> On Thu, Mar 06, 2025 at 10:13:54PM +0000, Jonas Karlman wrote:
>> Rockchip RK3528 has two Ethernet controllers based on Synopsys DWC
>> Ethernet QoS IP.
>>
>> Add compatible string for the RK3528 variant.
>>
>> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
>> ---
>> I was not able to restrict the minItems change to only apply to the new
>> compatible, please advise on how to properly restrict the minItems
>> change if needed.
>
> What do you mean by that? As in, what did you try and did not work?
> Usually you do something like
> if:
> not:
> compatible:
> contains:
> rockchip,rk3528-gmac
> then:
> properties:
> clocks:
> minItems: 5
>
Thanks, this seem to work, will use in a v2.
I tried to do something opposite and instead set minItems: 4 when
compatible contains rockchip,rk3528-gmac:
if:
compatible:
contains:
rockchip,rk3528-gmac
then:
properties:
clocks:
minItems: 4
but that resulted in something like:
rockchip/rk3528-radxa-e20c.dtb: ethernet@ffbe0000: clocks: [[7, 173], [7, 172], [7, 171], [7, 170]] is too short
Regards,
Jonas
>>
>> Also, because snps,dwmac-4.20a is already listed in snps,dwmac.yaml
>> adding the rockchip,rk3528-gmac compatible did not seem necessary.
>> ---
>> Documentation/devicetree/bindings/net/rockchip-dwmac.yaml | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml b/Documentation/devicetree/bindings/net/rockchip-dwmac.yaml
>> index 05a5605f1b51..3c25b49bd78e 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,rk3528-gmac
>> - rockchip,rk3568-gmac
>> - rockchip,rk3576-gmac
>> - rockchip,rk3588-gmac
>> @@ -49,6 +50,7 @@ properties:
>> - rockchip,rv1108-gmac
>> - items:
>> - enum:
>> + - rockchip,rk3528-gmac
>> - rockchip,rk3568-gmac
>> - rockchip,rk3576-gmac
>> - rockchip,rk3588-gmac
>> @@ -56,7 +58,7 @@ properties:
>> - const: snps,dwmac-4.20a
>>
>> clocks:
>> - minItems: 5
>> + minItems: 4
>> maxItems: 8
>>
>> clock-names:
>> --
>> 2.48.1
>>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/4] ethernet: stmmac: dwmac-rk: Add GMAC support for RK3528
2025-03-06 22:13 [PATCH 0/4] rockchip: Enable Ethernet controller on Radxa E20C Jonas Karlman
2025-03-06 22:13 ` [PATCH 1/4] dt-bindings: net: rockchip-dwmac: Add compatible string for RK3528 Jonas Karlman
@ 2025-03-06 22:13 ` Jonas Karlman
2025-03-06 22:13 ` [PATCH 3/4] arm64: dts: rockchip: Add GMAC nodes " Jonas Karlman
2025-03-06 22:13 ` [PATCH 4/4] arm64: dts: rockchip: Enable Ethernet controller on Radxa E20C Jonas Karlman
3 siblings, 0 replies; 13+ messages in thread
From: Jonas Karlman @ 2025-03-06 22:13 UTC (permalink / raw)
To: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Maxime Coquelin, Alexandre Torgue
Cc: Yao Zi, linux-rockchip, netdev, devicetree, linux-arm-kernel,
linux-kernel, Jonas Karlman, David Wu, linux-stm32
From: David Wu <david.wu@rock-chips.com>
Rockchip RK3528 has two Ethernet controllers based on Synopsys DWC
Ethernet QoS IP.
Add initial support for the RK3528 variants.
Signed-off-by: David Wu <david.wu@rock-chips.com>
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
---
This does not include power on/off support for the integrated PHY.
---
.../net/ethernet/stmicro/stmmac/dwmac-rk.c | 132 ++++++++++++++++++
1 file changed, 132 insertions(+)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
index ba1cd079adf2..0ae3ffacb794 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
@@ -830,6 +830,137 @@ static const struct rk_gmac_ops rk3399_ops = {
.set_rmii_speed = rk3399_set_rmii_speed,
};
+#define RK3528_VO_GRF_GMAC_CON 0x0018
+#define RK3528_VO_GRF_MACPHY_CON0 0x001c
+#define RK3528_VO_GRF_MACPHY_CON1 0x0020
+#define RK3528_VPU_GRF_GMAC_CON5 0x0018
+#define RK3528_VPU_GRF_GMAC_CON6 0x001c
+
+#define RK3528_GMAC_RXCLK_DLY_ENABLE GRF_BIT(15)
+#define RK3528_GMAC_RXCLK_DLY_DISABLE GRF_CLR_BIT(15)
+#define RK3528_GMAC_TXCLK_DLY_ENABLE GRF_BIT(14)
+#define RK3528_GMAC_TXCLK_DLY_DISABLE GRF_CLR_BIT(14)
+
+#define RK3528_GMAC_CLK_RX_DL_CFG(val) HIWORD_UPDATE(val, 0xFF, 8)
+#define RK3528_GMAC_CLK_TX_DL_CFG(val) HIWORD_UPDATE(val, 0xFF, 0)
+
+#define RK3528_GMAC0_PHY_INTF_SEL_RMII GRF_BIT(1)
+#define RK3528_GMAC1_PHY_INTF_SEL_RGMII GRF_CLR_BIT(8)
+#define RK3528_GMAC1_PHY_INTF_SEL_RMII GRF_BIT(8)
+
+#define RK3528_GMAC1_CLK_SELECT_CRU GRF_CLR_BIT(12)
+#define RK3528_GMAC1_CLK_SELECT_IO GRF_BIT(12)
+
+#define RK3528_GMAC0_CLK_RMII_DIV2 GRF_BIT(3)
+#define RK3528_GMAC0_CLK_RMII_DIV20 GRF_CLR_BIT(3)
+#define RK3528_GMAC1_CLK_RMII_DIV2 GRF_BIT(10)
+#define RK3528_GMAC1_CLK_RMII_DIV20 GRF_CLR_BIT(10)
+
+#define RK3528_GMAC1_CLK_RGMII_DIV1 (GRF_CLR_BIT(11) | GRF_CLR_BIT(10))
+#define RK3528_GMAC1_CLK_RGMII_DIV5 (GRF_BIT(11) | GRF_BIT(10))
+#define RK3528_GMAC1_CLK_RGMII_DIV50 (GRF_BIT(11) | GRF_CLR_BIT(10))
+
+#define RK3528_GMAC0_CLK_RMII_GATE GRF_BIT(2)
+#define RK3528_GMAC0_CLK_RMII_NOGATE GRF_CLR_BIT(2)
+#define RK3528_GMAC1_CLK_RMII_GATE GRF_BIT(9)
+#define RK3528_GMAC1_CLK_RMII_NOGATE GRF_CLR_BIT(9)
+
+static void rk3528_set_to_rgmii(struct rk_priv_data *bsp_priv,
+ int tx_delay, int rx_delay)
+{
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
+ RK3528_GMAC1_PHY_INTF_SEL_RGMII);
+
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
+ DELAY_ENABLE(RK3528, tx_delay, rx_delay));
+
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON6,
+ RK3528_GMAC_CLK_RX_DL_CFG(rx_delay) |
+ RK3528_GMAC_CLK_TX_DL_CFG(tx_delay));
+}
+
+static void rk3528_set_to_rmii(struct rk_priv_data *bsp_priv)
+{
+ if (bsp_priv->id == 1)
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
+ RK3528_GMAC1_PHY_INTF_SEL_RMII);
+ else
+ regmap_write(bsp_priv->grf, RK3528_VO_GRF_GMAC_CON,
+ RK3528_GMAC0_PHY_INTF_SEL_RMII |
+ RK3528_GMAC0_CLK_RMII_DIV2);
+}
+
+static void rk3528_set_rgmii_speed(struct rk_priv_data *bsp_priv, int speed)
+{
+ struct device *dev = &bsp_priv->pdev->dev;
+
+ if (speed == 10)
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
+ RK3528_GMAC1_CLK_RGMII_DIV50);
+ else if (speed == 100)
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
+ RK3528_GMAC1_CLK_RGMII_DIV5);
+ else if (speed == 1000)
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
+ RK3528_GMAC1_CLK_RGMII_DIV1);
+ else
+ dev_err(dev, "unknown speed value for RGMII! speed=%d", speed);
+}
+
+static void rk3528_set_rmii_speed(struct rk_priv_data *bsp_priv, int speed)
+{
+ struct device *dev = &bsp_priv->pdev->dev;
+ unsigned int reg, val;
+
+ if (speed == 10)
+ val = bsp_priv->id == 1 ? RK3528_GMAC1_CLK_RMII_DIV20 :
+ RK3528_GMAC0_CLK_RMII_DIV20;
+ else if (speed == 100)
+ val = bsp_priv->id == 1 ? RK3528_GMAC1_CLK_RMII_DIV2 :
+ RK3528_GMAC0_CLK_RMII_DIV2;
+ else {
+ dev_err(dev, "unknown speed value for RMII! speed=%d", speed);
+ return;
+ }
+
+ reg = bsp_priv->id == 1 ? RK3528_VPU_GRF_GMAC_CON5 :
+ RK3528_VO_GRF_GMAC_CON;
+
+ regmap_write(bsp_priv->grf, reg, val);
+}
+
+static void rk3528_set_clock_selection(struct rk_priv_data *bsp_priv,
+ bool input, bool enable)
+{
+ unsigned int val;
+
+ if (bsp_priv->id == 1) {
+ val = input ? RK3528_GMAC1_CLK_SELECT_IO :
+ RK3528_GMAC1_CLK_SELECT_CRU;
+ val |= enable ? RK3528_GMAC1_CLK_RMII_NOGATE :
+ RK3528_GMAC1_CLK_RMII_GATE;
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5, val);
+ } else {
+ val = enable ? RK3528_GMAC0_CLK_RMII_NOGATE :
+ RK3528_GMAC0_CLK_RMII_GATE;
+ regmap_write(bsp_priv->grf, RK3528_VO_GRF_GMAC_CON, val);
+ }
+}
+
+static const struct rk_gmac_ops rk3528_ops = {
+ .set_to_rgmii = rk3528_set_to_rgmii,
+ .set_to_rmii = rk3528_set_to_rmii,
+ .set_rgmii_speed = rk3528_set_rgmii_speed,
+ .set_rmii_speed = rk3528_set_rmii_speed,
+ .set_clock_selection = rk3528_set_clock_selection,
+ .regs_valid = true,
+ .regs = {
+ 0xffbd0000, /* gmac0 */
+ 0xffbe0000, /* gmac1 */
+ 0x0, /* sentinel */
+ },
+};
+
#define RK3568_GRF_GMAC0_CON0 0x0380
#define RK3568_GRF_GMAC0_CON1 0x0384
#define RK3568_GRF_GMAC1_CON0 0x0388
@@ -1816,6 +1947,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,rk3528-gmac", .data = &rk3528_ops },
{ .compatible = "rockchip,rk3568-gmac", .data = &rk3568_ops },
{ .compatible = "rockchip,rk3576-gmac", .data = &rk3576_ops },
{ .compatible = "rockchip,rk3588-gmac", .data = &rk3588_ops },
--
2.48.1
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH 3/4] arm64: dts: rockchip: Add GMAC nodes for RK3528
2025-03-06 22:13 [PATCH 0/4] rockchip: Enable Ethernet controller on Radxa E20C Jonas Karlman
2025-03-06 22:13 ` [PATCH 1/4] dt-bindings: net: rockchip-dwmac: Add compatible string for RK3528 Jonas Karlman
2025-03-06 22:13 ` [PATCH 2/4] ethernet: stmmac: dwmac-rk: Add GMAC support " Jonas Karlman
@ 2025-03-06 22:13 ` Jonas Karlman
2025-03-06 22:46 ` Andrew Lunn
2025-03-06 22:13 ` [PATCH 4/4] arm64: dts: rockchip: Enable Ethernet controller on Radxa E20C Jonas Karlman
3 siblings, 1 reply; 13+ messages in thread
From: Jonas Karlman @ 2025-03-06 22:13 UTC (permalink / raw)
To: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Yao Zi, linux-rockchip, netdev, devicetree, linux-arm-kernel,
linux-kernel, Jonas Karlman
Rockchip RK3528 has two Ethernet controllers based on Synopsys DWC
Ethernet QoS IP.
Add device tree nodes for the two Ethernet controllers in RK3528.
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
---
gmac0 is missing the integrated-phy and has not been tested bacause I do
not have any board that use this Ethernet controller.
---
arch/arm64/boot/dts/rockchip/rk3528.dtsi | 92 ++++++++++++++++++++++++
1 file changed, 92 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3528.dtsi b/arch/arm64/boot/dts/rockchip/rk3528.dtsi
index c1a71ea81e03..5940719cffec 100644
--- a/arch/arm64/boot/dts/rockchip/rk3528.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3528.dtsi
@@ -286,6 +286,98 @@ saradc: adc@ffae0000 {
#io-channel-cells = <1>;
};
+ gmac0: ethernet@ffbd0000 {
+ compatible = "rockchip,rk3528-gmac", "snps,dwmac-4.20a";
+ reg = <0x0 0xffbd0000 0x0 0x10000>;
+ clocks = <&cru CLK_GMAC0_SRC>, <&cru CLK_GMAC0_RMII_50M>,
+ <&cru CLK_GMAC0_RX>, <&cru CLK_GMAC0_TX>,
+ <&cru PCLK_MAC_VO>, <&cru ACLK_MAC_VO>;
+ clock-names = "stmmaceth", "clk_mac_ref",
+ "mac_clk_rx", "mac_clk_tx",
+ "pclk_mac", "aclk_mac";
+ interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq", "eth_wake_irq";
+ resets = <&cru SRST_A_MAC_VO>;
+ reset-names = "stmmaceth";
+ rockchip,grf = <&vo_grf>;
+ snps,axi-config = <&gmac0_stmmac_axi_setup>;
+ snps,mixed-burst;
+ snps,mtl-rx-config = <&gmac0_mtl_rx_setup>;
+ snps,mtl-tx-config = <&gmac0_mtl_tx_setup>;
+ snps,tso;
+ status = "disabled";
+
+ mdio0: mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <0x1>;
+ #size-cells = <0x0>;
+ };
+
+ gmac0_stmmac_axi_setup: stmmac-axi-config {
+ snps,blen = <0 0 0 0 16 8 4>;
+ snps,rd_osr_lmt = <8>;
+ snps,wr_osr_lmt = <4>;
+ };
+
+ gmac0_mtl_rx_setup: rx-queues-config {
+ snps,rx-queues-to-use = <1>;
+ queue0 {};
+ };
+
+ gmac0_mtl_tx_setup: tx-queues-config {
+ snps,tx-queues-to-use = <1>;
+ queue0 {};
+ };
+ };
+
+ gmac1: ethernet@ffbe0000 {
+ compatible = "rockchip,rk3528-gmac", "snps,dwmac-4.20a";
+ reg = <0x0 0xffbe0000 0x0 0x10000>;
+ clocks = <&cru CLK_GMAC1_SRC_VPU>,
+ <&cru CLK_GMAC1_RMII_VPU>,
+ <&cru PCLK_MAC_VPU>,
+ <&cru ACLK_MAC_VPU>;
+ clock-names = "stmmaceth",
+ "clk_mac_ref",
+ "pclk_mac",
+ "aclk_mac";
+ interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq", "eth_wake_irq";
+ resets = <&cru SRST_A_MAC>;
+ reset-names = "stmmaceth";
+ rockchip,grf = <&vpu_grf>;
+ snps,axi-config = <&gmac1_stmmac_axi_setup>;
+ snps,mixed-burst;
+ snps,mtl-rx-config = <&gmac1_mtl_rx_setup>;
+ snps,mtl-tx-config = <&gmac1_mtl_tx_setup>;
+ snps,tso;
+ status = "disabled";
+
+ mdio1: mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <0x1>;
+ #size-cells = <0x0>;
+ };
+
+ gmac1_stmmac_axi_setup: stmmac-axi-config {
+ snps,blen = <0 0 0 0 16 8 4>;
+ snps,rd_osr_lmt = <8>;
+ snps,wr_osr_lmt = <4>;
+ };
+
+ gmac1_mtl_rx_setup: rx-queues-config {
+ snps,rx-queues-to-use = <1>;
+ queue0 {};
+ };
+
+ gmac1_mtl_tx_setup: tx-queues-config {
+ snps,tx-queues-to-use = <1>;
+ queue0 {};
+ };
+ };
+
sdhci: mmc@ffbf0000 {
compatible = "rockchip,rk3528-dwcmshc",
"rockchip,rk3588-dwcmshc";
--
2.48.1
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH 3/4] arm64: dts: rockchip: Add GMAC nodes for RK3528
2025-03-06 22:13 ` [PATCH 3/4] arm64: dts: rockchip: Add GMAC nodes " Jonas Karlman
@ 2025-03-06 22:46 ` Andrew Lunn
2025-03-07 0:05 ` Jonas Karlman
0 siblings, 1 reply; 13+ messages in thread
From: Andrew Lunn @ 2025-03-06 22:46 UTC (permalink / raw)
To: Jonas Karlman
Cc: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Yao Zi, linux-rockchip, netdev, devicetree,
linux-arm-kernel, linux-kernel
On Thu, Mar 06, 2025 at 10:13:56PM +0000, Jonas Karlman wrote:
> Rockchip RK3528 has two Ethernet controllers based on Synopsys DWC
> Ethernet QoS IP.
>
> Add device tree nodes for the two Ethernet controllers in RK3528.
>
> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
> ---
> gmac0 is missing the integrated-phy and has not been tested bacause I do
> not have any board that use this Ethernet controller.
What do you know about the integrated PHY? Does it use one of the
standard phy-modes? RMII? Does the datasheet indicate what address it
uses on the MDIO bus? If you know these two bits of information, you
can probably add it.
Andrew
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH 3/4] arm64: dts: rockchip: Add GMAC nodes for RK3528
2025-03-06 22:46 ` Andrew Lunn
@ 2025-03-07 0:05 ` Jonas Karlman
2025-03-07 14:02 ` Andrew Lunn
0 siblings, 1 reply; 13+ messages in thread
From: Jonas Karlman @ 2025-03-07 0:05 UTC (permalink / raw)
To: Andrew Lunn
Cc: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Yao Zi, linux-rockchip, netdev, devicetree,
linux-arm-kernel, linux-kernel
Hi Andrew,
On 2025-03-06 23:46, Andrew Lunn wrote:
> On Thu, Mar 06, 2025 at 10:13:56PM +0000, Jonas Karlman wrote:
>> Rockchip RK3528 has two Ethernet controllers based on Synopsys DWC
>> Ethernet QoS IP.
>>
>> Add device tree nodes for the two Ethernet controllers in RK3528.
>>
>> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
>> ---
>> gmac0 is missing the integrated-phy and has not been tested bacause I do
>> not have any board that use this Ethernet controller.
>
> What do you know about the integrated PHY? Does it use one of the
> standard phy-modes? RMII? Does the datasheet indicate what address it
> uses on the MDIO bus? If you know these two bits of information, you
> can probably add it.
The SoC datasheet lists following:
MAC 10/100/1000 Ethernet Controller (gmac1)
- Support 10/100/1000 Mbps data transfer rates with the RGMII interfaces
- Support 10/100 Mbps data transfer rates with the RMII interfaces
- Support both full-duplex and half-duplex operation
- Supports IEEE 802.1Q VLAN tag detection for reception frames
- Support detection of LAN wake-up frames and AMD Magic Packet frames
- Support checking IPv4 header checksum and TCP, UDP, or ICMP checksum
encapsulated in IPv4 or IPv6 datagram
- Support for TCP Segmentation Offload (TSO) and UDP Fragmentation
Offload (UFO)
MAC 10/100M Ethernet controller and MAC PHY (gmac0)
- Support one Ethernet controllers
- Support 10/100-Mbps data transfer rates with the RMII interfaces
- Support both full-duplex and half-duplex operation
and vendor kernel use following DT node:
phy-mode = "rmii";
clock_in_out = "input";
phy-handle = <&rmii0_phy>;
mdio0: mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <0x1>;
#size-cells = <0x0>;
rmii0_phy: ethernet-phy@2 {
compatible = "ethernet-phy-id0044.1400", "ethernet-phy-ieee802.3-c22";
reg = <2>;
clocks = <&cru CLK_MACPHY>;
resets = <&cru SRST_MACPHY>;
phy-is-integrated;
pinctrl-names = "default";
pinctrl-0 = <&fephym0_led_link &fephym0_led_spd>;
};
};
I could possible add something like that to the device tree, or I could
drop the entire gmac0 node and instead have it added in a future series.
Regards,
Jonas
>
> Andrew
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH 3/4] arm64: dts: rockchip: Add GMAC nodes for RK3528
2025-03-07 0:05 ` Jonas Karlman
@ 2025-03-07 14:02 ` Andrew Lunn
0 siblings, 0 replies; 13+ messages in thread
From: Andrew Lunn @ 2025-03-07 14:02 UTC (permalink / raw)
To: Jonas Karlman
Cc: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Yao Zi, linux-rockchip, netdev, devicetree,
linux-arm-kernel, linux-kernel
So this is a bit more complicated than i first guessed...
> phy-mode = "rmii";
> clock_in_out = "input";
Probably will not get passed the DT maintainers. The clocking needs
investigating.
> phy-handle = <&rmii0_phy>;
>
> mdio0: mdio {
> compatible = "snps,dwmac-mdio";
> #address-cells = <0x1>;
> #size-cells = <0x0>;
>
> rmii0_phy: ethernet-phy@2 {
> compatible = "ethernet-phy-id0044.1400", "ethernet-phy-ieee802.3-c22";
> reg = <2>;
> clocks = <&cru CLK_MACPHY>;
> resets = <&cru SRST_MACPHY>;
Using the ID suggests there might be a chicken/egg with the reset and
clock. The ID registers cannot be read from the PHY?
> phy-is-integrated;
This suggests the possibility exists to route the RMII interface to the
outside world:
phy-is-integrated:
$ref: /schemas/types.yaml#/definitions/flag
description:
If set, indicates that the PHY is integrated into the same
physical package as the Ethernet MAC. If needed, muxers
should be configured to ensure the integrated PHY is
used. The absence of this property indicates the muxers
should be configured so that the external PHY is used.
Given these issues, i suggest you keep with the DT as you have it
now. Adding the PHY node will require access to hardware and some
investigations.
Andrew
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 4/4] arm64: dts: rockchip: Enable Ethernet controller on Radxa E20C
2025-03-06 22:13 [PATCH 0/4] rockchip: Enable Ethernet controller on Radxa E20C Jonas Karlman
` (2 preceding siblings ...)
2025-03-06 22:13 ` [PATCH 3/4] arm64: dts: rockchip: Add GMAC nodes " Jonas Karlman
@ 2025-03-06 22:13 ` Jonas Karlman
2025-03-06 22:49 ` Andrew Lunn
3 siblings, 1 reply; 13+ messages in thread
From: Jonas Karlman @ 2025-03-06 22:13 UTC (permalink / raw)
To: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Yao Zi, linux-rockchip, netdev, devicetree, linux-arm-kernel,
linux-kernel, Jonas Karlman
The Radxa E20C has two GbE ports, LAN and WAN. The LAN port is provided
using a GMAC controller and a YT8531C PHY and the WAN port is provided
by an RTL8111H PCIe Ethernet controller.
Enable support for the LAN port on Radxa E20C.
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
---
.../boot/dts/rockchip/rk3528-radxa-e20c.dts | 30 +++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3528-radxa-e20c.dts b/arch/arm64/boot/dts/rockchip/rk3528-radxa-e20c.dts
index a511e2a2d4a5..61ba0471095a 100644
--- a/arch/arm64/boot/dts/rockchip/rk3528-radxa-e20c.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3528-radxa-e20c.dts
@@ -16,6 +16,7 @@ / {
compatible = "radxa,e20c", "rockchip,rk3528";
aliases {
+ ethernet0 = &gmac1;
mmc0 = &sdhci;
mmc1 = &sdmmc;
};
@@ -123,7 +124,36 @@ vccio_sd: regulator-vccio-sd {
};
};
+&gmac1 {
+ clock_in_out = "output";
+ phy-handle = <&rgmii_phy>;
+ phy-mode = "rgmii-id";
+ phy-supply = <&vcc_3v3>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rgmii_miim>, <&rgmii_tx_bus2>, <&rgmii_rx_bus2>,
+ <&rgmii_rgmii_clk>, <&rgmii_rgmii_bus>;
+ status = "okay";
+};
+
+&mdio1 {
+ rgmii_phy: ethernet-phy@1 {
+ compatible = "ethernet-phy-ieee802.3-c22";
+ reg = <0x1>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&gmac1_rstn_l>;
+ reset-assert-us = <20000>;
+ reset-deassert-us = <100000>;
+ reset-gpios = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>;
+ };
+};
+
&pinctrl {
+ ethernet {
+ gmac1_rstn_l: gmac1-rstn-l {
+ rockchip,pins = <4 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
gpio-keys {
user_key: user-key {
rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>;
--
2.48.1
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH 4/4] arm64: dts: rockchip: Enable Ethernet controller on Radxa E20C
2025-03-06 22:13 ` [PATCH 4/4] arm64: dts: rockchip: Enable Ethernet controller on Radxa E20C Jonas Karlman
@ 2025-03-06 22:49 ` Andrew Lunn
2025-03-07 9:16 ` Jonas Karlman
0 siblings, 1 reply; 13+ messages in thread
From: Andrew Lunn @ 2025-03-06 22:49 UTC (permalink / raw)
To: Jonas Karlman
Cc: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Yao Zi, linux-rockchip, netdev, devicetree,
linux-arm-kernel, linux-kernel
> +&mdio1 {
> + rgmii_phy: ethernet-phy@1 {
> + compatible = "ethernet-phy-ieee802.3-c22";
The compatible is not needed. That is the default.
Andrew
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH 4/4] arm64: dts: rockchip: Enable Ethernet controller on Radxa E20C
2025-03-06 22:49 ` Andrew Lunn
@ 2025-03-07 9:16 ` Jonas Karlman
2025-03-07 13:25 ` Andrew Lunn
0 siblings, 1 reply; 13+ messages in thread
From: Jonas Karlman @ 2025-03-07 9:16 UTC (permalink / raw)
To: Andrew Lunn
Cc: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Yao Zi, linux-rockchip, netdev, devicetree,
linux-arm-kernel, linux-kernel
Hi Andrew,
On 2025-03-06 23:49, Andrew Lunn wrote:
>> +&mdio1 {
>> + rgmii_phy: ethernet-phy@1 {
>> + compatible = "ethernet-phy-ieee802.3-c22";
>
> The compatible is not needed. That is the default.
Interesting, however I rather be explicit to not cause any issue for
U-Boot or any other user of the device trees beside Linux kernel.
Regards,
Jonas
>
> Andrew
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH 4/4] arm64: dts: rockchip: Enable Ethernet controller on Radxa E20C
2025-03-07 9:16 ` Jonas Karlman
@ 2025-03-07 13:25 ` Andrew Lunn
0 siblings, 0 replies; 13+ messages in thread
From: Andrew Lunn @ 2025-03-07 13:25 UTC (permalink / raw)
To: Jonas Karlman
Cc: Heiko Stuebner, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Yao Zi, linux-rockchip, netdev, devicetree,
linux-arm-kernel, linux-kernel
On Fri, Mar 07, 2025 at 10:16:08AM +0100, Jonas Karlman wrote:
> Hi Andrew,
>
> On 2025-03-06 23:49, Andrew Lunn wrote:
> >> +&mdio1 {
> >> + rgmii_phy: ethernet-phy@1 {
> >> + compatible = "ethernet-phy-ieee802.3-c22";
> >
> > The compatible is not needed. That is the default.
>
> Interesting, however I rather be explicit to not cause any issue for
> U-Boot or any other user of the device trees beside Linux kernel.
O.K. But any system using Linux .dts files should be happy with no
compatible, since that is how the majority are. Because PHYs have ID
registers, generally there is no need for a compatible. The only time
you do need a compatible is:
* The ID registers are wrong
* The ID registers cannot be read, chicken/egg problems the driver needs to solve
* The Clause 22 address space is not implemented and you need to indicate C45
should be used to get the ID registers.
None of this is specific to Linux.
Andrew
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 13+ messages in thread