github archr-linux/Arch-R v2.0-rc4
Arch R v2.0 RC-4

4 hours ago

Arch R v2.0 RC-4

Release candidate focused on panel overlay coverage, joypad compatibility, GPU driver robustness, Soysauce audio and boot time. Built as official image on 2026-05-26, follows the v2.0 RC-3 line.

MIPI panel overlay generator (major)

The internal archr-dtbo.py script that produces panel overlays from a stock vendor DTB was rewritten end to end. It now extracts every hardware knob we have seen vary across the 44 vendor DTBs we ship, not just panel timings:

  • Joypad wiring propagation: amux-a-gpios, amux-b-gpios, amux-en-gpios pin numbers (vendor wiring differs between original, clone and soysauce boards), per-button gpios for sw1..sw22, plus button-adc-deadzone, button-adc-fuzz, button-adc-flat when the vendor diverges from our defaults
  • rumble-gpio propagation for the clone batches that expose it explicitly (the R36S V20 2025-05-18 batch and the GR36). Without this the motor defaults to "on" on those boards and vibrates continuously through every boot
  • Panel LED GPIO handlers wired up (led-red-gpios, led-green-gpios, led-blue1-gpios, led-blue2-gpios) and whitelisted. No vendor DTB in the current ship set declares these yet, so the path is dormant for now but in place for the next board revision that needs them
  • Tier 3 auto-discovery walks any vendor property that is not on a known whitelist, propagates safely if it looks safe, logs a skip otherwise. The PMIC regulators are explicitly blacklisted so vendor settings cannot override our vdd_arm regulator-max raise (1.45 V) that the 1.5 GHz CPU OPP depends on
  • Original vs clone odroidgo3 detection: DTBO generation now picks the right joypad driver binding based on board topology, not a hardcoded compat string. Several clone vendor DTBs (G80CA V1.2 batches) ship with the rockchip,rk3326-odroidgo3-linux compat string from the BSP despite being clones; the audit logic now disambiguates by topology

The generator also ships as a free in-browser tool at https://arch-r.io/overlay-generator. Users with an unsupported clone can upload their stock DTB, the page extracts everything via Pyodide and gives back a mipi-panel.dtbo ready to drop into the SD card. Nothing leaves the browser.

Cross-distro panel and joypad compatibility

Two new kernel-side accept patches let an ArchR image consume overlays produced by ROCKNIX out of the box:

  • panel-generic-dsi.c accepts both archr,generic-dsi and rocknix,generic-dsi compatible strings. ROCKNIX-generated panel overlays bind on ArchR without modification, and vice-versa for any overlay declaring our compat
  • archr-joypad driver accepts rocknix,joypad via a small accept patch, so ROCKNIX joypad overlays enumerate the buttons through our driver

This is symmetric on purpose: overlays move freely between the two distros for the same hardware.

New hardware support

  • Y3506 V04 2528 (soysauce variant): full device tree (Y3506_V04_20250529 2528), panel overlay set (6 dtbos covering JPk36/JPmm and SRs combos) and verification on real silicon
  • Micro-gamepad compatibility added to the archr-joypad driver via linux/0002-accept-micro-gamepad-compatible.patch; handheld variants with the reduced micro-gamepad button layout now enumerate correctly
  • GamePark GP32: emulator added to EmulationStation. ROMs land in /storage/roms/gp32 (.smc, .zip, .7z); the libretro mame core handles the system

Soysauce audio: speaker now actually works

Reported by the community on the V05 batches but applies to every Y3506 board we ship (V03, V04, V05). The Y3506 family has no external speaker amplifier on the PCB: the rk817 SPKO line drives the mono speaker directly. The vendor BSP 4.4 hid this by hardcoding the DAPM widgets and routes inside rk817_codec.c, but mainline ASoC respects the DT strictly. Under previous releases the kernel saw a sound card declaring an amp aux-dev and no Speaker widget, so it kept the speaker muted no matter what userspace tried.

Three new sound card variants now live in rk3326-gameconsole-r36s.dts:

  • rk817-sound-amplified: external amp gated by an enable GPIO. R36S original, K36, and most clone batches.
  • rk817-sound-simple: external amp on a regulator without a GPIO gate. A handful of clone batches.
  • rk817-sound-spko-direct: speaker driven straight from rk817 SPKO with no external amp. Every Y3506 Soysauce board.

The overlay generator (archr-dtbo.py) was extended with:

  • A new NAm (No Amplifier) flag that forces rk817-sound-spko-direct. The build pipeline appends NAm to every overlay produced under the soysauce/ family, so the V03/V04/V05 boards Just Work without any user interaction.
  • Acceptance of simple-audio-card,hp-det-gpio as a fallback to the legacy BSP-style hp-det-gpio name. Without this the audio block was silently skipped on every V05 vendor DTB.
  • Defensive handling of vendor DTBs that omit /pinctrl/headphone/hp-det (a handful of soysauce batches bind the headphone detect line through the codec phandle instead).
  • The short-circuit path for boards with rockchip,rk3326-odroidgo3-linux compatible now still switches the active sound card to spko-direct when NAm is set, so the six Soysauce batches that go through that early return still get the fix.

All 264 panel overlays were regenerated against the new variant logic. Audit:

  • 18 clone boards: default amp routing kept (unchanged behaviour)
  • 15 original boards: default amp routing kept (unchanged behaviour)
  • 11 Soysauce boards: rk817-sound-spko-direct enabled (speaker now works)

Joypad and rumble fixes

  • Single-ADC driver for Y3506 soysauce boards: the multi-ADC code path was reading the wrong channels on these clones. The fix flips rk3326-gameconsole-soysauce.dts to the single-ADC binding that matches vendor wiring and adjusts the mipi-generator post-processing accordingly
  • Continuous rumble vibration fix: some R36S revisions leave the rumble enable GPIO (gpio0 PB7, shared with the pwm0 function) in a high-impedance state at gpiolib probe time, latching the motor on through boot. A rumble-en-hold-low gpio-hog was added to the R36S DTS to drive the pin LOW before any other consumer probes. Trade-off: a handful of boards that did have working rumble lose it via the hog (the alternative was every board vibrating non-stop). The right long-term fix is gating the hog with a per-board compat check, which a future RC will land
  • Rumble TOC ("rumble travado") on the clone batches with a dedicated rumble-gpio is resolved by the overlay generator change above (Tier 3 propagation)

GPU driver and graphics stack

  • Mesa bumped to 26.1.1 (up from 26.0.5 in RC-3). The seven drm-panfrost patches backported from mainline in RC-3 (SYSTEM_TIMESTAMP, cycle counter, BO labelling) carry through unchanged
  • mali_kbase repository moved to github.com/archr-linux/mali_kbase (the old github.com/archr/... was 404). The bifrost kernel module is pinned at commit 422e192b7e3aa3140f34de34765b798817c1f749
  • gpudriver runtime script hardened (~136 lines added):
    • Boot-loop sentinel at /storage/.config/gpudriver.attempting: if a previous boot kernel-panicked while loading the configured driver, the next boot silently forces libmali and rewrites the setting so the device boots into a working UI
    • Async modprobe panfrost with timeout so a stuck probe never blocks the boot path. The 8-step trace lands in /storage/.config/gpudriver.log for after-the-fact triage without a serial console
    • More robust bind check: presence of /sys/class/drm/cardN alone is not enough (rockchip-vop creates card0 even with no GPU driver). The new check verifies the driver-specific sysfs node (panfrost: /sys/bus/platform/drivers/panfrost/*.gpu; libmali: /dev/mali0) AND that at least one DRM connector reports connected
    • Clean reverse-binds when switching to the other driver: panfrost path now correctly undoes the /usr/lib/mali overlay, restores libGL.so on both archs and unmasks the panfrost Vulkan ICD
  • GPU Driver picker hidden in EmulationStation: the gpudriver binary now installs at /usr/lib/archr/gpudriver (was /usr/bin/gpudriver); ES surfaces the picker only when the /usr/bin/ path exists, so this hides the option while panfrost on RK3326 silicon is still unstable. The autostart hook (003-gpudriver) calls the binary by full path. This is documented inline in the package and is reversible by moving the file back

Boot and runtime

  • Two-phase autostart: critical-path quirks run first, optional ones (network bring-up, scrapers, telemetry) run in parallel after EmulationStation is interactive. Cold boot is noticeably faster on the same hardware
  • Service dependency graph cleaned up so quirks load in parallel where there is no ordering dependency
  • Internal storage automount logic adjusted: edge cases where the device booted before STORAGE was mounted no longer corrupt the gamelist cache
  • RTL8188EU firmware upload chunk fix backported from mainline (0050-wifi-rtl8xxxu-Fix-RTL8188EU-firmware-upload-block-size.patch). Some users were seeing intermittent WiFi-init failures on this radio because the firmware blob refused to upload in 128-byte chunks

Software updates

  • DuckStation standalone bumped to 0.1-10998 (libretro core kept on its prior stable tag)
  • Commander file manager updated to the ROCKNIX modern fork (github.com/ROCKNIX/commander, pinned at b3c008cac3bff9de54a3542cecc53cc271058744): dark theme by default, path fixes, build fix baked in
  • PortMaster compatibility libraries added as explicit dependencies; the GUI no longer fails on import lzma or on consoles that lack the older xz userspace tools
  • InputPlumber service hardened for HID device management (inputplumber-refresh.service, 99-inputplumber-hidraw.rules); improved hot-plug behaviour of USB controllers and the Anbernic OTG cable adapter. The Xbox Series S/X controller config was retuned in the same pass
  • mpv and mplayer configuration refreshed for current codec defaults

Documentation and tooling

  • 44 vendor DTBs translated to 264 panel overlays (90 original, 108 clone, 66 soysauce), all regenerated and shipped on the BOOT partition. The Flasher picks the correct one from the motherboard silkscreen
  • Documentation site (https://arch-r.io) now ships in Portuguese (Brazilian) alongside English. Every guide has a pt-BR variant and the search supports both languages with locale-aware tokenisation (Orama with english and portuguese stemmers)
  • Overlay Generator page at https://arch-r.io/overlay-generator runs the generator entirely client-side via Pyodide; useful when the Flasher doesn't have a matching board profile yet
  • Supported emulators and cores documentation kept up to date; new file extensions added to the ports category

Known limitations carried over from RC-3

  • The GPU Driver selector in EmulationStation remains hidden (see above). Panfrost is still unstable on certain RK3326 clones; libmali is the validated default and the boot-loop sentinel + auto-fallback means the user always gets a graphical system. The selector will be re-exposed once the three Panfrost bugs we have on record are resolved

Installation

Download the image for your R36S variant and flash it using Arch R Flasher or any SD card imaging tool. The Flasher is available for Linux, macOS and Windows.

  • R36S Original: ArchR-R36S.aarch64-20260526-original.img.gz
  • R36S Clone (K36, EE Clone, Powkiddy RGB10/RGB10X/RGB20S, MagicX XU-Mini-M, BatLexp G350): ArchR-R36S.aarch64-20260526-clone.img.gz
  • R36S Soysauce (Y3506-based hardware including the new V04 2528 revision): use the original image; the Flasher selects the correct soysauce panel overlay automatically from the silkscreen text

Checksums (SHA-256)

0c43a584c23e59a06dd5c42b68383cee42e31ca4822ac2374c909802c39d18be  ArchR-R36S.aarch64-20260526-original.img.gz
fc435cad0b016a69599cdd0ee37fb9ca58c10f41aae75826787116a837e38328  ArchR-R36S.aarch64-20260526-clone.img.gz

Report issues at https://github.com/archr-linux/Arch-R/issues

Don't miss a new Arch-R release

NewReleases is sending notifications on new releases.