<?xml version="1.0"?>
<rss version="2.0"><channel><title>Nanopi M5 Latest Topics</title><link>https://forum.armbian.com/forum/285-nanopi-m5/</link><description>Nanopi M5 Latest Topics</description><language>en</language><item><title>NanoPi M5 (RK3576): gigabit RX broken due to double RGMII delay in DTB</title><link>https://forum.armbian.com/topic/59912-nanopi-m5-rk3576-gigabit-rx-broken-due-to-double-rgmii-delay-in-dtb/</link><description><![CDATA[<p>
	**Board:** NanoPi M5 (RK3576)<br />
	**Kernel:** 6.18.33-current-rockchip64 (#1 SMP PREEMPT Sat May 23 11:07:21 UTC 2026)<br />
	**Armbian build:** v26.8.0-trunk.53
</p>

<p>
	## Problem
</p>

<p>
	Gigabit RX is completely non-functional on `end0` (GMAC0, `ethernet@2a220000`). The interface comes up at 1000Mb/s, TX works, but no packets are ever received. DHCP never gets an OFFER, `ethtool -S end0` shows RX counters stuck at zero.
</p>

<p>
	Forcing 100Mb/s via `ethtool -s end0 speed 100 duplex full autoneg off` works around the issue — RX starts working immediately.
</p>

<p>
	## Root cause
</p>

<p>
	The <abbr title="Device tree blob">DTB</abbr> sets `phy-mode = "rgmii-id"` together with `rx_delay = &lt;0x3f&gt;`. The RTL8211F PHY in `-id` mode already applies its own internal RX delay, and the driver applies an additional hardware delay on top of it. The double delay breaks gigabit RX entirely.
</p>

<p>
	```<br />
	# /boot/<abbr title="Device tree blob">dtb</abbr>/rockchip/rk3576-nanopi-m5.<abbr title="Device tree blob">dtb</abbr> — broken<br />
	phy-mode = "rgmii-id";<br />
	tx_delay = &lt;0x21&gt;;<br />
	rx_delay = &lt;0x3f&gt;;   # &lt;-- causes double RX delay<br />
	```
</p>

<p>
	## Fix
</p>

<p>
	Change `phy-mode` to `rgmii-rxid` (PHY applies RX delay internally) and remove `rx_delay`. This applies to both GMAC0 (`ethernet@2a220000`) and GMAC1 (`ethernet@2a230000`).
</p>

<p>
	```<br />
	# Fixed<br />
	phy-mode = "rgmii-rxid";<br />
	tx_delay = &lt;0x21&gt;;<br />
	# rx_delay removed<br />
	```
</p>

<p>
	After applying this fix gigabit works correctly at 1000Mb/s with full RX functionality.
</p>

<p>
	## Workaround
</p>

<p>
	```bash<br />
	ethtool -s end0 speed 100 duplex full autoneg off<br />
	```
</p>

<p>
	Or patch the <abbr title="Device tree blob">DTB</abbr> manually:
</p>

<p>
	```bash<br />
	<abbr title="Device tree compiler">dtc</abbr> -I <abbr title="Device tree blob">dtb</abbr> -O <abbr title="Device tree source">dts</abbr> -o /tmp/nanopi.<abbr title="Device tree source">dts</abbr> /boot/<abbr title="Device tree blob">dtb</abbr>/rockchip/rk3576-nanopi-m5.<abbr title="Device tree blob">dtb</abbr><br />
	sed -i 's/phy-mode = "rgmii-id"/phy-mode = "rgmii-rxid"/g' /tmp/nanopi.<abbr title="Device tree source">dts</abbr><br />
	sed -i '/rx_delay/d' /tmp/nanopi.<abbr title="Device tree source">dts</abbr><br />
	<abbr title="Device tree compiler">dtc</abbr> -I <abbr title="Device tree source">dts</abbr> -O <abbr title="Device tree blob">dtb</abbr> -o /boot/<abbr title="Device tree blob">dtb</abbr>/rockchip/rk3576-nanopi-m5.<abbr title="Device tree blob">dtb</abbr> /tmp/nanopi.<abbr title="Device tree source">dts</abbr><br />
	reboot<br />
	```
</p>
]]></description><guid isPermaLink="false">59912</guid><pubDate>Tue, 26 May 2026 01:01:21 +0000</pubDate></item></channel></rss>
