* [PATCH v7 0/2] Add driver support for Eswin eic7700 SoC ethernet controller
@ 2025-09-18 8:56 weishangjuan
2025-09-18 8:59 ` [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan
2025-09-18 9:00 ` [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver weishangjuan
0 siblings, 2 replies; 12+ messages in thread
From: weishangjuan @ 2025-09-18 8:56 UTC (permalink / raw)
To: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
vladimir.oltean, rmk+kernel, yong.liang.choong, anthony.l.nguyen,
prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207,
boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel
Cc: ningyu, linmin, lizhi2, pinkesh.vaghela, Shangjuan Wei
From: Shangjuan Wei <weishangjuan@eswincomputing.com>
This series depends on the config option patch [1].
[1] https://lore.kernel.org/all/20250825132427.1618089-3-pinkesh.vaghela@einfochips.com/
Modified YAML description content and removed Reviewed by tag in v6.
Considering that this change does not affect the minor revisions to
the document that you have reviewed, I have restored the tag in V7 series.
Updates:
Changes in v7:
- Add "Reviewed-by" tag of "Krzysztof Kozlowski" for Patch 1.
- Update dwmac-eic7700.c
- Align the processing logic of required attributes in binding
- Link to v6: https://lore.kernel.org/all/20250912055352.2832-1-weishangjuan@eswincomputing.com/
Changes in v6:
- Update driver patch's commit message
- Update eswin,eic7700-eth.yaml
- Modify the description content
- Update dwmac-eic7700.c
- Move three variables from priv to local scope
- Inline eic7700_apply_delay logic directly into the probe function
- Link to v5: https://lore.kernel.org/all/20250904085913.2494-1-weishangjuan@eswincomputing.com/
Changes in v5:
- Updated eswin,eic7700-eth.yaml
- Use "items" instead "enum" for clock-names
- Arrange clocks description in correct order
- Delete redundant descriptions for eswin,hsp-sp-csr property
- Updated dwmac-eic7700.c
- Optimize the implementation of eic7700_ appy_delay
- Update comments and remove reg checking
- Use FIELD_PREP in eic7700_apply_delay function
- Use clk_bulk related APIs to manage clks
- Link to v4: https://lore.kernel.org/all/20250827081135.2243-1-weishangjuan@eswincomputing.com/
Changes in v4:
- Updated eswin,eic7700-eth.yaml
- Modify reg:minItems:1 to reg:maxItems: 1
- Delete minItems and maxItems of clock and clock-names
- Delete phy-mode and phy-handle properties
- Add description for clock
- Add types of clock-names
- Delete descriptions for rx-internal-delay-ps and tx-internal-delay-ps
- Add enum value for rx-internal-delay-ps and tx-internal-delay-ps
- Modify description for eswin,hsp-sp-csr property
- Delete eswin,syscrg-csr and eswin,dly-hsp-reg properties
- Modify phy-mode="rgmii" to phy-mode="rgmii-id"
- Updated dwmac-eic7700.c
- Remove fix_mac_speed and configure different delays for different rates
- Merge the offset of the dly register into the eswin, hsp sp csr attributes
for unified management
- Add missing Author and optimize the number of characters per
line to within 80
- Support default delay configuration and add the handling of vendor delay
configuration
- Add clks_config for pm_runtime
- Modify the attribute format, such as eswin,hsp_sp_csr to eswin,hsp-sp-csr
- Link to v3: https://lore.kernel.org/all/20250703091808.1092-1-weishangjuan@eswincomputing.com/
Changes in v3:
- Updated eswin,eic7700-eth.yaml
- Modify snps,dwmac to snps,dwmac-5.20
- Remove the description of reg
- Modify the value of clock minItems and maxItems
- Modify the value of clock-names minItems and maxItems
- Add descriptions of snps,write-questions, snps,read-questions
- Add rx-internal-delay-ps and tx-internal-delay-ps properties
- Modify descriptions for custom properties, such as eswin,hsp-sp-csr
- Delete snps,axi-config property
- Add snps,fixed-burst snps,aal snps,tso properties
- Delete snps,lpi_en property
- Modify format of custom properties
- Updated dwmac-eic7700.c
- Simplify drivers and remove unnecessary API and DTS attribute configurations
- Increase the mapping from tx/rx_delay_ps to private dly
- Link to v2: https://lore.kernel.org/all/aDad+8YHEFdOIs38@mev-dev.igk.intel.com/
Changes in v2:
- Updated eswin,eic7700-eth.yaml
- Add snps,dwmac in binding file
- Modify the description of reg
- Modify the number of clock-names
- Changed the names of reset-names and phy-mode
- Add description for custom properties, such as eswin,hsp_sp_csr
- Delete snps,blen snps,rd_osr_lmt snps,wr_osr_lmt properties
- Updated dwmac-eic7700.c
- Remove the code related to PHY LED configuration from the MAC driver
- Adjust the code format and driver interfaces, such as replacing kzalloc
with devm_kzalloc, etc.
- Use phylib instead of the GPIO API in the driver to implement the PHY
reset function
- Link to v1: https://lore.kernel.org/all/20250516010849.784-1-weishangjuan@eswincomputing.com/
Shangjuan Wei (2):
dt-bindings: ethernet: eswin: Document for EIC7700 SoC
ethernet: eswin: Add eic7700 ethernet driver
.../bindings/net/eswin,eic7700-eth.yaml | 127 ++++++++++
drivers/net/ethernet/stmicro/stmmac/Kconfig | 11 +
drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
.../ethernet/stmicro/stmmac/dwmac-eic7700.c | 230 ++++++++++++++++++
4 files changed, 369 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml
create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c
--
2.17.1
^ permalink raw reply [flat|nested] 12+ messages in thread* [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC 2025-09-18 8:56 [PATCH v7 0/2] Add driver support for Eswin eic7700 SoC ethernet controller weishangjuan @ 2025-09-18 8:59 ` weishangjuan 2025-09-18 10:39 ` Rob Herring (Arm) 2025-10-14 8:53 ` Bo Gan 2025-09-18 9:00 ` [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver weishangjuan 1 sibling, 2 replies; 12+ messages in thread From: weishangjuan @ 2025-09-18 8:59 UTC (permalink / raw) To: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, rmk+kernel, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel Cc: ningyu, linmin, lizhi2, pinkesh.vaghela, Shangjuan Wei, Krzysztof Kozlowski From: Shangjuan Wei <weishangjuan@eswincomputing.com> Add ESWIN EIC7700 Ethernet controller, supporting clock configuration, delay adjustment and speed adaptive functions. Signed-off-by: Zhi Li <lizhi2@eswincomputing.com> Signed-off-by: Shangjuan Wei <weishangjuan@eswincomputing.com> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> --- .../bindings/net/eswin,eic7700-eth.yaml | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml diff --git a/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml b/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml new file mode 100644 index 000000000000..57d6d0efc126 --- /dev/null +++ b/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml @@ -0,0 +1,127 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/eswin,eic7700-eth.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Eswin EIC7700 SOC Eth Controller + +maintainers: + - Shuang Liang <liangshuang@eswincomputing.com> + - Zhi Li <lizhi2@eswincomputing.com> + - Shangjuan Wei <weishangjuan@eswincomputing.com> + +description: + Platform glue layer implementation for STMMAC Ethernet driver. + +select: + properties: + compatible: + contains: + enum: + - eswin,eic7700-qos-eth + required: + - compatible + +allOf: + - $ref: snps,dwmac.yaml# + +properties: + compatible: + items: + - const: eswin,eic7700-qos-eth + - const: snps,dwmac-5.20 + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-names: + const: macirq + + clocks: + items: + - description: AXI clock + - description: Configuration clock + - description: GMAC main clock + - description: Tx clock + + clock-names: + items: + - const: axi + - const: cfg + - const: stmmaceth + - const: tx + + resets: + maxItems: 1 + + reset-names: + items: + - const: stmmaceth + + rx-internal-delay-ps: + enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400] + + tx-internal-delay-ps: + enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400] + + eswin,hsp-sp-csr: + $ref: /schemas/types.yaml#/definitions/phandle-array + items: + - description: Phandle to HSP(High-Speed Peripheral) device + - description: Offset of phy control register for internal + or external clock selection + - description: Offset of AXI clock controller Low-Power request + register + - description: Offset of register controlling TX/RX clock delay + description: | + High-Speed Peripheral device needed to configure clock selection, + clock low-power mode and clock delay. + +required: + - compatible + - reg + - clocks + - clock-names + - interrupts + - interrupt-names + - phy-mode + - resets + - reset-names + - rx-internal-delay-ps + - tx-internal-delay-ps + - eswin,hsp-sp-csr + +unevaluatedProperties: false + +examples: + - | + ethernet@50400000 { + compatible = "eswin,eic7700-qos-eth", "snps,dwmac-5.20"; + reg = <0x50400000 0x10000>; + clocks = <&d0_clock 186>, <&d0_clock 171>, <&d0_clock 40>, + <&d0_clock 193>; + clock-names = "axi", "cfg", "stmmaceth", "tx"; + interrupt-parent = <&plic>; + interrupts = <61>; + interrupt-names = "macirq"; + phy-mode = "rgmii-id"; + phy-handle = <&phy0>; + resets = <&reset 95>; + reset-names = "stmmaceth"; + rx-internal-delay-ps = <200>; + tx-internal-delay-ps = <200>; + eswin,hsp-sp-csr = <&hsp_sp_csr 0x100 0x108 0x118>; + snps,axi-config = <&stmmac_axi_setup>; + snps,aal; + snps,fixed-burst; + snps,tso; + stmmac_axi_setup: stmmac-axi-config { + snps,blen = <0 0 0 0 16 8 4>; + snps,rd_osr_lmt = <2>; + snps,wr_osr_lmt = <2>; + }; + }; \ No newline at end of file -- 2.17.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC 2025-09-18 8:59 ` [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan @ 2025-09-18 10:39 ` Rob Herring (Arm) 2025-10-14 8:53 ` Bo Gan 1 sibling, 0 replies; 12+ messages in thread From: Rob Herring (Arm) @ 2025-09-18 10:39 UTC (permalink / raw) To: weishangjuan Cc: ningyu, prabhakar.mahadev-lad.rj, pabeni, rmk+kernel, anthony.l.nguyen, yong.liang.choong, linux-stm32, boon.khai.ng, netdev, krzk+dt, andrew+netdev, vladimir.oltean, inochiama, jszhang, linux-arm-kernel, alexandre.torgue, jan.petrous, mcoquelin.stm32, linux-kernel, linmin, 0x1207, lizhi2, kuba, davem, edumazet, devicetree, Krzysztof Kozlowski, conor+dt, pinkesh.vaghela On Thu, 18 Sep 2025 16:59:03 +0800, weishangjuan@eswincomputing.com wrote: > From: Shangjuan Wei <weishangjuan@eswincomputing.com> > > Add ESWIN EIC7700 Ethernet controller, supporting clock > configuration, delay adjustment and speed adaptive functions. > > Signed-off-by: Zhi Li <lizhi2@eswincomputing.com> > Signed-off-by: Shangjuan Wei <weishangjuan@eswincomputing.com> > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > --- > .../bindings/net/eswin,eic7700-eth.yaml | 127 ++++++++++++++++++ > 1 file changed, 127 insertions(+) > create mode 100644 Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml > My bot found errors running 'make dt_binding_check' on your patch: yamllint warnings/errors: ./Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:127:7: [error] no new line character at the end of file (new-line-at-end-of-file) dtschema/dtc warnings/errors: doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20250918085903.3228-1-weishangjuan@eswincomputing.com The base for the series is generally the latest rc1. A different dependency should be noted in *this* patch. If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date: pip3 install dtschema --upgrade Please check and re-submit after running the above command yourself. Note that DT_SCHEMA_FILES can be set to your schema file to speed up checking your schema. However, it must be unset to test all examples with your schema. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC 2025-09-18 8:59 ` [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan 2025-09-18 10:39 ` Rob Herring (Arm) @ 2025-10-14 8:53 ` Bo Gan 2025-10-14 10:00 ` 李志 1 sibling, 1 reply; 12+ messages in thread From: Bo Gan @ 2025-10-14 8:53 UTC (permalink / raw) To: weishangjuan, devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, rmk+kernel, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel Cc: ningyu, linmin, lizhi2, pinkesh.vaghela, Krzysztof Kozlowski On 9/18/25 01:59, weishangjuan@eswincomputing.com wrote: > From: Shangjuan Wei <weishangjuan@eswincomputing.com> > > Add ESWIN EIC7700 Ethernet controller, supporting clock > configuration, delay adjustment and speed adaptive functions. > > Signed-off-by: Zhi Li <lizhi2@eswincomputing.com> > Signed-off-by: Shangjuan Wei <weishangjuan@eswincomputing.com> > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > --- > .../bindings/net/eswin,eic7700-eth.yaml | 127 ++++++++++++++++++ > 1 file changed, 127 insertions(+) > create mode 100644 Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml > > diff --git a/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml b/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml > new file mode 100644 > index 000000000000..57d6d0efc126 > --- /dev/null > +++ b/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml > @@ -0,0 +1,127 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/net/eswin,eic7700-eth.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Eswin EIC7700 SOC Eth Controller > + > +maintainers: > + - Shuang Liang <liangshuang@eswincomputing.com> > + - Zhi Li <lizhi2@eswincomputing.com> > + - Shangjuan Wei <weishangjuan@eswincomputing.com> > + > +description: > + Platform glue layer implementation for STMMAC Ethernet driver. > + > +select: > + properties: > + compatible: > + contains: > + enum: > + - eswin,eic7700-qos-eth > + required: > + - compatible > + > +allOf: > + - $ref: snps,dwmac.yaml# > + > +properties: > + compatible: > + items: > + - const: eswin,eic7700-qos-eth > + - const: snps,dwmac-5.20 > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + interrupt-names: > + const: macirq > + > + clocks: > + items: > + - description: AXI clock > + - description: Configuration clock > + - description: GMAC main clock > + - description: Tx clock > + > + clock-names: > + items: > + - const: axi > + - const: cfg > + - const: stmmaceth > + - const: tx > + > + resets: > + maxItems: 1 > + > + reset-names: > + items: > + - const: stmmaceth > + > + rx-internal-delay-ps: > + enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400] > + > + tx-internal-delay-ps: > + enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400] > + > + eswin,hsp-sp-csr: > + $ref: /schemas/types.yaml#/definitions/phandle-array > + items: > + - description: Phandle to HSP(High-Speed Peripheral) device > + - description: Offset of phy control register for internal > + or external clock selection > + - description: Offset of AXI clock controller Low-Power request > + register > + - description: Offset of register controlling TX/RX clock delay > + description: | > + High-Speed Peripheral device needed to configure clock selection, > + clock low-power mode and clock delay. > + > +required: > + - compatible > + - reg > + - clocks > + - clock-names > + - interrupts > + - interrupt-names > + - phy-mode > + - resets > + - reset-names > + - rx-internal-delay-ps > + - tx-internal-delay-ps > + - eswin,hsp-sp-csr > + > +unevaluatedProperties: false > + > +examples: > + - | > + ethernet@50400000 { > + compatible = "eswin,eic7700-qos-eth", "snps,dwmac-5.20"; > + reg = <0x50400000 0x10000>; > + clocks = <&d0_clock 186>, <&d0_clock 171>, <&d0_clock 40>, > + <&d0_clock 193>; > + clock-names = "axi", "cfg", "stmmaceth", "tx"; > + interrupt-parent = <&plic>; > + interrupts = <61>; > + interrupt-names = "macirq"; > + phy-mode = "rgmii-id"; > + phy-handle = <&phy0>; > + resets = <&reset 95>; > + reset-names = "stmmaceth"; > + rx-internal-delay-ps = <200>; > + tx-internal-delay-ps = <200>; > + eswin,hsp-sp-csr = <&hsp_sp_csr 0x100 0x108 0x118>; > + snps,axi-config = <&stmmac_axi_setup>; > + snps,aal; > + snps,fixed-burst; > + snps,tso; > + stmmac_axi_setup: stmmac-axi-config { > + snps,blen = <0 0 0 0 16 8 4>; > + snps,rd_osr_lmt = <2>; > + snps,wr_osr_lmt = <2>; > + }; > + }; > \ No newline at end of file > -- > 2.17.1 > Hi ShangJuan, I'm active user of HiFive p550. I'd like to test out this driver. Do you have the device tree section of phy0 for Hifive p550 board? Or it's optional for p550 board and I can just provide an empty &phy0 node? Regarding hsp_sp_csr node, I should be able to use https://github.com/sifiveinc/riscv-linux/blob/b4a753400e624a0eba3ec475fba2866dd7efb767/arch/riscv/boot/dts/eswin/eic7700.dtsi#L167 correct? Bo ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Re: [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC 2025-10-14 8:53 ` Bo Gan @ 2025-10-14 10:00 ` 李志 0 siblings, 0 replies; 12+ messages in thread From: 李志 @ 2025-10-14 10:00 UTC (permalink / raw) To: Bo Gan Cc: weishangjuan, devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, rmk+kernel, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel, ningyu, linmin, pinkesh.vaghela, Krzysztof Kozlowski Hi Bo Gan, Please see the original email. You can refer to the following supplement about phy0 in the gmac0 DTS node. Best regards, Li Zhi > -----原始邮件----- > 发件人: "Bo Gan" <ganboing@gmail.com> > 发送时间:2025-10-14 16:53:38 (星期二) > 收件人: weishangjuan@eswincomputing.com, devicetree@vger.kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, netdev@vger.kernel.org, pabeni@redhat.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, vladimir.oltean@nxp.com, rmk+kernel@armlinux.org.uk, yong.liang.choong@linux.intel.com, anthony.l.nguyen@intel.com, prabhakar.mahadev-lad.rj@bp.renesas.com, jan.petrous@oss.nxp.com, jszhang@kernel.org, inochiama@gmail.com, 0x1207@gmail.com, boon.khai.ng@altera.com, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org > 抄送: ningyu@eswincomputing.com, linmin@eswincomputing.com, lizhi2@eswincomputing.com, pinkesh.vaghela@einfochips.com, "Krzysztof Kozlowski" <krzysztof.kozlowski@linaro.org> > 主题: Re: [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC > > On 9/18/25 01:59, weishangjuan@eswincomputing.com wrote: > > From: Shangjuan Wei <weishangjuan@eswincomputing.com> > > > > Add ESWIN EIC7700 Ethernet controller, supporting clock > > configuration, delay adjustment and speed adaptive functions. > > > > Signed-off-by: Zhi Li <lizhi2@eswincomputing.com> > > Signed-off-by: Shangjuan Wei <weishangjuan@eswincomputing.com> > > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > > --- > > .../bindings/net/eswin,eic7700-eth.yaml | 127 ++++++++++++++++++ > > 1 file changed, 127 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml > > > > diff --git a/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml b/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml > > new file mode 100644 > > index 000000000000..57d6d0efc126 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml > > @@ -0,0 +1,127 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/net/eswin,eic7700-eth.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Eswin EIC7700 SOC Eth Controller > > + > > +maintainers: > > + - Shuang Liang <liangshuang@eswincomputing.com> > > + - Zhi Li <lizhi2@eswincomputing.com> > > + - Shangjuan Wei <weishangjuan@eswincomputing.com> > > + > > +description: > > + Platform glue layer implementation for STMMAC Ethernet driver. > > + > > +select: > > + properties: > > + compatible: > > + contains: > > + enum: > > + - eswin,eic7700-qos-eth > > + required: > > + - compatible > > + > > +allOf: > > + - $ref: snps,dwmac.yaml# > > + > > +properties: > > + compatible: > > + items: > > + - const: eswin,eic7700-qos-eth > > + - const: snps,dwmac-5.20 > > + > > + reg: > > + maxItems: 1 > > + > > + interrupts: > > + maxItems: 1 > > + > > + interrupt-names: > > + const: macirq > > + > > + clocks: > > + items: > > + - description: AXI clock > > + - description: Configuration clock > > + - description: GMAC main clock > > + - description: Tx clock > > + > > + clock-names: > > + items: > > + - const: axi > > + - const: cfg > > + - const: stmmaceth > > + - const: tx > > + > > + resets: > > + maxItems: 1 > > + > > + reset-names: > > + items: > > + - const: stmmaceth > > + > > + rx-internal-delay-ps: > > + enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400] > > + > > + tx-internal-delay-ps: > > + enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400] > > + > > + eswin,hsp-sp-csr: > > + $ref: /schemas/types.yaml#/definitions/phandle-array > > + items: > > + - description: Phandle to HSP(High-Speed Peripheral) device > > + - description: Offset of phy control register for internal > > + or external clock selection > > + - description: Offset of AXI clock controller Low-Power request > > + register > > + - description: Offset of register controlling TX/RX clock delay > > + description: | > > + High-Speed Peripheral device needed to configure clock selection, > > + clock low-power mode and clock delay. > > + > > +required: > > + - compatible > > + - reg > > + - clocks > > + - clock-names > > + - interrupts > > + - interrupt-names > > + - phy-mode > > + - resets > > + - reset-names > > + - rx-internal-delay-ps > > + - tx-internal-delay-ps > > + - eswin,hsp-sp-csr > > + > > +unevaluatedProperties: false > > + > > +examples: > > + - | > > + ethernet@50400000 { > > + compatible = "eswin,eic7700-qos-eth", "snps,dwmac-5.20"; > > + reg = <0x50400000 0x10000>; > > + clocks = <&d0_clock 186>, <&d0_clock 171>, <&d0_clock 40>, > > + <&d0_clock 193>; > > + clock-names = "axi", "cfg", "stmmaceth", "tx"; > > + interrupt-parent = <&plic>; > > + interrupts = <61>; > > + interrupt-names = "macirq"; > > + phy-mode = "rgmii-id"; > > + phy-handle = <&phy0>; > > + resets = <&reset 95>; > > + reset-names = "stmmaceth"; > > + rx-internal-delay-ps = <200>; > > + tx-internal-delay-ps = <200>; > > + eswin,hsp-sp-csr = <&hsp_sp_csr 0x100 0x108 0x118>; > > + snps,axi-config = <&stmmac_axi_setup>; > > + snps,aal; > > + snps,fixed-burst; > > + snps,tso; > > + stmmac_axi_setup: stmmac-axi-config { > > + snps,blen = <0 0 0 0 16 8 4>; > > + snps,rd_osr_lmt = <2>; > > + snps,wr_osr_lmt = <2>; > > + }; mdio { compatible = "snps,dwmac-mdio"; status = "okay"; #address-cells = <1>; #size-cells = <0>; phy0: ethernet-phy@0 { device_type = "ethernet-phy"; reg = <0>; compatible = "ethernet-phy-id001c.c916", "realtek,rtl8211f"; }; }; > > + }; > > \ No newline at end of file > > -- > > 2.17.1 > > > > Hi ShangJuan, > > I'm active user of HiFive p550. I'd like to test out this driver. Do you have > the device tree section of phy0 for Hifive p550 board? Or it's optional for > p550 board and I can just provide an empty &phy0 node? Regarding hsp_sp_csr > node, I should be able to use > https://github.com/sifiveinc/riscv-linux/blob/b4a753400e624a0eba3ec475fba2866dd7efb767/arch/riscv/boot/dts/eswin/eic7700.dtsi#L167 > correct? > > Bo ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver 2025-09-18 8:56 [PATCH v7 0/2] Add driver support for Eswin eic7700 SoC ethernet controller weishangjuan 2025-09-18 8:59 ` [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan @ 2025-09-18 9:00 ` weishangjuan 2025-09-18 16:22 ` Andrew Lunn ` (2 more replies) 1 sibling, 3 replies; 12+ messages in thread From: weishangjuan @ 2025-09-18 9:00 UTC (permalink / raw) To: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, rmk+kernel, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel Cc: ningyu, linmin, lizhi2, pinkesh.vaghela, Shangjuan Wei From: Shangjuan Wei <weishangjuan@eswincomputing.com> Add Ethernet controller support for Eswin's eic7700 SoC. The driver implements hardware initialization, clock configuration, delay adjustment functions based on DWC Ethernet controller, and supports device tree configuration and platform driver integration. Signed-off-by: Zhi Li <lizhi2@eswincomputing.com> Signed-off-by: Shangjuan Wei <weishangjuan@eswincomputing.com> --- drivers/net/ethernet/stmicro/stmmac/Kconfig | 11 + drivers/net/ethernet/stmicro/stmmac/Makefile | 1 + .../ethernet/stmicro/stmmac/dwmac-eic7700.c | 230 ++++++++++++++++++ 3 files changed, 242 insertions(+) create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig index 67fa879b1e52..a13b15ce1abd 100644 --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig @@ -67,6 +67,17 @@ config DWMAC_ANARION This selects the Anarion SoC glue layer support for the stmmac driver. +config DWMAC_EIC7700 + tristate "Support for Eswin eic7700 ethernet driver" + select CRC32 + select MII + depends on OF && HAS_DMA && ARCH_ESWIN || COMPILE_TEST + help + This driver supports the Eswin EIC7700 Ethernet controller, + which integrates Synopsys DesignWare QoS features. It enables + high-speed networking with DMA acceleration and is optimized + for embedded systems. + config DWMAC_INGENIC tristate "Ingenic MAC support" default MACH_INGENIC diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile index b591d93f8503..f4ec5fc16571 100644 --- a/drivers/net/ethernet/stmicro/stmmac/Makefile +++ b/drivers/net/ethernet/stmicro/stmmac/Makefile @@ -14,6 +14,7 @@ stmmac-$(CONFIG_STMMAC_SELFTESTS) += stmmac_selftests.o # Ordering matters. Generic driver must be last. obj-$(CONFIG_STMMAC_PLATFORM) += stmmac-platform.o obj-$(CONFIG_DWMAC_ANARION) += dwmac-anarion.o +obj-$(CONFIG_DWMAC_EIC7700) += dwmac-eic7700.o obj-$(CONFIG_DWMAC_INGENIC) += dwmac-ingenic.o obj-$(CONFIG_DWMAC_IPQ806X) += dwmac-ipq806x.o obj-$(CONFIG_DWMAC_LPC18XX) += dwmac-lpc18xx.o diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c new file mode 100644 index 000000000000..e2561a15f091 --- /dev/null +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c @@ -0,0 +1,230 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Eswin DWC Ethernet linux driver + * + * Copyright 2025, Beijing ESWIN Computing Technology Co., Ltd. + * + * Authors: + * Zhi Li <lizhi2@eswincomputing.com> + * Shuang Liang <liangshuang@eswincomputing.com> + * Shangjuan Wei <weishangjuan@eswincomputing.com> + */ + +#include <linux/platform_device.h> +#include <linux/mfd/syscon.h> +#include <linux/stmmac.h> +#include <linux/regmap.h> +#include <linux/of.h> + +#include "stmmac_platform.h" + +/* eth_phy_ctrl_offset eth0:0x100 */ +#define EIC7700_ETH_TX_CLK_SEL BIT(16) +#define EIC7700_ETH_PHY_INTF_SELI BIT(0) + +/* eth_axi_lp_ctrl_offset eth0:0x108 */ +#define EIC7700_ETH_CSYSREQ_VAL BIT(0) + +/* + * TX/RX Clock Delay Bit Masks: + * - TX Delay: bits [14:8] — TX_CLK delay (unit: 0.1ns per bit) + * - RX Delay: bits [30:24] — RX_CLK delay (unit: 0.1ns per bit) + */ +#define EIC7700_ETH_TX_ADJ_DELAY GENMASK(14, 8) +#define EIC7700_ETH_RX_ADJ_DELAY GENMASK(30, 24) + +#define EIC7700_MAX_DELAY_UNIT 0x7F + +static const char * const eic7700_clk_names[] = { + "tx", "axi", "cfg", +}; + +struct eic7700_qos_priv { + struct plat_stmmacenet_data *plat_dat; + struct device *dev; +}; + +static int eic7700_clks_config(void *priv, bool enabled) +{ + struct eic7700_qos_priv *dwc = (struct eic7700_qos_priv *)priv; + struct plat_stmmacenet_data *plat = dwc->plat_dat; + int ret = 0; + + if (enabled) + ret = clk_bulk_prepare_enable(plat->num_clks, plat->clks); + else + clk_bulk_disable_unprepare(plat->num_clks, plat->clks); + + return ret; +} + +static int eic7700_dwmac_probe(struct platform_device *pdev) +{ + struct plat_stmmacenet_data *plat_dat; + struct stmmac_resources stmmac_res; + struct eic7700_qos_priv *dwc_priv; + struct regmap *eic7700_hsp_regmap; + u32 eth_axi_lp_ctrl_offset; + u32 eth_phy_ctrl_offset; + u32 eth_phy_ctrl_regset; + u32 eth_rxd_dly_offset; + u32 eth_dly_param = 0; + u32 delay_ps; + int i, ret; + + ret = stmmac_get_platform_resources(pdev, &stmmac_res); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "failed to get resources\n"); + + plat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac); + if (IS_ERR(plat_dat)) + return dev_err_probe(&pdev->dev, PTR_ERR(plat_dat), + "dt configuration failed\n"); + + dwc_priv = devm_kzalloc(&pdev->dev, sizeof(*dwc_priv), GFP_KERNEL); + if (!dwc_priv) + return -ENOMEM; + + dwc_priv->dev = &pdev->dev; + + /* Read rx-internal-delay-ps and update rx_clk delay */ + if (!of_property_read_u32(pdev->dev.of_node, + "rx-internal-delay-ps", &delay_ps)) { + u32 val = min(delay_ps / 100, EIC7700_MAX_DELAY_UNIT); + + eth_dly_param &= ~EIC7700_ETH_RX_ADJ_DELAY; + eth_dly_param |= FIELD_PREP(EIC7700_ETH_RX_ADJ_DELAY, val); + } else { + return dev_err_probe(&pdev->dev, -EINVAL, + "missing required property rx-internal-delay-ps\n"); + } + + /* Read tx-internal-delay-ps and update tx_clk delay */ + if (!of_property_read_u32(pdev->dev.of_node, + "tx-internal-delay-ps", &delay_ps)) { + u32 val = min(delay_ps / 100, EIC7700_MAX_DELAY_UNIT); + + eth_dly_param &= ~EIC7700_ETH_TX_ADJ_DELAY; + eth_dly_param |= FIELD_PREP(EIC7700_ETH_TX_ADJ_DELAY, val); + } else { + return dev_err_probe(&pdev->dev, -EINVAL, + "missing required property tx-internal-delay-ps\n"); + } + + eic7700_hsp_regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, + "eswin,hsp-sp-csr"); + if (IS_ERR(eic7700_hsp_regmap)) + return dev_err_probe(&pdev->dev, + PTR_ERR(eic7700_hsp_regmap), + "Failed to get hsp-sp-csr regmap\n"); + + ret = of_property_read_u32_index(pdev->dev.of_node, + "eswin,hsp-sp-csr", + 1, ð_phy_ctrl_offset); + if (ret) + return dev_err_probe(&pdev->dev, + ret, + "can't get eth_phy_ctrl_offset\n"); + + regmap_read(eic7700_hsp_regmap, eth_phy_ctrl_offset, + ð_phy_ctrl_regset); + eth_phy_ctrl_regset |= + (EIC7700_ETH_TX_CLK_SEL | EIC7700_ETH_PHY_INTF_SELI); + regmap_write(eic7700_hsp_regmap, eth_phy_ctrl_offset, + eth_phy_ctrl_regset); + + ret = of_property_read_u32_index(pdev->dev.of_node, + "eswin,hsp-sp-csr", + 2, ð_axi_lp_ctrl_offset); + if (ret) + return dev_err_probe(&pdev->dev, + ret, + "can't get eth_axi_lp_ctrl_offset\n"); + + regmap_write(eic7700_hsp_regmap, eth_axi_lp_ctrl_offset, + EIC7700_ETH_CSYSREQ_VAL); + + ret = of_property_read_u32_index(pdev->dev.of_node, + "eswin,hsp-sp-csr", + 3, ð_rxd_dly_offset); + if (ret) + return dev_err_probe(&pdev->dev, + ret, + "can't get eth_rxd_dly_offset\n"); + + regmap_write(eic7700_hsp_regmap, eth_rxd_dly_offset, + eth_dly_param); + + plat_dat->num_clks = ARRAY_SIZE(eic7700_clk_names); + plat_dat->clks = devm_kcalloc(&pdev->dev, + plat_dat->num_clks, + sizeof(*plat_dat->clks), + GFP_KERNEL); + if (!plat_dat->clks) + return -ENOMEM; + + for (i = 0; i < ARRAY_SIZE(eic7700_clk_names); i++) + plat_dat->clks[i].id = eic7700_clk_names[i]; + + ret = devm_clk_bulk_get_optional(&pdev->dev, + plat_dat->num_clks, + plat_dat->clks); + if (ret) + return dev_err_probe(&pdev->dev, + ret, + "Failed to get clocks\n"); + + plat_dat->clk_tx_i = stmmac_pltfr_find_clk(plat_dat, "tx"); + plat_dat->set_clk_tx_rate = stmmac_set_clk_tx_rate; + plat_dat->bsp_priv = dwc_priv; + plat_dat->clks_config = eic7700_clks_config; + dwc_priv->plat_dat = plat_dat; + + ret = eic7700_clks_config(dwc_priv, true); + if (ret) + return dev_err_probe(&pdev->dev, + ret, + "error enable clock\n"); + + ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res); + if (ret) { + eic7700_clks_config(dwc_priv, false); + return dev_err_probe(&pdev->dev, + ret, + "Failed to driver probe\n"); + } + + return ret; +} + +static void eic7700_dwmac_remove(struct platform_device *pdev) +{ + struct eic7700_qos_priv *dwc_priv = get_stmmac_bsp_priv(&pdev->dev); + + stmmac_pltfr_remove(pdev); + eic7700_clks_config(dwc_priv, false); +} + +static const struct of_device_id eic7700_dwmac_match[] = { + { .compatible = "eswin,eic7700-qos-eth" }, + { } +}; +MODULE_DEVICE_TABLE(of, eic7700_dwmac_match); + +static struct platform_driver eic7700_dwmac_driver = { + .probe = eic7700_dwmac_probe, + .remove = eic7700_dwmac_remove, + .driver = { + .name = "eic7700-eth-dwmac", + .pm = &stmmac_pltfr_pm_ops, + .of_match_table = eic7700_dwmac_match, + }, +}; +module_platform_driver(eic7700_dwmac_driver); + +MODULE_AUTHOR("Zhi Li <lizhi2@eswincomputing.com>"); +MODULE_AUTHOR("Shuang Liang <liangshuang@eswincomputing.com>"); +MODULE_AUTHOR("Shangjuan Wei <weishangjuan@eswincomputing.com>"); +MODULE_DESCRIPTION("Eswin eic7700 qos ethernet driver"); +MODULE_LICENSE("GPL"); -- 2.17.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver 2025-09-18 9:00 ` [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver weishangjuan @ 2025-09-18 16:22 ` Andrew Lunn 2025-09-18 17:16 ` Russell King (Oracle) 2025-09-23 16:33 ` Maxime Chevallier 2 siblings, 0 replies; 12+ messages in thread From: Andrew Lunn @ 2025-09-18 16:22 UTC (permalink / raw) To: weishangjuan Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, rmk+kernel, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel, ningyu, linmin, lizhi2, pinkesh.vaghela On Thu, Sep 18, 2025 at 05:00:26PM +0800, weishangjuan@eswincomputing.com wrote: > From: Shangjuan Wei <weishangjuan@eswincomputing.com> > > Add Ethernet controller support for Eswin's eic7700 SoC. The driver > implements hardware initialization, clock configuration, delay > adjustment functions based on DWC Ethernet controller, and supports > device tree configuration and platform driver integration. > > Signed-off-by: Zhi Li <lizhi2@eswincomputing.com> > Signed-off-by: Shangjuan Wei <weishangjuan@eswincomputing.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver 2025-09-18 9:00 ` [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver weishangjuan 2025-09-18 16:22 ` Andrew Lunn @ 2025-09-18 17:16 ` Russell King (Oracle) 2025-09-23 3:06 ` 韦尚娟 2025-09-23 16:33 ` Maxime Chevallier 2 siblings, 1 reply; 12+ messages in thread From: Russell King (Oracle) @ 2025-09-18 17:16 UTC (permalink / raw) To: weishangjuan Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel, ningyu, linmin, lizhi2, pinkesh.vaghela On Thu, Sep 18, 2025 at 05:00:26PM +0800, weishangjuan@eswincomputing.com wrote: > + plat_dat->clk_tx_i = stmmac_pltfr_find_clk(plat_dat, "tx"); > + plat_dat->set_clk_tx_rate = stmmac_set_clk_tx_rate; > + plat_dat->bsp_priv = dwc_priv; > + plat_dat->clks_config = eic7700_clks_config; > + dwc_priv->plat_dat = plat_dat; > + > + ret = eic7700_clks_config(dwc_priv, true); > + if (ret) > + return dev_err_probe(&pdev->dev, > + ret, > + "error enable clock\n"); > + > + ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res); > + if (ret) { > + eic7700_clks_config(dwc_priv, false); > + return dev_err_probe(&pdev->dev, > + ret, > + "Failed to driver probe\n"); > + } > + > + return ret; > +} > + > +static void eic7700_dwmac_remove(struct platform_device *pdev) > +{ > + struct eic7700_qos_priv *dwc_priv = get_stmmac_bsp_priv(&pdev->dev); > + > + stmmac_pltfr_remove(pdev); > + eic7700_clks_config(dwc_priv, false); It would be nice to see the above code cleaned up like I did for all the other stmmac glue drivers recently. However, this is not to say this shouldn't be merged - but please consider this if you do another rework of these patches, if not as a follow-up patch. Essentially, you can use devm_stmmac_pltfm_probe(), populate the plat_dat->init() and plat_dat->exit() methods to call the clks_config function, but as you don't want these methods to be called during suspend/resume (because plat_dat->clks_config() is already called there), provide empty plat_dat->suspend() and plat_dat->resume() methods. Bonus points if you include a patch which provides this functionality as library functions in stmmac_platform.c which can be used to initialise ->init() and ->exit() for this behaviour, and check other stmmac platform glue drivers to see if they would benefit from using these. Of course, it would be nice not to have to go to the extent of adding empty functions for ->suspend() and ->resume(), but stmmac has a lot of weirdo history, and there was no easy way to maintain compatibility without doing that when I added these two new methods. Lastly, please consider using "net: stmmac: <shortened-glue-name>: blah" as the subject so there's a consistent style for stmmac patches. Thanks. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last! ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Re: [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver 2025-09-18 17:16 ` Russell King (Oracle) @ 2025-09-23 3:06 ` 韦尚娟 2025-09-23 9:09 ` Russell King (Oracle) 0 siblings, 1 reply; 12+ messages in thread From: 韦尚娟 @ 2025-09-23 3:06 UTC (permalink / raw) To: Russell King (Oracle) Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel, ningyu, linmin, lizhi2, pinkesh.vaghela Hi King, I hope this message finds you well. Thank you for your professional and valuable suggestions. Our questions are embedded below your comments in the original email below. Best regards, Shangjuan Wei > -----原始邮件----- > 发件人: "Russell King (Oracle)" <linux@armlinux.org.uk> > 发送时间:2025-09-19 01:16:38 (星期五) > 收件人: weishangjuan@eswincomputing.com > 抄送: devicetree@vger.kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, netdev@vger.kernel.org, pabeni@redhat.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, vladimir.oltean@nxp.com, yong.liang.choong@linux.intel.com, anthony.l.nguyen@intel.com, prabhakar.mahadev-lad.rj@bp.renesas.com, jan.petrous@oss.nxp.com, jszhang@kernel.org, inochiama@gmail.com, 0x1207@gmail.com, boon.khai.ng@altera.com, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, ningyu@eswincomputing.com, linmin@eswincomputing.com, lizhi2@eswincomputing.com, pinkesh.vaghela@einfochips.com > 主题: Re: [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver > > On Thu, Sep 18, 2025 at 05:00:26PM +0800, weishangjuan@eswincomputing.com wrote: > > + plat_dat->clk_tx_i = stmmac_pltfr_find_clk(plat_dat, "tx"); > > + plat_dat->set_clk_tx_rate = stmmac_set_clk_tx_rate; > > + plat_dat->bsp_priv = dwc_priv; > > + plat_dat->clks_config = eic7700_clks_config; > > + dwc_priv->plat_dat = plat_dat; > > + > > + ret = eic7700_clks_config(dwc_priv, true); > > + if (ret) > > + return dev_err_probe(&pdev->dev, > > + ret, > > + "error enable clock\n"); > > + > > + ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res); > > + if (ret) { > > + eic7700_clks_config(dwc_priv, false); > > + return dev_err_probe(&pdev->dev, > > + ret, > > + "Failed to driver probe\n"); > > + } > > + > > + return ret; > > +} > > + > > +static void eic7700_dwmac_remove(struct platform_device *pdev) > > +{ > > + struct eic7700_qos_priv *dwc_priv = get_stmmac_bsp_priv(&pdev->dev); > > + > > + stmmac_pltfr_remove(pdev); > > + eic7700_clks_config(dwc_priv, false); > > It would be nice to see the above code cleaned up like I did for all > the other stmmac glue drivers recently. > > However, this is not to say this shouldn't be merged - but please > consider this if you do another rework of these patches, if not as > a follow-up patch. > > Essentially, you can use devm_stmmac_pltfm_probe(), populate the > plat_dat->init() and plat_dat->exit() methods to call the > clks_config function, but as you don't want these methods to be > called during suspend/resume (because plat_dat->clks_config() is > already called there), provide empty plat_dat->suspend() and > plat_dat->resume() methods. > > Bonus points if you include a patch which provides this functionality > as library functions in stmmac_platform.c which can be used to > initialise ->init() and ->exit() for this behaviour, and check other > stmmac platform glue drivers to see if they would benefit from using > these. > In the current eic7700_dwmac glue driver, the regmap_read()/write() operations(for phy_ctrl1, axi_lp_ctrl1, and the RX/TX delay registers))are performed directly in the probe() function. Would it be cleaner to move these register configurations into the init() callback instead, so that they are also reapplied during resume()? > Of course, it would be nice not to have to go to the extent of > adding empty functions for ->suspend() and ->resume(), but stmmac has > a lot of weirdo history, and there was no easy way to maintain > compatibility without doing that when I added these two new methods. > > Lastly, please consider using "net: stmmac: <shortened-glue-name>: blah" > as the subject so there's a consistent style for stmmac patches. > > Thanks. > > -- > RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ > FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last! ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Re: [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver 2025-09-23 3:06 ` 韦尚娟 @ 2025-09-23 9:09 ` Russell King (Oracle) 2025-09-30 10:01 ` 李志 0 siblings, 1 reply; 12+ messages in thread From: Russell King (Oracle) @ 2025-09-23 9:09 UTC (permalink / raw) To: 韦尚娟 Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel, ningyu, linmin, lizhi2, pinkesh.vaghela On Tue, Sep 23, 2025 at 11:06:08AM +0800, 韦尚娟 wrote: > In the current eic7700_dwmac glue driver, the regmap_read()/write() > operations(for phy_ctrl1, axi_lp_ctrl1, and the RX/TX delay registers))are > performed directly in the probe() function. Would it be cleaner to move these > register configurations into the init() callback instead, so that they are > also reapplied during resume()? This is a question I can't answer definitively as I don't know what happens during a suspend on your hardware, and thus which registers are lost / reset by the time the system resumes. So I can only give the obvious guidance. If the settings in the delay registers are lost over a suspend/resume then they need to be re-initialised after resume. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last! ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Re: Re: [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver 2025-09-23 9:09 ` Russell King (Oracle) @ 2025-09-30 10:01 ` 李志 0 siblings, 0 replies; 12+ messages in thread From: 李志 @ 2025-09-30 10:01 UTC (permalink / raw) To: Russell King (Oracle) Cc: 韦尚娟, devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel, ningyu, linmin, pinkesh.vaghela Hi Russell King, Thanks for your suggestions. we’ve done some trials and investigations, but we’d like to clarify a few points: Moving eic7700_clks_config() into plat_dat->init and plat_dat->exit does allow us to drop eic7700_dwmac_remove() and use devm_stmmac_pltfm_probe() to simplify the code. However, we don’t want clks_config() to be invoked again during stmmac_pltfm_resume() and stmmac_pltfm_suspend(). Following your suggestion, this means we would need to provide empty plat_dat->suspend() and plat_dat->resume() methods. Could you confirm whether you’re planning to add the suspend and resume hooks into the plat_stmmacenet_data structure? Also, regarding the cleanups you mentioned for other stmmac glue drivers, do you have some links or reference commits so we can review the approach you took? Thanks! Best regards, Li Zhi > -----原始邮件----- > 发件人: "Russell King (Oracle)" <linux@armlinux.org.uk> > 发送时间:2025-09-23 17:09:06 (星期二) > 收件人: 韦尚娟 <weishangjuan@eswincomputing.com> > 抄送: devicetree@vger.kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, netdev@vger.kernel.org, pabeni@redhat.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, vladimir.oltean@nxp.com, yong.liang.choong@linux.intel.com, anthony.l.nguyen@intel.com, prabhakar.mahadev-lad.rj@bp.renesas.com, jan.petrous@oss.nxp.com, jszhang@kernel.org, inochiama@gmail.com, 0x1207@gmail.com, boon.khai.ng@altera.com, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, ningyu@eswincomputing.com, linmin@eswincomputing.com, lizhi2@eswincomputing.com, pinkesh.vaghela@einfochips.com > 主题: Re: Re: [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver > > On Tue, Sep 23, 2025 at 11:06:08AM +0800, 韦尚娟 wrote: > > In the current eic7700_dwmac glue driver, the regmap_read()/write() > > operations(for phy_ctrl1, axi_lp_ctrl1, and the RX/TX delay registers))are > > performed directly in the probe() function. Would it be cleaner to move these > > register configurations into the init() callback instead, so that they are > > also reapplied during resume()? > > This is a question I can't answer definitively as I don't know what > happens during a suspend on your hardware, and thus which registers > are lost / reset by the time the system resumes. So I can only give > the obvious guidance. > > If the settings in the delay registers are lost over a suspend/resume > then they need to be re-initialised after resume. > > -- > RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ > FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last! ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver 2025-09-18 9:00 ` [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver weishangjuan 2025-09-18 16:22 ` Andrew Lunn 2025-09-18 17:16 ` Russell King (Oracle) @ 2025-09-23 16:33 ` Maxime Chevallier 2 siblings, 0 replies; 12+ messages in thread From: Maxime Chevallier @ 2025-09-23 16:33 UTC (permalink / raw) To: weishangjuan, devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue, vladimir.oltean, rmk+kernel, yong.liang.choong, anthony.l.nguyen, prabhakar.mahadev-lad.rj, jan.petrous, jszhang, inochiama, 0x1207, boon.khai.ng, linux-kernel, linux-stm32, linux-arm-kernel Cc: ningyu, linmin, lizhi2, pinkesh.vaghela Hi, On 18/09/2025 14:30, weishangjuan@eswincomputing.com wrote: > From: Shangjuan Wei <weishangjuan@eswincomputing.com> > > Add Ethernet controller support for Eswin's eic7700 SoC. The driver > implements hardware initialization, clock configuration, delay > adjustment functions based on DWC Ethernet controller, and supports > device tree configuration and platform driver integration. > > Signed-off-by: Zhi Li <lizhi2@eswincomputing.com> > Signed-off-by: Shangjuan Wei <weishangjuan@eswincomputing.com> > --- > drivers/net/ethernet/stmicro/stmmac/Kconfig | 11 + > drivers/net/ethernet/stmicro/stmmac/Makefile | 1 + > .../ethernet/stmicro/stmmac/dwmac-eic7700.c | 230 ++++++++++++++++++ > 3 files changed, 242 insertions(+) > create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c > > diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig > index 67fa879b1e52..a13b15ce1abd 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig > +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig > @@ -67,6 +67,17 @@ config DWMAC_ANARION > > This selects the Anarion SoC glue layer support for the stmmac driver. > > +config DWMAC_EIC7700 > + tristate "Support for Eswin eic7700 ethernet driver" > + select CRC32 > + select MII Seems like CRC32 and MII are already selected by STMMAC_ETH. I guess this is inspired by CONFIG_DWMAC_DWC_QOS_ETH that also seems to have these unnecessary dependencies. Maxime ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-10-14 10:01 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-09-18 8:56 [PATCH v7 0/2] Add driver support for Eswin eic7700 SoC ethernet controller weishangjuan 2025-09-18 8:59 ` [PATCH v7 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan 2025-09-18 10:39 ` Rob Herring (Arm) 2025-10-14 8:53 ` Bo Gan 2025-10-14 10:00 ` 李志 2025-09-18 9:00 ` [PATCH v7 2/2] ethernet: eswin: Add eic7700 ethernet driver weishangjuan 2025-09-18 16:22 ` Andrew Lunn 2025-09-18 17:16 ` Russell King (Oracle) 2025-09-23 3:06 ` 韦尚娟 2025-09-23 9:09 ` Russell King (Oracle) 2025-09-30 10:01 ` 李志 2025-09-23 16:33 ` Maxime Chevallier
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).