From 0ce3d2df1f3904e3d07c253b1c71e060dce941cd Mon Sep 17 00:00:00 2001 From: Dmitry Ilyin <6576495+widgetii@users.noreply.github.com> Date: Sun, 24 May 2026 09:36:43 +0300 Subject: [PATCH] hi3516cv100_neo: Linux 7.0 firmware target (V1 / ARM926EJ-S) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- .github/workflows/build.yml | 1 + .../board/hi3516cv100/hi3516cv100.neo.config | 215 ++++++++++++++++++ .../board/hi3516cv100/neo-post-image.sh | 37 +++ .../configs/hi3516cv100_neo_defconfig | 89 ++++++++ .../hisilicon-opensdk/hisilicon-opensdk.mk | 8 +- 5 files changed, 349 insertions(+), 1 deletion(-) create mode 100644 br-ext-chip-hisilicon/board/hi3516cv100/hi3516cv100.neo.config create mode 100755 br-ext-chip-hisilicon/board/hi3516cv100/neo-post-image.sh create mode 100644 br-ext-chip-hisilicon/configs/hi3516cv100_neo_defconfig diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4379e7ea88..afb908be63 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -100,6 +100,7 @@ jobs: # Hisilicon [HI3516CV100] - hi3516cv100_lite + - hi3516cv100_neo - hi3518cv100_lite - hi3518ev100_lite diff --git a/br-ext-chip-hisilicon/board/hi3516cv100/hi3516cv100.neo.config b/br-ext-chip-hisilicon/board/hi3516cv100/hi3516cv100.neo.config new file mode 100644 index 0000000000..7f56d9870f --- /dev/null +++ b/br-ext-chip-hisilicon/board/hi3516cv100/hi3516cv100.neo.config @@ -0,0 +1,215 @@ +# +# Seed kernel config for hi3516cv100_neo (V2 platform, modern kernel). +# Expand with: make ARCH=arm olddefconfig +# + +# Architecture — ARM926EJ-S, ARMv5TE, single-core, no FPU +CONFIG_ARM=y +CONFIG_ARCH_MULTI_V5=y +# CONFIG_ARCH_MULTI_V6 is not set +# CONFIG_ARCH_MULTI_V7 is not set +CONFIG_CPU_ARM926T=y +# CONFIG_SMP is not set +CONFIG_AEABI=y +# CONFIG_VFP is not set +# CONFIG_NEON is not set +# CONFIG_THUMB2_KERNEL is not set +# CONFIG_CACHE_L2X0 is not set + +# HiSilicon BVT platform — hi3516cv100 (ARMv5, V2 — siblings hi3518ev200/ev201) +CONFIG_ARCH_HISI_BVT=y +CONFIG_ARCH_HI3516CV100=y +# CONFIG_ARCH_HI3516A is not set +# CONFIG_ARCH_HI3516CV300 is not set +# CONFIG_ARCH_HI3516CV500 is not set +# CONFIG_ARCH_HI3516DV300 is not set +# CONFIG_ARCH_HI3516EV200 is not set +# CONFIG_ARCH_HI3516EV300 is not set +# CONFIG_ARCH_HI3518EV300 is not set +# CONFIG_ARCH_HI3516DV200 is not set +# CONFIG_ARCH_HI3556V200 is not set +# CONFIG_ARCH_HI3559V200 is not set +# CONFIG_HISI_MC is not set +# CONFIG_ARCH_HISI is not set + +# Boot — appended DTB (uImage = zImage + DTB wrapped by neo-post-image.sh) +CONFIG_ARM_APPENDED_DTB=y +CONFIG_ARM_ATAG_DTB_COMPAT=y +CONFIG_CMDLINE="earlycon=pl011,0x20080000" +CONFIG_CMDLINE_EXTEND=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 + +# General +CONFIG_LOCALVERSION="" +CONFIG_DEFAULT_HOSTNAME="openipc" +CONFIG_SYSVIPC=y +# CONFIG_SWAP is not set +# CONFIG_USELIB is not set +# CONFIG_CROSS_MEMORY_ATTACH is not set +CONFIG_KERNEL_XZ=y + +# Timers — cv300 has dual SP804 +CONFIG_HZ_PERIODIC=y +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_PREEMPT_NONE=y + +# Memory — 128MB RAM at 0x80000000; CMA for openhisilicon MMZ +CONFIG_CMA=y +CONFIG_DMA_CMA=y +CONFIG_CMA_SIZE_MBYTES=0 +CONFIG_CMA_AREAS=7 +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_FLATMEM=y +CONFIG_COMPACTION=y + +# Clocks + reset — cv200 CRG driver lives in upstream-patches already (#43) +CONFIG_COMMON_CLK_HI3516CV100=y +CONFIG_RESET_HISI=y + +# Interrupt + timer — cv300 uses PL190 VIC + SP804 +CONFIG_ARM_VIC=y +CONFIG_ARM_TIMER_SP804=y + +# Block devices +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=65536 + +# MTD — SPI NOR flash (cv300 boards typically 8/16MB NOR) +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_SPI_NOR=y + +# Network — HiSilicon FEMAC (cv200 DT uses hisilicon,hi3516cv100-femac) +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_PNP is not set +# CONFIG_NETFILTER is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_IPV6 is not set +CONFIG_NETDEVICES=y +CONFIG_ETHERNET=y +CONFIG_NET_VENDOR_HISILICON=y +CONFIG_HISI_FEMAC=y +CONFIG_MDIO_HISI_FEMAC=y +CONFIG_PHYLIB=y +CONFIG_FIXED_PHY=y +# Disable all other ethernet vendors +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_ALACRITECH is not set +# CONFIG_NET_VENDOR_AMAZON is not set +# CONFIG_NET_VENDOR_AMD is not set +# CONFIG_NET_VENDOR_AQUANTIA is not set +# CONFIG_NET_VENDOR_ARC is not set +# CONFIG_NET_VENDOR_ATHEROS is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_CADENCE is not set +# CONFIG_NET_VENDOR_CAVIUM is not set +# CONFIG_NET_VENDOR_CIRRUS is not set +# CONFIG_NET_VENDOR_CORTINA is not set +# CONFIG_NET_VENDOR_DAVICOM is not set +# CONFIG_NET_VENDOR_FARADAY is not set +# CONFIG_NET_VENDOR_FREESCALE is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MEDIATEK is not set +# CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_NETRONOME is not set +# CONFIG_NET_VENDOR_NI is not set +# CONFIG_NET_VENDOR_QUALCOMM is not set +# CONFIG_NET_VENDOR_REALTEK is not set +# CONFIG_NET_VENDOR_RENESAS is not set +# CONFIG_NET_VENDOR_SAMSUNG is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_SYNOPSYS is not set +# CONFIG_NET_VENDOR_TI is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_WIZNET is not set +# CONFIG_NET_VENDOR_XILINX is not set +# CONFIG_WLAN is not set +# CONFIG_WIRELESS is not set + +# I2C +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_HIBVT=y + +# SPI +CONFIG_SPI=y +CONFIG_SPI_PL022=y + +# GPIO +CONFIG_GPIOLIB=y +CONFIG_GPIO_PL061=y + +# Serial / UART +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_EARLYCON=y + +# Power +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_SYSCON=y + +# Filesystems +CONFIG_TMPFS=y +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_XZ=y +CONFIG_OVERLAY_FS=y +CONFIG_JFFS2_FS=y +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_PROC_FS=y +CONFIG_SYSFS=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y + +# Initrd / initramfs +CONFIG_BLK_DEV_INITRD=y +CONFIG_RD_XZ=y +# CONFIG_RD_GZIP is not set +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set +# CONFIG_RD_ZSTD is not set + +# Debug — earlycon for boot debugging +CONFIG_EARLY_PRINTK=y + +# Trim — cv300 is RAM-constrained (128MB) +# CONFIG_COREDUMP is not set +# CONFIG_ETHTOOL_NETLINK is not set +# CONFIG_BPF_SYSCALL is not set +# CONFIG_AUDIT is not set +# CONFIG_PROFILING is not set +# CONFIG_KPROBES is not set +# CONFIG_FTRACE is not set +# CONFIG_KALLSYMS is not set +# CONFIG_PRINTK_TIME is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y + +# Disable subsystems not needed on IP cameras +# CONFIG_INPUT is not set +# CONFIG_VT is not set +# CONFIG_SOUND is not set +# CONFIG_FB is not set +# CONFIG_SCSI is not set +# CONFIG_F2FS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_CONFIGFS_FS is not set +# CONFIG_CGROUPS is not set +# CONFIG_NAMESPACES is not set +# CONFIG_USB_SUPPORT is not set +# CONFIG_WATCHDOG is not set +# CONFIG_MMC is not set +# CONFIG_CRAMFS is not set diff --git a/br-ext-chip-hisilicon/board/hi3516cv100/neo-post-image.sh b/br-ext-chip-hisilicon/board/hi3516cv100/neo-post-image.sh new file mode 100755 index 0000000000..146815cbc1 --- /dev/null +++ b/br-ext-chip-hisilicon/board/hi3516cv100/neo-post-image.sh @@ -0,0 +1,37 @@ +#!/bin/sh +# Post-image: append cv200 DTB to zImage and wrap as uImage for hi3516cv100_neo. +IMAGES_DIR="${BINARIES_DIR:-$1}" +BUILD_DIR="${BUILD_DIR:-$(dirname $IMAGES_DIR)/build}" +HOST_DIR="${HOST_DIR:-$(dirname $IMAGES_DIR)/host}" +KDIR="$BUILD_DIR/linux-custom" +ZIMAGE="$IMAGES_DIR/zImage" +DTB="$KDIR/arch/arm/boot/dts/hisilicon/hi3516cv100-demb.dtb" +LOADADDR=0x80008000 + +MKIMAGE="" +for p in \ + "${HOST_DIR}/bin/mkimage" \ + "$(dirname $IMAGES_DIR)/host/bin/mkimage" \ + "$(find $(dirname $IMAGES_DIR)/per-package -name mkimage -type f 2>/dev/null | head -1)" \ + "$(which mkimage 2>/dev/null)"; do + [ -x "$p" ] && MKIMAGE="$p" && break +done +[ -z "$MKIMAGE" ] && echo "neo-post-image: ERROR: mkimage not found" >&2 && exit 1 + +[ -f "$ZIMAGE" ] || exit 0 +[ -f "$DTB" ] || exit 0 + +KREL=$(sed 's/-//g' "$KDIR/include/config/kernel.release") + +cat "$ZIMAGE" "$DTB" > "${IMAGES_DIR}/zImage-dtb" +$MKIMAGE -A arm -O linux -T kernel -C none \ + -a $LOADADDR -e $LOADADDR \ + -n "Linux-${KREL}-hi3516cv100" \ + -d "${IMAGES_DIR}/zImage-dtb" "${IMAGES_DIR}/uImage" +rm -f "${IMAGES_DIR}/zImage-dtb" +if [ -f "${IMAGES_DIR}/uImage" ]; then + echo "neo-post-image: uImage $(( $(stat -c%s ${IMAGES_DIR}/uImage) / 1024 ))KB" +else + echo "neo-post-image: ERROR: mkimage failed" >&2 + exit 1 +fi diff --git a/br-ext-chip-hisilicon/configs/hi3516cv100_neo_defconfig b/br-ext-chip-hisilicon/configs/hi3516cv100_neo_defconfig new file mode 100644 index 0000000000..30e6e4a78a --- /dev/null +++ b/br-ext-chip-hisilicon/configs/hi3516cv100_neo_defconfig @@ -0,0 +1,89 @@ +# Architecture — ARM926EJ-S (ARMv5TE), single-core, no FPU (same as cv200/cv300) +BR2_arm=y +BR2_arm926t=y +BR2_ARM_EABI=y +BR2_ARM_SOFT_FLOAT=y + +# Toolchain — reuse cv100_lite musl ARMv5 (vendor V1 toolchain at +# kernel headers 3.0; Linux preserves syscall backward compat so 3.0 +# headers compile cleanly against 7.0 kernels). +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y +BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y +BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/openipc/firmware/releases/download/$(OPENIPC_TOOLCHAIN).tgz" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-openipc-linux-musleabi" +BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_0=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y + +# Kernel — openipc/linux upstream-patches branch (same source as +# cv200_neo / cv300_neo / ev300_neo / av300_neo). cv100 mainline DT +# lives in this branch via openipc/linux PR #46: +# arch/arm/boot/dts/hisilicon/hi3516cv100{.dtsi,-demb.dts} +# + ARCH_HI3516CV100 Kconfig in mach-hibvt +# CRG driver is reused from cv200 (COMMON_CLK_HI3516CV200) — cv100's +# CRG register layout is a strict subset. +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/upstream-patches.tar.gz" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/hi3516cv100.neo.config" +BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM=y +BR2_LINUX_KERNEL_IMAGE_TARGET_NAME="zImage" +BR2_LINUX_KERNEL_XZ=y + +# Skip legacy kernel patches (4.9-era GCC compat, not needed for 6.x+). +BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL)/package/all-patches-neo" + +# Filesystem +BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" +BR2_PACKAGE_UBOOT_TOOLS=y +BR2_PACKAGE_ZLIB=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +# WireGuard is built into Linux 6.6+ — no compat module needed +# BR2_PACKAGE_WIREGUARD_LINUX_COMPAT is not set +BR2_PACKAGE_WIREGUARD_TOOLS=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_SQUASHFS=y +BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y + +# OpenIPC +BR2_OPENIPC_SOC_VENDOR="hisilicon" +BR2_OPENIPC_SOC_MODEL="hi3516cv100" +BR2_OPENIPC_SOC_FAMILY="hi3516cv100" +BR2_OPENIPC_VARIANT="neo" +BR2_OPENIPC_FLASH_SIZE="8" + +# Packages — openhisilicon-opensdk provides open_*.ko + open_v1_shim.ko; +# vendor osdrv is 3.0-only and won't compile against upstream-patches 7.0. +BR2_PACKAGE_DROPBEAR_OPENIPC=y +BR2_PACKAGE_HISILICON_OPENSDK=y +# BR2_PACKAGE_HISILICON_OSDRV_HI3516CV100 is not set +BR2_PACKAGE_IPCTOOL=y +BR2_PACKAGE_JSONFILTER=y +BR2_PACKAGE_LIBCURL_OPENIPC=y +BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y +# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set +BR2_PACKAGE_LIBEVENT_OPENIPC=y +BR2_PACKAGE_LIBOGG_OPENIPC=y +BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC=y +BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MEDIATEK_MT7601U=y +BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_RTL_8188EU=y +BR2_PACKAGE_MAJESTIC_FONTS=y +BR2_PACKAGE_MAJESTIC_WEBUI=y +BR2_PACKAGE_MAJESTIC=y +BR2_PACKAGE_MBEDTLS_OPENIPC=y +BR2_PACKAGE_MOTORS=y +BR2_PACKAGE_OPUS_OPENIPC=y +BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y +BR2_PACKAGE_VTUND_OPENIPC=y +BR2_PACKAGE_YAML_CLI=y + +# Post-image: wrap zImage + DTB into uImage so U-Boot bootm works. +BR2_ROOTFS_POST_IMAGE_SCRIPT="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/neo-post-image.sh" diff --git a/general/package/hisilicon-opensdk/hisilicon-opensdk.mk b/general/package/hisilicon-opensdk/hisilicon-opensdk.mk index 185cffe68d..8e6aceec33 100644 --- a/general/package/hisilicon-opensdk/hisilicon-opensdk.mk +++ b/general/package/hisilicon-opensdk/hisilicon-opensdk.mk @@ -5,7 +5,7 @@ ################################################################################ HISILICON_OPENSDK_SITE = $(call github,openipc,openhisilicon,$(HISILICON_OPENSDK_VERSION)) -HISILICON_OPENSDK_VERSION = 7fa06b2 +HISILICON_OPENSDK_VERSION = 488a76f HISILICON_OPENSDK_LICENSE = GPL-3.0 HISILICON_OPENSDK_LICENSE_FILES = LICENSE @@ -335,6 +335,12 @@ define HISILICON_OPENSDK_INSTALL_TARGET_CMDS $(INSTALL) -m 644 $(@D)/kernel/open_ssp_sony.ko $(HISILICON_OPENSDK_KMOD_DST)/ssp_sony.ko $(INSTALL) -m 644 $(@D)/kernel/open_ssp_pana.ko $(HISILICON_OPENSDK_KMOD_DST)/ssp_pana.ko $(INSTALL) -m 644 $(@D)/kernel/open_ssp_ad9020.ko $(HISILICON_OPENSDK_KMOD_DST)/ssp_ad9020.ko + # V1 OSAL shim — only meaningful on neo (kernel 7.0). On lite (3.0.8) + # the module compiles as a no-op so it could ship there too, but + # load_hisilicon would still try to insmod it; gate to neo only. + [ "$(OPENIPC_VARIANT)" = "neo" ] && \ + $(INSTALL) -m 644 $(@D)/kernel/open_v1_shim.ko \ + $(HISILICON_OPENSDK_KMOD_DST)/v1_shim.ko || true endef # For hi3516cv200: install opensdk .ko to hisilicon/ with vendor names,