Skip to content
Justin Hammond edited this page Aug 17, 2026 · 20 revisions

EIC7700X Upstreaming Status

Tracking the ESWIN EIC7700X port's path into Apache NuttX master, for the PINE64 StarPro64 and the ESWIN EIC7700 EVB.

develop is a build product, regenerated from a manifest rather than committed to. Each row below is one branch of that manifest, in merge order. A branch becomes a pull request carrying only its own commits, with prerequisites declared through Depends-On: so CI composes them without the review diff dragging in other branches. See Pull Request Dependencies in the NuttX CI documentation.

Last updated: 2026-08-17

Legend

Status Meaning
merged in Apache master; branch retired from the manifest
in review PR open, awaiting a reviewer
approved PR open and approved, waiting to merge
changes requested PR open, review comments outstanding
draft PR open but not for review yet
ready to open verified on hardware, no unopened prerequisite
blocked complete, but a prerequisite is not upstream yet
WIP works, but not finished enough to offer upstream

Upstream (generic) changes

These touch no EIC7700X code and can be reviewed by anyone.

# Branch Cmts PR Status Depends on
1 upstream-libc-string-align 1 #19857 in review — rewritten on top of #19870, now covers all 9 two-pointer functions
7 upstream-pinctrl-procfs 1 #19871 in review
9 upstream-reset-procfs 1 #19876 in review
11 upstream-gpio-procfs 1 #19878 in review — doc heading level fixed after build-html failed
12 upstream-regulator-procfs 1 #19879 in review
14 upstream-mmcsd-sd-highspeed 1 #19883 in review
19 upstream-rtc-pcf8563 1 ready to open — reshaped to the ds3231 model: no lower half, no /dev/rtc0, as every external I2C clock in the tree
20 upstream-uorb-power-types 1 ready to open
21 upstream-regulator-mpq8785 1 blocked 12
22 upstream-regulator-mpq8785-uorb 1 blocked 20, 21
23 upstream-sensors-tmp112-uorb 1 ready to open
24 upstream-sensors-ina226-uorb 1 blocked 20
36 upstream-xhci-pci-split 2 #19860 in review — rebased after 35 merged; the diff is now its own 2 commits
37 upstream-xhci-datapath 21 #19861 in review — rebased onto 36, so its 2 commits are the same objects and Depends-On: resolves as already-included 36
38 upstream-xhci-hubs 5 #19862 in review — rebased onto 37 36, 37
40 upstream-thermal-devfreq 3 ready to open
42 upstream-edid-cea-physaddr 1 ready to open
43 upstream-cec-framework 7 ready to open

nuttx-apps: upstream-arch-libc-stringapps#3706, in review. Independent of 1, but it is the benchmark 1's measurements come from. Its per-function tests call perf_gettime(), which is arch-internal and not in syscall.csv, so the app does not link in a kernel build; the benchmark itself is fine with CONFIG_TESTING_ARCH_LIBC_BENCH=y and the per-function options off. A fix is owed there.

EIC7700X port

# Branch Cmts PR Status Depends on
3 eic7700x-feature-bringup 7 #19863 approved
4 eic7700x-feature-clk 3 #19865 draft — arch commit only, master-based; CI composes with 3 via Depends-On: (verified green); the two board commits join after 3 merges 3
5 eic7700x-feature-reset 2 blocked 3
6 eic7700x-feature-pinctrl 2 blocked 3
8 eic7700x-feature-pinctrl-procfs 2 blocked 6, 7
10 eic7700x-feature-reset-procfs 2 blocked 5, 9
13 eic7700x-feature-gpio 2 blocked 3, 6, 11
15 eic7700x-feature-mshc 3 blocked 3, 4, 14
16 eic7700x-feature-ethernet 2 blocked 3, 4, 15
17 eic7700x-feature-leds 1 blocked 3, 13, 15
18 eic7700x-feature-i2c 2 blocked 15, 17
25 eic7700x-feature-i2c-devices 1 blocked 18, 19, 22, 23, 24
26 eic7700x-feature-spi-devices 2 blocked 3, 4
27 eic7700x-feature-pvt 1 blocked 3, 4
28 eic7700x-feature-pwm 1 blocked 3, 4, 13
29 eic7700x-feature-fan 1 blocked 28
30 eic7700x-feature-cpuclk 1 blocked 3, 4
31 eic7700x-feature-watchdog 1 blocked 3, 4
32 eic7700x-feature-rtc 1 blocked — on-die clock is now /dev/rtc0, and carries the up_rtc_initialize() stub 3, 4
33 eic7700x-feature-timer 1 blocked 3, 4
34 eic7700x-feature-hdmi 2 WIP — EDID is unreadable on this board 3, 4
39 eic7700x-feature-usb 2 blocked 3, 4, 15, 16, 35-38
41 eic7700x-feature-devfreq 1 blocked 3, 29, 40
44 eic7700x-feature-hpd 3 blocked 34
45 eic7700x-feature-cec 2 blocked 3, 4, 42, 43, 44

Merged

Merged PR Branch Change
2026-08-17 #19745 upstream-xhci-conformance xHCI fixes for a conforming controller: register access widths, optional scratchpad, halt and PORTSC handling, command completion
2026-08-17 #19856 upstream-riscv-strlcpy-align correct the RISC-V optimized string functions; align strlcpy's destination, compare a register at a time on equal offsets
2026-08-16 #19864 upstream-debug-levels drivers/pinctrl, drivers/clk: debug output levels
2026-08-09 #19744 upstream-usbhost-hidkbd do not unregister a HID keyboard twice
2026-08-09 #19733 upstream-sched-mutex-holder keep a negative task id out of the holder
2026-08-08 #19751 upstream-usbhost-announce report each device as it is enumerated
2026-08-08 #19750 upstream-usbhost-msc-partitions register the partitions on a mass storage device
2026-08-08 #19743 upstream-usbhost-xhci-trace define the xHCI endpoint-allocation trace
2026-08-08 #19742 upstream-usbhost-registry refuse to register the same class driver twice
2026-08-08 #19734 upstream-sigtimedwait unblock sigtimedwait through kernel memory
2026-08-08 #19732 upstream-ramlog survive writes made before the OS is up
2026-08-08 #19731 upstream-fat-lfn-blank-alias restore the no-short-name marker
2026-08-08 #19730 upstream-netdb-dns-answer-bounds size an answer by its header

nuttx-apps

Merged PR Branch Change
2026-08-08 apps#3709 upstream-lvglterm-shell lvglterm shell fixes
2026-08-08 apps#3708 upstream-fbcon-builtin fbcon as a builtin
2026-08-08 apps#3707 upstream-import-libnx import libnx

Closed without merging

Closed PR Why
2026-08-15 #19735 superseded by #19856 and #19857
2026-08-09 #19737 RFC for a cpufreq framework; withdrawn

TODO

Work we know we want, not yet a branch.

# Item Why Relates to
T1 A lower half for external RTC chips, so an I2C clock can be a /dev/rtcN again Every external RTC driver in drivers/timers (ds3231, pcf85263, mcp794xx, rx8010, and ours) implements only the up_rtc_* hooks. That gives the system clock and nothing else: no way to read or set the chip without moving CLOCK_REALTIME with it, and no RTC_RD_TIME/RTC_SET_TIME ioctl. Of 57 rtc_initialize() call sites in the tree, not one uses an external I2C chip as the lower half. The PCF8563 driver originally had one and it was removed rather than be the only driver of its kind, so the right fix is at framework level and all five drivers gain it at once. On the EVB that brings the PCF8563 back as /dev/rtc1 beside the on-die clock at rtc0. 19, 32
T2 CONFIG_RTC_ARCH cannot coexist with any external RTC driver Both drivers/timers/arch_rtc.c and each external chip driver define volatile bool g_rtc_enabled, so enabling both fails to link with multiple definition of 'g_rtc_enabled' (confirmed on RISC-V ELF). Nothing in Kconfig prevents the combination. Pre-existing and identical across all five drivers, and probably has to be settled as part of T1, since arch_rtc.c is the existing bridge between a lower half and the up_rtc_* hooks. T1, 19
T3 clock_initialize() calls up_rtc_initialize() even when the clock is external It does so under #if defined(CONFIG_RTC), immediately below its own comment saying an external clock must be brought up after the system has booted. A board whose only timekeeper is external therefore does not link without a stub. boards/arm/stm32u5/nucleo-u5a5zj-q carries one with a comment saying it should not be there, and ours carries one in eic7700x_rtc.c for the same reason. Fixing it upstream removes both. 19, 32
T4 apps#3706 does not link in a kernel build The per-function tests in arch_libc_test_main.c call perf_gettime(), which is arch-internal and absent from syscall.csv. The benchmark itself is fine, so the table in #19857 is reproducible with CONFIG_TESTING_ARCH_LIBC_BENCH=y and the per-function options off. #19857's body promises this fix. 1, apps#3706

Notes

The numbers are stable identifiers in the manifest's original merge order. A branch keeps its number for life, so a merged and retired branch leaves a gap rather than renumbering everything below it and invalidating every Depends on reference. Number 2 is such a gap.

Depends-On: composes textually independent changes only: CI cherry-picks the dependency's commits on top of the PR branch, so it cannot express a series where a later PR restructures what an earlier one touched. Those merge in sequence, each rebasing as its predecessor lands (verified by experiment on 36 vs 35, 2026-08-18).

Dependencies are code-level: a branch is listed as depending on another only when it calls into it or needs its Kconfig symbol. Branches that merely touch the same board files (defconfigs, eic7700x_bringup.c, the board documentation) are not listed, since every port branch touches those.

build-html is the CI gate that catches documentation mistakes, and it is worth running before pushing any branch that edits an .rst file: install the Documentation/Pipfile packages plus sphinxcontrib-plantuml, then sphinx-build -W -b html . <out>. RST heading levels are assigned by order of first use within a file, so a new subsection has to reuse the underline character that file already uses at that depth.

The whole stack builds for both boards and boots on the EIC7700 EVB; "blocked" means only that a prerequisite is not upstream yet.

Clone this wiki locally