With Claude code help :
ROCK 3B: Fixing eth1 “Failed to reset the dma” on Mainline Kernel 6.x
Problem Description
When running mainline Linux kernel 6.x (tested with 6.19-rc5) on Radxa ROCK 3B, the second Ethernet port (eth1) fails to initialize with:
rk_gmac-dwmac fe2a0000.ethernet eth1: Failed to reset the dma
rk_gmac-dwmac fe2a0000.ethernet eth1: stmmac_hw_setup: DMA engine initialization failed
rk_gmac-dwmac fe2a0000.ethernet eth1: __stmmac_open: Hw setup failed
Symptoms:
- eth0 works fine
- eth1 PHY detected (RTL8211F) but interface fails to come up
ip link set eth1 up returns “Connection timed out”
- Vendor kernel 5.10 works perfectly with both ports
Root Cause
The issue is NOT a Device Tree problem - it’s a U-Boot PHY reset issue.
The RTL8211F Ethernet PHYs require proper reset sequencing before Linux boots. Vendor U-Boot (or U-Boot built for ROCK 3A) does not properly reset the second PHY, causing the mainline stmmac driver to fail DMA initialization.
This was confirmed by Kwiboo (Jonas Karlman), who upstreamed ROCK 3B support to U-Boot and Linux:
“Use mainline U-Boot on any board with RTL8211F Ethernet PHYs for mainline Linux. Make sure you use a build for your board or you will have Ethernet issues in Linux, i.e. use a ROCK 3A image for 3B and you will only have one Ethernet port working.”
References:
Solution: Build and Flash Mainline U-Boot for ROCK 3B
Prerequisites
sudo apt install -y build-essential gcc-aarch64-linux-gnu bison flex \
libssl-dev python3-dev python3-pyelftools python3-setuptools \
swig device-tree-compiler bc git
Build Steps
mkdir -p ~/uboot-rock3b && cd ~/uboot-rock3b
# 1. ARM Trusted Firmware
git clone --depth 1 https://github.com/ARM-software/arm-trusted-firmware.git
cd arm-trusted-firmware
make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3568 bl31
export BL31=$(pwd)/build/rk3568/release/bl31/bl31.elf
cd ..
# 2. Rockchip DDR Binary
git clone --depth 1 https://github.com/rockchip-linux/rkbin.git
export ROCKCHIP_TPL=$(pwd)/rkbin/bin/rk35/rk3568_ddr_1560MHz_v1.23.bin
# 3. Mainline U-Boot
git clone --depth 1 https://source.denx.de/u-boot/u-boot.git
cd u-boot
# IMPORTANT: Use rock-3b defconfig, NOT rock-3a!
make CROSS_COMPILE=aarch64-linux-gnu- rock-3b-rk3568_defconfig
make CROSS_COMPILE=aarch64-linux-gnu- BL31=$BL31 ROCKCHIP_TPL=$ROCKCHIP_TPL -j$(nproc)
Flash to SPI
BACKUP FIRST!
# Backup
sudo dd if=/dev/mtdblock0 of=~/spi-backup-$(date +%Y%m%d).bin bs=4M
# Flash
sudo dd if=u-boot-rockchip-spi.bin of=/dev/mtdblock0 bs=4K
sync && sudo reboot
Results
After mainline U-Boot:
U-Boot 2026.04-rc1
Model: Radxa ROCK 3B
Net: eth1: ethernet@fe010000, eth0: ethernet@fe2a0000
In Linux - both ports working at 1Gbps! 
[ 13.623312] rk_gmac-dwmac fe010000.ethernet eth0: Link is Up - 1Gbps/Full
[ 13.972066] rk_gmac-dwmac fe2a0000.ethernet eth1: Link is Up - 1Gbps/Full
Additional Notes
NVMe Support
If NVMe isn’t detected, ensure your DTS has:
&pcie3x2 {
vpcie3v3-supply = <&vcc3v3_sys2>;
};
Recovery Options
- Boot from SD card (flash u-boot-rockchip.bin at sector 64)
- Maskrom mode + rkdeveloptool
- Restore backup:
sudo dd if=~/spi-backup-*.bin of=/dev/mtdblock0 bs=4K
Final Configuration
| Component |
Status |
| eth0 |
1Gbps |
| eth1 |
1Gbps |
| WiFi (Intel 7265) |
Working |
| NVMe |
Working |
| U-Boot |
Mainline 2026.04-rc1 |
| Kernel |
Mainline 6.19-rc5 |
Credits
- @Kwiboo (Jonas Karlman) - For upstreaming ROCK 3B support and explaining the RTL8211F PHY reset issue
- Armbian/DietPi community - For documenting the issue
Links
Tested on: Radxa ROCK 3B 8GB, Debian 11, Mainline Kernel 6.19-rc5
I could have done this sooner if I had followed @Kwiboo’s advice

What’s left to do
HDMI & NPU, but I’ve got the power supply chip pins (for the HDMI ) damaged on my board, I’ll have to do some soldering first. I’ll keep you updated.