mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Oleksij Rempel <o.rempel@pengutronix.de>
To: barebox@lists.infradead.org, david@protonic.nl
Cc: Oleksij Rempel <o.rempel@pengutronix.de>
Subject: [PATCH v5 09/12] ARM: dts: protonic: add fixed clock for the FEC node
Date: Thu, 20 Aug 2020 09:34:51 +0200	[thread overview]
Message-ID: <20200820073454.17500-10-o.rempel@pengutronix.de> (raw)
In-Reply-To: <20200820073454.17500-1-o.rempel@pengutronix.de>

Add fixed clock for the FEC nodes to workaround HW TX checksum issues in
case a PHY is used as the clock source for RMII connection.

By default the FEC node is using 3 clock sources, one of which is named
"ptp" clock. If ptp clock has same source as "enet_ref" clock, then the
ENET_REF_CLK input will become output. See [1].

The default configuration will work only if iMX is the clock provider
for the PHY chip. In case PHY has own XTAL, then the PHY should be used as
clock provider for the iMX/FEC.

In case "ptp" clock is removed, the PHY clock will be used and most of
communication will work as expected. But will trigger other issue - the
HW generated checksums for UDP and TCP packets will be zero. It is
kernel specific issue, not reproducible on barebox.

Since, currently, most of PHY drivers are not defined as clock provider, we
should define dummy fixed clock and use it. This workaround is used in
some other devicetrees [2]. But it may imply the next hidden issue - the
PHY can be suspended, reseted or reconfigured any time and this may add
clock glitches on the ENET_REF_CLK line and put FEC in undefined state.

[1] https://elixir.bootlin.com/linux/latest/source/arch/arm/mach-imx/mach-imx6q.c#L164
[2] https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/imx6dl-eckelmann-ci4x10.dts#L300

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 arch/arm/dts/imx6dl-lanmcu.dts | 11 +++++++++--
 arch/arm/dts/imx6dl-plym2m.dts | 11 +++++++++--
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/arch/arm/dts/imx6dl-lanmcu.dts b/arch/arm/dts/imx6dl-lanmcu.dts
index 06d47bdc0d..65f6cbf395 100644
--- a/arch/arm/dts/imx6dl-lanmcu.dts
+++ b/arch/arm/dts/imx6dl-lanmcu.dts
@@ -97,6 +97,12 @@
 			linux,default-trigger = "heartbeat";
 		};
 	};
+
+	clk50m_phy: phy_clock {
+		compatible = "fixed-clock";
+		#clock-cells = <0>;
+		clock-frequency = <50000000>;
+	};
 };
 
 &iomuxc {
@@ -304,8 +310,9 @@
 	phy-mode = "rmii";
 	phy-reset-gpios = <&gpio5 22 GPIO_ACTIVE_LOW>;
 	clocks = <&clks IMX6QDL_CLK_ENET>,
-		 <&clks IMX6QDL_CLK_ENET>;
-	clock-names = "ipg", "ahb";
+		 <&clks IMX6QDL_CLK_ENET>,
+		 <&clk50m_phy>;
+	clock-names = "ipg", "ahb", "ptp";
 	status = "okay";
 };
 
diff --git a/arch/arm/dts/imx6dl-plym2m.dts b/arch/arm/dts/imx6dl-plym2m.dts
index 335cb6f342..d04137e282 100644
--- a/arch/arm/dts/imx6dl-plym2m.dts
+++ b/arch/arm/dts/imx6dl-plym2m.dts
@@ -27,6 +27,12 @@
 			linux,default-trigger = "heartbeat";
 		};
 	};
+
+	clk50m_phy: phy_clock {
+		compatible = "fixed-clock";
+		#clock-cells = <0>;
+		clock-frequency = <50000000>;
+	};
 };
 
 &ecspi1 {
@@ -50,8 +56,9 @@
 	phy-mode = "rmii";
 	phy-reset-gpios = <&gpio5 22 GPIO_ACTIVE_LOW>;
 	clocks = <&clks IMX6QDL_CLK_ENET>,
-		 <&clks IMX6QDL_CLK_ENET>;
-	clock-names = "ipg", "ahb";
+		 <&clks IMX6QDL_CLK_ENET>,
+		 <&clk50m_phy>;
+	clock-names = "ipg", "ahb", "ptp";
 	status = "okay";
 };
 
-- 
2.28.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2020-08-20  7:35 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-20  7:34 [PATCH v5 00/12] prepare Protonic board code for mainline Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 01/12] of: base: register DT root as device Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 02/12] gpiolib: add gpio_array_to_id helper to get ID out of GPIO array Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 03/12] common: console_common: add of_console_get_by_alias() helper Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 04/12] of: of_device_get_match_compatible() helper Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 05/12] ARM: protonic-imx6: port Protonic specific board code Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 06/12] ARM: dts: unify barebox and barebox, env partitions for all Protonic boards Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 07/12] ARM: dts: imx6q-prti6q: add pstore/ramoops node Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 08/12] ARM: dts: protonic: lanmcu: add eMMC partition table Oleksij Rempel
2020-08-20  7:34 ` Oleksij Rempel [this message]
2020-08-20  7:34 ` [PATCH v5 10/12] ARM: dts: protonic: lanmcu: use UART_CTS instead of GPIO based CTS Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 11/12] ARM: dts: protonic: properly define PHY nodes on lanmcu and plym2m boards Oleksij Rempel
2020-08-20  7:34 ` [PATCH v5 12/12] ARM: dts: protonic: lanmcu: add uart-has-rtscts to enable rs485 functionality Oleksij Rempel
2020-08-24  6:51 ` [PATCH v5 00/12] prepare Protonic board code for mainline Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200820073454.17500-10-o.rempel@pengutronix.de \
    --to=o.rempel@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=david@protonic.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox