feat: add Allwinner A733 / Radxa Cubie A7S board support - #16128
feat: add Allwinner A733 / Radxa Cubie A7S board support#16128Klutzleo wants to merge 9 commits into
Conversation
mkdir -p for etc/udev/rules.d was placed AFTER the install that needs it, causing 'No such file or directory' when target/ is fresh (not cached between CI runs). Move mkdir before the install. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The install script created spa-0.2/ffmpeg/ with 'install -d' but had no equivalent for videoconvert/, causing 'Not a directory' when target/ is fresh (not cached between CI runs) and the file installs into a path that doesn't exist as a directory. Add rm -f + install -d before the videoconvert install so both scenarios (directory missing, stale file) are handled cleanly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PIPEWIRE_FFMPEG_PLUGINS_INSTALL_PW_CAT installed pw-cat without ensuring target/usr/bin/ exists first, causing 'No such file or directory' when target/ is fresh (not cached between CI runs). Add install -d usr/bin before the pw-cat install. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rror) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
A733 (Allwinner A733 / Cubie A7S) was missing from the BATOCERA_CONFIGGEN_SYSTEM chain, causing BATOCERA_CONFIGGEN_SYSTEM to be empty and the staging install to fail copying configgen-defaults-.yml (no arch suffix). Add BR2_PACKAGE_BATOCERA_TARGET_A733 → a733 entry and create configgen-defaults-a733.yml based on t527 (closest Allwinner peer). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New board: Allwinner A733 (sun60iw2) SoC, Radxa Cubie A7S reference board. SoC: 2x Cortex-A76 + 6x Cortex-A55 @ 2.0GHz (sun60iw2) GPU: Imagination PowerVR BXM-4-64 MC1 (pvrsrvkm.ko, proprietary DDK) Display: USB-C DisplayPort Alt Mode via Cadence eDP SERDES + HUSB311 TypeC WiFi/BT: AIC8800D80 USB 2.0 adapter Boot: Radxa U-Boot (pre-built blobs, rsdk-r2) → extlinux → kernel Kernel source: https://github.com/GameOctane/allwinner-a733-linux (branch: a733-batocera-v1) Radxa 6.6 kernel + allwinner-bsp pre-merged so Buildroot can fetch in one git clone. BSP drivers (CCU, MMC, display, USB TypeC, AXP PMIC) and pvrsrvkm.ko build automatically via drivers-y += bsp/ in the Makefile. GPU notes: The A733 uses a PowerVR GPU — Panfrost does not apply. pvrsrvkm.ko is built in post-build.sh after the kernel. The proprietary userspace DDK (libGLESv2, pvr_dri.so, pvr_gbm.so) is bundled in fsoverlay/usr/local/lib/ from Radxa's xserver-xorg-img-bxm package (Section: free, Maintainer: Allwinnertech). See DDK_LICENSE_EVIDENCE.md for provenance details. Mesa softpipe provides a GL fallback for packages that need a Mesa EGL/GLES provider at link time. Display pipeline: Wayland via labwc (XWayland excluded — pulls in libglew/XORG7 which conflicts with the PVR GL stack). Video output activates after USB-C DisplayPort negotiation completes (~3-5s after boot). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
I'm sorry if I need to clarify anything or missed something. This is legitimately my first PR, and fairly nervous and excited about this. Please feel free to reach out if needed |
|
Thanks for your first submission! That's what we want to see: real effort to contribute upstream instead of isolating in a bubble, somewhere. A quick glance shows a lot of spaghetti/bloated code. Perhaps a major clean up can reduce a lot of lines. |
|
Trying to get this board to work was very...messy. Especially with the GPU. Let me see what I can do. |
Remove dead x86 PRIME GPU detection from labwc-launch — only one GPU configuration exists on A733, the code was never reachable. Remove verbose pre-flight diagnostic log dump from labwc-launch. Reduce make invocation in post-build.sh to non-redundant variables. Remove batocera-info fsoverlay override — the A733-specific big.LITTLE cluster_id CPU detection belongs in the upstream script, not as a full board-level replacement of the system tool. Remove S99-diag — bringup diagnostic helper, not appropriate for a production board submission. Remove serial console diagnostic block from S13-videooutput. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Cleanup and snapshot kernel fix Went through a cleanup pass.
Also fixed the kernel snapshot Removed a BSP-level 60hz ceiling in Silly code I've been trying to figure this out for months and the code was ( ...This was blocking 120hz at the DRM layer. The updated snapshot should include this fix |
|
@Klutzleo please mark it as draft for now and continue to refine the PR. Quick Notes: It may be better to talk on Discord in the |
|
I will leave this in draft as I look into the requests you are asking for. Let me know if you want to close this for any reason. But its going to take more time on my end and right now the GPU really only seems to be hacked into submission through-out multiple projects. I'm not giving up, just putting it on the back burner. |
Here is the mainline Linux port for Cubie A7A, including the mainline PowerVR GPU driver. |

Board: Allwinner A733 / Radxa Cubie A7S
Board page: https://radxa.com/products/single-board-computers/cubie-a7s/
This adds support for the Allwinner A733 SoC (sun60iw2) on the Radxa Cubie A7S. I'm the developer of OctaneOS, a Batocera-based gaming distribution that ships on this board. The board is working and we've been releasing builds to real users, so this isn't a bringup experiment — it's battle-tested.
Hardware
GPU — PowerVR BXM-4-64
This SoC uses a PowerVR GPU, not Mali. Panfrost does not apply.
pvrsrvkm.kois built out-of-tree inpost-build.shfrom the BSP source that lives inbsp/modules/gpu/inside the kernel tree.The userspace DDK (libGLESv2, pvr_dri.so, pvr_gbm.so, etc.) is bundled in
fsoverlay/usr/local/lib/andfsoverlay/usr/lib/. These come from Radxa'sxserver-xorg-img-bxmpackage:github.com/deepin-community/img-gpu-binboard/batocera/allwinner/a733/DDK_LICENSE_EVIDENCE.mdfor full provenance detailsThis is the opposite situation from the StarFive/JH7110
img-gpu-powervrpackage (LICENSE = Strictly Confidential, REDISTRIBUTE = NO). The Allwinner variant has a different and more permissive classification from the vendor.Mesa softpipe is kept as a fallback for packages that need a Mesa EGL/GLES provider at link time.
Kernel
Source: https://github.com/GameOctane/allwinner-a733-linux
Branch:
a733-batocera-v1The A733 requires two upstream repos: Radxa's 6.6 kernel (
radxa/kernel) and the BSP overlay (radxa/allwinner-bsp). Buildroot'sBR2_LINUX_KERNEL_CUSTOM_GITonly supports a single repo, so the solution is a pre-merged snapshot where both are combined —bsp/is dropped into the kernel tree withdrivers-y += bsp/already wired in the Makefile. BSP drivers (CCU, MMC, display pipeline, USB TypeC, AXP PMIC) andpvrsrvkm.koall build as part of a normal kernel compile.Boot
The Radxa U-Boot is a heavily customised Android/AIOT fork that does not integrate with Buildroot's
BR2_TARGET_UBOOT. Pre-extracted boot blobs from Radxa's rsdk-r2 release are committed toboard/batocera/allwinner/a733/cubie-a7s/boot/and written to their raw SD card offsets by the post-image script viadd.Status
Project
This fork is the work coming from OctaneOS. OctaneOS is a forked version of Batocera that will run on a DIY gaming handheld, with the hopes of wireless streaming to a dock. Utilizing the Radxa Cubie A7S board for the performance/price to play most retro games, and the features to make the handheld a potential $150 DIY project.
The project page can be found here: OctaneOS