* [PATCH v8 0/2] Add driver support for Eswin eic7700 SoC ethernet controller
@ 2025-10-15 11:37 weishangjuan
2025-10-15 11:40 ` [PATCH v8 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: weishangjuan @ 2025-10-15 11:37 UTC (permalink / raw)
To: devicetree, andrew+netdev, davem, edumazet, kuba, pabeni,
mcoquelin.stm32, alexandre.torgue, rmk+kernel, yong.liang.choong,
vladimir.oltean, prabhakar.mahadev-lad.rj, weishangjuan,
jan.petrous, inochiama, jszhang, 0x1207, boon.khai.ng,
linux-kernel, netdev, linux-stm32, linux-arm-kernel
Cc: ningyu, linmin, lizhi2, pinkesh.vaghela
From: Shangjuan Wei <weishangjuan@eswincomputing.com>
Updates:
Changes in v8:
- Removed config option patch dependency from cover letter, because the patch
was applied.
- Modify the theme style of patch 2.
- Remove unnecessary dependencies, such as CRC32 and MII
- Add "Reviewed-by" tag of "Andrew Lunn" for Patch 2.
- Update eswin,eic7700-eth.yaml
- Add new line character at the end of file
- Update dwmac-eic7700.c
- Provide callbacks for plat_dat->init/exit and plat_dat->suspend/resume
to optimize clock processing
- Use devm_stmmac_pltfr_probe() instead of stmmac_dvr_probe() in probe
- Remove eic7700_dwmac_remove()
- Link to v7: https://lore.kernel.org/all/20250918085612.3176-1-weishangjuan@eswincomputing.com/
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
net: stmmac: add Eswin EIC7700 glue driver
.../bindings/net/eswin,eic7700-eth.yaml | 127 ++++++++++
drivers/net/ethernet/stmicro/stmmac/Kconfig | 9 +
drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
.../ethernet/stmicro/stmmac/dwmac-eic7700.c | 235 ++++++++++++++++++
4 files changed, 372 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] 6+ messages in thread
* [PATCH v8 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC
2025-10-15 11:37 [PATCH v8 0/2] Add driver support for Eswin eic7700 SoC ethernet controller weishangjuan
@ 2025-10-15 11:40 ` weishangjuan
2025-10-16 3:17 ` Bo Gan
2025-10-15 11:41 ` [PATCH v8 2/2] net: stmmac: add Eswin EIC7700 glue driver weishangjuan
2025-10-16 23:20 ` [PATCH v8 0/2] Add driver support for Eswin eic7700 SoC ethernet controller patchwork-bot+netdevbpf
2 siblings, 1 reply; 6+ messages in thread
From: weishangjuan @ 2025-10-15 11:40 UTC (permalink / raw)
To: devicetree, andrew+netdev, davem, edumazet, kuba, pabeni,
mcoquelin.stm32, alexandre.torgue, rmk+kernel, yong.liang.choong,
vladimir.oltean, prabhakar.mahadev-lad.rj, weishangjuan,
jan.petrous, inochiama, jszhang, 0x1207, boon.khai.ng,
linux-kernel, netdev, linux-stm32, linux-arm-kernel
Cc: ningyu, linmin, lizhi2, pinkesh.vaghela, 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..9ddbfe219ae2
--- /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>;
+ };
+ };
--
2.17.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v8 2/2] net: stmmac: add Eswin EIC7700 glue driver
2025-10-15 11:37 [PATCH v8 0/2] Add driver support for Eswin eic7700 SoC ethernet controller weishangjuan
2025-10-15 11:40 ` [PATCH v8 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan
@ 2025-10-15 11:41 ` weishangjuan
2025-10-16 23:20 ` [PATCH v8 0/2] Add driver support for Eswin eic7700 SoC ethernet controller patchwork-bot+netdevbpf
2 siblings, 0 replies; 6+ messages in thread
From: weishangjuan @ 2025-10-15 11:41 UTC (permalink / raw)
To: devicetree, andrew+netdev, davem, edumazet, kuba, pabeni,
mcoquelin.stm32, alexandre.torgue, rmk+kernel, yong.liang.choong,
vladimir.oltean, prabhakar.mahadev-lad.rj, weishangjuan,
jan.petrous, inochiama, jszhang, 0x1207, boon.khai.ng,
linux-kernel, netdev, linux-stm32, linux-arm-kernel
Cc: ningyu, linmin, lizhi2, pinkesh.vaghela, Andrew Lunn
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>
---
drivers/net/ethernet/stmicro/stmmac/Kconfig | 9 +
drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
.../ethernet/stmicro/stmmac/dwmac-eic7700.c | 235 ++++++++++++++++++
3 files changed, 245 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 9507131875b2..716daa51df7e 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -67,6 +67,15 @@ 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"
+ 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 51e068e26ce4..ec56bcf2db62 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..1dcf2037001e
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c
@@ -0,0 +1,235 @@
+// 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/pm_runtime.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;
+};
+
+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_init(struct platform_device *pdev, void *priv)
+{
+ struct eic7700_qos_priv *dwc = priv;
+
+ return eic7700_clks_config(dwc, true);
+}
+
+static void eic7700_dwmac_exit(struct platform_device *pdev, void *priv)
+{
+ struct eic7700_qos_priv *dwc = priv;
+
+ eic7700_clks_config(dwc, false);
+}
+
+static int eic7700_dwmac_suspend(struct device *dev, void *priv)
+{
+ return pm_runtime_force_suspend(dev);
+}
+
+static int eic7700_dwmac_resume(struct device *dev, void *priv)
+{
+ int ret;
+
+ ret = pm_runtime_force_resume(dev);
+ if (ret)
+ dev_err(dev, "%s failed: %d\n", __func__, ret);
+
+ 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;
+
+ /* 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->clks_config = eic7700_clks_config;
+ plat_dat->bsp_priv = dwc_priv;
+ dwc_priv->plat_dat = plat_dat;
+ plat_dat->init = eic7700_dwmac_init;
+ plat_dat->exit = eic7700_dwmac_exit;
+ plat_dat->suspend = eic7700_dwmac_suspend;
+ plat_dat->resume = eic7700_dwmac_resume;
+
+ return devm_stmmac_pltfr_probe(pdev, plat_dat, &stmmac_res);
+}
+
+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,
+ .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] 6+ messages in thread
* Re: [PATCH v8 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC
2025-10-15 11:40 ` [PATCH v8 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan
@ 2025-10-16 3:17 ` Bo Gan
2025-10-16 6:43 ` 李志
0 siblings, 1 reply; 6+ messages in thread
From: Bo Gan @ 2025-10-16 3:17 UTC (permalink / raw)
To: weishangjuan, devicetree, andrew+netdev, davem, edumazet, kuba,
pabeni, mcoquelin.stm32, alexandre.torgue, rmk+kernel,
yong.liang.choong, vladimir.oltean, prabhakar.mahadev-lad.rj,
jan.petrous, inochiama, jszhang, 0x1207, boon.khai.ng,
linux-kernel, netdev, linux-stm32, linux-arm-kernel
Cc: ningyu, linmin, lizhi2, pinkesh.vaghela, Krzysztof Kozlowski,
Xuyang Dong
Hi Zhi, ShangJuan,
On 10/15/25 04:40, 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..9ddbfe219ae2
> --- /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>;
Can you let me know which clock I should use for EIC7700 (HiFive P550), if
I apply this patchset on top of XuYang's v6 clock patchset? ref:
https://lore.kernel.org/all/20251009092029.140-1-dongxuyang@eswincomputing.com/
In your vendor kernel, you have EIC7700_CLK_HSP_ETH_[APP|CSR]_CLK, but in
the v6 clock patchset, I couldn't find them. Please help translate
<186> <171> <40> <193> to the macro of v6 clock patchset, so I can help
test it.
> + clock-names = "axi", "cfg", "stmmaceth", "tx";> + interrupt-parent = <&plic>;
> + interrupts = <61>;
> + interrupt-names = "macirq";
> + phy-mode = "rgmii-id";
> + phy-handle = <&phy0>;> + resets = <&reset 95>;
For reset, I assume this <95> corresponds to EIC7700_RESET_HSP_ETH0_ARST,
if applying on top of the v7 reset patchset, correct? ref:
https://lore.kernel.org/all/20250930093132.2003-1-dongxuyang@eswincomputing.com/
> + 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>;
> + };
> + };
> --
> 2.17.1
>
Bo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Re: [PATCH v8 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC
2025-10-16 3:17 ` Bo Gan
@ 2025-10-16 6:43 ` 李志
0 siblings, 0 replies; 6+ messages in thread
From: 李志 @ 2025-10-16 6:43 UTC (permalink / raw)
To: Bo Gan
Cc: weishangjuan, devicetree, andrew+netdev, davem, edumazet, kuba,
pabeni, mcoquelin.stm32, alexandre.torgue, rmk+kernel,
yong.liang.choong, vladimir.oltean, prabhakar.mahadev-lad.rj,
jan.petrous, inochiama, jszhang, 0x1207, boon.khai.ng,
linux-kernel, netdev, linux-stm32, linux-arm-kernel, ningyu,
linmin, pinkesh.vaghela, Krzysztof Kozlowski, Xuyang Dong
Hi Bo Gan,
Please refer to the original email. Based on the v6 clock patchset
and v7 reset patchset you mentioned, we have provided an example
using macros.
Best regards,
Li Zhi
> -----原始邮件-----
> 发件人: "Bo Gan" <ganboing@gmail.com>
> 发送时间:2025-10-16 11:17:25 (星期四)
> 收件人: weishangjuan@eswincomputing.com, devicetree@vger.kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, rmk+kernel@armlinux.org.uk, yong.liang.choong@linux.intel.com, vladimir.oltean@nxp.com, prabhakar.mahadev-lad.rj@bp.renesas.com, jan.petrous@oss.nxp.com, inochiama@gmail.com, jszhang@kernel.org, 0x1207@gmail.com, boon.khai.ng@altera.com, linux-kernel@vger.kernel.org, netdev@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>, "Xuyang Dong" <dongxuyang@eswincomputing.com>
> 主题: Re: [PATCH v8 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC
>
> Hi Zhi, ShangJuan,
>
>
> On 10/15/25 04:40, 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..9ddbfe219ae2
> > --- /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>;
>
> Can you let me know which clock I should use for EIC7700 (HiFive P550), if
> I apply this patchset on top of XuYang's v6 clock patchset? ref:
> https://lore.kernel.org/all/20251009092029.140-1-dongxuyang@eswincomputing.com/
> In your vendor kernel, you have EIC7700_CLK_HSP_ETH_[APP|CSR]_CLK, but in
> the v6 clock patchset, I couldn't find them. Please help translate
> <186> <171> <40> <193> to the macro of v6 clock patchset, so I can help
> test it.
>
> > + clock-names = "axi", "cfg", "stmmaceth", "tx";> + interrupt-parent = <&plic>;
> > + interrupts = <61>;
> > + interrupt-names = "macirq";
> > + phy-mode = "rgmii-id";
> > + phy-handle = <&phy0>;> + resets = <&reset 95>;
>
> For reset, I assume this <95> corresponds to EIC7700_RESET_HSP_ETH0_ARST,
> if applying on top of the v7 reset patchset, correct? ref:
> https://lore.kernel.org/all/20250930093132.2003-1-dongxuyang@eswincomputing.com/
>
> > + 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>;
> > + };
> > + };
ethernet@50400000 {
compatible = "eswin,eic7700-qos-eth", "snps,dwmac-5.20";
reg = <0x50400000 0x10000>;
clocks = <&d0_clock EIC7700_CLK_GATE_HSP_ACLK>,
<&d0_clock EIC7700_CLK_GATE_HSP_CFG_CLK>,
<&d0_clock EIC7700_CLK_MUX_SYSCFG_CLK_ROOT_2MUX1_GFREE>,
<&d0_clock EIC7700_CLK_GATE_HSP_ETH0_CORE_CLK>;
clock-names = "axi", "cfg", "stmmaceth", "tx";
interrupt-parent = <&plic>;
interrupts = <61>;
interrupt-names = "macirq";
phy-mode = "rgmii-id";
phy-handle = <&phy0>;
resets = <&reset EIC7700_RESET_HSP_ETH0_ARST>;
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>;
};
};
> > --
> > 2.17.1
> >
>
> Bo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v8 0/2] Add driver support for Eswin eic7700 SoC ethernet controller
2025-10-15 11:37 [PATCH v8 0/2] Add driver support for Eswin eic7700 SoC ethernet controller weishangjuan
2025-10-15 11:40 ` [PATCH v8 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan
2025-10-15 11:41 ` [PATCH v8 2/2] net: stmmac: add Eswin EIC7700 glue driver weishangjuan
@ 2025-10-16 23:20 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-10-16 23:20 UTC (permalink / raw)
To: =?utf-8?b?6Z+m5bCa5aifIDx3ZWlzaGFuZ2p1YW5AZXN3aW5jb21wdXRpbmcuY29tPg==?=
Cc: devicetree, andrew+netdev, davem, edumazet, kuba, pabeni,
mcoquelin.stm32, alexandre.torgue, rmk+kernel, yong.liang.choong,
vladimir.oltean, prabhakar.mahadev-lad.rj, jan.petrous, inochiama,
jszhang, 0x1207, boon.khai.ng, linux-kernel, netdev, linux-stm32,
linux-arm-kernel, ningyu, linmin, lizhi2, pinkesh.vaghela
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Wed, 15 Oct 2025 19:37:51 +0800 you wrote:
> From: Shangjuan Wei <weishangjuan@eswincomputing.com>
>
> Updates:
>
> Changes in v8:
> - Removed config option patch dependency from cover letter, because the patch
> was applied.
> - Modify the theme style of patch 2.
> - Remove unnecessary dependencies, such as CRC32 and MII
> - Add "Reviewed-by" tag of "Andrew Lunn" for Patch 2.
> - Update eswin,eic7700-eth.yaml
> - Add new line character at the end of file
> - Update dwmac-eic7700.c
> - Provide callbacks for plat_dat->init/exit and plat_dat->suspend/resume
> to optimize clock processing
> - Use devm_stmmac_pltfr_probe() instead of stmmac_dvr_probe() in probe
> - Remove eic7700_dwmac_remove()
> - Link to v7: https://lore.kernel.org/all/20250918085612.3176-1-weishangjuan@eswincomputing.com/
>
> [...]
Here is the summary with links:
- [v8,1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC
https://git.kernel.org/netdev/net-next/c/888bd0eca93c
- [v8,2/2] net: stmmac: add Eswin EIC7700 glue driver
https://git.kernel.org/netdev/net-next/c/ea77dbbdbc4e
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-10-16 23:20 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-15 11:37 [PATCH v8 0/2] Add driver support for Eswin eic7700 SoC ethernet controller weishangjuan
2025-10-15 11:40 ` [PATCH v8 1/2] dt-bindings: ethernet: eswin: Document for EIC7700 SoC weishangjuan
2025-10-16 3:17 ` Bo Gan
2025-10-16 6:43 ` 李志
2025-10-15 11:41 ` [PATCH v8 2/2] net: stmmac: add Eswin EIC7700 glue driver weishangjuan
2025-10-16 23:20 ` [PATCH v8 0/2] Add driver support for Eswin eic7700 SoC ethernet controller patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).