Skip to content

hi3516cv100_neo: Linux 7.0 firmware target (V1 / ARM926EJ-S)#2131

Merged
widgetii merged 1 commit into
masterfrom
feat/hi3516cv100-neo-7.0
May 24, 2026
Merged

hi3516cv100_neo: Linux 7.0 firmware target (V1 / ARM926EJ-S)#2131
widgetii merged 1 commit into
masterfrom
feat/hi3516cv100-neo-7.0

Conversation

@widgetii
Copy link
Copy Markdown
Member

Summary

Adds the firmware-side pieces to assemble a `hi3516cv100_neo` image against the Linux 7.0 base in `openipc/linux:upstream-patches`. Completes the three-repo chain:

Repo PR State
OpenIPC/linux #46 ✅ MERGED (cv100 DT + mach-hibvt)
OpenIPC/openhisilicon #187 ✅ MERGED (v1_shim + ksymtab re-exports + source patches)
OpenIPC/firmware this PR

Changes

Verification

Built locally via this defconfig + manual `make BOARD=hi3516cv100_neo br-hisilicon-opensdk br-linux` against this branch. uImage = 1.88MB (zImage 1.78MB + DTB 4.4KB wrapped by neo-post-image.sh).

Booted under `qemu-system-arm -M hi3516cv100 -m 64M`:

```
hisi-femac 10090000.ethernet eth0: Link is Up - 100Mbps/Full
cv100 V1 OSAL shim: ready (do_gettimeofday, register_sysctl_table, ...)
openipc-hi3516cv100 login:
eth0 inet addr:10.0.2.15
64 bytes from 10.0.2.2: seq=0 ttl=255 time=135.170 ms
64 bytes from 10.0.2.2: seq=1 ttl=255 time=16.912 ms
```

Boots to login, eth0 up via SLIRP, ping gateway succeeds steady-state. No Oops/panic/BUG. `open_v1_shim.ko` inserts cleanly at boot.

cv100_lite (kernel 3.0.8 production) byte-equivalence vs nightly confirmed via QEMU diff:

Test plan

  • cv100_neo opensdk + kernel compile clean (toolchain 3.0 headers, 7.0 kernel)
  • cv100_neo QEMU boot — login prompt + eth0 UP + ping gateway
  • cv100_lite (kernel 3.0.8) no-regression — lsmod identical, dmesg = nightly + 2 benign lines
  • Real-hardware test on a cv100 board — deferred

Out of scope

`mmz.ko` / `hi3518_base.ko` fail `insmod` on cv100_neo at runtime with `.gnu.linkonce.this_module section size must match the kernel's built struct module size` — pre-compiled cv100 blobs embed a `struct module` sized for kernel 3.0.8; modern 7.0 expects a different layout. Same drift cv200/av100 hit; fix lives elsewhere (vermagic shim or blob recompile). Doesn't affect cv100_lite (production target) and doesn't block the cv100_neo boot/ethernet DoDs above.

🤖 Generated with Claude Code

Adds the firmware-side pieces to assemble a hi3516cv100_neo image
against the Linux 7.0 base in openipc/linux:upstream-patches. cv100
mainline kernel support (DT + mach-hibvt + ARCH_HI3516CV100 Kconfig)
landed in openipc/linux PR #46 (8701d2079bf72); openhisilicon module
support (V1 OSAL shim + 92 EXPORT_SYMBOL re-declarations for the V1
__ksymtab format that modern modpost doesn't grok + source-side patches
on mmz/rtc/ir/cipher) landed in openipc/openhisilicon PR #187 (488a76f).
This PR completes the chain.

Changes:

* br-ext-chip-hisilicon/configs/hi3516cv100_neo_defconfig — buildroot
  config. Reuses cv100_lite's V1 musleabi toolchain (3.0 headers — fine
  since Linux preserves syscall ABI backward-compat), points kernel at
  upstream-patches.tar.gz, picks hisilicon-opensdk + majestic + the
  standard OpenIPC userspace package set. VARIANT="neo" gates the
  hisilicon-opensdk install rule's v1_shim ship.

* br-ext-chip-hisilicon/board/hi3516cv100/hi3516cv100.neo.config —
  kernel config seed. ARCH_HI3516CV100=y (selects ARM_VIC + ARM_TIMER_SP804
  + COMMON_CLK_HI3516CV200 via the Kconfig PR #46 wires up). Built as
  zImage with appended DTB; CMA enabled for the openhisilicon MMZ
  allocator.

* br-ext-chip-hisilicon/board/hi3516cv100/neo-post-image.sh — wraps
  zImage + hi3516cv100-demb.dtb into a U-Boot uImage at load/entry
  0x80008000 (the V1/V2 ARMv5TE family default — same as cv200_neo /
  cv300_neo / etc.).

* general/package/hisilicon-opensdk/hisilicon-opensdk.mk — bump pin
  7fa06b2 → 488a76f to pull in the cv100 7.0 support. Transitively
  picks up commits 14fc1950 (openipc_event_trigger sample), 6bc0face
  (cv200 isp.c tasklet-defer for #183 — the regression that motivated
  the #2128 revert), and the openhisilicon side of cv100_neo. Also
  adds the v1_shim install rule for cv100/neo variant.

* .github/workflows/build.yml — add hi3516cv100_neo to the CI matrix
  next to hi3516cv100_lite.

Tested under qemu-system-arm -M hi3516cv100 -m 64M with a locally-built
hi3516cv100_neo image (uImage = zImage + hi3516cv100-demb.dtb wrapped
by neo-post-image.sh; rootfs.squashfs from this defconfig with my
modules from this opensdk pin):

  hisi-femac 10090000.ethernet eth0: Link is Up - 100Mbps/Full
  cv100 V1 OSAL shim: ready (do_gettimeofday, register_sysctl_table, ...)
  openipc-hi3516cv100 login:
  eth0   inet addr:10.0.2.15
  64 bytes from 10.0.2.2: seq=0 ttl=255 time=16.912 ms

Boots to login, eth0 up via SLIRP, ping gateway succeeds. No
Oops/panic/BUG. open_v1_shim.ko inserts cleanly at boot.

cv100_lite (kernel 3.0.8 production) byte-equivalence vs nightly
confirmed via QEMU diff: identical 33-module lsmod, dmesg diff is
2 benign lines (random MAC + 1 KiB ramdisk size from EXPORT_SYMBOL
additions in init wrappers — see openhisilicon PR #187 for details).
@widgetii widgetii merged commit 85720ac into master May 24, 2026
100 checks passed
@widgetii widgetii deleted the feat/hi3516cv100-neo-7.0 branch May 24, 2026 07:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant