Rock 5A - Armbian Rockchip Current - Top Board Never Operates - No Display or Fan Control

I have a problem with the Penta SATA Hat Top Board, per post title. I’d suppose this combination to be a standard configuration - I even have the Radxa NAS case and power-supply to support this!

I’m experienced with setting this up on other Radxa/Armbian combos. I have a Top Board working as expected on a Rock Pi 4c with Armbian current, functioning with pwmset, etc.

Host: Radxa ROCK 5A
OS: Armbian 25.11.2 trixie aarch64
Kernel: Linux 6.12.0-current-rockchip-rk3588
Memory: 15.60 GiB

/boot/armbianENV.txt :

verbosity=1
bootlogo=false
console=both
extraargs=cma=256M
overlay_prefix=rockchip-rk3588
fdtfile=rockchip/rk3588s-rock-5a.dtb
rootdev=UUID=8e68c744-b592-4a9b-b425-5e6b52b6aabe
rootfstype=btrfs
overlays= rk3588-i2c8-m2 rockchip-rk3588-pwm0-m0.dtbo rk3588-pwm14-m1
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

/etc/rockpi-penta.env :

SDA=I2C8_SDA_M4
SCL=I2C8_SCL_M4
OLED_RESET=GPIO1_A5
PWMCHIP=14
BUTTON_CHIP=4
BUTTON_LINE=11
HARDWARE_PWM=1

It SEEMS like I’m missing a necessary overlay. The two relevant overlays loaded are rk3588-pwm0-m0.dtbo` and `rk3588-pwm14-m1 The rockpi-penta.env for Rock 5A sets PWMCHIP value at 14. — but /sys/class/pwm/pwmchip14/ doesn’t exist.

The Rock 5A fails consistently, regardless of PWMCHIP values, 0, 1, or 14, in /etc/rockpi-penta.env.

In troubleshooting I have installed and purged both v0.2.2 and v0.2.3 releases of rockpi-penta .deb, and pulled the development branch from git - all to same effect.

The failure is with a system device path, calling fan.py from main.py. This happens when called from a systemd unit file, and when run directly.

The path is ‘/sys/class/pwm/pwmchip0/pwm0/period’. This doesn’t exist on my installation.

$ sudo systemctl status rockpi-penta.service
○ rockpi-penta.service - Rockpi SATA Hat
     Loaded: loaded (/usr/lib/systemd/system/rockpi-penta.service; enabled; preset: enabled)
     Active: inactive (dead) since Tue 2026-01-06 12:09:55 PST; 9s ago
   Duration: 268ms
 Invocation: c5fc79e90511457786e4baa682276102
    Process: 3872 ExecStart=/usr/bin/python3 /usr/bin/rockpi-penta/main.py (code=exited, status=0/SUCCESS)
   Main PID: 3872 (code=exited, status=0/SUCCESS)
   Mem peak: 13.4M
        CPU: 238ms

Jan 06 12:09:55 nocloud python3[3872]:     ~~~~~~~~~~~~~^^^^
Jan 06 12:09:55 nocloud python3[3872]:   File "/usr/bin/rockpi-penta/fan.py", line 36, in period_us
Jan 06 12:09:55 nocloud python3[3872]:     self.period(us * 1000)
Jan 06 12:09:55 nocloud python3[3872]:     ~~~~~~~~~~~^^^^^^^^^^^
Jan 06 12:09:55 nocloud python3[3872]:   File "/usr/bin/rockpi-penta/fan.py", line 32, in period
Jan 06 12:09:55 nocloud python3[3872]:     with open(os.path.join(self.filepath, 'period'), 'w') as f:
Jan 06 12:09:55 nocloud python3[3872]:          ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jan 06 12:09:55 nocloud python3[3872]: FileNotFoundError: [Errno 2] No such file or directory: '/sys/class/pwm/pwmchip0/pwm0/period'
Jan 06 12:09:55 nocloud python3[3872]: Waring: init pwm error
Jan 06 12:09:55 nocloud systemd[1]: rockpi-penta.service: Deactivated successfully.

My /sys/class/pwm/pwmchip0/ contains the following, with no ‘pwm0’ node:

$ tree /sys/class/pwm/pwmchip0/
/sys/class/pwm/pwmchip0/
├── device -> ../../../fd8b0030.pwm
├── export
├── npwm
├── power
│   ├── autosuspend_delay_ms
│   ├── control
│   ├── runtime_active_time
│   ├── runtime_status
│   └── runtime_suspended_time
├── subsystem -> ../../../../../class/pwm
├── uevent
└── unexport

Many thanks in assistance and guidance.

You shouldn’t write the overlay prefix again when specifying the overlays in the line “overlays=”. You also need to make sure the prefix matches the actual filenames.

1 Like

Thanks for the hint in straightening out the uboot arguments for loading dtb overlays:
overlays=i2c8-m2 pwm0-m0 pwm14-m0

The good news is I now have /sys/class/pwm/pwmchip1. Unfortunately the tree under pwmchip0 is unchanged, and the new pwmchip1 is identical in hierarchy and nodes.

Does the fanctrl dtbo need to be loaded?

But do the filenames match exactly? You had “rockchip” in one name and no rockchip in the others. Maybe you are missing some overlays from the filesystem?

I wish this were the case. The dtbo files are all on path /boot/dtb/rockchip/overlay/
The names, minus the prefix specified in armbianEnv.txt are now matches.
Evidence of this is the new pwmchip1 entry under the /sys fs, after making the change.

OK, I have the same overlays in the folder. Not sure any more. Maybe you could decompile them and ask an LLM why something doesn’t work, at least until Radxa responds.

1 Like

Hahaha! Not a completely terrible idea.
I’ve used GPT5 to figure out the intractable parts of amd64 to arm64 ports before. I got to a complete compile and build.