Arch R v2.0 RC-3
Major release focused on CPU performance, graphics stack maturity, and system reliability. Built as official image on 2026-04-29, validated on real R36S hardware (V21 board) across the full v2-v27 internal build series.
CPU Overclock toggle — 1.4 GHz → 1.5 GHz on demand
A new Enable CPU Overclock switch in the ES menu (System Settings → Performance) lifts the cap from 1416 MHz to 1512 MHz when you need it. Default is OFF — cooler, longer battery life. Flip it on for PSP / Dreamcast / box86 ports that want every Hz.
Behind the scenes:
- DT OPP 1512 MHz validated stable at 1.4 V (BSP default 1.35 V was unreliable on some chips)
vdd_armregulator-max raised 1.35 V → 1.45 V (RK817 DCDC_REG2 spec is 0.7-1.5 V) — without this the kernel rejects the OPP silentlyset_cpu_max_freq highestreads scaling_available + scaling_boost frequencies — turbo OPPs hide in the second file even aftercpufreq/boost=1/usr/bin/turbomoderewritten — no longer forces governor=performance on every toggle
GPU stack
- Mesa 26.0.5 with
+speed +ltobuild flags - 7 drm-panfrost patches backported from mainline (SYSTEM_TIMESTAMP, cycle counter, BO labelling) — required by Mesa 26 for
GL_TIMESTAMPandVK_KHR_calibrated_timestamps - GPU OPP 650 MHz turbo at 1.150 V (same voltage as 600 MHz — the BSP value of 1.175 V was triggering reboots on some chips)
mali_kbasePM patch (002-fix-unbalanced-regulator-clk-pm) — eliminatesunbalanced disables for vdd_logicandEnabling unprepared clk_gpuwarnings, fixes audio crackle in Mario 64gpudriver --startauto-fallback — if Panfrost or libmali fails to bind, the script switches to the other driver so you always get a graphical systemMESA_GLTHREADper-emulator whitelist — enabled on Flycast and PPSSPP standalone (GPU-bound + multi-threaded internally), kept off elsewhere to avoid regressing fence-heavy 2D libretro cores
Performance
zlib-ng 2.2.4as drop-in forzlib(libz.so.1ABI preserved) — NEON SIMD inflate/deflate, ~10-30 % faster ROM zip extraction on Cortex-A35- CMA raised 64 → 96 MB —
CmaFreewas 8 MB at idle on 64 MB (87 % used), V4L2 and Mali surface allocations were tight; now ~30 MB free - KSM paused during gameplay —
runemu.shsaves/sys/kernel/mm/ksm/run, sets to 0, restores on exit. Eliminates p99 frametime spikes from KSM scanning on Cortex-A35 in-order - CPU governor + boost restore on game exit —
quit()is defensive (falls back toondemandifsystem.cpugovernoris empty); turbo state is persisted per the user's switch
Boot reliability
archr-autostart.serviceTimeoutStartSec=60s— if any quirk script hangs, emustation comes up anyway instead of blocking foreverdrm_tool listwith 10 s timeout in055-hdmi-check— was a known cause of intermittent boot stalls on slow microSDs- Persistent boot trace at
/storage/.boot_last_stepand/storage/.boot_last_hang— if your device ever hangs at boot, after the next successful bootcat /storage/.boot_last_hangnames the script that hung. Useful for bug reports.
Emulator tuning
- GBA:
gpspdefault on RK3326 (was mGBA — too heavy for A35); mGBA stays as accuracy alternative - GameCube / Wii / Wiiware hidden from ES on RK3326 — Cortex-A35 doesn't run them at usable framerates, the menu now reflects that honestly
gptokeybkill made defensive in 5 standalone start scripts (drastic, flycast, melonds, dolphin_gc, dolphin_wii) — no more spurious errors whenpidofreturns empty- PPSSPP, Flycast, DuckStation, Mupen64Plus defaults retuned per RK3326 — see docs.archr.io/configure for the full matrix
Network
- VPN service auto-pause during gameplay — Tailscale, ZeroTier, WireGuard, simple-http-server all suspended on game launch, resumed on exit. No CPU contention, no WiFi airtime competition
ConditionPathExists=added tosyncthing,tailscaled,zerotier-one,simple-http-server— opt-in services don't accidentally start without the toggle filesystemd-timesyncdpoll preguiçoso —PollIntervalMaxSec=86400(24 h), daemon idles after first sync and gets paged out of RAM
PortMaster
Python3+xzas explicit dependencies — PortMaster GUI (harbourmaster) needsimport lzma; previously implicit and could failstart_portmaster.shmade idempotent —rm -rf+ existence guards, no more "directory not empty" errors on second run- udev rule
91-uinput.rules—/dev/uinputmode 0666, sogptokeybworks under thearchruser without manual chmod per port
Bug fixes
fs-resizecorruption — earlier RC3 internal builds tried to "modernize" the BOOT FAT (4 KB clusters,fsck.fat -a -wafterfatlabel) and ended up triggering "Filesystem corruption has been detected!" on the device. Reverted to the v22 baseline that ships clean- gpudriver typo (
DTB_OVERLAY=""→DTB_OVERLAY_LOAD="") caused brick when the user picked Panfrost on devices without an overlay runemu.shexit governor — was leaving CPU pinned atperformanceafter game exit whensystem.cpugovernorwas unset- DT patch hunk count corrected — a wrong
@@header was makingpatchsilently drop subsequent hunks (thedmcnode was missing in v10 builds)
Documentation
- Website (https://arch-r.io) reorganised: 17 docs across 5 sections, including new guides for ROMs, Controls, PortMaster, SSH, Samba, Netplay, RetroAchievements, Cloud Sync (Syncthing + rclone + NFS), VPN, Themes, Shaders, HDMI, CPU Overclock, GPU driver
- Light theme added to the website (toggle in the nav bar)
- SEO baseline — sitemap, robots.txt, OG images, JSON-LD (Organization + WebSite + SoftwareApplication)
Installation
Download the image for your R36S variant and flash it using Arch R Flasher v1.3.0 or any SD card imaging tool.
- R36S Original:
ArchR-R36S.aarch64-20260429-RC3-original.img.gz - R36S Clone (K36, EE Clone, Powkiddy RGB10/RGB10X/RGB20S, MagicX XU-Mini-M, BatLexp G350):
ArchR-R36S.aarch64-20260429-RC3-clone.img.gz - R36S Soysauce (Y3506-based hardware): use the original image; the Flasher selects the correct soysauce panel overlay automatically
Checksums (SHA-256)
ArchR-R36S.aarch64-20260429-RC3-original.img.gz
ArchR-R36S.aarch64-20260429-RC3-clone.img.gz
Report issues at https://github.com/archr-linux/Arch-R/issues