Skip to content

hi3516cv200_neo + hi3516av100_neo: V2/V2A modern-kernel firmware targets#2122

Merged
widgetii merged 1 commit into
masterfrom
feat/cv200-av100-neo
May 22, 2026
Merged

hi3516cv200_neo + hi3516av100_neo: V2/V2A modern-kernel firmware targets#2122
widgetii merged 1 commit into
masterfrom
feat/cv200-av100-neo

Conversation

@widgetii
Copy link
Copy Markdown
Member

Summary

Adds two new firmware build targets running Linux 7.0 on the V2 (cv200, ARM926EJ-S) and V2A (av100, Cortex-A7) SoC families, mirroring the existing cv300_neo / av300_neo / cv500_neo / ev300_neo pattern.

  • opensdk hash bump: 74d8a65 → 7fa06b2 — picks up the V2/V2A blob-symbol shim work from openhisilicon #170 + #171.
  • hi3516av100 mainline support in openipc/linux #44 (DT + CRG + new hisi_higmac ethernet driver).
  • Two new defconfigs + two new neo kernel configs + two new post-image scripts.
  • Install hooks: v2_shim / v2a_shim modules ship on neo only.

QEMU DoD — both targets pass

hi3516cv200_neo (V2, 7.0)
  [PASS] login prompt
  [PASS] eth0 has IP (10.0.2.15 via SLIRP DHCP)
  [PASS] ping 10.0.2.2 (4.218 ms RTT)

hi3516av100_neo (V2A, 7.0)
  [PASS] login prompt
  [PASS] eth0 has IP (10.0.2.15 via SLIRP DHCP)
  [PASS] ping 10.0.2.2 (2.728 ms RTT)
  [PASS] hisi-higmac 10090000.ethernet eth0: Link is Up - 100Mbps/Full

No-regression on lite targets

Rebuilt against the new opensdk hash via HISILICON_OPENSDK_OVERRIDE_SRCDIR and diffed against nightly:

Target Files Hisilicon .ko Module set
hi3516cv200_lite (4.9) 331/331 68/68 identical
hi3516av100_lite (4.9) 290/290 61/61 identical

The v2[a]_shim modules are gated #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) in their source — benign no-op shells on 4.9 — AND the firmware install block doesn't ship them on lite at all (only on neo via [ "$(OPENIPC_VARIANT)" = "neo" ] gate).

Known caveats — both neo targets

  • struct timer_list.data ABI drift on chnl/viu/vpss vendor blobs means video pipeline doesn't run yet; init_timer_key resolves but callbacks won't fire with the correct argument until either a kernel patch restores .data or the blobs are recompiled. Documented in openhisilicon shim sources. Boot + network + serial console work; video does not.
  • higmac driver (mainline) is bare-minimum — no TSO, no EEE, no AVS, no statistics/ethtool, multicast filter is permissive. Suitable for boot/SSH/web management; production tuning is a follow-up to openipc/linux.

CI

No new matrix rows in this PR — neo qemu-smoke rows for cv200/av100 can be added in a follow-up once the existing CI passes for the artifact production paths.

Test plan

  • cv200_neo builds from tarball (no override)
  • cv200_neo QEMU: login + DHCP + ping
  • av100_neo builds from tarball (no override)
  • av100_neo QEMU: login + DHCP + ping
  • cv200_lite byte-equivalence vs nightly (rebuilt against new opensdk)
  • av100_lite byte-equivalence vs nightly (rebuilt against new opensdk)
  • Real-hardware test cv200 board — recommended before tagging a release
  • Real-hardware test av100 / dv100 board — recommended before tagging a release

🤖 Generated with Claude Code

…targets

Adds two new firmware build targets running Linux 7.0 on the V2
(cv200, ARM926EJ-S) and V2A (av100, Cortex-A7) SoC families,
mirroring the existing cv300_neo / av300_neo / cv500_neo / ev300_neo
pattern. Bumps the opensdk hash to pick up the V2/V2A blob-symbol
shim work that landed in openhisilicon #170 + #171, and exercises the
hi3516av100 mainline SoC support that landed in openipc/linux #44
(DT + CRG + higmac ethernet driver).

opensdk hash: 7fa06b2 (openhisilicon main tip).

What ships:

  br-ext-chip-hisilicon/configs/hi3516cv200_neo_defconfig:
    ARM926EJ-S / ARMv5TE soft-float, musleabi toolchain
    (vendor-compatible binaries), Linux 7.0 from upstream-patches,
    BR2_GLOBAL_PATCH_DIR = all-patches-neo, vendor osdrv disabled
    (3.18-only). 8 MB NOR flash target.

  br-ext-chip-hisilicon/configs/hi3516av100_neo_defconfig:
    Cortex-A7 / ARMv7 soft-float, musleabi toolchain, Linux 7.0
    from upstream-patches, vendor osdrv disabled. 16 MB NOR target.

  br-ext-chip-hisilicon/board/hi3516cv200/hi3516cv200.neo.config:
    Seed kernel config — ARCH_HI3516CV200, COMMON_CLK_HI3516CV200,
    VIC + SP804 timer + PL011 console + hisi_femac ethernet, CMA
    for openhisilicon MMZ. Pure ARMv5TE.

  br-ext-chip-hisilicon/board/hi3516av100/hi3516av100.neo.config:
    Seed kernel config — ARCH_HI3516AV100, COMMON_CLK_HI3516AV100,
    GIC + arch-timer + PL011 + hisi_higmac (mainline mainline GMAC
    driver from openipc/linux #44). Regulator + CPU_FREQ + PM_OPP
    enabled to satisfy modpost (open_pm.ko avs paths reference these;
    the blob is gated DISABLE_PM=1 by default but residual references
    remain through the build).

  br-ext-chip-hisilicon/board/hi35*/neo-post-image.sh:
    Wraps zImage + appended DTB into uImage for U-Boot bootm.
    Per-chip DTB filename + load-address baked in.

  general/package/hisilicon-opensdk/hisilicon-opensdk.mk:
    Install open_v2_shim.ko and open_v2a_shim.ko under the
    /lib/modules/$(KVER)/hisilicon/ path on neo builds (gated on
    OPENIPC_VARIANT=neo so lite remains byte-equivalent to nightly).

Verification — both targets pass the QEMU smoke definition-of-done:

  hi3516cv200_neo (V2, 7.0):
    [PASS] login prompt
    [PASS] eth0 has IP (10.0.2.15 via SLIRP DHCP)
    [PASS] ping 10.0.2.2 (4.218 ms RTT)
    [PASS] no Oops / panic / BUG / Call Trace

  hi3516av100_neo (V2A, 7.0):
    [PASS] login prompt
    [PASS] eth0 has IP (10.0.2.15 via SLIRP DHCP)
    [PASS] ping 10.0.2.2 (2.728 ms RTT)
    [PASS] no Oops / panic / BUG / Call Trace
    [PASS] hisi-higmac 10090000.ethernet eth0: Link is Up - 100Mbps/Full

No-regression on lite targets (rebuilt against this opensdk hash via
HISILICON_OPENSDK_OVERRIDE_SRCDIR and diffed vs nightly):

  hi3516cv200_lite (V2, 4.9):
    331/331 rootfs files, 68/68 hisilicon .ko, sets identical
  hi3516av100_lite (V2A, 4.9):
    290/290 rootfs files, 61/61 hisilicon .ko, sets identical

The v2[a]_shim modules are gated `#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)`
in their source — they're benign no-op shells on 4.9 and the
firmware install block doesn't ship them on lite at all (only neo).

Known caveats — both neo targets:

  - struct timer_list.data ABI drift (chnl/viu/vpss vendor blobs)
    means video pipeline doesn't run yet; init_timer_key resolves
    but the callbacks won't fire with the correct argument until
    either a kernel patch restores .data or the blobs are
    recompiled. Documented in openhisilicon shim sources. Boot +
    network + serial console work; video does not.

  - higmac driver (mainline) is bare-minimum — no TSO, no EEE, no
    AVS, no statistics/ethtool, multicast filter is permissive.
    Suitable for boot/SSH/web management; production tuning is a
    follow-up.

CI: existing matrix rows are unchanged; this PR doesn't add neo
rows yet (cv200_neo + av100_neo qemu smoke can be added in a
follow-up once the no-CI-row dance settles).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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