public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
@ 2026-02-09  9:46 lizhi2
  2026-02-09  9:48 ` [PATCH v2 1/2] dt-bindings: ethernet: eswin: add clock sampling control lizhi2
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: lizhi2 @ 2026-02-09  9:46 UTC (permalink / raw)
  To: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	rmk+kernel, linux-stm32, linux-arm-kernel, linux-kernel
  Cc: ningyu, linmin, pinkesh.vaghela, weishangjuan, Zhi Li

From: Zhi Li <lizhi2@eswincomputing.com>

v1 -> v2:
  - Update eswin,eic7700-eth.yaml:
    - Drop the vendor-specific properties eswin,rx-clk-invert and
      eswin,tx-clk-invert.
    - Introduce a distinct compatible string
      "eswin,eic7700-qos-eth-clk-inversion" to describe MAC instances that
      require internal RGMII clock inversion.
      This models the SoC-specific hardware difference directly via the
      compatible string and avoids per-board configuration properties.
    - Change rx-internal-delay-ps and tx-internal-delay-ps from enum to
      minimum/maximum to reflect the actual delay range (0-2400 ps)
    - Add reference to High-Speed Subsystem documentation in eswin,hsp-sp-csr
      description. The HSP CSR block is described in Chapter 10
      ("High-Speed Interface") of the EIC7700X SoC Technical Reference Manual,
      Part 4 (EIC7700X_SoC_Technical_Reference_Manual_Part4.pdf):
      https://github.com/eswincomputing/EIC7700X-SoC-Technical-Reference-Manual/releases

  - Update dwmac-eic7700.c:
    - Remove handling of eswin,rx-clk-invert and eswin,tx-clk-invert
      properties.
    - Select RX clock inversion based on the new
      "eswin,eic7700-qos-eth-clk-inversion" compatible string, using
      match data to apply the required configuration for affected MAC
      instances (eth1).

  - Link to v1: https://lore.kernel.org/lkml/20260109080601.1262-1-lizhi2@eswincomputing.com/

Zhi Li (2):
  dt-bindings: ethernet: eswin: add clock sampling control
  net: stmmac: eic7700: enable clocks before syscon access and correct
    RX sampling timing

 .../bindings/net/eswin,eic7700-eth.yaml       |  63 ++++++--
 .../ethernet/stmicro/stmmac/dwmac-eic7700.c   | 152 +++++++++++++-----
 2 files changed, 170 insertions(+), 45 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 1/2] dt-bindings: ethernet: eswin: add clock sampling control
  2026-02-09  9:46 [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing lizhi2
@ 2026-02-09  9:48 ` lizhi2
  2026-02-09 13:21   ` Andrew Lunn
  2026-02-09  9:48 ` [PATCH v2 2/2] net: stmmac: eic7700: enable clocks before syscon access and correct RX sampling timing lizhi2
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: lizhi2 @ 2026-02-09  9:48 UTC (permalink / raw)
  To: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	rmk+kernel, linux-stm32, linux-arm-kernel, linux-kernel
  Cc: ningyu, linmin, pinkesh.vaghela, weishangjuan, Zhi Li

From: Zhi Li <lizhi2@eswincomputing.com>

The second Ethernet controller (eth1) on the EIC7700 SoC may experience
RX data sampling issues at high speed due to EIC7700-specific receive
clock to data skew at the MAC input.

On the EIC7700 SoC, the second Ethernet controller (eth1) requires
inversion of the internal RGMII receive clock in order to meet RX data
sampling timing at high speed.

Describe this SoC-specific difference by introducing a distinct compatible
string for MAC instances that require internal clock inversion, allowing the
driver to select the appropriate configuration without relying on per-board
vendor-specific properties.

The rx-internal-delay-ps and tx-internal-delay-ps properties now use
minimum and maximum constraints to reflect the actual hardware delay
range (0-2400 ps) applied in 20 ps steps. This relaxes the binding
validation compared to the previous enum-based definition and avoids
regressions for existing DTBs while keeping the same hardware limits.

In addition, the binding now includes additional background information
about the HSP CSR registers accessed by the MAC. The TXD and RXD delay
control registers are included so the driver can explicitly clear any
residual configuration left by the bootloader. Background reference for
the High-Speed Subsystem and HSP CSR block is available in Chapter 10
("High-Speed Interface") of the EIC7700X SoC Technical Reference Manual,
Part 4 (EIC7700X_SoC_Technical_Reference_Manual_Part4.pdf):
https://github.com/eswincomputing/EIC7700X-SoC-Technical-Reference-Manual/releases

There are currently no in-tree users of the EIC7700 Ethernet driver, so
these changes are safe.

Fixes: 888bd0eca93c ("dt-bindings: ethernet: eswin: Document for EIC7700 SoC")
Signed-off-by: Zhi Li <lizhi2@eswincomputing.com>
---
 .../bindings/net/eswin,eic7700-eth.yaml       | 63 ++++++++++++++++---
 1 file changed, 54 insertions(+), 9 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml b/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml
index 91e8cd1db67b..8a7035dfd4a2 100644
--- a/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml
+++ b/Documentation/devicetree/bindings/net/eswin,eic7700-eth.yaml
@@ -20,6 +20,7 @@ select:
       contains:
         enum:
           - eswin,eic7700-qos-eth
+          - eswin,eic7700-qos-eth-clk-inversion
   required:
     - compatible
 
@@ -28,9 +29,13 @@ allOf:
 
 properties:
   compatible:
-    items:
-      - const: eswin,eic7700-qos-eth
-      - const: snps,dwmac-5.20
+    oneOf:
+      - items:
+          - const: eswin,eic7700-qos-eth
+          - const: snps,dwmac-5.20
+      - items:
+          - const: eswin,eic7700-qos-eth-clk-inversion
+          - const: snps,dwmac-5.20
 
   reg:
     maxItems: 1
@@ -63,16 +68,27 @@ properties:
       - const: stmmaceth
 
   rx-internal-delay-ps:
-    enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400]
+    minimum: 0
+    maximum: 2400
 
   tx-internal-delay-ps:
-    enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400]
+    minimum: 0
+    maximum: 2400
 
   eswin,hsp-sp-csr:
     description:
       HSP CSR is to control and get status of different high-speed peripherals
       (such as Ethernet, USB, SATA, etc.) via register, which can tune
       board-level's parameters of PHY, etc.
+
+      Additional background information about the High-Speed Subsystem
+      and the HSP CSR block is available in Chapter 10 ("High-Speed Interface")
+      of the EIC7700X SoC Technical Reference Manual, Part 4
+      (EIC7700X_SoC_Technical_Reference_Manual_Part4.pdf). The manual is
+      publicly available at
+      https://github.com/eswincomputing/EIC7700X-SoC-Technical-Reference-Manual/releases
+
+      This reference is provided for background information only.
     $ref: /schemas/types.yaml#/definitions/phandle-array
     items:
       - items:
@@ -81,7 +97,9 @@ properties:
                          or external clock selection
           - description: Offset of AXI clock controller Low-Power request
                          register
+          - description: Offset of register controlling TXD delay
           - description: Offset of register controlling TX/RX clock delay
+          - description: Offset of register controlling RXD delay
 
 required:
   - compatible
@@ -111,17 +129,44 @@ examples:
         interrupts = <61>;
         interrupt-names = "macirq";
         phy-mode = "rgmii-id";
-        phy-handle = <&phy0>;
+        phy-handle = <&gmac0_phy0>;
         resets = <&reset 95>;
         reset-names = "stmmaceth";
+        rx-internal-delay-ps = <20>;
+        tx-internal-delay-ps = <100>;
+        eswin,hsp-sp-csr = <&hsp_sp_csr 0x100 0x108 0x114 0x118 0x11c>;
+        snps,axi-config = <&stmmac_axi_setup_gmac0>;
+        snps,aal;
+        snps,fixed-burst;
+        snps,tso;
+        stmmac_axi_setup_gmac0: stmmac-axi-config {
+            snps,blen = <0 0 0 0 16 8 4>;
+            snps,rd_osr_lmt = <2>;
+            snps,wr_osr_lmt = <2>;
+        };
+    };
+
+    ethernet@50410000 {
+        compatible = "eswin,eic7700-qos-eth-clk-inversion", "snps,dwmac-5.20";
+        reg = <0x50410000 0x10000>;
+        clocks = <&d0_clock 186>, <&d0_clock 171>, <&d0_clock 40>,
+                <&d0_clock 194>;
+        clock-names = "axi", "cfg", "stmmaceth", "tx";
+        interrupt-parent = <&plic>;
+        interrupts = <70>;
+        interrupt-names = "macirq";
+        phy-mode = "rgmii-rxid";
+        phy-handle = <&gmac1_phy0>;
+        resets = <&reset 94>;
+        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>;
+        eswin,hsp-sp-csr = <&hsp_sp_csr 0x200 0x208 0x214 0x218 0x21c>;
+        snps,axi-config = <&stmmac_axi_setup_gmac1>;
         snps,aal;
         snps,fixed-burst;
         snps,tso;
-        stmmac_axi_setup: stmmac-axi-config {
+        stmmac_axi_setup_gmac1: stmmac-axi-config {
             snps,blen = <0 0 0 0 16 8 4>;
             snps,rd_osr_lmt = <2>;
             snps,wr_osr_lmt = <2>;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 2/2] net: stmmac: eic7700: enable clocks before syscon access and correct RX sampling timing
  2026-02-09  9:46 [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing lizhi2
  2026-02-09  9:48 ` [PATCH v2 1/2] dt-bindings: ethernet: eswin: add clock sampling control lizhi2
@ 2026-02-09  9:48 ` lizhi2
  2026-02-09 13:34   ` Andrew Lunn
  2026-02-09 13:36 ` [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 " Andrew Lunn
  2026-02-20 18:37 ` Marcel Ziswiler
  3 siblings, 1 reply; 12+ messages in thread
From: lizhi2 @ 2026-02-09  9:48 UTC (permalink / raw)
  To: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	rmk+kernel, linux-stm32, linux-arm-kernel, linux-kernel
  Cc: ningyu, linmin, pinkesh.vaghela, weishangjuan, Zhi Li

From: Zhi Li <lizhi2@eswincomputing.com>

The second Ethernet controller (eth1) on the Eswin EIC7700 SoC may fail
to sample RX data correctly at Gigabit speed due to EIC7700-specific
receive clock to data skew at the MAC input in the silicon.

The existing internal delay configuration does not provide sufficient
adjustment range to compensate for this condition at 1000Mbps.
Update the EIC7700 DWMAC glue driver to apply EIC7700-specific clock
sampling inversion only during Gigabit operation on MAC instances
that require it.

TXD and RXD delay registers are explicitly cleared during initialization
to override any residual configuration left by the bootloader. All HSP
CSR register accesses are performed only after the required clocks are
enabled.

Fixes: ea77dbbdbc4e ("net: stmmac: add Eswin EIC7700 glue driver")
Signed-off-by: Zhi Li <lizhi2@eswincomputing.com>
---
 .../ethernet/stmicro/stmmac/dwmac-eic7700.c   | 152 +++++++++++++-----
 1 file changed, 116 insertions(+), 36 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c
index bcb8e000e720..f6a99784596b 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c
@@ -28,20 +28,37 @@
 
 /*
  * 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)
+ * - TX Delay: bits [14:8] — TX_CLK delay (unit: 0.02ns per bit)
+ * - TX Invert : bit  [15]
+ * - RX Delay: bits [30:24] — RX_CLK delay (unit: 0.02ns per bit)
+ * - RX Invert : bit  [31]
  */
 #define EIC7700_ETH_TX_ADJ_DELAY	GENMASK(14, 8)
 #define EIC7700_ETH_RX_ADJ_DELAY	GENMASK(30, 24)
+#define EIC7700_ETH_TX_INV_DELAY	BIT(15)
+#define EIC7700_ETH_RX_INV_DELAY	BIT(31)
 
-#define EIC7700_MAX_DELAY_UNIT 0x7F
+#define EIC7700_MAX_DELAY_STEPS 0x7F
 
 static const char * const eic7700_clk_names[] = {
 	"tx", "axi", "cfg",
 };
 
+struct eic7700_dwmac_data {
+	bool rgmii_rx_clk_invert;
+};
+
 struct eic7700_qos_priv {
+	struct device *dev;
 	struct plat_stmmacenet_data *plat_dat;
+	struct regmap *eic7700_hsp_regmap;
+	u32 eth_axi_lp_ctrl_offset;
+	u32 eth_phy_ctrl_offset;
+	u32 eth_txd_offset;
+	u32 eth_clk_offset;
+	u32 eth_rxd_offset;
+	u32 eth_clk_dly_param;
+	bool eth_rx_clk_inv;
 };
 
 static int eic7700_clks_config(void *priv, bool enabled)
@@ -61,8 +78,27 @@ static int eic7700_clks_config(void *priv, bool enabled)
 static int eic7700_dwmac_init(struct device *dev, void *priv)
 {
 	struct eic7700_qos_priv *dwc = priv;
+	u32 eth_phy_ctrl_regset;
+	int ret = 0;
+
+	ret = eic7700_clks_config(dwc, true);
+	if (ret)
+		return ret;
+
+	regmap_read(dwc->eic7700_hsp_regmap, dwc->eth_phy_ctrl_offset,
+		    &eth_phy_ctrl_regset);
+	eth_phy_ctrl_regset |=
+		(EIC7700_ETH_TX_CLK_SEL | EIC7700_ETH_PHY_INTF_SELI);
+	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_phy_ctrl_offset,
+		     eth_phy_ctrl_regset);
+
+	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_axi_lp_ctrl_offset,
+		     EIC7700_ETH_CSYSREQ_VAL);
+
+	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_txd_offset, 0);
+	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_rxd_offset, 0);
 
-	return eic7700_clks_config(dwc, true);
+	return ret;
 }
 
 static void eic7700_dwmac_exit(struct device *dev, void *priv)
@@ -88,17 +124,33 @@ static int eic7700_dwmac_resume(struct device *dev, void *priv)
 	return ret;
 }
 
+static void eic7700_dwmac_fix_speed(void *priv, int speed, unsigned int mode)
+{
+	struct eic7700_qos_priv *dwc = (struct eic7700_qos_priv *)priv;
+	u32 dly_param = dwc->eth_clk_dly_param;
+
+	switch (speed) {
+	case SPEED_1000:
+		if (dwc->eth_rx_clk_inv)
+			dly_param |= EIC7700_ETH_RX_INV_DELAY;
+		break;
+	case SPEED_100:
+	case SPEED_10:
+		break;
+	default:
+		dev_err(dwc->dev, "invalid speed %u\n", speed);
+		break;
+	}
+
+	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_clk_offset, dly_param);
+}
+
 static int eic7700_dwmac_probe(struct platform_device *pdev)
 {
+	const struct eic7700_dwmac_data *data;
 	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;
 
@@ -116,13 +168,23 @@ static int eic7700_dwmac_probe(struct platform_device *pdev)
 	if (!dwc_priv)
 		return -ENOMEM;
 
+	dwc_priv->dev = &pdev->dev;
+
+	data = device_get_match_data(&pdev->dev);
+	if (!data)
+		return dev_err_probe(&pdev->dev,
+				     -EINVAL, "no match data found\n");
+
+	dwc_priv->eth_rx_clk_inv = data->rgmii_rx_clk_invert;
+
 	/* 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);
+		u32 val = min(delay_ps / 20, EIC7700_MAX_DELAY_STEPS);
 
-		eth_dly_param &= ~EIC7700_ETH_RX_ADJ_DELAY;
-		eth_dly_param |= FIELD_PREP(EIC7700_ETH_RX_ADJ_DELAY, val);
+		dwc_priv->eth_clk_dly_param &= ~EIC7700_ETH_RX_ADJ_DELAY;
+		dwc_priv->eth_clk_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");
@@ -131,55 +193,58 @@ static int eic7700_dwmac_probe(struct platform_device *pdev)
 	/* 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);
+		u32 val = min(delay_ps / 20, EIC7700_MAX_DELAY_STEPS);
 
-		eth_dly_param &= ~EIC7700_ETH_TX_ADJ_DELAY;
-		eth_dly_param |= FIELD_PREP(EIC7700_ETH_TX_ADJ_DELAY, val);
+		dwc_priv->eth_clk_dly_param &= ~EIC7700_ETH_TX_ADJ_DELAY;
+		dwc_priv->eth_clk_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))
+	dwc_priv->eic7700_hsp_regmap =
+			syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
+							"eswin,hsp-sp-csr");
+	if (IS_ERR(dwc_priv->eic7700_hsp_regmap))
 		return dev_err_probe(&pdev->dev,
-				PTR_ERR(eic7700_hsp_regmap),
+				PTR_ERR(dwc_priv->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, &eth_phy_ctrl_offset);
+					 1, &dwc_priv->eth_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,
-		    &eth_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, &eth_axi_lp_ctrl_offset);
+					 2, &dwc_priv->eth_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, &dwc_priv->eth_txd_offset);
+	if (ret)
+		return dev_err_probe(&pdev->dev, ret,
+				     "can't get eth_txd_offset\n");
 
 	ret = of_property_read_u32_index(pdev->dev.of_node,
 					 "eswin,hsp-sp-csr",
-					 3, &eth_rxd_dly_offset);
+					 4, &dwc_priv->eth_clk_offset);
 	if (ret)
 		return dev_err_probe(&pdev->dev, ret,
-				     "can't get eth_rxd_dly_offset\n");
+				     "can't get eth_clk_offset\n");
 
-	regmap_write(eic7700_hsp_regmap, eth_rxd_dly_offset,
-		     eth_dly_param);
+	ret = of_property_read_u32_index(pdev->dev.of_node,
+					 "eswin,hsp-sp-csr",
+					 5, &dwc_priv->eth_rxd_offset);
+	if (ret)
+		return dev_err_probe(&pdev->dev, ret,
+				     "can't get eth_rxd_offset\n");
 
 	plat_dat->num_clks = ARRAY_SIZE(eic7700_clk_names);
 	plat_dat->clks = devm_kcalloc(&pdev->dev,
@@ -208,12 +273,27 @@ static int eic7700_dwmac_probe(struct platform_device *pdev)
 	plat_dat->exit = eic7700_dwmac_exit;
 	plat_dat->suspend = eic7700_dwmac_suspend;
 	plat_dat->resume = eic7700_dwmac_resume;
+	plat_dat->fix_mac_speed = eic7700_dwmac_fix_speed;
 
 	return devm_stmmac_pltfr_probe(pdev, plat_dat, &stmmac_res);
 }
 
+static const struct eic7700_dwmac_data eic7700_dwmac_data = {
+	.rgmii_rx_clk_invert = false,
+};
+
+static const struct eic7700_dwmac_data eic7700_dwmac_data_clk_inversion = {
+	.rgmii_rx_clk_invert = true,
+};
+
 static const struct of_device_id eic7700_dwmac_match[] = {
-	{ .compatible = "eswin,eic7700-qos-eth" },
+	{	.compatible = "eswin,eic7700-qos-eth",
+		.data = &eic7700_dwmac_data,
+	},
+	{
+		.compatible = "eswin,eic7700-qos-eth-clk-inversion",
+		.data = &eic7700_dwmac_data_clk_inversion,
+	},
 	{ }
 };
 MODULE_DEVICE_TABLE(of, eic7700_dwmac_match);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/2] dt-bindings: ethernet: eswin: add clock sampling control
  2026-02-09  9:48 ` [PATCH v2 1/2] dt-bindings: ethernet: eswin: add clock sampling control lizhi2
@ 2026-02-09 13:21   ` Andrew Lunn
  0 siblings, 0 replies; 12+ messages in thread
From: Andrew Lunn @ 2026-02-09 13:21 UTC (permalink / raw)
  To: lizhi2
  Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	rmk+kernel, linux-stm32, linux-arm-kernel, linux-kernel, ningyu,
	linmin, pinkesh.vaghela, weishangjuan

> The rx-internal-delay-ps and tx-internal-delay-ps properties now use
> minimum and maximum constraints to reflect the actual hardware delay
> range (0-2400 ps) applied in 20 ps steps.


>    rx-internal-delay-ps:
> -    enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400]
> +    minimum: 0
> +    maximum: 2400

       multipleOf: 20

Also, 2400 / 20 = 120. Is the real maximum 127 * 20 = 2540?

> @@ -111,17 +129,44 @@ examples:
>          interrupts = <61>;
>          interrupt-names = "macirq";
>          phy-mode = "rgmii-id";
> -        phy-handle = <&phy0>;
> +        phy-handle = <&gmac0_phy0>;
>          resets = <&reset 95>;
>          reset-names = "stmmaceth";
> +        rx-internal-delay-ps = <20>;
> +        tx-internal-delay-ps = <100>;

I would not include them in the example. You are going to get
developers blindly copying this into real DT. A well designed board
should not need delays.

	Andrew

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/2] net: stmmac: eic7700: enable clocks before syscon access and correct RX sampling timing
  2026-02-09  9:48 ` [PATCH v2 2/2] net: stmmac: eic7700: enable clocks before syscon access and correct RX sampling timing lizhi2
@ 2026-02-09 13:34   ` Andrew Lunn
  0 siblings, 0 replies; 12+ messages in thread
From: Andrew Lunn @ 2026-02-09 13:34 UTC (permalink / raw)
  To: lizhi2
  Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	rmk+kernel, linux-stm32, linux-arm-kernel, linux-kernel, ningyu,
	linmin, pinkesh.vaghela, weishangjuan

>  static int eic7700_dwmac_init(struct device *dev, void *priv)
>  {
>  	struct eic7700_qos_priv *dwc = priv;
> +	u32 eth_phy_ctrl_regset;
> +	int ret = 0;
> +
> +	ret = eic7700_clks_config(dwc, true);

No point initialising ret if the first thing you do is assign to it.

> +	if (ret)
> +		return ret;
> +
> +	regmap_read(dwc->eic7700_hsp_regmap, dwc->eth_phy_ctrl_offset,
> +		    &eth_phy_ctrl_regset);
> +	eth_phy_ctrl_regset |=
> +		(EIC7700_ETH_TX_CLK_SEL | EIC7700_ETH_PHY_INTF_SELI);
> +	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_phy_ctrl_offset,
> +		     eth_phy_ctrl_regset);

regmap_set_bits(dwc->eic7700_hsp_regmap, dwc->eth_phy_ctrl_offset,
		EIC7700_ETH_TX_CLK_SEL | EIC7700_ETH_PHY_INTF_SELI);

> +	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_axi_lp_ctrl_offset,
> +		     EIC7700_ETH_CSYSREQ_VAL);
> +
> +	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_txd_offset, 0);
> +	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_rxd_offset, 0);
>  
> -	return eic7700_clks_config(dwc, true);
> +	return ret;

returning ret here seems pointless. You already know it is 0.


>  }
>  
>  static void eic7700_dwmac_exit(struct device *dev, void *priv)
> @@ -88,17 +124,33 @@ static int eic7700_dwmac_resume(struct device *dev, void *priv)
>  	return ret;
>  }
>  
> +static void eic7700_dwmac_fix_speed(void *priv, int speed, unsigned int mode)
> +{
> +	struct eic7700_qos_priv *dwc = (struct eic7700_qos_priv *)priv;
> +	u32 dly_param = dwc->eth_clk_dly_param;
> +
> +	switch (speed) {
> +	case SPEED_1000:
> +		if (dwc->eth_rx_clk_inv)
> +			dly_param |= EIC7700_ETH_RX_INV_DELAY;
> +		break;
> +	case SPEED_100:
> +	case SPEED_10:
> +		break;
> +	default:
> +		dev_err(dwc->dev, "invalid speed %u\n", speed);
> +		break;
> +	}
> +
> +	regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_clk_offset, dly_param);
> +}
> +
>  static int eic7700_dwmac_probe(struct platform_device *pdev)
>  {
> +	const struct eic7700_dwmac_data *data;
>  	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;
>  
> @@ -116,13 +168,23 @@ static int eic7700_dwmac_probe(struct platform_device *pdev)
>  	if (!dwc_priv)
>  		return -ENOMEM;
>  
> +	dwc_priv->dev = &pdev->dev;
> +
> +	data = device_get_match_data(&pdev->dev);
> +	if (!data)
> +		return dev_err_probe(&pdev->dev,
> +				     -EINVAL, "no match data found\n");
> +
> +	dwc_priv->eth_rx_clk_inv = data->rgmii_rx_clk_invert;
> +
>  	/* 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);
> +		u32 val = min(delay_ps / 20, EIC7700_MAX_DELAY_STEPS);

If the value it too big, please return -EINVAL. You have listed in the
DT binding what the valid range is, not that you clamp to the maximum
value.

>  
> -		eth_dly_param &= ~EIC7700_ETH_RX_ADJ_DELAY;
> -		eth_dly_param |= FIELD_PREP(EIC7700_ETH_RX_ADJ_DELAY, val);
> +		dwc_priv->eth_clk_dly_param &= ~EIC7700_ETH_RX_ADJ_DELAY;
> +		dwc_priv->eth_clk_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");

RX and TX internal delays are generally optional, because most boards
don't require them. Default to 0 if not supplied.

    Andrew

---
pw-bot: cr

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
  2026-02-09  9:46 [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing lizhi2
  2026-02-09  9:48 ` [PATCH v2 1/2] dt-bindings: ethernet: eswin: add clock sampling control lizhi2
  2026-02-09  9:48 ` [PATCH v2 2/2] net: stmmac: eic7700: enable clocks before syscon access and correct RX sampling timing lizhi2
@ 2026-02-09 13:36 ` Andrew Lunn
  2026-02-09 14:31   ` Russell King (Oracle)
  2026-02-20 18:37 ` Marcel Ziswiler
  3 siblings, 1 reply; 12+ messages in thread
From: Andrew Lunn @ 2026-02-09 13:36 UTC (permalink / raw)
  To: lizhi2
  Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	rmk+kernel, linux-stm32, linux-arm-kernel, linux-kernel, ningyu,
	linmin, pinkesh.vaghela, weishangjuan

On Mon, Feb 09, 2026 at 05:46:28PM +0800, lizhi2@eswincomputing.com wrote:
> From: Zhi Li <lizhi2@eswincomputing.com>
> 
> v1 -> v2:

For version 3, please include a patch to the SoC .dtsi file adding the
Ethernet nodes. We like to see users of code being added.

	 Andrew

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
  2026-02-09 13:36 ` [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 " Andrew Lunn
@ 2026-02-09 14:31   ` Russell King (Oracle)
  2026-02-10 10:21     ` 李志
  0 siblings, 1 reply; 12+ messages in thread
From: Russell King (Oracle) @ 2026-02-09 14:31 UTC (permalink / raw)
  To: lizhi2, Andrew Lunn
  Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	linux-stm32, linux-arm-kernel, linux-kernel, ningyu, linmin,
	pinkesh.vaghela, weishangjuan

On Mon, Feb 09, 2026 at 02:36:11PM +0100, Andrew Lunn wrote:
> On Mon, Feb 09, 2026 at 05:46:28PM +0800, lizhi2@eswincomputing.com wrote:
> > From: Zhi Li <lizhi2@eswincomputing.com>
> > 
> > v1 -> v2:
> 
> For version 3, please include a patch to the SoC .dtsi file adding the
> Ethernet nodes. We like to see users of code being added.

In addition to Andrew's comments, before posting another series, please
review https://docs.kernel.org/process/maintainer-netdev.html,
particularly sections 1.4 and 1.6.1.

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 v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
  2026-02-09 14:31   ` Russell King (Oracle)
@ 2026-02-10 10:21     ` 李志
  2026-02-10 12:30       ` Russell King (Oracle)
  0 siblings, 1 reply; 12+ messages in thread
From: 李志 @ 2026-02-10 10:21 UTC (permalink / raw)
  To: Russell King (Oracle), Andrew Lunn
  Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	linux-stm32, linux-arm-kernel, linux-kernel, ningyu, linmin,
	pinkesh.vaghela, weishangjuan




> -----原始邮件-----
> 发件人: "Russell King (Oracle)" <linux@armlinux.org.uk>
> 发送时间:2026-02-09 22:31:28 (星期一)
> 收件人: lizhi2@eswincomputing.com, "Andrew Lunn" <andrew@lunn.ch>
> 抄送: 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, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, ningyu@eswincomputing.com, linmin@eswincomputing.com, pinkesh.vaghela@einfochips.com, weishangjuan@eswincomputing.com
> 主题: Re: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
> 
> On Mon, Feb 09, 2026 at 02:36:11PM +0100, Andrew Lunn wrote:
> > On Mon, Feb 09, 2026 at 05:46:28PM +0800, lizhi2@eswincomputing.com wrote:
> > > From: Zhi Li <lizhi2@eswincomputing.com>
> > > 
> > > v1 -> v2:
> > 
> > For version 3, please include a patch to the SoC .dtsi file adding the
> > Ethernet nodes. We like to see users of code being added.
> 
> In addition to Andrew's comments, before posting another series, please
> review https://docs.kernel.org/process/maintainer-netdev.html,
> particularly sections 1.4 and 1.6.1.
> 
Thanks for the comments.

The v3 patch will target the net git tree.

We will add the ethernet nodes and the corresponding clock node to
eic7700.dtsi and eic7700-hifive-premier-p550.dts in v3 patch. 

Please note that the EIC7700 clock controller binding and driver are not
yet merged upstream, so the clock nodes will not be functional until the
clock driver is available. As a result, dtbs_check will currently report
schema warnings/errors related to the clock nodes. This is a known and
temporary limitation until the clock binding and driver are available
upstream.

Please let us know if this approach is acceptable.

Best regards,
Zhi Li

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Re: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
  2026-02-10 10:21     ` 李志
@ 2026-02-10 12:30       ` Russell King (Oracle)
  0 siblings, 0 replies; 12+ messages in thread
From: Russell King (Oracle) @ 2026-02-10 12:30 UTC (permalink / raw)
  To: 李志
  Cc: Andrew Lunn, devicetree, andrew+netdev, davem, edumazet, kuba,
	robh, krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32,
	alexandre.torgue, linux-stm32, linux-arm-kernel, linux-kernel,
	ningyu, linmin, pinkesh.vaghela, weishangjuan

Hi,

On Tue, Feb 10, 2026 at 06:21:40PM +0800, 李志 wrote:
> > -----原始邮件-----
> > 发件人: "Russell King (Oracle)" <linux@armlinux.org.uk>
> > 发送时间:2026-02-09 22:31:28 (星期一)
> > 收件人: lizhi2@eswincomputing.com, "Andrew Lunn" <andrew@lunn.ch>
> > 抄送: 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, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, ningyu@eswincomputing.com, linmin@eswincomputing.com, pinkesh.vaghela@einfochips.com, weishangjuan@eswincomputing.com
> > 主题: Re: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
> > 
> > On Mon, Feb 09, 2026 at 02:36:11PM +0100, Andrew Lunn wrote:
> > > On Mon, Feb 09, 2026 at 05:46:28PM +0800, lizhi2@eswincomputing.com wrote:
> > > > From: Zhi Li <lizhi2@eswincomputing.com>
> > > > 
> > > > v1 -> v2:
> > > 
> > > For version 3, please include a patch to the SoC .dtsi file adding the
> > > Ethernet nodes. We like to see users of code being added.
> > 
> > In addition to Andrew's comments, before posting another series, please
> > review https://docs.kernel.org/process/maintainer-netdev.html,
> > particularly sections 1.4 and 1.6.1.
> > 
> Thanks for the comments.
> 
> The v3 patch will target the net git tree.

While it may be a fix, given that:

> We will add the ethernet nodes and the corresponding clock node to
> eic7700.dtsi and eic7700-hifive-premier-p550.dts in v3 patch. 
> 
> Please note that the EIC7700 clock controller binding and driver are not
> yet merged upstream, so the clock nodes will not be functional until the
> clock driver is available. As a result, dtbs_check will currently report
> schema warnings/errors related to the clock nodes. This is a known and
> temporary limitation until the clock binding and driver are available
> upstream.

I don't see much point to putting it in the net tree - you're addressing
problems with a driver that is currently not in a usable state in
mainline, so there's no need to rush to have this change in mainline.
I think the net-next tree will do once it re-opens after v7.0-rc1 has
been released.

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: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
  2026-02-09  9:46 [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing lizhi2
                   ` (2 preceding siblings ...)
  2026-02-09 13:36 ` [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 " Andrew Lunn
@ 2026-02-20 18:37 ` Marcel Ziswiler
  2026-02-26  3:20   ` 李志
  3 siblings, 1 reply; 12+ messages in thread
From: Marcel Ziswiler @ 2026-02-20 18:37 UTC (permalink / raw)
  To: lizhi2, devicetree, andrew+netdev, davem, edumazet, kuba, robh,
	krzk+dt, conor+dt, netdev, pabeni, mcoquelin.stm32,
	alexandre.torgue, rmk+kernel, linux-stm32, linux-arm-kernel,
	linux-kernel
  Cc: ningyu, linmin, pinkesh.vaghela, weishangjuan, dongxuyang

Hi Zhi Li

Sorry, to steal this thread, but I do have a quick question concerning Ethernet on the EIC7700. Every time I
enable gmac0 in the device tree my EBC7700 stops booting (e.g. SD card is no longer detected) while Ethernet
does seem to at least get detected. This has been seen using next-20260219, stable v6.19.2 [1] as well as
6.18.0-rc6 [2]. Any idea what could be going wrong?

I admit so far I only do have one single EBC7700 at hand while waiting for further hardware to arrive.

Thanks!

[1] https://github.com/riscv/meta-riscv/pull/601
[2] https://github.com/eswincomputing/linux-next/tree/dev/test-upstream-v6.18-rc6

Cheers

Marcel

[snip]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Re: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
  2026-02-20 18:37 ` Marcel Ziswiler
@ 2026-02-26  3:20   ` 李志
  2026-02-27  9:52     ` Marcel Ziswiler
  0 siblings, 1 reply; 12+ messages in thread
From: 李志 @ 2026-02-26  3:20 UTC (permalink / raw)
  To: Marcel Ziswiler
  Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	rmk+kernel, linux-stm32, linux-arm-kernel, linux-kernel, ningyu,
	linmin, pinkesh.vaghela, weishangjuan, dongxuyang, ganboing,
	pritesh.patel

Hi Marcel,

Thanks for sharing the details.

1. I checked your log and noticed that the kernel cmdline already includes
   "clk_ignore_unused". Therefore, your issue does not appear to be the
   same as the one previously reported by Bo Gan.

2. I also verified that v6.19.2 already contains the two eMMC fix patches:
   https://lore.kernel.org/all/CAPDyKFqcMyM-=x+2FWNLhHY=gu5ApHNPQhp0xBKDJGr7BhEx4Q@mail.gmail.com/
   https://lore.kernel.org/all/CAPDyKFrkEZDuMbGpfxismcx=vJkSSK_XbtB762+sUFocupT63w@mail.gmail.com/

   A likely cause is that the eMMC DTS node is missing the AXI clock definition.
   Please refer to the DTS updates in the following pull request for reference:
   https://github.com/eswincomputing/linux-next/pull/20

3. In addition, please check whether CONFIG_GPIO_DWAPB=y is enabled in your
   kernel configuration. Since GMAC is built-in by default, it depends on
   GPIO being available during early initialization.

Hope this helps narrow things down. Please let me know what you find.

Best regards,
Zhi Li


> -----原始邮件-----
> 发件人: "Marcel Ziswiler" <marcel@ziswiler.com>
> 发送时间:2026-02-21 02:37:57 (星期六)
> 收件人: lizhi2@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, rmk+kernel@armlinux.org.uk, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org
> 抄送: ningyu@eswincomputing.com, linmin@eswincomputing.com, pinkesh.vaghela@einfochips.com, weishangjuan@eswincomputing.com, dongxuyang@eswincomputing.com
> 主题: Re: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
> 
> Hi Zhi Li
> 
> Sorry, to steal this thread, but I do have a quick question concerning Ethernet on the EIC7700. Every time I
> enable gmac0 in the device tree my EBC7700 stops booting (e.g. SD card is no longer detected) while Ethernet
> does seem to at least get detected. This has been seen using next-20260219, stable v6.19.2 [1] as well as
> 6.18.0-rc6 [2]. Any idea what could be going wrong?
> 
> I admit so far I only do have one single EBC7700 at hand while waiting for further hardware to arrive.
> 
> Thanks!
> 
> [1] https://github.com/riscv/meta-riscv/pull/601
> [2] https://github.com/eswincomputing/linux-next/tree/dev/test-upstream-v6.18-rc6
> 
> Cheers
> 
> Marcel
> 
> [snip]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Re: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
  2026-02-26  3:20   ` 李志
@ 2026-02-27  9:52     ` Marcel Ziswiler
  0 siblings, 0 replies; 12+ messages in thread
From: Marcel Ziswiler @ 2026-02-27  9:52 UTC (permalink / raw)
  To: 李志
  Cc: devicetree, andrew+netdev, davem, edumazet, kuba, robh, krzk+dt,
	conor+dt, netdev, pabeni, mcoquelin.stm32, alexandre.torgue,
	rmk+kernel, linux-stm32, linux-arm-kernel, linux-kernel, ningyu,
	linmin, pinkesh.vaghela, weishangjuan, dongxuyang, ganboing,
	pritesh.patel

Hi Zhi Li

On Thu, 2026-02-26 at 11:20 +0800, 李志 wrote:
> Hi Marcel,
> 
> Thanks for sharing the details.
> 
> 1. I checked your log and noticed that the kernel cmdline already includes
>    "clk_ignore_unused". Therefore, your issue does not appear to be the
>    same as the one previously reported by Bo Gan.

Yes, that actually came from ESWIN's hifive-premier-p550_defconfig which I disabled now.

> 2. I also verified that v6.19.2 already contains the two eMMC fix patches:
>    https://lore.kernel.org/all/CAPDyKFqcMyM-=x+2FWNLhHY=gu5ApHNPQhp0xBKDJGr7BhEx4Q@mail.gmail.com/
>    https://lore.kernel.org/all/CAPDyKFrkEZDuMbGpfxismcx=vJkSSK_XbtB762+sUFocupT63w@mail.gmail.com/

Yes.

>    A likely cause is that the eMMC DTS node is missing the AXI clock definition.
>    Please refer to the DTS updates in the following pull request for reference:
>    https://github.com/eswincomputing/linux-next/pull/20

Ah, that one helped (;-p).

BTW: For CPU frequency scaling to actually work one may additionally need CONFIG_RISCV_SBI_CPUIDLE=y.

> 3. In addition, please check whether CONFIG_GPIO_DWAPB=y is enabled in your
>    kernel configuration. Since GMAC is built-in by default, it depends on
>    GPIO being available during early initialization.

Yes, I also changed that from =m to =y (;-p).

> Hope this helps narrow things down. Please let me know what you find.

Yes, it all works now perfectly incl. CPU frequency scaling. See [1].

Next one would be working PCIe and USB. Unfortunately, for PCIe on EBC77 one would likely need some sort of an
adapter cable/PCB. Maybe I can solder something together. Let's see...

Thank you very much!

[1] https://github.com/riscv/meta-riscv/pull/602

> Best regards,
> Zhi Li

Cheers

Marcel

> > -----原始邮件-----
> > 发件人: "Marcel Ziswiler" <marcel@ziswiler.com>
> > 发送时间:2026-02-21 02:37:57 (星期六)
> > 收件人: lizhi2@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,
> > rmk+kernel@armlinux.org.uk, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org,
> > linux-kernel@vger.kernel.org
> > 抄送: ningyu@eswincomputing.com, linmin@eswincomputing.com, pinkesh.vaghela@einfochips.com,
> > weishangjuan@eswincomputing.com, dongxuyang@eswincomputing.com
> > 主题: Re: [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing
> > 
> > Hi Zhi Li
> > 
> > Sorry, to steal this thread, but I do have a quick question concerning Ethernet on the EIC7700. Every time
> > I
> > enable gmac0 in the device tree my EBC7700 stops booting (e.g. SD card is no longer detected) while
> > Ethernet
> > does seem to at least get detected. This has been seen using next-20260219, stable v6.19.2 [1] as well as
> > 6.18.0-rc6 [2]. Any idea what could be going wrong?
> > 
> > I admit so far I only do have one single EBC7700 at hand while waiting for further hardware to arrive.
> > 
> > Thanks!
> > 
> > [1] https://github.com/riscv/meta-riscv/pull/601
> > [2] https://github.com/eswincomputing/linux-next/tree/dev/test-upstream-v6.18-rc6
> > 
> > Cheers
> > 
> > Marcel
> > 
> > [snip]

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-02-27  9:59 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-09  9:46 [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 RX sampling timing lizhi2
2026-02-09  9:48 ` [PATCH v2 1/2] dt-bindings: ethernet: eswin: add clock sampling control lizhi2
2026-02-09 13:21   ` Andrew Lunn
2026-02-09  9:48 ` [PATCH v2 2/2] net: stmmac: eic7700: enable clocks before syscon access and correct RX sampling timing lizhi2
2026-02-09 13:34   ` Andrew Lunn
2026-02-09 13:36 ` [PATCH v2 0/2] net: stmmac: eic7700: fix EIC7700 eth1 " Andrew Lunn
2026-02-09 14:31   ` Russell King (Oracle)
2026-02-10 10:21     ` 李志
2026-02-10 12:30       ` Russell King (Oracle)
2026-02-20 18:37 ` Marcel Ziswiler
2026-02-26  3:20   ` 李志
2026-02-27  9:52     ` Marcel Ziswiler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox