On Thu, Aug 27, 2026 at 10:57 AM Lance Harvie <[email protected]> wrote:

> Hi all,
>
> I’ve been working on an Allwinner D1 / XuanTie C906 using the Sipeed Lichee
> RV / 86 Panel and recently completed a local NuttX board port and a
> comparison against Linux and RT-Thread RT-Smart on the same hardware.
>
> I thought some of the bring-up findings might be useful to the NuttX
> community.
>
> The tested NuttX version was 13.0.1-RC0, initially brought up in FLAT
> S-mode under the existing OpenSBI/U-Boot environment.
>
> The first image reached NSH quite quickly, but then reset after roughly 20
> seconds. The cause was inherited hardware state: U-Boot had left the
> Allwinner watchdog enabled, so NuttX booted successfully while carrying a
> guaranteed reset condition.
>
> After disabling the watchdog, timed sleeps still failed.
>
> OpenSBI advertised the SBI TIME extension and set_timer returned success,
> but the supervisor timer pending interrupt never appeared through STIP on
> the tested firmware path.
>
> I therefore moved the NuttX scheduler tick onto the native Allwinner D1
> Timer1 peripheral through the PLIC.
>
> That exposed a second problem.
>
> With OSC24M as the clock source I originally programmed an interval of
> 24,000 for a nominal 1 ms scheduler tick. On the physical D1 this produced
> an effective period of 24,001 input clocks.
>
> The resulting error was only about 41.7 ppm, but over a ~20 second
> benchmark it accumulated to nearly 0.84 ms.
>
> Programming 23,999 produced the intended 24,000 input clocks per tick and
> reduced the measured clock-domain drift to essentially zero.
>
> After correcting the timer and tightening the measurement methodology, the
> loaded 1 ms periodic test produced:
>
> p50: 0.542 us
> p99: 0.583 us
> p99.9: 0.708 us
> max: 0.708 us
> missed: 0 / 20,000
>
> The periodic task was FIFO120 and the continuous compute worker FIFO90 on
> the single C906 core.
>
> An important caveat is that this was a FLAT shared-address-space NuttX
> configuration. I am not presenting those numbers as equivalent to Linux
> protected-process overhead.
>
> I documented the watchdog diagnosis, SBI timer path, Timer1 implementation,
> phase-alignment methodology and failed intermediate tests here:
>
> GitHub:
> https://github.com/lanceharvie/allwinner-d1-os-benchmark
>
> Report:
> https://doi.org/10.5281/zenodo.22054539
>
> I’d be interested in feedback from the NuttX maintainers on two things:
>
>    1. whether there is interest in taking the D1 board-port work further
>    toward upstream quality, and
>

Yes, D1 is a good chip for future comparison. BTW, have you tried NuttX
kernel mode and compared it with other OS?


>    2. whether anyone has seen a similar D1/OpenSBI situation where SBI TIME
>    accepts set_timer but STIP never becomes pending.
>
> Regards,
> Lance Harvie
>

Reply via email to