* [PATCH v4 0/3] Add support for Nuvoton MA35D1 GMAC
@ 2024-12-02 2:36 ` Joey Lu
0 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-02 2:36 UTC (permalink / raw)
To: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran
Cc: alexandre.torgue, joabreu, ychuang3, schung, yclu4,
peppe.cavallaro, linux-arm-kernel, netdev, devicetree,
linux-kernel, openbmc, linux-stm32, Joey Lu
This patch series is submitted to add GMAC support for Nuvoton MA35D1
SoC platform. This work involves implementing a GMAC driver glue layer
based on Synopsys DWMAC driver framework to leverage MA35D1's dual GMAC
interface capabilities.
Overview:
1. Added a GMAC driver glue layer for MA35D1 SoC, providing support for
the platform's two GMAC interfaces.
2. Added device tree settings, with specific configurations for our
development boards:
a. SOM board: Configured for two RGMII interfaces.
b. IoT board: Configured with one RGMII and one RMII interface.
3. Added dt-bindings for the GMAC interfaces.
v4:
- Update nuvoton,ma35d1-dwmac.yaml
- Remove unnecessary property 'select'.
- Remove unnecessary compatible entries and fix items.
- Specify number of entries for 'reg'.
- Remove already defined property 'phy-handle'.
- Update example.
- Modify the property internal path delay to match the driver.
- Update dtsi
- Move 'status' to be the last property.
- Update dwmac-nuvoton driver
- Use .remove instead of .remove_new.
- Use dev_err_probe instead.
v3:
- Update nuvoton,ma35d1-dwmac.yaml
- Fix for dt_binding_check warnings/errors.
- Add compatible in snps,dwmac.yaml.
- Update dtsi
- Update dtsi to follow examples in yaml.
- Update dwmac-nuvoton driver
- Fix for auto build test warnings.
- Invalid path delay arguments will be returned.
v2:
- Update nuvoton,ma35d1-dwmac.yaml
- Rename file to align with the compatible property.
- Add an argument to syscon to replace mac-id,
with corresponding descriptions.
- Use tx-internal-delay-ps and rx-internal-delay-ps properties for
configurable path delay with corresponding descriptions,
allowing selection between GMAC internal and PHY.
- Add all supported phy-mode options.
- Remove unused properties.
- Update dtsi
- Modify syscon configuration to include an argument for
GMAC interface selection.
- Update dwmac-nuvoton driver
- Remove redundant device information print statements.
- Remove non-global parameters.
- Retrieve GMAC interface selection from the syscon argument.
- Parse Tx and Rx path delays by correct properties.
- Update configurations to support Wake-on-LAN.
Joey Lu (3):
dt-bindings: net: nuvoton: Add schema for Nuvoton MA35 family GMAC
arm64: dts: nuvoton: Add Ethernet nodes
net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
.../bindings/net/nuvoton,ma35d1-dwmac.yaml | 134 +++++++++++++
.../devicetree/bindings/net/snps,dwmac.yaml | 1 +
.../boot/dts/nuvoton/ma35d1-iot-512m.dts | 12 ++
.../boot/dts/nuvoton/ma35d1-som-256m.dts | 10 +
arch/arm64/boot/dts/nuvoton/ma35d1.dtsi | 54 ++++++
drivers/net/ethernet/stmicro/stmmac/Kconfig | 11 ++
drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
.../ethernet/stmicro/stmmac/dwmac-nuvoton.c | 179 ++++++++++++++++++
8 files changed, 402 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c
--
2.34.1
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v4 0/3] Add support for Nuvoton MA35D1 GMAC
@ 2024-12-02 2:36 ` Joey Lu
0 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-02 2:36 UTC (permalink / raw)
To: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran
Cc: devicetree, ychuang3, Joey Lu, netdev, openbmc, alexandre.torgue,
linux-kernel, joabreu, schung, peppe.cavallaro, yclu4,
linux-stm32, linux-arm-kernel
This patch series is submitted to add GMAC support for Nuvoton MA35D1
SoC platform. This work involves implementing a GMAC driver glue layer
based on Synopsys DWMAC driver framework to leverage MA35D1's dual GMAC
interface capabilities.
Overview:
1. Added a GMAC driver glue layer for MA35D1 SoC, providing support for
the platform's two GMAC interfaces.
2. Added device tree settings, with specific configurations for our
development boards:
a. SOM board: Configured for two RGMII interfaces.
b. IoT board: Configured with one RGMII and one RMII interface.
3. Added dt-bindings for the GMAC interfaces.
v4:
- Update nuvoton,ma35d1-dwmac.yaml
- Remove unnecessary property 'select'.
- Remove unnecessary compatible entries and fix items.
- Specify number of entries for 'reg'.
- Remove already defined property 'phy-handle'.
- Update example.
- Modify the property internal path delay to match the driver.
- Update dtsi
- Move 'status' to be the last property.
- Update dwmac-nuvoton driver
- Use .remove instead of .remove_new.
- Use dev_err_probe instead.
v3:
- Update nuvoton,ma35d1-dwmac.yaml
- Fix for dt_binding_check warnings/errors.
- Add compatible in snps,dwmac.yaml.
- Update dtsi
- Update dtsi to follow examples in yaml.
- Update dwmac-nuvoton driver
- Fix for auto build test warnings.
- Invalid path delay arguments will be returned.
v2:
- Update nuvoton,ma35d1-dwmac.yaml
- Rename file to align with the compatible property.
- Add an argument to syscon to replace mac-id,
with corresponding descriptions.
- Use tx-internal-delay-ps and rx-internal-delay-ps properties for
configurable path delay with corresponding descriptions,
allowing selection between GMAC internal and PHY.
- Add all supported phy-mode options.
- Remove unused properties.
- Update dtsi
- Modify syscon configuration to include an argument for
GMAC interface selection.
- Update dwmac-nuvoton driver
- Remove redundant device information print statements.
- Remove non-global parameters.
- Retrieve GMAC interface selection from the syscon argument.
- Parse Tx and Rx path delays by correct properties.
- Update configurations to support Wake-on-LAN.
Joey Lu (3):
dt-bindings: net: nuvoton: Add schema for Nuvoton MA35 family GMAC
arm64: dts: nuvoton: Add Ethernet nodes
net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
.../bindings/net/nuvoton,ma35d1-dwmac.yaml | 134 +++++++++++++
.../devicetree/bindings/net/snps,dwmac.yaml | 1 +
.../boot/dts/nuvoton/ma35d1-iot-512m.dts | 12 ++
.../boot/dts/nuvoton/ma35d1-som-256m.dts | 10 +
arch/arm64/boot/dts/nuvoton/ma35d1.dtsi | 54 ++++++
drivers/net/ethernet/stmicro/stmmac/Kconfig | 11 ++
drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
.../ethernet/stmicro/stmmac/dwmac-nuvoton.c | 179 ++++++++++++++++++
8 files changed, 402 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c
--
2.34.1
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v4 1/3] dt-bindings: net: nuvoton: Add schema for Nuvoton MA35 family GMAC
2024-12-02 2:36 ` Joey Lu
@ 2024-12-02 2:36 ` Joey Lu
-1 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-02 2:36 UTC (permalink / raw)
To: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran
Cc: alexandre.torgue, joabreu, ychuang3, schung, yclu4,
peppe.cavallaro, linux-arm-kernel, netdev, devicetree,
linux-kernel, openbmc, linux-stm32, Joey Lu
Create initial schema for Nuvoton MA35 family Gigabit MAC.
Signed-off-by: Joey Lu <a0987203069@gmail.com>
---
.../bindings/net/nuvoton,ma35d1-dwmac.yaml | 134 ++++++++++++++++++
.../devicetree/bindings/net/snps,dwmac.yaml | 1 +
2 files changed, 135 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
diff --git a/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
new file mode 100644
index 000000000000..e44abaf4da3e
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
@@ -0,0 +1,134 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/nuvoton,ma35d1-dwmac.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Nuvoton DWMAC glue layer controller
+
+maintainers:
+ - Joey Lu <yclu4@nuvoton.com>
+
+description:
+ Nuvoton 10/100/1000Mbps Gigabit Ethernet MAC Controller is based on
+ Synopsys DesignWare MAC (version 3.73a).
+
+allOf:
+ - $ref: snps,dwmac.yaml#
+
+properties:
+ compatible:
+ items:
+ - enum:
+ - nuvoton,ma35d1-dwmac
+
+ reg:
+ maxItems: 1
+ description:
+ Register range should be one of the GMAC interface.
+
+ interrupts:
+ maxItems: 1
+
+ clocks:
+ items:
+ - description: MAC clock
+ - description: PTP clock
+
+ clock-names:
+ items:
+ - const: stmmaceth
+ - const: ptp_ref
+
+ nuvoton,sys:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ items:
+ - items:
+ - description: phandle to access syscon registers.
+ - description: GMAC interface ID.
+ enum:
+ - 0
+ - 1
+ description:
+ A phandle to the syscon with one argument that configures system registers
+ for MA35D1's two GMACs. The argument specifies the GMAC interface ID.
+
+ resets:
+ maxItems: 1
+
+ reset-names:
+ items:
+ - const: stmmaceth
+
+ phy-mode:
+ enum:
+ - rmii
+ - rgmii
+ - rgmii-id
+ - rgmii-txid
+ - rgmii-rxid
+
+ tx-internal-delay-ps:
+ default: 0
+ minimum: 0
+ maximum: 2000
+ description:
+ RGMII TX path delay used only when PHY operates in RGMII mode with
+ internal delay (phy-mode is 'rgmii-id' or 'rgmii-txid') in pico-seconds.
+ Allowed values are from 0 to 2000.
+
+ rx-internal-delay-ps:
+ default: 0
+ minimum: 0
+ maximum: 2000
+ description:
+ RGMII RX path delay used only when PHY operates in RGMII mode with
+ internal delay (phy-mode is 'rgmii-id' or 'rgmii-rxid') in pico-seconds.
+ Allowed values are from 0 to 2000.
+
+ mdio:
+ $ref: /schemas/net/mdio.yaml#
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - interrupt-names
+ - clocks
+ - clock-names
+ - nuvoton,sys
+ - resets
+ - reset-names
+ - phy-mode
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/clock/nuvoton,ma35d1-clk.h>
+ #include <dt-bindings/reset/nuvoton,ma35d1-reset.h>
+ ethernet@40120000 {
+ compatible = "nuvoton,ma35d1-dwmac";
+ reg = <0x40120000 0x10000>;
+ interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq";
+ clocks = <&clk EMAC0_GATE>, <&clk EPLL_DIV8>;
+ clock-names = "stmmaceth", "ptp_ref";
+
+ nuvoton,sys = <&sys 0>;
+ resets = <&sys MA35D1_RESET_GMAC0>;
+ reset-names = "stmmaceth";
+
+ phy-mode = "rgmii-id";
+ phy-handle = <ð_phy0>;
+ mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ethernet-phy@0 {
+ reg = <0>;
+ };
+ };
+ };
diff --git a/Documentation/devicetree/bindings/net/snps,dwmac.yaml b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
index eb1f3ae41ab9..4bf59ab910cc 100644
--- a/Documentation/devicetree/bindings/net/snps,dwmac.yaml
+++ b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
@@ -67,6 +67,7 @@ properties:
- ingenic,x2000-mac
- loongson,ls2k-dwmac
- loongson,ls7a-dwmac
+ - nuvoton,ma35d1-dwmac
- qcom,qcs404-ethqos
- qcom,sa8775p-ethqos
- qcom,sc8280xp-ethqos
--
2.34.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v4 1/3] dt-bindings: net: nuvoton: Add schema for Nuvoton MA35 family GMAC
@ 2024-12-02 2:36 ` Joey Lu
0 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-02 2:36 UTC (permalink / raw)
To: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran
Cc: devicetree, ychuang3, Joey Lu, netdev, openbmc, alexandre.torgue,
linux-kernel, joabreu, schung, peppe.cavallaro, yclu4,
linux-stm32, linux-arm-kernel
Create initial schema for Nuvoton MA35 family Gigabit MAC.
Signed-off-by: Joey Lu <a0987203069@gmail.com>
---
.../bindings/net/nuvoton,ma35d1-dwmac.yaml | 134 ++++++++++++++++++
.../devicetree/bindings/net/snps,dwmac.yaml | 1 +
2 files changed, 135 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
diff --git a/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
new file mode 100644
index 000000000000..e44abaf4da3e
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
@@ -0,0 +1,134 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/nuvoton,ma35d1-dwmac.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Nuvoton DWMAC glue layer controller
+
+maintainers:
+ - Joey Lu <yclu4@nuvoton.com>
+
+description:
+ Nuvoton 10/100/1000Mbps Gigabit Ethernet MAC Controller is based on
+ Synopsys DesignWare MAC (version 3.73a).
+
+allOf:
+ - $ref: snps,dwmac.yaml#
+
+properties:
+ compatible:
+ items:
+ - enum:
+ - nuvoton,ma35d1-dwmac
+
+ reg:
+ maxItems: 1
+ description:
+ Register range should be one of the GMAC interface.
+
+ interrupts:
+ maxItems: 1
+
+ clocks:
+ items:
+ - description: MAC clock
+ - description: PTP clock
+
+ clock-names:
+ items:
+ - const: stmmaceth
+ - const: ptp_ref
+
+ nuvoton,sys:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ items:
+ - items:
+ - description: phandle to access syscon registers.
+ - description: GMAC interface ID.
+ enum:
+ - 0
+ - 1
+ description:
+ A phandle to the syscon with one argument that configures system registers
+ for MA35D1's two GMACs. The argument specifies the GMAC interface ID.
+
+ resets:
+ maxItems: 1
+
+ reset-names:
+ items:
+ - const: stmmaceth
+
+ phy-mode:
+ enum:
+ - rmii
+ - rgmii
+ - rgmii-id
+ - rgmii-txid
+ - rgmii-rxid
+
+ tx-internal-delay-ps:
+ default: 0
+ minimum: 0
+ maximum: 2000
+ description:
+ RGMII TX path delay used only when PHY operates in RGMII mode with
+ internal delay (phy-mode is 'rgmii-id' or 'rgmii-txid') in pico-seconds.
+ Allowed values are from 0 to 2000.
+
+ rx-internal-delay-ps:
+ default: 0
+ minimum: 0
+ maximum: 2000
+ description:
+ RGMII RX path delay used only when PHY operates in RGMII mode with
+ internal delay (phy-mode is 'rgmii-id' or 'rgmii-rxid') in pico-seconds.
+ Allowed values are from 0 to 2000.
+
+ mdio:
+ $ref: /schemas/net/mdio.yaml#
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - interrupt-names
+ - clocks
+ - clock-names
+ - nuvoton,sys
+ - resets
+ - reset-names
+ - phy-mode
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/clock/nuvoton,ma35d1-clk.h>
+ #include <dt-bindings/reset/nuvoton,ma35d1-reset.h>
+ ethernet@40120000 {
+ compatible = "nuvoton,ma35d1-dwmac";
+ reg = <0x40120000 0x10000>;
+ interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq";
+ clocks = <&clk EMAC0_GATE>, <&clk EPLL_DIV8>;
+ clock-names = "stmmaceth", "ptp_ref";
+
+ nuvoton,sys = <&sys 0>;
+ resets = <&sys MA35D1_RESET_GMAC0>;
+ reset-names = "stmmaceth";
+
+ phy-mode = "rgmii-id";
+ phy-handle = <ð_phy0>;
+ mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ethernet-phy@0 {
+ reg = <0>;
+ };
+ };
+ };
diff --git a/Documentation/devicetree/bindings/net/snps,dwmac.yaml b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
index eb1f3ae41ab9..4bf59ab910cc 100644
--- a/Documentation/devicetree/bindings/net/snps,dwmac.yaml
+++ b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
@@ -67,6 +67,7 @@ properties:
- ingenic,x2000-mac
- loongson,ls2k-dwmac
- loongson,ls7a-dwmac
+ - nuvoton,ma35d1-dwmac
- qcom,qcs404-ethqos
- qcom,sa8775p-ethqos
- qcom,sc8280xp-ethqos
--
2.34.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v4 2/3] arm64: dts: nuvoton: Add Ethernet nodes
2024-12-02 2:36 ` Joey Lu
@ 2024-12-02 2:36 ` Joey Lu
-1 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-02 2:36 UTC (permalink / raw)
To: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran
Cc: alexandre.torgue, joabreu, ychuang3, schung, yclu4,
peppe.cavallaro, linux-arm-kernel, netdev, devicetree,
linux-kernel, openbmc, linux-stm32, Joey Lu
Add GMAC nodes for our MA35D1 development boards:
two RGMII interfaces for SOM board, and one RGMII and one RMII
interface for IoT board.
Signed-off-by: Joey Lu <a0987203069@gmail.com>
---
.../boot/dts/nuvoton/ma35d1-iot-512m.dts | 12 +++++
.../boot/dts/nuvoton/ma35d1-som-256m.dts | 10 ++++
arch/arm64/boot/dts/nuvoton/ma35d1.dtsi | 54 +++++++++++++++++++
3 files changed, 76 insertions(+)
diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1-iot-512m.dts b/arch/arm64/boot/dts/nuvoton/ma35d1-iot-512m.dts
index 9482bec1aa57..5cc712ae92d8 100644
--- a/arch/arm64/boot/dts/nuvoton/ma35d1-iot-512m.dts
+++ b/arch/arm64/boot/dts/nuvoton/ma35d1-iot-512m.dts
@@ -18,6 +18,8 @@ aliases {
serial12 = &uart12;
serial13 = &uart13;
serial14 = &uart14;
+ ethernet0 = &gmac0;
+ ethernet1 = &gmac1;
};
chosen {
@@ -126,3 +128,13 @@ &uart14 {
pinctrl-0 = <&pinctrl_uart14>;
status = "okay";
};
+
+&gmac0 {
+ phy-mode = "rgmii-id";
+ status = "okay";
+};
+
+&gmac1 {
+ phy-mode = "rmii";
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts b/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts
index f6f20a17e501..1d9ac350a1f1 100644
--- a/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts
+++ b/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts
@@ -18,6 +18,8 @@ aliases {
serial12 = &uart12;
serial14 = &uart14;
serial16 = &uart16;
+ ethernet0 = &gmac0;
+ ethernet1 = &gmac1;
};
chosen {
@@ -129,3 +131,11 @@ &uart16 {
pinctrl-0 = <&pinctrl_uart16>;
status = "okay";
};
+
+&gmac0 {
+ status = "okay";
+};
+
+&gmac1 {
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
index e51b98f5bdce..89712e262ee6 100644
--- a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
+++ b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
@@ -379,5 +379,59 @@ uart16: serial@40880000 {
clocks = <&clk UART16_GATE>;
status = "disabled";
};
+
+ gmac0: ethernet@40120000 {
+ compatible = "nuvoton,ma35d1-dwmac";
+ reg = <0x0 0x40120000 0x0 0x10000>;
+ interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq";
+ clocks = <&clk EMAC0_GATE>, <&clk EPLL_DIV8>;
+ clock-names = "stmmaceth", "ptp_ref";
+
+ nuvoton,sys = <&sys 0>;
+ resets = <&sys MA35D1_RESET_GMAC0>;
+ reset-names = "stmmaceth";
+
+ phy-mode = "rgmii-id";
+ phy-handle = <ð_phy0>;
+ status = "disabled";
+
+ mdio0: mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ eth_phy0: ethernet-phy@0 {
+ reg = <0>;
+ };
+ };
+ };
+
+ gmac1: ethernet@40130000 {
+ compatible = "nuvoton,ma35d1-dwmac";
+ reg = <0x0 0x40130000 0x0 0x10000>;
+ interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq";
+ clocks = <&clk EMAC1_GATE>, <&clk EPLL_DIV8>;
+ clock-names = "stmmaceth", "ptp_ref";
+
+ nuvoton,sys = <&sys 1>;
+ resets = <&sys MA35D1_RESET_GMAC1>;
+ reset-names = "stmmaceth";
+
+ phy-mode = "rgmii-id";
+ phy-handle = <ð_phy1>;
+ status = "disabled";
+
+ mdio1: mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ eth_phy1: ethernet-phy@1 {
+ reg = <1>;
+ };
+ };
+ };
};
};
--
2.34.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v4 2/3] arm64: dts: nuvoton: Add Ethernet nodes
@ 2024-12-02 2:36 ` Joey Lu
0 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-02 2:36 UTC (permalink / raw)
To: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran
Cc: devicetree, ychuang3, Joey Lu, netdev, openbmc, alexandre.torgue,
linux-kernel, joabreu, schung, peppe.cavallaro, yclu4,
linux-stm32, linux-arm-kernel
Add GMAC nodes for our MA35D1 development boards:
two RGMII interfaces for SOM board, and one RGMII and one RMII
interface for IoT board.
Signed-off-by: Joey Lu <a0987203069@gmail.com>
---
.../boot/dts/nuvoton/ma35d1-iot-512m.dts | 12 +++++
.../boot/dts/nuvoton/ma35d1-som-256m.dts | 10 ++++
arch/arm64/boot/dts/nuvoton/ma35d1.dtsi | 54 +++++++++++++++++++
3 files changed, 76 insertions(+)
diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1-iot-512m.dts b/arch/arm64/boot/dts/nuvoton/ma35d1-iot-512m.dts
index 9482bec1aa57..5cc712ae92d8 100644
--- a/arch/arm64/boot/dts/nuvoton/ma35d1-iot-512m.dts
+++ b/arch/arm64/boot/dts/nuvoton/ma35d1-iot-512m.dts
@@ -18,6 +18,8 @@ aliases {
serial12 = &uart12;
serial13 = &uart13;
serial14 = &uart14;
+ ethernet0 = &gmac0;
+ ethernet1 = &gmac1;
};
chosen {
@@ -126,3 +128,13 @@ &uart14 {
pinctrl-0 = <&pinctrl_uart14>;
status = "okay";
};
+
+&gmac0 {
+ phy-mode = "rgmii-id";
+ status = "okay";
+};
+
+&gmac1 {
+ phy-mode = "rmii";
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts b/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts
index f6f20a17e501..1d9ac350a1f1 100644
--- a/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts
+++ b/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts
@@ -18,6 +18,8 @@ aliases {
serial12 = &uart12;
serial14 = &uart14;
serial16 = &uart16;
+ ethernet0 = &gmac0;
+ ethernet1 = &gmac1;
};
chosen {
@@ -129,3 +131,11 @@ &uart16 {
pinctrl-0 = <&pinctrl_uart16>;
status = "okay";
};
+
+&gmac0 {
+ status = "okay";
+};
+
+&gmac1 {
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
index e51b98f5bdce..89712e262ee6 100644
--- a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
+++ b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
@@ -379,5 +379,59 @@ uart16: serial@40880000 {
clocks = <&clk UART16_GATE>;
status = "disabled";
};
+
+ gmac0: ethernet@40120000 {
+ compatible = "nuvoton,ma35d1-dwmac";
+ reg = <0x0 0x40120000 0x0 0x10000>;
+ interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq";
+ clocks = <&clk EMAC0_GATE>, <&clk EPLL_DIV8>;
+ clock-names = "stmmaceth", "ptp_ref";
+
+ nuvoton,sys = <&sys 0>;
+ resets = <&sys MA35D1_RESET_GMAC0>;
+ reset-names = "stmmaceth";
+
+ phy-mode = "rgmii-id";
+ phy-handle = <ð_phy0>;
+ status = "disabled";
+
+ mdio0: mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ eth_phy0: ethernet-phy@0 {
+ reg = <0>;
+ };
+ };
+ };
+
+ gmac1: ethernet@40130000 {
+ compatible = "nuvoton,ma35d1-dwmac";
+ reg = <0x0 0x40130000 0x0 0x10000>;
+ interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq";
+ clocks = <&clk EMAC1_GATE>, <&clk EPLL_DIV8>;
+ clock-names = "stmmaceth", "ptp_ref";
+
+ nuvoton,sys = <&sys 1>;
+ resets = <&sys MA35D1_RESET_GMAC1>;
+ reset-names = "stmmaceth";
+
+ phy-mode = "rgmii-id";
+ phy-handle = <ð_phy1>;
+ status = "disabled";
+
+ mdio1: mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ eth_phy1: ethernet-phy@1 {
+ reg = <1>;
+ };
+ };
+ };
};
};
--
2.34.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v4 3/3] net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
2024-12-02 2:36 ` Joey Lu
@ 2024-12-02 2:36 ` Joey Lu
-1 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-02 2:36 UTC (permalink / raw)
To: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran
Cc: alexandre.torgue, joabreu, ychuang3, schung, yclu4,
peppe.cavallaro, linux-arm-kernel, netdev, devicetree,
linux-kernel, openbmc, linux-stm32, Joey Lu
Add support for Gigabit Ethernet on Nuvoton MA35 series using dwmac driver.
Signed-off-by: Joey Lu <a0987203069@gmail.com>
---
drivers/net/ethernet/stmicro/stmmac/Kconfig | 11 ++
drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
.../ethernet/stmicro/stmmac/dwmac-nuvoton.c | 179 ++++++++++++++++++
3 files changed, 191 insertions(+)
create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index 6658536a4e17..c8cbc0ec1311 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -121,6 +121,17 @@ config DWMAC_MESON
the stmmac device driver. This driver is used for Meson6,
Meson8, Meson8b and GXBB SoCs.
+config DWMAC_NUVOTON
+ tristate "Nuvoton MA35 dwmac support"
+ default ARCH_MA35
+ depends on OF && (ARCH_MA35 || COMPILE_TEST)
+ select MFD_SYSCON
+ help
+ Support for Ethernet controller on Nuvoton MA35 series SoC.
+
+ This selects the Nuvoton MA35 series SoC glue layer support
+ for the stmmac device driver.
+
config DWMAC_QCOM_ETHQOS
tristate "Qualcomm ETHQOS support"
default ARCH_QCOM
diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile
index 2389fd261344..9812b824459f 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -19,6 +19,7 @@ obj-$(CONFIG_DWMAC_IPQ806X) += dwmac-ipq806x.o
obj-$(CONFIG_DWMAC_LPC18XX) += dwmac-lpc18xx.o
obj-$(CONFIG_DWMAC_MEDIATEK) += dwmac-mediatek.o
obj-$(CONFIG_DWMAC_MESON) += dwmac-meson.o dwmac-meson8b.o
+obj-$(CONFIG_DWMAC_NUVOTON) += dwmac-nuvoton.o
obj-$(CONFIG_DWMAC_QCOM_ETHQOS) += dwmac-qcom-ethqos.o
obj-$(CONFIG_DWMAC_ROCKCHIP) += dwmac-rk.o
obj-$(CONFIG_DWMAC_RZN1) += dwmac-rzn1.o
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c
new file mode 100644
index 000000000000..eed852cb13ab
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c
@@ -0,0 +1,179 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Nuvoton DWMAC specific glue layer
+ *
+ * Copyright (C) 2024 Nuvoton Technology Corp.
+ *
+ * Author: Joey Lu <yclu4@nuvoton.com>
+ */
+
+#include <linux/mfd/syscon.h>
+#include <linux/of_device.h>
+#include <linux/of_net.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/stmmac.h>
+
+#include "stmmac.h"
+#include "stmmac_platform.h"
+
+#define REG_SYS_GMAC0MISCR 0x108
+#define REG_SYS_GMAC1MISCR 0x10C
+
+#define MISCR_RMII BIT(0)
+
+/* 2000ps is mapped to 0 ~ 0xF */
+#define PATH_DELAY_DEC 134
+#define TX_DELAY_OFFSET 16
+#define TX_DELAY_MASK GENMASK(19, 16)
+#define RX_DELAY_OFFSET 20
+#define RX_DELAY_MASK GENMASK(23, 20)
+
+struct nvt_priv_data {
+ struct platform_device *pdev;
+ struct regmap *regmap;
+};
+
+static struct nvt_priv_data *
+nuvoton_gmac_setup(struct platform_device *pdev, struct plat_stmmacenet_data *plat)
+{
+ struct device *dev = &pdev->dev;
+ struct nvt_priv_data *bsp_priv;
+ phy_interface_t phy_mode;
+ u32 tx_delay, rx_delay;
+ u32 macid, arg, reg;
+
+ bsp_priv = devm_kzalloc(dev, sizeof(*bsp_priv), GFP_KERNEL);
+ if (!bsp_priv)
+ return ERR_PTR(-ENOMEM);
+
+ bsp_priv->regmap =
+ syscon_regmap_lookup_by_phandle_args(dev->of_node, "nuvoton,sys", 1, &macid);
+ if (IS_ERR(bsp_priv->regmap)) {
+ dev_err_probe(dev, PTR_ERR(bsp_priv->regmap), "Failed to get sys register\n");
+ return ERR_PTR(-ENODEV);
+ }
+ if (macid > 1) {
+ dev_err_probe(dev, -EINVAL, "Invalid sys arguments\n");
+ return ERR_PTR(-EINVAL);
+ }
+
+ if (of_property_read_u32(dev->of_node, "tx-internal-delay-ps", &arg)) {
+ tx_delay = 0; /* Default value is 0 */
+ } else {
+ if (arg <= 2000) {
+ tx_delay = (arg == 2000) ? 0xF : (arg / PATH_DELAY_DEC);
+ dev_dbg(dev, "Set Tx path delay to 0x%x\n", tx_delay);
+ } else {
+ dev_err(dev, "Invalid Tx path delay argument.\n");
+ return ERR_PTR(-EINVAL);
+ }
+ }
+ if (of_property_read_u32(dev->of_node, "rx-internal-delay-ps", &arg)) {
+ rx_delay = 0; /* Default value is 0 */
+ } else {
+ if (arg <= 2000) {
+ rx_delay = (arg == 2000) ? 0xF : (arg / PATH_DELAY_DEC);
+ dev_dbg(dev, "Set Rx path delay to 0x%x\n", rx_delay);
+ } else {
+ dev_err(dev, "Invalid Rx path delay argument.\n");
+ return ERR_PTR(-EINVAL);
+ }
+ }
+
+ regmap_read(bsp_priv->regmap,
+ macid == 0 ? REG_SYS_GMAC0MISCR : REG_SYS_GMAC1MISCR, ®);
+ reg &= ~(TX_DELAY_MASK | RX_DELAY_MASK);
+
+ if (of_get_phy_mode(pdev->dev.of_node, &phy_mode)) {
+ dev_err(dev, "missing phy mode property\n");
+ return ERR_PTR(-EINVAL);
+ }
+
+ switch (phy_mode) {
+ case PHY_INTERFACE_MODE_RGMII:
+ case PHY_INTERFACE_MODE_RGMII_ID:
+ case PHY_INTERFACE_MODE_RGMII_RXID:
+ case PHY_INTERFACE_MODE_RGMII_TXID:
+ reg &= ~MISCR_RMII;
+ break;
+ case PHY_INTERFACE_MODE_RMII:
+ reg |= MISCR_RMII;
+ break;
+ default:
+ dev_err(dev, "Unsupported phy-mode (%d)\n", phy_mode);
+ return ERR_PTR(-EINVAL);
+ }
+
+ if (!(reg & MISCR_RMII)) {
+ reg |= tx_delay << TX_DELAY_OFFSET;
+ reg |= rx_delay << RX_DELAY_OFFSET;
+ }
+
+ regmap_write(bsp_priv->regmap,
+ macid == 0 ? REG_SYS_GMAC0MISCR : REG_SYS_GMAC1MISCR, reg);
+
+ bsp_priv->pdev = pdev;
+
+ return bsp_priv;
+}
+
+static int nuvoton_gmac_probe(struct platform_device *pdev)
+{
+ struct plat_stmmacenet_data *plat_dat;
+ struct stmmac_resources stmmac_res;
+ int ret;
+
+ ret = stmmac_get_platform_resources(pdev, &stmmac_res);
+ if (ret)
+ return ret;
+
+ plat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);
+ if (IS_ERR(plat_dat))
+ return PTR_ERR(plat_dat);
+
+ /* Nuvoton DWMAC configs */
+ plat_dat->has_gmac = 1;
+ plat_dat->tx_fifo_size = 2048;
+ plat_dat->rx_fifo_size = 4096;
+ plat_dat->multicast_filter_bins = 0;
+ plat_dat->unicast_filter_entries = 8;
+ plat_dat->flags &= ~STMMAC_FLAG_USE_PHY_WOL;
+
+ plat_dat->bsp_priv = nuvoton_gmac_setup(pdev, plat_dat);
+ if (IS_ERR(plat_dat->bsp_priv)) {
+ ret = PTR_ERR(plat_dat->bsp_priv);
+ return ret;
+ }
+
+ ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
+ if (ret)
+ return ret;
+
+ /* We support WoL by magic packet, override pmt to make it work! */
+ plat_dat->pmt = 1;
+ device_set_wakeup_capable(&pdev->dev, 1);
+
+ return 0;
+}
+
+static const struct of_device_id nuvoton_dwmac_match[] = {
+ { .compatible = "nuvoton,ma35d1-dwmac"},
+ { }
+};
+MODULE_DEVICE_TABLE(of, nuvoton_dwmac_match);
+
+static struct platform_driver nuvoton_dwmac_driver = {
+ .probe = nuvoton_gmac_probe,
+ .remove = stmmac_pltfr_remove,
+ .driver = {
+ .name = "nuvoton-dwmac",
+ .pm = &stmmac_pltfr_pm_ops,
+ .of_match_table = nuvoton_dwmac_match,
+ },
+};
+module_platform_driver(nuvoton_dwmac_driver);
+
+MODULE_AUTHOR("Joey Lu <yclu4@nuvoton.com>");
+MODULE_DESCRIPTION("Nuvoton DWMAC specific glue layer");
+MODULE_LICENSE("GPL v2");
--
2.34.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v4 3/3] net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
@ 2024-12-02 2:36 ` Joey Lu
0 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-02 2:36 UTC (permalink / raw)
To: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran
Cc: devicetree, ychuang3, Joey Lu, netdev, openbmc, alexandre.torgue,
linux-kernel, joabreu, schung, peppe.cavallaro, yclu4,
linux-stm32, linux-arm-kernel
Add support for Gigabit Ethernet on Nuvoton MA35 series using dwmac driver.
Signed-off-by: Joey Lu <a0987203069@gmail.com>
---
drivers/net/ethernet/stmicro/stmmac/Kconfig | 11 ++
drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
.../ethernet/stmicro/stmmac/dwmac-nuvoton.c | 179 ++++++++++++++++++
3 files changed, 191 insertions(+)
create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index 6658536a4e17..c8cbc0ec1311 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -121,6 +121,17 @@ config DWMAC_MESON
the stmmac device driver. This driver is used for Meson6,
Meson8, Meson8b and GXBB SoCs.
+config DWMAC_NUVOTON
+ tristate "Nuvoton MA35 dwmac support"
+ default ARCH_MA35
+ depends on OF && (ARCH_MA35 || COMPILE_TEST)
+ select MFD_SYSCON
+ help
+ Support for Ethernet controller on Nuvoton MA35 series SoC.
+
+ This selects the Nuvoton MA35 series SoC glue layer support
+ for the stmmac device driver.
+
config DWMAC_QCOM_ETHQOS
tristate "Qualcomm ETHQOS support"
default ARCH_QCOM
diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile
index 2389fd261344..9812b824459f 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -19,6 +19,7 @@ obj-$(CONFIG_DWMAC_IPQ806X) += dwmac-ipq806x.o
obj-$(CONFIG_DWMAC_LPC18XX) += dwmac-lpc18xx.o
obj-$(CONFIG_DWMAC_MEDIATEK) += dwmac-mediatek.o
obj-$(CONFIG_DWMAC_MESON) += dwmac-meson.o dwmac-meson8b.o
+obj-$(CONFIG_DWMAC_NUVOTON) += dwmac-nuvoton.o
obj-$(CONFIG_DWMAC_QCOM_ETHQOS) += dwmac-qcom-ethqos.o
obj-$(CONFIG_DWMAC_ROCKCHIP) += dwmac-rk.o
obj-$(CONFIG_DWMAC_RZN1) += dwmac-rzn1.o
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c
new file mode 100644
index 000000000000..eed852cb13ab
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c
@@ -0,0 +1,179 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Nuvoton DWMAC specific glue layer
+ *
+ * Copyright (C) 2024 Nuvoton Technology Corp.
+ *
+ * Author: Joey Lu <yclu4@nuvoton.com>
+ */
+
+#include <linux/mfd/syscon.h>
+#include <linux/of_device.h>
+#include <linux/of_net.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/stmmac.h>
+
+#include "stmmac.h"
+#include "stmmac_platform.h"
+
+#define REG_SYS_GMAC0MISCR 0x108
+#define REG_SYS_GMAC1MISCR 0x10C
+
+#define MISCR_RMII BIT(0)
+
+/* 2000ps is mapped to 0 ~ 0xF */
+#define PATH_DELAY_DEC 134
+#define TX_DELAY_OFFSET 16
+#define TX_DELAY_MASK GENMASK(19, 16)
+#define RX_DELAY_OFFSET 20
+#define RX_DELAY_MASK GENMASK(23, 20)
+
+struct nvt_priv_data {
+ struct platform_device *pdev;
+ struct regmap *regmap;
+};
+
+static struct nvt_priv_data *
+nuvoton_gmac_setup(struct platform_device *pdev, struct plat_stmmacenet_data *plat)
+{
+ struct device *dev = &pdev->dev;
+ struct nvt_priv_data *bsp_priv;
+ phy_interface_t phy_mode;
+ u32 tx_delay, rx_delay;
+ u32 macid, arg, reg;
+
+ bsp_priv = devm_kzalloc(dev, sizeof(*bsp_priv), GFP_KERNEL);
+ if (!bsp_priv)
+ return ERR_PTR(-ENOMEM);
+
+ bsp_priv->regmap =
+ syscon_regmap_lookup_by_phandle_args(dev->of_node, "nuvoton,sys", 1, &macid);
+ if (IS_ERR(bsp_priv->regmap)) {
+ dev_err_probe(dev, PTR_ERR(bsp_priv->regmap), "Failed to get sys register\n");
+ return ERR_PTR(-ENODEV);
+ }
+ if (macid > 1) {
+ dev_err_probe(dev, -EINVAL, "Invalid sys arguments\n");
+ return ERR_PTR(-EINVAL);
+ }
+
+ if (of_property_read_u32(dev->of_node, "tx-internal-delay-ps", &arg)) {
+ tx_delay = 0; /* Default value is 0 */
+ } else {
+ if (arg <= 2000) {
+ tx_delay = (arg == 2000) ? 0xF : (arg / PATH_DELAY_DEC);
+ dev_dbg(dev, "Set Tx path delay to 0x%x\n", tx_delay);
+ } else {
+ dev_err(dev, "Invalid Tx path delay argument.\n");
+ return ERR_PTR(-EINVAL);
+ }
+ }
+ if (of_property_read_u32(dev->of_node, "rx-internal-delay-ps", &arg)) {
+ rx_delay = 0; /* Default value is 0 */
+ } else {
+ if (arg <= 2000) {
+ rx_delay = (arg == 2000) ? 0xF : (arg / PATH_DELAY_DEC);
+ dev_dbg(dev, "Set Rx path delay to 0x%x\n", rx_delay);
+ } else {
+ dev_err(dev, "Invalid Rx path delay argument.\n");
+ return ERR_PTR(-EINVAL);
+ }
+ }
+
+ regmap_read(bsp_priv->regmap,
+ macid == 0 ? REG_SYS_GMAC0MISCR : REG_SYS_GMAC1MISCR, ®);
+ reg &= ~(TX_DELAY_MASK | RX_DELAY_MASK);
+
+ if (of_get_phy_mode(pdev->dev.of_node, &phy_mode)) {
+ dev_err(dev, "missing phy mode property\n");
+ return ERR_PTR(-EINVAL);
+ }
+
+ switch (phy_mode) {
+ case PHY_INTERFACE_MODE_RGMII:
+ case PHY_INTERFACE_MODE_RGMII_ID:
+ case PHY_INTERFACE_MODE_RGMII_RXID:
+ case PHY_INTERFACE_MODE_RGMII_TXID:
+ reg &= ~MISCR_RMII;
+ break;
+ case PHY_INTERFACE_MODE_RMII:
+ reg |= MISCR_RMII;
+ break;
+ default:
+ dev_err(dev, "Unsupported phy-mode (%d)\n", phy_mode);
+ return ERR_PTR(-EINVAL);
+ }
+
+ if (!(reg & MISCR_RMII)) {
+ reg |= tx_delay << TX_DELAY_OFFSET;
+ reg |= rx_delay << RX_DELAY_OFFSET;
+ }
+
+ regmap_write(bsp_priv->regmap,
+ macid == 0 ? REG_SYS_GMAC0MISCR : REG_SYS_GMAC1MISCR, reg);
+
+ bsp_priv->pdev = pdev;
+
+ return bsp_priv;
+}
+
+static int nuvoton_gmac_probe(struct platform_device *pdev)
+{
+ struct plat_stmmacenet_data *plat_dat;
+ struct stmmac_resources stmmac_res;
+ int ret;
+
+ ret = stmmac_get_platform_resources(pdev, &stmmac_res);
+ if (ret)
+ return ret;
+
+ plat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);
+ if (IS_ERR(plat_dat))
+ return PTR_ERR(plat_dat);
+
+ /* Nuvoton DWMAC configs */
+ plat_dat->has_gmac = 1;
+ plat_dat->tx_fifo_size = 2048;
+ plat_dat->rx_fifo_size = 4096;
+ plat_dat->multicast_filter_bins = 0;
+ plat_dat->unicast_filter_entries = 8;
+ plat_dat->flags &= ~STMMAC_FLAG_USE_PHY_WOL;
+
+ plat_dat->bsp_priv = nuvoton_gmac_setup(pdev, plat_dat);
+ if (IS_ERR(plat_dat->bsp_priv)) {
+ ret = PTR_ERR(plat_dat->bsp_priv);
+ return ret;
+ }
+
+ ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
+ if (ret)
+ return ret;
+
+ /* We support WoL by magic packet, override pmt to make it work! */
+ plat_dat->pmt = 1;
+ device_set_wakeup_capable(&pdev->dev, 1);
+
+ return 0;
+}
+
+static const struct of_device_id nuvoton_dwmac_match[] = {
+ { .compatible = "nuvoton,ma35d1-dwmac"},
+ { }
+};
+MODULE_DEVICE_TABLE(of, nuvoton_dwmac_match);
+
+static struct platform_driver nuvoton_dwmac_driver = {
+ .probe = nuvoton_gmac_probe,
+ .remove = stmmac_pltfr_remove,
+ .driver = {
+ .name = "nuvoton-dwmac",
+ .pm = &stmmac_pltfr_pm_ops,
+ .of_match_table = nuvoton_dwmac_match,
+ },
+};
+module_platform_driver(nuvoton_dwmac_driver);
+
+MODULE_AUTHOR("Joey Lu <yclu4@nuvoton.com>");
+MODULE_DESCRIPTION("Nuvoton DWMAC specific glue layer");
+MODULE_LICENSE("GPL v2");
--
2.34.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v4 3/3] net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
2024-12-02 2:36 ` Joey Lu
@ 2024-12-03 1:43 ` Andrew Lunn
-1 siblings, 0 replies; 18+ messages in thread
From: Andrew Lunn @ 2024-12-03 1:43 UTC (permalink / raw)
To: Joey Lu
Cc: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran, alexandre.torgue,
joabreu, ychuang3, schung, yclu4, peppe.cavallaro,
linux-arm-kernel, netdev, devicetree, linux-kernel, openbmc,
linux-stm32
> + /* We support WoL by magic packet, override pmt to make it work! */
> + plat_dat->pmt = 1;
> + device_set_wakeup_capable(&pdev->dev, 1);
It seems odd to me that there is no WoL support in this glue
driver. So i assume the core driver is doing it? So why does the core
driver not set pmt and wakeup_capable ?
Andrew
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v4 3/3] net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
@ 2024-12-03 1:43 ` Andrew Lunn
0 siblings, 0 replies; 18+ messages in thread
From: Andrew Lunn @ 2024-12-03 1:43 UTC (permalink / raw)
To: Joey Lu
Cc: ychuang3, edumazet, schung, yclu4, linux-stm32, robh, openbmc,
joabreu, kuba, pabeni, devicetree, conor+dt, richardcochran,
alexandre.torgue, peppe.cavallaro, linux-arm-kernel, netdev,
linux-kernel, andrew+netdev, mcoquelin.stm32, krzk+dt, davem
> + /* We support WoL by magic packet, override pmt to make it work! */
> + plat_dat->pmt = 1;
> + device_set_wakeup_capable(&pdev->dev, 1);
It seems odd to me that there is no WoL support in this glue
driver. So i assume the core driver is doing it? So why does the core
driver not set pmt and wakeup_capable ?
Andrew
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v4 3/3] net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
2024-12-03 1:43 ` Andrew Lunn
(?)
@ 2024-12-03 9:12 ` Joey Lu
2024-12-03 14:58 ` Andrew Lunn
-1 siblings, 1 reply; 18+ messages in thread
From: Joey Lu @ 2024-12-03 9:12 UTC (permalink / raw)
To: Andrew Lunn
Cc: ychuang3, edumazet, schung, yclu4, linux-stm32, robh, openbmc,
joabreu, kuba, pabeni, devicetree, conor+dt, richardcochran,
alexandre.torgue, peppe.cavallaro, linux-arm-kernel, netdev,
linux-kernel, andrew+netdev, mcoquelin.stm32, krzk+dt, davem
[-- Attachment #1: Type: text/plain, Size: 1394 bytes --]
Dear Andrew,
You're correct. In the |stmmac_hw_init| function within |stmmac_main.c|,
whether |pmt| is |true| is determined by checking the
|pmt_remote_wake_up| bit in the hardware feature register. However, our
hardware configuration only supports magic packet and not remote wakeup,
so it must be overwritten in the glue driver. I'm not sure why the
original code doesn't include magic packet as part of |pmt|.
source code:
stmmac_hw_init() @net/ethernet/stmicro/stmmac/stmmac_main.c
* priv->plat->enh_desc = priv->dma_cap.enh_desc;
priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up &&
!(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);
priv->hw->pmt = priv->plat->pmt;*
Or modify the condition as follows:
* priv->plat->pmt = (priv->dma_cap.pmt_remote_wake_up||
priv->dma_cap.pmt_magic_frame) &&
!(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);*
Thanks!
BR,
Joey*
*
Andrew Lunn 於 12/3/2024 9:43 AM 寫道:
>> + /* We support WoL by magic packet, override pmt to make it work! */
>> + plat_dat->pmt = 1;
>> + device_set_wakeup_capable(&pdev->dev, 1);
> It seems odd to me that there is no WoL support in this glue
> driver. So i assume the core driver is doing it? So why does the core
> driver not set pmt and wakeup_capable ?
>
> Andrew
[-- Attachment #2: Type: text/html, Size: 2281 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v4 3/3] net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
2024-12-03 9:12 ` Joey Lu
@ 2024-12-03 14:58 ` Andrew Lunn
0 siblings, 0 replies; 18+ messages in thread
From: Andrew Lunn @ 2024-12-03 14:58 UTC (permalink / raw)
To: Joey Lu
Cc: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt,
conor+dt, mcoquelin.stm32, richardcochran, alexandre.torgue,
joabreu, ychuang3, schung, yclu4, peppe.cavallaro,
linux-arm-kernel, netdev, devicetree, linux-kernel, openbmc,
linux-stm32
On Tue, Dec 03, 2024 at 05:12:24PM +0800, Joey Lu wrote:
> Dear Andrew,
>
> You're correct. In the stmmac_hw_init function within stmmac_main.c, whether
> pmt is true is determined by checking the pmt_remote_wake_up bit in the
> hardware feature register. However, our hardware configuration only supports
> magic packet and not remote wakeup, so it must be overwritten in the glue
> driver.
Please add a comment explaining this.
I'm not sure why the original code doesn't include magic packet as part
> of pmt.
>
> source code:
>
> stmmac_hw_init() @net/ethernet/stmicro/stmmac/stmmac_main.c
>
> priv->plat->enh_desc = priv->dma_cap.enh_desc;
> priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up &&
> !(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);
> priv->hw->pmt = priv->plat->pmt;
>
> Or modify the condition as follows:
>
> priv->plat->pmt = (priv->dma_cap.pmt_remote_wake_up || priv->
> dma_cap.pmt_magic_frame) &&
> !(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);
Are there other glue drivers which would benefit from this? It is hard
for me to say if you hardware is odd, or if this should be a generic
feature which other glue drivers would use.
Andrew
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v4 3/3] net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
@ 2024-12-03 14:58 ` Andrew Lunn
0 siblings, 0 replies; 18+ messages in thread
From: Andrew Lunn @ 2024-12-03 14:58 UTC (permalink / raw)
To: Joey Lu
Cc: ychuang3, edumazet, schung, yclu4, linux-stm32, robh, openbmc,
joabreu, kuba, pabeni, devicetree, conor+dt, richardcochran,
alexandre.torgue, peppe.cavallaro, linux-arm-kernel, netdev,
linux-kernel, andrew+netdev, mcoquelin.stm32, krzk+dt, davem
On Tue, Dec 03, 2024 at 05:12:24PM +0800, Joey Lu wrote:
> Dear Andrew,
>
> You're correct. In the stmmac_hw_init function within stmmac_main.c, whether
> pmt is true is determined by checking the pmt_remote_wake_up bit in the
> hardware feature register. However, our hardware configuration only supports
> magic packet and not remote wakeup, so it must be overwritten in the glue
> driver.
Please add a comment explaining this.
I'm not sure why the original code doesn't include magic packet as part
> of pmt.
>
> source code:
>
> stmmac_hw_init() @net/ethernet/stmicro/stmmac/stmmac_main.c
>
> priv->plat->enh_desc = priv->dma_cap.enh_desc;
> priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up &&
> !(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);
> priv->hw->pmt = priv->plat->pmt;
>
> Or modify the condition as follows:
>
> priv->plat->pmt = (priv->dma_cap.pmt_remote_wake_up || priv->
> dma_cap.pmt_magic_frame) &&
> !(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);
Are there other glue drivers which would benefit from this? It is hard
for me to say if you hardware is odd, or if this should be a generic
feature which other glue drivers would use.
Andrew
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v4 1/3] dt-bindings: net: nuvoton: Add schema for Nuvoton MA35 family GMAC
2024-12-02 2:36 ` Joey Lu
@ 2024-12-04 14:27 ` Rob Herring
-1 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2024-12-04 14:27 UTC (permalink / raw)
To: Joey Lu
Cc: andrew+netdev, davem, edumazet, kuba, pabeni, krzk+dt, conor+dt,
mcoquelin.stm32, richardcochran, alexandre.torgue, joabreu,
ychuang3, schung, yclu4, peppe.cavallaro, linux-arm-kernel,
netdev, devicetree, linux-kernel, openbmc, linux-stm32
On Mon, Dec 02, 2024 at 10:36:41AM +0800, Joey Lu wrote:
> Create initial schema for Nuvoton MA35 family Gigabit MAC.
>
> Signed-off-by: Joey Lu <a0987203069@gmail.com>
> ---
> .../bindings/net/nuvoton,ma35d1-dwmac.yaml | 134 ++++++++++++++++++
> .../devicetree/bindings/net/snps,dwmac.yaml | 1 +
> 2 files changed, 135 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
>
> diff --git a/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
> new file mode 100644
> index 000000000000..e44abaf4da3e
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
> @@ -0,0 +1,134 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/net/nuvoton,ma35d1-dwmac.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Nuvoton DWMAC glue layer controller
> +
> +maintainers:
> + - Joey Lu <yclu4@nuvoton.com>
> +
> +description:
> + Nuvoton 10/100/1000Mbps Gigabit Ethernet MAC Controller is based on
> + Synopsys DesignWare MAC (version 3.73a).
> +
> +allOf:
> + - $ref: snps,dwmac.yaml#
> +
> +properties:
> + compatible:
> + items:
> + - enum:
> + - nuvoton,ma35d1-dwmac
> +
> + reg:
> + maxItems: 1
> + description:
> + Register range should be one of the GMAC interface.
> +
> + interrupts:
> + maxItems: 1
> +
> + clocks:
> + items:
> + - description: MAC clock
> + - description: PTP clock
> +
> + clock-names:
> + items:
> + - const: stmmaceth
> + - const: ptp_ref
> +
> + nuvoton,sys:
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> + items:
> + - items:
> + - description: phandle to access syscon registers.
> + - description: GMAC interface ID.
> + enum:
> + - 0
> + - 1
> + description:
> + A phandle to the syscon with one argument that configures system registers
> + for MA35D1's two GMACs. The argument specifies the GMAC interface ID.
> +
> + resets:
> + maxItems: 1
> +
> + reset-names:
> + items:
> + - const: stmmaceth
> +
> + phy-mode:
> + enum:
> + - rmii
> + - rgmii
> + - rgmii-id
> + - rgmii-txid
> + - rgmii-rxid
> +
> + tx-internal-delay-ps:
> + default: 0
> + minimum: 0
> + maximum: 2000
> + description:
> + RGMII TX path delay used only when PHY operates in RGMII mode with
> + internal delay (phy-mode is 'rgmii-id' or 'rgmii-txid') in pico-seconds.
> + Allowed values are from 0 to 2000.
> +
> + rx-internal-delay-ps:
> + default: 0
> + minimum: 0
> + maximum: 2000
> + description:
> + RGMII RX path delay used only when PHY operates in RGMII mode with
> + internal delay (phy-mode is 'rgmii-id' or 'rgmii-rxid') in pico-seconds.
> + Allowed values are from 0 to 2000.
> +
> + mdio:
> + $ref: /schemas/net/mdio.yaml#
Drop. snps,dwmac.yaml already has this.
> +
> +required:
> + - compatible
> + - reg
> + - interrupts
> + - interrupt-names
Drop all 4. Already required by snps,dwmac.yaml.
> + - clocks
> + - clock-names
> + - nuvoton,sys
> + - resets
> + - reset-names
> + - phy-mode
Drop this one too.
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/clock/nuvoton,ma35d1-clk.h>
> + #include <dt-bindings/reset/nuvoton,ma35d1-reset.h>
> + ethernet@40120000 {
> + compatible = "nuvoton,ma35d1-dwmac";
> + reg = <0x40120000 0x10000>;
> + interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
> + interrupt-names = "macirq";
> + clocks = <&clk EMAC0_GATE>, <&clk EPLL_DIV8>;
> + clock-names = "stmmaceth", "ptp_ref";
> +
> + nuvoton,sys = <&sys 0>;
> + resets = <&sys MA35D1_RESET_GMAC0>;
> + reset-names = "stmmaceth";
> +
> + phy-mode = "rgmii-id";
> + phy-handle = <ð_phy0>;
> + mdio {
> + compatible = "snps,dwmac-mdio";
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + ethernet-phy@0 {
> + reg = <0>;
> + };
> + };
> + };
> diff --git a/Documentation/devicetree/bindings/net/snps,dwmac.yaml b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
> index eb1f3ae41ab9..4bf59ab910cc 100644
> --- a/Documentation/devicetree/bindings/net/snps,dwmac.yaml
> +++ b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
> @@ -67,6 +67,7 @@ properties:
> - ingenic,x2000-mac
> - loongson,ls2k-dwmac
> - loongson,ls7a-dwmac
> + - nuvoton,ma35d1-dwmac
> - qcom,qcs404-ethqos
> - qcom,sa8775p-ethqos
> - qcom,sc8280xp-ethqos
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v4 1/3] dt-bindings: net: nuvoton: Add schema for Nuvoton MA35 family GMAC
@ 2024-12-04 14:27 ` Rob Herring
0 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2024-12-04 14:27 UTC (permalink / raw)
To: Joey Lu
Cc: devicetree, conor+dt, linux-stm32, openbmc, netdev,
richardcochran, ychuang3, alexandre.torgue, linux-kernel,
andrew+netdev, edumazet, joabreu, linux-arm-kernel,
mcoquelin.stm32, peppe.cavallaro, schung, kuba, krzk+dt, pabeni,
davem, yclu4
On Mon, Dec 02, 2024 at 10:36:41AM +0800, Joey Lu wrote:
> Create initial schema for Nuvoton MA35 family Gigabit MAC.
>
> Signed-off-by: Joey Lu <a0987203069@gmail.com>
> ---
> .../bindings/net/nuvoton,ma35d1-dwmac.yaml | 134 ++++++++++++++++++
> .../devicetree/bindings/net/snps,dwmac.yaml | 1 +
> 2 files changed, 135 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
>
> diff --git a/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
> new file mode 100644
> index 000000000000..e44abaf4da3e
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
> @@ -0,0 +1,134 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/net/nuvoton,ma35d1-dwmac.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Nuvoton DWMAC glue layer controller
> +
> +maintainers:
> + - Joey Lu <yclu4@nuvoton.com>
> +
> +description:
> + Nuvoton 10/100/1000Mbps Gigabit Ethernet MAC Controller is based on
> + Synopsys DesignWare MAC (version 3.73a).
> +
> +allOf:
> + - $ref: snps,dwmac.yaml#
> +
> +properties:
> + compatible:
> + items:
> + - enum:
> + - nuvoton,ma35d1-dwmac
> +
> + reg:
> + maxItems: 1
> + description:
> + Register range should be one of the GMAC interface.
> +
> + interrupts:
> + maxItems: 1
> +
> + clocks:
> + items:
> + - description: MAC clock
> + - description: PTP clock
> +
> + clock-names:
> + items:
> + - const: stmmaceth
> + - const: ptp_ref
> +
> + nuvoton,sys:
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> + items:
> + - items:
> + - description: phandle to access syscon registers.
> + - description: GMAC interface ID.
> + enum:
> + - 0
> + - 1
> + description:
> + A phandle to the syscon with one argument that configures system registers
> + for MA35D1's two GMACs. The argument specifies the GMAC interface ID.
> +
> + resets:
> + maxItems: 1
> +
> + reset-names:
> + items:
> + - const: stmmaceth
> +
> + phy-mode:
> + enum:
> + - rmii
> + - rgmii
> + - rgmii-id
> + - rgmii-txid
> + - rgmii-rxid
> +
> + tx-internal-delay-ps:
> + default: 0
> + minimum: 0
> + maximum: 2000
> + description:
> + RGMII TX path delay used only when PHY operates in RGMII mode with
> + internal delay (phy-mode is 'rgmii-id' or 'rgmii-txid') in pico-seconds.
> + Allowed values are from 0 to 2000.
> +
> + rx-internal-delay-ps:
> + default: 0
> + minimum: 0
> + maximum: 2000
> + description:
> + RGMII RX path delay used only when PHY operates in RGMII mode with
> + internal delay (phy-mode is 'rgmii-id' or 'rgmii-rxid') in pico-seconds.
> + Allowed values are from 0 to 2000.
> +
> + mdio:
> + $ref: /schemas/net/mdio.yaml#
Drop. snps,dwmac.yaml already has this.
> +
> +required:
> + - compatible
> + - reg
> + - interrupts
> + - interrupt-names
Drop all 4. Already required by snps,dwmac.yaml.
> + - clocks
> + - clock-names
> + - nuvoton,sys
> + - resets
> + - reset-names
> + - phy-mode
Drop this one too.
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/clock/nuvoton,ma35d1-clk.h>
> + #include <dt-bindings/reset/nuvoton,ma35d1-reset.h>
> + ethernet@40120000 {
> + compatible = "nuvoton,ma35d1-dwmac";
> + reg = <0x40120000 0x10000>;
> + interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
> + interrupt-names = "macirq";
> + clocks = <&clk EMAC0_GATE>, <&clk EPLL_DIV8>;
> + clock-names = "stmmaceth", "ptp_ref";
> +
> + nuvoton,sys = <&sys 0>;
> + resets = <&sys MA35D1_RESET_GMAC0>;
> + reset-names = "stmmaceth";
> +
> + phy-mode = "rgmii-id";
> + phy-handle = <ð_phy0>;
> + mdio {
> + compatible = "snps,dwmac-mdio";
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + ethernet-phy@0 {
> + reg = <0>;
> + };
> + };
> + };
> diff --git a/Documentation/devicetree/bindings/net/snps,dwmac.yaml b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
> index eb1f3ae41ab9..4bf59ab910cc 100644
> --- a/Documentation/devicetree/bindings/net/snps,dwmac.yaml
> +++ b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
> @@ -67,6 +67,7 @@ properties:
> - ingenic,x2000-mac
> - loongson,ls2k-dwmac
> - loongson,ls7a-dwmac
> + - nuvoton,ma35d1-dwmac
> - qcom,qcs404-ethqos
> - qcom,sa8775p-ethqos
> - qcom,sc8280xp-ethqos
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v4 3/3] net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family
2024-12-03 14:58 ` Andrew Lunn
(?)
@ 2024-12-06 3:17 ` Joey Lu
-1 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-06 3:17 UTC (permalink / raw)
To: Andrew Lunn
Cc: ychuang3, edumazet, schung, yclu4, linux-stm32, robh, openbmc,
joabreu, kuba, pabeni, devicetree, conor+dt, richardcochran,
alexandre.torgue, peppe.cavallaro, linux-arm-kernel, netdev,
linux-kernel, andrew+netdev, mcoquelin.stm32, krzk+dt, davem
[-- Attachment #1: Type: text/plain, Size: 2215 bytes --]
Andrew Lunn 於 12/3/2024 10:58 PM 寫道:
> On Tue, Dec 03, 2024 at 05:12:24PM +0800, Joey Lu wrote:
>> Dear Andrew,
>>
>> You're correct. In the stmmac_hw_init function within stmmac_main.c, whether
>> pmt is true is determined by checking the pmt_remote_wake_up bit in the
>> hardware feature register. However, our hardware configuration only supports
>> magic packet and not remote wakeup, so it must be overwritten in the glue
>> driver.
> Please add a comment explaining this.
>
>
> I'm not sure why the original code doesn't include magic packet as part
>> of pmt.
>>
>> source code:
>>
>> stmmac_hw_init() @net/ethernet/stmicro/stmmac/stmmac_main.c
>>
>> priv->plat->enh_desc = priv->dma_cap.enh_desc;
>> priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up &&
>> !(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);
>> priv->hw->pmt = priv->plat->pmt;
>>
>> Or modify the condition as follows:
>>
>> priv->plat->pmt = (priv->dma_cap.pmt_remote_wake_up || priv->
>> dma_cap.pmt_magic_frame) &&
>> !(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);
> Are there other glue drivers which would benefit from this? It is hard
> for me to say if you hardware is odd, or if this should be a generic
> feature which other glue drivers would use.
>
> Andrew
After reviewing the Synopsys DWMAC databook, it turns out that RWK is
actually optional.
I reviewed the usage of the PMT flag in the core driver. In
|/stmmac_ethtool.c/|, within the |/stmmac_set_wol/| function, the driver
supports two wake-up methods corresponding to |/pmt_remote_wake_up/|
and/|pmt_magic_frame|/. When the hardware is configured for magic packet
only, |device_can_wakeup()| returns not supported. However, magic packet
is the more widely used option.
In |/stmmac_hw_init()/|, adding a condition to check |pmt_magic_frame|
for PMT flag will not affect the existing glue layer drivers, regardless
of whether they config only RWK or both RWK and MGK.
However, it is hard for me to decide whether to modify stmmac driver.
Overwriting the PMT flag and leaving a comment is fine for me.
BR,
Joey
[-- Attachment #2: Type: text/html, Size: 3098 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v4 1/3] dt-bindings: net: nuvoton: Add schema for Nuvoton MA35 family GMAC
2024-12-04 14:27 ` Rob Herring
@ 2024-12-06 3:19 ` Joey Lu
-1 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-06 3:19 UTC (permalink / raw)
To: Rob Herring
Cc: andrew+netdev, davem, edumazet, kuba, pabeni, krzk+dt, conor+dt,
mcoquelin.stm32, richardcochran, alexandre.torgue, joabreu,
ychuang3, schung, yclu4, peppe.cavallaro, linux-arm-kernel,
netdev, devicetree, linux-kernel, openbmc, linux-stm32
Dear Rob,
Thank you for your reply.
Rob Herring 於 12/4/2024 10:27 PM 寫道:
> On Mon, Dec 02, 2024 at 10:36:41AM +0800, Joey Lu wrote:
>> Create initial schema for Nuvoton MA35 family Gigabit MAC.
>>
>> Signed-off-by: Joey Lu <a0987203069@gmail.com>
>> ---
>> .../bindings/net/nuvoton,ma35d1-dwmac.yaml | 134 ++++++++++++++++++
>> .../devicetree/bindings/net/snps,dwmac.yaml | 1 +
>> 2 files changed, 135 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
>> new file mode 100644
>> index 000000000000..e44abaf4da3e
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
>> @@ -0,0 +1,134 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/net/nuvoton,ma35d1-dwmac.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Nuvoton DWMAC glue layer controller
>> +
>> +maintainers:
>> + - Joey Lu <yclu4@nuvoton.com>
>> +
>> +description:
>> + Nuvoton 10/100/1000Mbps Gigabit Ethernet MAC Controller is based on
>> + Synopsys DesignWare MAC (version 3.73a).
>> +
>> +allOf:
>> + - $ref: snps,dwmac.yaml#
>> +
>> +properties:
>> + compatible:
>> + items:
>> + - enum:
>> + - nuvoton,ma35d1-dwmac
>> +
>> + reg:
>> + maxItems: 1
>> + description:
>> + Register range should be one of the GMAC interface.
>> +
>> + interrupts:
>> + maxItems: 1
>> +
>> + clocks:
>> + items:
>> + - description: MAC clock
>> + - description: PTP clock
>> +
>> + clock-names:
>> + items:
>> + - const: stmmaceth
>> + - const: ptp_ref
>> +
>> + nuvoton,sys:
>> + $ref: /schemas/types.yaml#/definitions/phandle-array
>> + items:
>> + - items:
>> + - description: phandle to access syscon registers.
>> + - description: GMAC interface ID.
>> + enum:
>> + - 0
>> + - 1
>> + description:
>> + A phandle to the syscon with one argument that configures system registers
>> + for MA35D1's two GMACs. The argument specifies the GMAC interface ID.
>> +
>> + resets:
>> + maxItems: 1
>> +
>> + reset-names:
>> + items:
>> + - const: stmmaceth
>> +
>> + phy-mode:
>> + enum:
>> + - rmii
>> + - rgmii
>> + - rgmii-id
>> + - rgmii-txid
>> + - rgmii-rxid
>> +
>> + tx-internal-delay-ps:
>> + default: 0
>> + minimum: 0
>> + maximum: 2000
>> + description:
>> + RGMII TX path delay used only when PHY operates in RGMII mode with
>> + internal delay (phy-mode is 'rgmii-id' or 'rgmii-txid') in pico-seconds.
>> + Allowed values are from 0 to 2000.
>> +
>> + rx-internal-delay-ps:
>> + default: 0
>> + minimum: 0
>> + maximum: 2000
>> + description:
>> + RGMII RX path delay used only when PHY operates in RGMII mode with
>> + internal delay (phy-mode is 'rgmii-id' or 'rgmii-rxid') in pico-seconds.
>> + Allowed values are from 0 to 2000.
>> +
>> + mdio:
>> + $ref: /schemas/net/mdio.yaml#
> Drop. snps,dwmac.yaml already has this.
Got it.
>
>> +
>> +required:
>> + - compatible
>> + - reg
>> + - interrupts
>> + - interrupt-names
> Drop all 4. Already required by snps,dwmac.yaml.
Got it.
>
>> + - clocks
>> + - clock-names
>> + - nuvoton,sys
>> + - resets
>> + - reset-names
>> + - phy-mode
> Drop this one too.
Got it.
>> +
>> +unevaluatedProperties: false
>> +
>> +examples:
>> + - |
>> + #include <dt-bindings/interrupt-controller/arm-gic.h>
>> + #include <dt-bindings/clock/nuvoton,ma35d1-clk.h>
>> + #include <dt-bindings/reset/nuvoton,ma35d1-reset.h>
>> + ethernet@40120000 {
>> + compatible = "nuvoton,ma35d1-dwmac";
>> + reg = <0x40120000 0x10000>;
>> + interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
>> + interrupt-names = "macirq";
>> + clocks = <&clk EMAC0_GATE>, <&clk EPLL_DIV8>;
>> + clock-names = "stmmaceth", "ptp_ref";
>> +
>> + nuvoton,sys = <&sys 0>;
>> + resets = <&sys MA35D1_RESET_GMAC0>;
>> + reset-names = "stmmaceth";
>> +
>> + phy-mode = "rgmii-id";
>> + phy-handle = <ð_phy0>;
>> + mdio {
>> + compatible = "snps,dwmac-mdio";
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> +
>> + ethernet-phy@0 {
>> + reg = <0>;
>> + };
>> + };
>> + };
>> diff --git a/Documentation/devicetree/bindings/net/snps,dwmac.yaml b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
>> index eb1f3ae41ab9..4bf59ab910cc 100644
>> --- a/Documentation/devicetree/bindings/net/snps,dwmac.yaml
>> +++ b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
>> @@ -67,6 +67,7 @@ properties:
>> - ingenic,x2000-mac
>> - loongson,ls2k-dwmac
>> - loongson,ls7a-dwmac
>> + - nuvoton,ma35d1-dwmac
>> - qcom,qcs404-ethqos
>> - qcom,sa8775p-ethqos
>> - qcom,sc8280xp-ethqos
>> --
>> 2.34.1
Thanks!
BR,
Joey
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v4 1/3] dt-bindings: net: nuvoton: Add schema for Nuvoton MA35 family GMAC
@ 2024-12-06 3:19 ` Joey Lu
0 siblings, 0 replies; 18+ messages in thread
From: Joey Lu @ 2024-12-06 3:19 UTC (permalink / raw)
To: Rob Herring
Cc: devicetree, conor+dt, linux-stm32, openbmc, netdev,
richardcochran, ychuang3, alexandre.torgue, linux-kernel,
andrew+netdev, edumazet, joabreu, linux-arm-kernel,
mcoquelin.stm32, peppe.cavallaro, schung, kuba, krzk+dt, pabeni,
davem, yclu4
Dear Rob,
Thank you for your reply.
Rob Herring 於 12/4/2024 10:27 PM 寫道:
> On Mon, Dec 02, 2024 at 10:36:41AM +0800, Joey Lu wrote:
>> Create initial schema for Nuvoton MA35 family Gigabit MAC.
>>
>> Signed-off-by: Joey Lu <a0987203069@gmail.com>
>> ---
>> .../bindings/net/nuvoton,ma35d1-dwmac.yaml | 134 ++++++++++++++++++
>> .../devicetree/bindings/net/snps,dwmac.yaml | 1 +
>> 2 files changed, 135 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
>> new file mode 100644
>> index 000000000000..e44abaf4da3e
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml
>> @@ -0,0 +1,134 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/net/nuvoton,ma35d1-dwmac.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Nuvoton DWMAC glue layer controller
>> +
>> +maintainers:
>> + - Joey Lu <yclu4@nuvoton.com>
>> +
>> +description:
>> + Nuvoton 10/100/1000Mbps Gigabit Ethernet MAC Controller is based on
>> + Synopsys DesignWare MAC (version 3.73a).
>> +
>> +allOf:
>> + - $ref: snps,dwmac.yaml#
>> +
>> +properties:
>> + compatible:
>> + items:
>> + - enum:
>> + - nuvoton,ma35d1-dwmac
>> +
>> + reg:
>> + maxItems: 1
>> + description:
>> + Register range should be one of the GMAC interface.
>> +
>> + interrupts:
>> + maxItems: 1
>> +
>> + clocks:
>> + items:
>> + - description: MAC clock
>> + - description: PTP clock
>> +
>> + clock-names:
>> + items:
>> + - const: stmmaceth
>> + - const: ptp_ref
>> +
>> + nuvoton,sys:
>> + $ref: /schemas/types.yaml#/definitions/phandle-array
>> + items:
>> + - items:
>> + - description: phandle to access syscon registers.
>> + - description: GMAC interface ID.
>> + enum:
>> + - 0
>> + - 1
>> + description:
>> + A phandle to the syscon with one argument that configures system registers
>> + for MA35D1's two GMACs. The argument specifies the GMAC interface ID.
>> +
>> + resets:
>> + maxItems: 1
>> +
>> + reset-names:
>> + items:
>> + - const: stmmaceth
>> +
>> + phy-mode:
>> + enum:
>> + - rmii
>> + - rgmii
>> + - rgmii-id
>> + - rgmii-txid
>> + - rgmii-rxid
>> +
>> + tx-internal-delay-ps:
>> + default: 0
>> + minimum: 0
>> + maximum: 2000
>> + description:
>> + RGMII TX path delay used only when PHY operates in RGMII mode with
>> + internal delay (phy-mode is 'rgmii-id' or 'rgmii-txid') in pico-seconds.
>> + Allowed values are from 0 to 2000.
>> +
>> + rx-internal-delay-ps:
>> + default: 0
>> + minimum: 0
>> + maximum: 2000
>> + description:
>> + RGMII RX path delay used only when PHY operates in RGMII mode with
>> + internal delay (phy-mode is 'rgmii-id' or 'rgmii-rxid') in pico-seconds.
>> + Allowed values are from 0 to 2000.
>> +
>> + mdio:
>> + $ref: /schemas/net/mdio.yaml#
> Drop. snps,dwmac.yaml already has this.
Got it.
>
>> +
>> +required:
>> + - compatible
>> + - reg
>> + - interrupts
>> + - interrupt-names
> Drop all 4. Already required by snps,dwmac.yaml.
Got it.
>
>> + - clocks
>> + - clock-names
>> + - nuvoton,sys
>> + - resets
>> + - reset-names
>> + - phy-mode
> Drop this one too.
Got it.
>> +
>> +unevaluatedProperties: false
>> +
>> +examples:
>> + - |
>> + #include <dt-bindings/interrupt-controller/arm-gic.h>
>> + #include <dt-bindings/clock/nuvoton,ma35d1-clk.h>
>> + #include <dt-bindings/reset/nuvoton,ma35d1-reset.h>
>> + ethernet@40120000 {
>> + compatible = "nuvoton,ma35d1-dwmac";
>> + reg = <0x40120000 0x10000>;
>> + interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
>> + interrupt-names = "macirq";
>> + clocks = <&clk EMAC0_GATE>, <&clk EPLL_DIV8>;
>> + clock-names = "stmmaceth", "ptp_ref";
>> +
>> + nuvoton,sys = <&sys 0>;
>> + resets = <&sys MA35D1_RESET_GMAC0>;
>> + reset-names = "stmmaceth";
>> +
>> + phy-mode = "rgmii-id";
>> + phy-handle = <ð_phy0>;
>> + mdio {
>> + compatible = "snps,dwmac-mdio";
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> +
>> + ethernet-phy@0 {
>> + reg = <0>;
>> + };
>> + };
>> + };
>> diff --git a/Documentation/devicetree/bindings/net/snps,dwmac.yaml b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
>> index eb1f3ae41ab9..4bf59ab910cc 100644
>> --- a/Documentation/devicetree/bindings/net/snps,dwmac.yaml
>> +++ b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
>> @@ -67,6 +67,7 @@ properties:
>> - ingenic,x2000-mac
>> - loongson,ls2k-dwmac
>> - loongson,ls7a-dwmac
>> + - nuvoton,ma35d1-dwmac
>> - qcom,qcs404-ethqos
>> - qcom,sa8775p-ethqos
>> - qcom,sc8280xp-ethqos
>> --
>> 2.34.1
Thanks!
BR,
Joey
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2024-12-08 22:51 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-02 2:36 [PATCH v4 0/3] Add support for Nuvoton MA35D1 GMAC Joey Lu
2024-12-02 2:36 ` Joey Lu
2024-12-02 2:36 ` [PATCH v4 1/3] dt-bindings: net: nuvoton: Add schema for Nuvoton MA35 family GMAC Joey Lu
2024-12-02 2:36 ` Joey Lu
2024-12-04 14:27 ` Rob Herring
2024-12-04 14:27 ` Rob Herring
2024-12-06 3:19 ` Joey Lu
2024-12-06 3:19 ` Joey Lu
2024-12-02 2:36 ` [PATCH v4 2/3] arm64: dts: nuvoton: Add Ethernet nodes Joey Lu
2024-12-02 2:36 ` Joey Lu
2024-12-02 2:36 ` [PATCH v4 3/3] net: stmmac: dwmac-nuvoton: Add dwmac glue for Nuvoton MA35 family Joey Lu
2024-12-02 2:36 ` Joey Lu
2024-12-03 1:43 ` Andrew Lunn
2024-12-03 1:43 ` Andrew Lunn
2024-12-03 9:12 ` Joey Lu
2024-12-03 14:58 ` Andrew Lunn
2024-12-03 14:58 ` Andrew Lunn
2024-12-06 3:17 ` Joey Lu
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.