From: Tim Michals <tcmichals@gmail.com>
To: linux-sunxi@lists.linux.dev
Cc: wens@kernel.org, jernej.skrabec@gmail.com, samuel@sholland.org,
Tim Michals <tcmichals@gmail.com>
Subject: [PATCH 0/7] remoteproc/mailbox: add Allwinner A523/A527/T527 E907 RISC-V support
Date: Mon, 21 Sep 2026 22:47:04 -0500 [thread overview]
Message-ID: <20260922034711.190253-1-tcmichals@gmail.com> (raw)
This patch series introduces mainline Linux support for the Alibaba T-Head
XuanTie E907 (RV32IMAFDC @ 200 MHz) RISC-V auxiliary co-processor and the
4-port hardware Message Box IP integrated into Allwinner A523, A527, and
T527 (sun55i) SoCs.
The series adds the standalone 4-port hardware Message Box driver with
KUnit tests, the XuanTie RemoteProc driver with da_to_va KUnit tests, the
associated Devicetree binding schemas, and DTS node enablement.
Background & Hardware Architecture
==================================
Allwinner sun55i SoCs integrate an octa-core ARM Cortex-A55 cluster
alongside an auxiliary XuanTie E907 RISC-V co-processor. The co-processor
boots from on-chip dedicated SRAM Space 0 (Host PA 0x07280000 / Core DA
0x3FFC0000, 256 KB), can access secondary switchable SRAM Space 1 (Host
PA 0x072C0000 / Core DA 0x40000000, 256 KB), and interacts with external
DDR DRAM across the SoC's internal AXI bus.
Inter-processor communication (IPC) is coordinated via a 4-port hardware
Message Box controller (CPUX_MSGBOX at 0x03003000). The mailbox acts as a
star crossbar connecting four processors on the silicon die:
- Port 0: ARM Cortex-A55 host cluster
- Port 1: Cadence Tensilica HiFi4 Audio DSP
- Port 2: Power Management Unit (CPUS)
- Port 3: XuanTie E907 RISC-V co-processor
The Cortex-A55 exposes 12 logical channels (4 per remote processor), where
Channels 8..11 route directly to the XuanTie E907.
Hardware Validation & Silicon Evidence
======================================
This driver series has been extensively validated on physical silicon using
the Radxa Cubie A5E development board (Allwinner A527 / T527) running
mainline Linux PREEMPT_RT:
1. In-Kernel KUnit Tests:
- sun55i_msgbox_test: Register mapping, channel routing, and interrupt
mask bit manipulation across all 4 ports.
- sunxi_rproc_test: Comprehensive da_to_va address translation across
SRAM Space 0 (Host PA & Core DA), SRAM Space 1, DDR DRAM carveouts,
and trace memory regions.
2. Target Automated Test Suite:
- testBasic.elf: Core reset de-assertion, SRAM boot, MISA CSR
verification (0x40901125), and heartbeat logging via debugfs trace0.
- testStringBinaryTrace0.elf: Sustained trace0 ring-buffer streaming,
hardware single-precision FPU math (sine wave calculation), and
packed binary telemetry parsing.
- testCrash.elf: Machine-mode exception trap (mtvec) verification,
capturing full register autopsy (mepc, mcause=0x2, 31 GPRs) upon
intentional illegal instruction while the host remains stable.
- testPingRpmsg.elf: Full Linux VirtIO RPMsg framework validation
over dynamic DDR CMA buffers. Tested 1,000 round-trip ping-pong
packets with 100% success rate, measuring ~175 us average RTT
latency and 5.37 MB/s bandwidth at 512-byte VirtIO buffer size.
PREEMPT_RT Real-Time Compliance
===============================
When the E907 announces a new RPMsg channel via Name Service announcement,
the kernel's rpmsg_char/virtio_rpmsg_bus layers acquire sleeping mutexes
(device_register, blocking_notifier_call_chain). Calling these from
hard-IRQ context triggers "scheduling while atomic" warnings on PREEMPT_RT
kernels. In sunxi_rproc.c, the mailbox callback defers the VirtIO vring
interrupt handler via schedule_work(&priv->vq_work), ensuring 100% clean
operation on PREEMPT_RT kernels.
Design Decisions for Maintainer Review
======================================
1. Standalone drivers/mailbox/sun55i-msgbox.c vs sun6i-msgbox.c:
The existing sun6i-msgbox.c driver is architected around a legacy
2-core point-to-point mailbox with flat global registers. The sun55i
hardware is a 4-processor crossbar where registers are banked per
processor in independent 0x100-byte apertures with hardware routing
tables and 8-entry FIFOs. A clean standalone controller driver
was implemented to avoid extensive conditional branches across every
function.
2. Devicetree YAML Schemas:
Both allwinner,sun55i-a523-msgbox.yaml and allwinner,sun55i-rproc.yaml
have been created and pass dt_binding_check and checkpatch.pl cleanly.
Acknowledgements & References
=============================
Thanks to the Linux-sunxi community and YuzukiHD for SyterKit and
FreeRTOS-HIFI4-DSP as independent references to cross-check register
offsets, SRAM mappings, and clock/reset sequencing on the T527 and A733.
Tim Michals (7):
dt-bindings: mailbox: add Allwinner sun55i msgbox schema
mailbox: sun55i: add Allwinner sun55i/sun60i 4-port Message Box driver
mailbox: sun55i: add KUnit tests for routing and registers
dt-bindings: remoteproc: add allwinner sun55i rproc binding
remoteproc: sunxi: add allwinner riscv remoteproc driver
remoteproc: sunxi: add KUnit tests for da_to_va address translation
arm64: dts: allwinner: add a523 msgbox and remoteproc nodes
.../mailbox/allwinner,sun55i-a523-msgbox.yaml | 93 ++
.../remoteproc/allwinner,sun55i-rproc.yaml | 152 +++
.../arm64/boot/dts/allwinner/sun55i-a523.dtsi | 39 +
drivers/mailbox/Kconfig | 20 +
drivers/mailbox/Makefile | 3 +
drivers/mailbox/sun55i-msgbox.c | 337 +++++++
drivers/mailbox/sun55i_msgbox_test.c | 296 ++++++
drivers/remoteproc/Kconfig | 19 +
drivers/remoteproc/Makefile | 2 +
drivers/remoteproc/sunxi_rproc.c | 905 ++++++++++++++++++
drivers/remoteproc/sunxi_rproc_test.c | 442 +++++++++
11 files changed, 2308 insertions(+)
create mode 100644 Documentation/devicetree/bindings/mailbox/allwinner,sun55i-a523-msgbox.yaml
create mode 100644 Documentation/devicetree/bindings/remoteproc/allwinner,sun55i-rproc.yaml
create mode 100644 drivers/mailbox/sun55i-msgbox.c
create mode 100644 drivers/mailbox/sun55i_msgbox_test.c
create mode 100644 drivers/remoteproc/sunxi_rproc.c
create mode 100644 drivers/remoteproc/sunxi_rproc_test.c
--
2.53.0
next reply other threads:[~2026-09-22 3:47 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 3:47 Tim Michals [this message]
2026-09-22 3:47 ` [PATCH 1/7] dt-bindings: mailbox: add Allwinner sun55i msgbox schema Tim Michals
2026-09-22 3:54 ` sashiko-bot
2026-09-22 8:54 ` Krzysztof Kozlowski
2026-09-22 3:47 ` [PATCH 2/7] mailbox: sun55i: add Allwinner sun55i/sun60i 4-port Message Box driver Tim Michals
2026-09-22 4:00 ` sashiko-bot
2026-09-22 3:47 ` [PATCH 3/7] mailbox: sun55i: add KUnit tests for routing and registers Tim Michals
2026-09-22 3:54 ` sashiko-bot
2026-09-22 3:47 ` [PATCH 4/7] dt-bindings: remoteproc: add allwinner sun55i rproc binding Tim Michals
2026-09-22 3:56 ` sashiko-bot
2026-09-22 8:58 ` Krzysztof Kozlowski
2026-09-22 12:46 ` Rob Herring (Arm)
2026-09-22 3:47 ` [PATCH 5/7] remoteproc: sunxi: add allwinner riscv remoteproc driver Tim Michals
2026-09-22 3:59 ` sashiko-bot
2026-09-22 3:47 ` [PATCH 6/7] remoteproc: sunxi: add KUnit tests for da_to_va address translation Tim Michals
2026-09-22 3:54 ` sashiko-bot
2026-09-22 3:47 ` [PATCH 7/7] arm64: dts: allwinner: add a523 msgbox and remoteproc nodes Tim Michals
2026-09-22 3:59 ` sashiko-bot
2026-09-22 6:34 ` [PATCH 0/7] remoteproc/mailbox: add Allwinner A523/A527/T527 E907 RISC-V support Chen-Yu Tsai
2026-09-27 0:20 ` [PATCH v2 0/7] remoteproc: sunxi: Add Allwinner XuanTie E907 RemoteProc and Message Box support Tim Michals
2026-09-27 0:20 ` [PATCH v2 1/7] dt-bindings: mailbox: add Allwinner sun55i msgbox schema Tim Michals
2026-09-27 0:30 ` sashiko-bot
2026-10-01 6:16 ` Krzysztof Kozlowski
2026-09-27 0:20 ` [PATCH v2 2/7] mailbox: sun55i: add Allwinner sun55i/sun60i 4-port Message Box driver Tim Michals
2026-09-27 0:33 ` sashiko-bot
2026-09-27 0:20 ` [PATCH v2 3/7] mailbox: sun55i: add KUnit test suite for sun55i msgbox driver Tim Michals
2026-09-27 0:31 ` sashiko-bot
2026-09-27 0:20 ` [PATCH v2 4/7] dt-bindings: remoteproc: add Allwinner sun55i-rproc schema Tim Michals
2026-09-27 0:27 ` sashiko-bot
2026-10-01 6:17 ` Krzysztof Kozlowski
2026-09-27 0:20 ` [PATCH v2 5/7] remoteproc: sunxi: add Allwinner XuanTie RISC-V remoteproc driver Tim Michals
2026-09-27 0:33 ` sashiko-bot
2026-09-27 0:20 ` [PATCH v2 6/7] remoteproc: sunxi: add KUnit test suite for sunxi " Tim Michals
2026-09-27 0:32 ` sashiko-bot
2026-09-27 0:20 ` [PATCH v2 7/7] arm64: dts: allwinner: add a523 msgbox and remoteproc nodes Tim Michals
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260922034711.190253-1-tcmichals@gmail.com \
--to=tcmichals@gmail.com \
--cc=jernej.skrabec@gmail.com \
--cc=linux-sunxi@lists.linux.dev \
--cc=samuel@sholland.org \
--cc=wens@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.