[PATCH v4 0/4] arm64: dts: rockchip: Add FriendlyElec NanoPi R28S
From: 安容 via B4 Relay
Date: Fri Sep 11 2026 - 06:11:40 EST
The NanoPi R28S is a dual gigabit Ethernet router board based on the
Rockchip RK3528 SoC:
https://wiki.friendlyelec.com/wiki/index.php/NanoPi_R28S
It is closely related to the already supported NanoPi Zero2, sharing
most of its power tree and peripheral routing. Patch 2 therefore moves
the common parts into rk3528-nanopi.dtsi, and patch 3 adds the board on
top of it. The split leaves the NanoPi Zero2 dtb unchanged; I verified
this by decompiling the dtb before and after the split and comparing
them with the phandle numbering normalised. Patch 4 is a coding style
cleanup across the three NanoPi RK3528 devicetrees.
The devicetree was derived from the vendor tree:
https://github.com/friendlyarm/kernel-rockchip/commit/ee640c5344b13a0a317436e2357df01af8268ce7
but with many changes to make it suitable for mainline.
Tested on a metal-case unit without the optional onboard eMMC: boots
from microSD, both Ethernet ports link up at 1000 Mbps, the HYM8563 RTC
registers, and all three LEDs are functional. The USB Type-C connector
registers as a DWC3 UDC in peripheral mode; gadget enumeration against
a USB host was not completed, because that connector is also the 5V
input and a PC port cannot power the board.
The bootloader was U-Boot 2026.07 with a board specific R28S target,
which releases the RGMII PHY reset before Linux starts, so the reset
description in the PHY node is all the kernel needs.
Two things I did not do, because my hardware cannot verify them:
- The AICSemi AIC8800D80 WiFi chip on sdio0 has no upstream driver, so
only the SDIO controller is described.
- The eMMC is described as HS200 rather than the vendor's HS400 with
enhanced strobe, since the board at hand has an unpopulated eMMC
footprint and the faster modes could not be verified.
---
Changes in v4:
- Dropped the patch that moved the NanoPi Zero2 RGMII PHY reset to the
MDIO bus. GPIO4_C2 resets the PHY, not the bus, so describing it on
&mdio1 is not a description of the hardware. It would also break
Ethernet in U-Boot, which reads reset-gpios, reset-assert-us and
reset-deassert-us from the PHY node and has no support for a bus
level reset. The nanopi-zero2-rk3528 U-Boot target releases the PHY
reset before Linux starts; the failure I reported was seen with the
generic-rk3528 target, which carries no board devicetree. Pointed out
by Chukun Pan, and by Jonas Karlman in the same discussion for the
HINLINK H28K:
https://lore.kernel.org/lkml/1e8da54f-ef87-4d31-9a0a-17c0ff66bee0@xxxxxxxxx/
My own R28S has in fact been running a board specific U-Boot target
all along, with the PHY node description this series now keeps, so
the reset ordering problem I described does not arise there.
- Reworded the coding style patch to state the coding style violation
itself as the reason, rather than the tool that found it (Diederik de
Haas).
- Link to v3: https://patch.msgid.link/20260909-r28s-upstream-v3-0-ee3e1a34a353@xxxxxxxxx
Changes in v3:
- New patch 1: describe the NanoPi Zero2 RGMII PHY reset on the MDIO
bus rather than in the PHY node, so that it is applied before the PHY
ID is read. A PHY held in reset by the bootloader was otherwise never
probed, leaving the port dead. Reported by Andrey Korshunov, who
proposed the deprecated snps,reset-gpio properties on the MAC; the
bus level reset-gpios in mdio.yaml fixes the same ordering without a
deprecated property.
- New patch 5: follow the DTS coding style in the three NanoPi RK3528
devicetrees, as found by scripts/dtc/dt-check-style --mode=strict:
pinctrl-0 before pinctrl-names, and a blank line before status.
Suggested by Diederik de Haas.
- Picked up Conor Dooley's Acked-by on the binding.
- Link to v2: https://patch.msgid.link/20260907-r28s-upstream-v2-0-21ab570fc91c@xxxxxxxxx
Changes in v2:
- Split the parts shared with the NanoPi Zero2 into a new
rk3528-nanopi.dtsi (new patch 2). The NanoPi Zero2 dtb is unchanged.
- Name the pinctrl labels after the nets in the schematic: usr_btn,
led1, led2, led_sys, pwr_wf and pcie_eth_perstb.
- Rename the button node to button-user and its label to "USER".
- Link to v1: https://patch.msgid.link/20260905-r28s-upstream-v1-0-f68d5389269a@xxxxxxxxx
---
安容 (4):
dt-bindings: arm: rockchip: Add FriendlyElec NanoPi R28S
arm64: dts: rockchip: Split out the common NanoPi RK3528 parts
arm64: dts: rockchip: Add devicetree for the FriendlyElec NanoPi R28S
arm64: dts: rockchip: Follow the DTS coding style in the NanoPi RK3528 devicetrees
.../devicetree/bindings/arm/rockchip.yaml | 5 +
arch/arm64/boot/dts/rockchip/Makefile | 1 +
.../arm64/boot/dts/rockchip/rk3528-nanopi-r28s.dts | 145 +++++++++++
.../boot/dts/rockchip/rk3528-nanopi-zero2.dts | 274 +------------------
arch/arm64/boot/dts/rockchip/rk3528-nanopi.dtsi | 289 +++++++++++++++++++++
5 files changed, 443 insertions(+), 271 deletions(-)
---
base-commit: 32e0f64640d558a0f5410ac5cdd8ebf371c5e6a6
change-id: 20260905-r28s-upstream-e212e27d6165
Best regards,
--
安容 <HystericalDragons@xxxxxxxxx>