Skip to content

fullhan: FH8626V100 and FH8652/FH8656/FH8658 boards, with FH865x media from the SDK objects - #2714

Merged
dimerr merged 3 commits into
masterfrom
fullhan/fh865x-fh8626-boards
Oct 28, 2026
Merged

dimerr merged 3 commits into
masterfrom
fullhan/fh865x-fh8626-boards

Conversation

@dimerr

@dimerr dimerr commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator

Problem

New hardware support: Fullhan FH8626V100 and FH8652 / FH8656 / FH8658 (FH865x). There are no OpenIPC images for either. OpenIPC/u-boot already builds u-boot-fh8626v100-nor.bin and u-boot-fh865{2,6,8}-nor.bin (release fullhan).

Both families now run on the one fullhan-fh8852v200 4.9.129 kernel:

So all four boards take OPENIPC_SOC_FAMILY=fh8852v200, with its published kernel tarball, toolchain and majestic. Only the kernel config differs:

  • fh8626v100.generic.config: the FH8852V200 config moved to ARCH_FH8626V100, with its v2 SADC. The AJL33PQ0866-only SD0 option stays off; it is one camera's pinmux.
  • fh865x.generic.config: ARCH_FH865x, ARMv7, VFPv3/NEON, shared by the three FH865x boards. The userland stays ARMv6 on the family toolchain, which a Cortex-A7 runs as is.

Stacked on #2713; the base is its branch. Commits:

  1. fullhan: add FH8626V100 and FH8652/FH8656/FH8658 lite boards: the boards, without media.
  2. fullhan-osdrv-fh865x: FH8652/FH8656/FH8658 media, linked from the SDK objects: FH865x runs the FH885xV200 media code. The FH885XV200_IPC_V1.1.0 SDK covers it: its media_process carries chip_fh865x, and its guides are titled "FH885xV200 & FH865x". The SDK's prebuilt modules are ARMv6 builds and do not load on the Cortex-A7 kernel. The SDK also ships them as objects to link against the board's kernel (media_support/make_drivers).
    • The package carries those objects (V1.1.0, with FP13 over it) as Kbuild _shipped files and links them against the board's kernel at build time. Linked the same way against the FH885xV200 kernel, they reproduce all nine modules in fullhan-osdrv-fh8852v200 instruction for instruction.
    • The libraries, sensors and ARC firmware are fullhan-osdrv-fh8852v200's, which are that SDK's.
    • load_fullhan falls back to media_process_no_sc if the ARC does not start. The SDK has no FH865x ARC firmware build, and the ARC runs audio and the softcore, not video.
    • Majestic is enabled on the three FH865x boards.

FH8626V100 has no media in this PR. Its media drivers come from an FH8626V100_IPC SDK (V1.0.0 on 3.0.8, V2.0.0 on 4.9) that has not been published. The FH885xV200 SDK's media_process has no FH8626 chip table, and factory-image modules are not something this tree takes (best_practices.md §2.4, as with #2217).

Hardware tested on

None. Not run on an FH8626V100 or FH865x camera; draft until it is.

Evidence

Built locally against OpenIPC/linux#158:

fh8652_lite      - uImage: [1436KB/2048KB]  - rootfs.squashfs: [4704KB/5120KB]
fh8626v100_lite  - uImage: [1434KB/2048KB]  - rootfs.squashfs: [2312KB/5120KB]

The relinked modules are ARMv7 builds with no unresolved symbols:

bgm.ko enc.ko isp.ko jpeg.ko media_process.ko media_process_no_sc.ko vmm.ko vpu.ko xbus_rpc.ko
vermagic: 4.9.129 mod_unload ARMv7 p2v8

qemu-hisilicon, test-fullhan-boot.sh (fh8626v100 needs OpenIPC/qemu-bench#217):

fh8652 image on fh8652:          5/5 (kernel up, OpenIPC userland, login prompt, DHCP lease over the GMAC, JFFS2 overlay)
fh8652 image on fh8656 / fh8658: 5/5
fh8626v100 on fh8626v100:        5/5

Media path on fh8652 under qemu, from a shell. QEMU models no ARC, ISP or VPU, so this is as far as it can go:

[XBUS] version: (g749c96e-dirty),build: 2020-08-08
XBUS: firmware not ready!
insmod: can't insert 'xbus_rpc.ko': Operation not permitted
Module                  Size  Used by    Tainted: P
jpeg                   74096  0
enc                   163623  0
vpu                   121736  0
isp                    79565  0
media_process_no_sc   146522  4 jpeg,enc,vpu,isp
vmm                     9264  0
INFO  <majestic> [main] main@1392: Majestic Lite for Fullhan (fh8852v200), version master+621d0ef, built on 2026-10-27 17:40

Loading dwc2 registers the USB host on both (fh8652 irq 71, fh8626v100 irq 43). ipcinfo -c reports fh8652/fh8658 with OpenIPC/ipctool#255 (fh8626v100 without it).

$ python3 .github/scripts/ci-matrix.py --self-test
ci-matrix: self-test ok (122 boards, 159 packages, 76 cases)

Scope

  • No kernel patches under general/package/all-patches/linux/ (those go to OpenIPC/linux)
  • No files specific to a single retail camera model (those go to OpenIPC/builder)
  • No probing or bring-up tooling (that goes to OpenIPC/ipctool)
  • Nothing under general/overlay/ or in a shared load_<vendor> script hardcodes a value specific to my board
  • Package sources come from an OpenIPC repository, and any version bump keeps at least the specificity of the pin it replaces (a new package should pin a full 40-character SHA)
  • No LD_PRELOAD, and no binaries that cannot be rebuilt from source. Unticked deliberately: fullhan-osdrv-fh865x adds the SDK's make_drivers object files. They are from the FH885XV200_IPC_V1.1.0 / FP13 vendor SDK release, the same release fullhan-osdrv-fh8852v200's modules were built from, and they are linked at build time. There is no LD_PRELOAD.
  • New code is selected by a defconfig, so CI actually builds it

@dimerr
dimerr marked this pull request as ready for review October 28, 2026 11:17
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Add FH8626V100 and FH865x lite boards with relinked FH865x media

✨ Enhancement ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Add four Fullhan lite boards using the FH8852V200 kernel family with SoC-specific kernel
 configurations.
• Relink FH865x SDK media objects for its ARMv7 kernel and reuse existing SDK userspace assets.
• Keep FH8626V100 media-free pending a published SDK; hardware validation remains outstanding.
Diagram

graph TD
  A["FH865x boards"] --> B["Shared kernel"] --> C["FH865x media package"] --> D["Media modules"] --> E["Media loader"] --> F["Majestic"]
  G["FH8626V100 board"] --> B
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Reuse FH8852V200 prebuilt modules
  • ➕ Avoids carrying SDK objects and maintaining Kbuild lists.
  • ➖ The ARMv6 prebuilt modules do not load against the FH865x ARMv7 kernel.
2. Defer FH865x media until source is available
  • ➕ Avoids introducing opaque vendor objects.
  • ➖ Leaves the new FH865x images without a media stack or streamer.

Recommendation: Relinking the SDK-shipped objects against the selected kernel is the practical route to FH865x media support when source is unavailable and the prebuilt modules are incompatible. Keep the binary provenance and untested-on-hardware status explicit; retaining FH8626V100 without media is preferable to importing factory-image modules.

Files changed (114) +5053 / -2

Enhancement (15) +489 / -0
fh8626v100_lite_defconfigDefine the FH8626V100 lite image +61/-0

Define the FH8626V100 lite image

• Selects the shared kernel family with the FH8626V100 configuration and standard lite packages. Does not enable a media stack or streamer.

br-ext-chip-fullhan/configs/fh8626v100_lite_defconfig

fh8652_lite_defconfigDefine the FH8652 lite media image +70/-0

Define the FH8652 lite media image

• Selects the FH865x kernel configuration, relinked media package, and Majestic while retaining the family ARMv6 userland toolchain.

br-ext-chip-fullhan/configs/fh8652_lite_defconfig

fh8656_lite_defconfigDefine the FH8656 lite media image +70/-0

Define the FH8656 lite media image

• Selects the shared FH865x kernel configuration, relinked media package, and Majestic for FH8656.

br-ext-chip-fullhan/configs/fh8656_lite_defconfig

fh8658_lite_defconfigDefine the FH8658 lite media image +70/-0

Define the FH8658 lite media image

• Selects the shared FH865x kernel configuration, relinked media package, and Majestic for FH8658.

br-ext-chip-fullhan/configs/fh8658_lite_defconfig

KbuildLink the BGM module +14/-0

Link the BGM module

• Lists FP13 SDK objects for the optional BGM kernel module.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/Kbuild

KbuildLink the encoder module +15/-0

Link the encoder module

• Lists FP13 SDK objects used to build enc.ko against the selected kernel.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/Kbuild

KbuildLink the ISP module +13/-0

Link the ISP module

• Lists FP13 SDK objects for ISP and MIPI support in isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/Kbuild

KbuildLink the JPEG module +10/-0

Link the JPEG module

• Lists FP13 SDK objects for JPEG and MJPEG functionality in jpeg.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/jpeg/Kbuild

KbuildLink the ARC-capable media core +19/-0

Link the ARC-capable media core

• Lists FP13 SDK objects for media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/Kbuild

KbuildLink the no-softcore media core +19/-0

Link the no-softcore media core

• Lists FP13 SDK objects for media_process_no_sc.ko, the fallback when ARC startup fails.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/Kbuild

KbuildLink the media-memory module +5/-0

Link the media-memory module

• Lists V1.1.0 SDK objects for vmm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vmm/Kbuild

KbuildLink the VPU module +15/-0

Link the VPU module

• Lists FP13 SDK objects for vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/Kbuild

KbuildLink the ARC RPC module +11/-0

Link the ARC RPC module

• Lists V1.1.0 SDK objects for xbus_rpc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/xbus_rpc/Kbuild

load_fullhanLoad FH865x media with an ARC fallback +39/-0

Load FH865x media with an ARC fallback

• Initializes media memory and the sensor, then loads the media modules. Uses media_process_no_sc when ARC RPC startup fails.

general/package/fullhan-osdrv-fh865x/files/script/load_fullhan

fullhan-osdrv-fh865x.mkBuild and install FH865x media against its kernel +58/-0

Build and install FH865x media against its kernel

• Relinks nine SDK-object modules using the selected Linux build and symbol dependencies. Installs them with FH8852V200 firmware, libraries, sensors, and the new loader.

general/package/fullhan-osdrv-fh865x/fullhan-osdrv-fh865x.mk

Other (99) +4564 / -2
ci-matrix.pyInclude four Fullhan boards in CI selection +4/-2

Include four Fullhan boards in CI selection

• Adds the new lite boards to the CI board list and adjusts Majestic impact expectations in self-tests.

.github/scripts/ci-matrix.py

fh8626v100.generic.configConfigure the FH8626V100 kernel +2262/-0

Configure the FH8626V100 kernel

• Adds an FH8626V100-specific configuration for the shared kernel, including its v2 SADC; leaves the camera-specific SD0 option disabled.

br-ext-chip-fullhan/board/fh8852v200/fh8626v100.generic.config

fh865x.generic.configConfigure the shared FH865x ARMv7 kernel +2287/-0

Configure the shared FH865x ARMv7 kernel

• Adds the FH865x kernel configuration shared by FH8652, FH8656, and FH8658, including Cortex-A7, VFPv3, and NEON support.

br-ext-chip-fullhan/board/fh8852v200/fh865x.generic.config

Config.inExpose the FH865x media package +1/-0

Expose the FH865x media package

• Sources its Kconfig entry in the general package menu.

general/package/Config.in

Config.inDeclare the kernel-dependent FH865x media package +10/-0

Declare the kernel-dependent FH865x media package

• Adds the package option and documents its SDK-object modules and reused FH8852V200 assets.

general/package/fullhan-osdrv-fh865x/Config.in

bgm_adapt.o_shippedSupply BGM adapter object +0/-0

Supply BGM adapter object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_adapt.o_shipped

bgm_chn.o_shippedSupply BGM channel object +0/-0

Supply BGM channel object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_chn.o_shipped

bgm_confid.o_shippedSupply BGM configuration object +0/-0

Supply BGM configuration object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_confid.o_shipped

bgm_hw_handle.o_shippedSupply BGM hardware-handler object +0/-0

Supply BGM hardware-handler object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_hw_handle.o_shipped

bgm_hw_handle_v3.o_shippedSupply BGM v3 hardware-handler object +0/-0

Supply BGM v3 hardware-handler object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_hw_handle_v3.o_shipped

bgm_linux.o_shippedSupply BGM Linux object +0/-0

Supply BGM Linux object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_linux.o_shipped

bgm_low_power.o_shippedSupply BGM low-power object +0/-0

Supply BGM low-power object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_low_power.o_shipped

bgm_os_common.o_shippedSupply BGM OS-common object +0/-0

Supply BGM OS-common object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_os_common.o_shipped

bgm_rtt.o_shippedSupply BGM RTThread object +0/-0

Supply BGM RTThread object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_rtt.o_shipped

bgm_sw.o_shippedSupply BGM software object +0/-0

Supply BGM software object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_sw.o_shipped

bgm_usr.o_shippedSupply BGM userspace-interface object +0/-0

Supply BGM userspace-interface object

• Adds an opaque SDK object linked into bgm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/bgm/bgm_usr.o_shipped

hhe_fw.o_shippedSupply encoder firmware object +0/-0

Supply encoder firmware object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_fw.o_shipped

hhe_fw_default.o_shippedSupply default encoder-firmware object +0/-0

Supply default encoder-firmware object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_fw_default.o_shipped

hhe_header.o_shippedSupply encoder header object +0/-0

Supply encoder header object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_header.o_shipped

hhe_lambda.o_shippedSupply encoder lambda object +0/-0

Supply encoder lambda object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_lambda.o_shipped

hhe_linux.o_shippedSupply encoder Linux object +0/-0

Supply encoder Linux object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_linux.o_shipped

hhe_low_power.o_shippedSupply encoder low-power object +0/-0

Supply encoder low-power object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_low_power.o_shipped

hhe_manage.o_shippedSupply encoder management object +0/-0

Supply encoder management object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_manage.o_shipped

hhe_os_common.o_shippedSupply encoder OS-common object +0/-0

Supply encoder OS-common object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_os_common.o_shipped

hhe_param.o_shippedSupply encoder parameter object +0/-0

Supply encoder parameter object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_param.o_shipped

hhe_rtt.o_shippedSupply encoder RTThread object +0/-0

Supply encoder RTThread object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_rtt.o_shipped

hhe_smart.o_shippedSupply smart-encoder object +0/-0

Supply smart-encoder object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/hhe_smart.o_shipped

pae_header.o_shippedSupply PAE header object +0/-0

Supply PAE header object

• Adds an opaque SDK object linked into enc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/enc/pae_header.o_shipped

buf_switch_cfg.o_shippedSupply ISP buffer-switch object +0/-0

Supply ISP buffer-switch object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/buf_switch_cfg.o_shipped

gme_cal.o_shippedSupply ISP calibration object +0/-0

Supply ISP calibration object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/gme_cal.o_shipped

isp_common.o_shippedSupply common ISP object +0/-0

Supply common ISP object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/isp_common.o_shipped

isp_linux.o_shippedSupply ISP Linux object +0/-0

Supply ISP Linux object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/isp_linux.o_shipped

isp_os.o_shippedSupply ISP OS object +0/-0

Supply ISP OS object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/isp_os.o_shipped

isp_rtt.o_shippedSupply ISP RTThread object +0/-0

Supply ISP RTThread object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/isp_rtt.o_shipped

mipi_driver.o_shippedSupply MIPI driver object +0/-0

Supply MIPI driver object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/mipi_driver.o_shipped

mipi_linux.o_shippedSupply MIPI Linux object +0/-0

Supply MIPI Linux object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/mipi_linux.o_shipped

mipi_proc.o_shippedSupply MIPI proc object +0/-0

Supply MIPI proc object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/mipi_proc.o_shipped

mipi_rtt.o_shippedSupply MIPI RTThread object +0/-0

Supply MIPI RTThread object

• Adds an opaque SDK object linked into isp.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/isp/mipi_rtt.o_shipped

jpeg_linux.o_shippedSupply JPEG Linux object +0/-0

Supply JPEG Linux object

• Adds an opaque SDK object linked into jpeg.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/jpeg/jpeg_linux.o_shipped

jpeg_low_power.o_shippedSupply JPEG low-power object +0/-0

Supply JPEG low-power object

• Adds an opaque SDK object linked into jpeg.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/jpeg/jpeg_low_power.o_shipped

jpeg_manage.o_shippedSupply JPEG management object +0/-0

Supply JPEG management object

• Adds an opaque SDK object linked into jpeg.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/jpeg/jpeg_manage.o_shipped

jpeg_os_common.o_shippedSupply JPEG OS-common object +0/-0

Supply JPEG OS-common object

• Adds an opaque SDK object linked into jpeg.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/jpeg/jpeg_os_common.o_shipped

jpeg_reg_process.o_shippedSupply JPEG register-processing object +0/-0

Supply JPEG register-processing object

• Adds an opaque SDK object linked into jpeg.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/jpeg/jpeg_reg_process.o_shipped

jpeg_rtt.o_shippedSupply JPEG RTThread object +0/-0

Supply JPEG RTThread object

• Adds an opaque SDK object linked into jpeg.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/jpeg/jpeg_rtt.o_shipped

mjpeg_rc.o_shippedSupply MJPEG rate-control object +0/-0

Supply MJPEG rate-control object

• Adds an opaque SDK object linked into jpeg.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/jpeg/mjpeg_rc.o_shipped

fh_std.o_shippedSupply media standard-interface object +0/-0

Supply media standard-interface object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/fh_std.o_shipped

fh_std_autotest.o_shippedSupply media autotest object +0/-0

Supply media autotest object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/fh_std_autotest.o_shipped

fh_std_proc.o_shippedSupply media proc-interface object +0/-0

Supply media proc-interface object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/fh_std_proc.o_shipped

media_calc.o_shippedSupply media calculation object +0/-0

Supply media calculation object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/media_calc.o_shipped

media_chip_info.o_shippedSupply media chip-information object +0/-0

Supply media chip-information object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/media_chip_info.o_shipped

media_data_manage.o_shippedSupply media data-management object +0/-0

Supply media data-management object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/media_data_manage.o_shipped

media_low_power.o_shippedSupply media low-power object +0/-0

Supply media low-power object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/media_low_power.o_shipped

media_manage.o_shippedSupply media management object +0/-0

Supply media management object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/media_manage.o_shipped

media_process_linux.o_shippedSupply media Linux object +0/-0

Supply media Linux object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/media_process_linux.o_shipped

media_process_rtt.o_shippedSupply media RTThread object +0/-0

Supply media RTThread object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/media_process_rtt.o_shipped

media_share_ram.o_shippedSupply media shared-RAM object +0/-0

Supply media shared-RAM object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/media_share_ram.o_shipped

media_stream_manage.o_shippedSupply media stream-management object +0/-0

Supply media stream-management object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/media_stream_manage.o_shipped

rc_fh.o_shippedSupply media rate-control object +0/-0

Supply media rate-control object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/rc_fh.o_shipped

softcore.o_shippedSupply media softcore object +0/-0

Supply media softcore object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/softcore.o_shipped

softcore_master.o_shippedSupply media softcore-master object +0/-0

Supply media softcore-master object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/softcore_master.o_shipped

softcore_veu.o_shippedSupply media softcore-VEU object +0/-0

Supply media softcore-VEU object

• Adds an opaque SDK object linked into media_process.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process/softcore_veu.o_shipped

fh_std.o_shippedSupply no-softcore standard-interface object +0/-0

Supply no-softcore standard-interface object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/fh_std.o_shipped

fh_std_autotest.o_shippedSupply no-softcore autotest object +0/-0

Supply no-softcore autotest object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/fh_std_autotest.o_shipped

fh_std_proc.o_shippedSupply no-softcore proc-interface object +0/-0

Supply no-softcore proc-interface object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/fh_std_proc.o_shipped

media_calc.o_shippedSupply no-softcore media calculation object +0/-0

Supply no-softcore media calculation object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/media_calc.o_shipped

media_chip_info.o_shippedSupply no-softcore chip-information object +0/-0

Supply no-softcore chip-information object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/media_chip_info.o_shipped

media_data_manage.o_shippedSupply no-softcore data-management object +0/-0

Supply no-softcore data-management object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/media_data_manage.o_shipped

media_low_power.o_shippedSupply no-softcore low-power object +0/-0

Supply no-softcore low-power object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/media_low_power.o_shipped

media_manage.o_shippedSupply no-softcore media-management object +0/-0

Supply no-softcore media-management object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/media_manage.o_shipped

media_process_linux.o_shippedSupply no-softcore Linux object +0/-0

Supply no-softcore Linux object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/media_process_linux.o_shipped

media_process_rtt.o_shippedSupply no-softcore RTThread object +0/-0

Supply no-softcore RTThread object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/media_process_rtt.o_shipped

media_share_ram.o_shippedSupply no-softcore shared-RAM object +0/-0

Supply no-softcore shared-RAM object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/media_share_ram.o_shipped

media_stream_manage.o_shippedSupply no-softcore stream-management object +0/-0

Supply no-softcore stream-management object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/media_stream_manage.o_shipped

rc_fh.o_shippedSupply no-softcore rate-control object +0/-0

Supply no-softcore rate-control object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/rc_fh.o_shipped

softcore.o_shippedSupply no-softcore media object +0/-0

Supply no-softcore media object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/softcore.o_shipped

softcore_master.o_shippedSupply no-softcore master object +0/-0

Supply no-softcore master object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/softcore_master.o_shipped

softcore_veu.o_shippedSupply no-softcore VEU object +0/-0

Supply no-softcore VEU object

• Adds an opaque SDK object linked into media_process_no_sc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/media_process_no_sc/softcore_veu.o_shipped

media-mem.o_shippedSupply media-memory object +0/-0

Supply media-memory object

• Adds an opaque SDK object linked into vmm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vmm/media-mem.o_shipped

mmz-userdev.o_shippedSupply MMZ user-device object +0/-0

Supply MMZ user-device object

• Adds an opaque SDK object linked into vmm.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vmm/mmz-userdev.o_shipped

vpu_ext_buf.o_shippedSupply VPU external-buffer object +0/-0

Supply VPU external-buffer object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_ext_buf.o_shipped

vpu_frame_ctrl.o_shippedSupply VPU frame-control object +0/-0

Supply VPU frame-control object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_frame_ctrl.o_shipped

vpu_hw_layer.o_shippedSupply VPU hardware-layer object +0/-0

Supply VPU hardware-layer object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_hw_layer.o_shipped

vpu_linux.o_shippedSupply VPU Linux object +0/-0

Supply VPU Linux object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_linux.o_shipped

vpu_loopbuf.o_shippedSupply VPU loop-buffer object +0/-0

Supply VPU loop-buffer object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_loopbuf.o_shipped

vpu_low_power.o_shippedSupply VPU low-power object +0/-0

Supply VPU low-power object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_low_power.o_shipped

vpu_manage.o_shippedSupply VPU management object +0/-0

Supply VPU management object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_manage.o_shipped

vpu_os_common.o_shippedSupply VPU OS-common object +0/-0

Supply VPU OS-common object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_os_common.o_shipped

vpu_osd.o_shippedSupply VPU OSD object +0/-0

Supply VPU OSD object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_osd.o_shipped

vpu_rtt.o_shippedSupply VPU RTThread object +0/-0

Supply VPU RTThread object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_rtt.o_shipped

vpu_split.o_shippedSupply VPU splitting object +0/-0

Supply VPU splitting object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_split.o_shipped

vpu_trans_data.o_shippedSupply VPU transfer-data object +0/-0

Supply VPU transfer-data object

• Adds an opaque SDK object linked into vpu.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/vpu/vpu_trans_data.o_shipped

loader.o_shippedSupply ARC loader object +0/-0

Supply ARC loader object

• Adds an opaque SDK object linked into xbus_rpc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/xbus_rpc/loader.o_shipped

vbus_compatible.o_shippedSupply compatible-bus object +0/-0

Supply compatible-bus object

• Adds an opaque SDK object linked into xbus_rpc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/xbus_rpc/vbus_compatible.o_shipped

xbus_audio.o_shippedSupply XBUS audio object +0/-0

Supply XBUS audio object

• Adds an opaque SDK object linked into xbus_rpc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/xbus_rpc/xbus_audio.o_shipped

xbus_core.o_shippedSupply XBUS core object +0/-0

Supply XBUS core object

• Adds an opaque SDK object linked into xbus_rpc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/xbus_rpc/xbus_core.o_shipped

xbus_perf.o_shippedSupply XBUS performance object +0/-0

Supply XBUS performance object

• Adds an opaque SDK object linked into xbus_rpc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/xbus_rpc/xbus_perf.o_shipped

xbus_pmu.o_shippedSupply XBUS PMU object +0/-0

Supply XBUS PMU object

• Adds an opaque SDK object linked into xbus_rpc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/xbus_rpc/xbus_pmu.o_shipped

xbus_proc.o_shippedSupply XBUS proc-interface object +0/-0

Supply XBUS proc-interface object

• Adds an opaque SDK object linked into xbus_rpc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/xbus_rpc/xbus_proc.o_shipped

xbus_rshell.o_shippedSupply XBUS remote-shell object +0/-0

Supply XBUS remote-shell object

• Adds an opaque SDK object linked into xbus_rpc.ko.

general/package/fullhan-osdrv-fh865x/files/make_drivers/xbus_rpc/xbus_rshell.o_shipped

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (3) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. New boards lack hardware validation 📘 Rule violation ☼ Reliability
Description
The four new defconfigs add firmware images, including a media-loading stack for the FH865x boards,
without any real-camera test evidence. The PR explicitly states that no FH8626V100 or FH865x camera
was tested, so boot and media behaviour remain unverified on every affected board.
Code

br-ext-chip-fullhan/configs/fh8652_lite_defconfig[R49-52]

+# Packages
+BR2_PACKAGE_DROPBEAR_OPENIPC=y
+BR2_PACKAGE_FULLHAN_OSDRV_FH865X=y
+BR2_PACKAGE_IPCTOOL=y
Evidence
The new defconfig selects firmware-building packages and the PR description states that no
FH8626V100 or FH865x camera was tested. This fails the hardware-evidence gate for a change that can
alter camera firmware behaviour.

Rule 3: Hardware evidence is present and honest
br-ext-chip-fullhan/configs/fh8652_lite_defconfig[49-52]
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[26-39]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The PR adds new camera firmware images and enables the FH865x media package, but the submitted evidence says no FH8626V100 or FH865x camera was tested.
## Fix Focus Areas
- br-ext-chip-fullhan/configs/fh8626v100_lite_defconfig[46-50]
- br-ext-chip-fullhan/configs/fh8652_lite_defconfig[49-52]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[13-39]
## Recommended Fix
Test the affected boards on real hardware and add board-specific before/after output covering boot, media-driver loading, and streaming or clearly documented hardware limitations with the corresponding evidence.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Module dependencies bypass standard loading 📘 Rule violation ☼ Reliability
Description
The shipped load_fullhan script invokes insmod directly for vmm.ko, xbus_rpc.ko, the
selected media module, and each dependent codec module. Direct insertion bypasses the tree's
dependency-resolving loader, so a changed or additional module dependency can make media startup
fail even when the required module is present in the image.
Code

general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[R35-39]

+insmod $media
+insmod isp.ko
+insmod vpu.ko
+insmod enc.ko
+insmod jpeg.ko
Evidence
The added shipped script directly calls insmod for every media module. The checklist requires
shipped scripts to use modprobe so module dependencies resolve.

Rule 13: Shipped scripts follow tree conventions
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[17-17]
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[26-30]
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[35-39]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The shipped FH865x loader uses `insmod` for all kernel modules instead of the repository-standard dependency-aware loader.
## Fix Focus Areas
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[17-17]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[26-30]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[35-39]
## Recommended Fix
Install the modules in the standard module directory and replace direct `insmod` calls with `modprobe`, passing module parameters in modprobe-compatible form so dependencies are resolved from the module metadata.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Other cameras inherit a sensor reset 📘 Rule violation ≡ Correctness
Description
load_fullhan unconditionally drives GPIO 13 low and high around media loading instead of obtaining
the sensor-reset pin from board-specific configuration. Because the FH8652, FH8656 and FH8658
defconfigs select the shared package, that sequence also runs on variants whose sensor wiring may
use a different pin or reset method.
Code

general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[20]

+set_gpio 13 0
Evidence
The cited load_fullhan lines contain the literal GPIO 13 operations before and after media
loading, and the FH8652 defconfig is one of the three FH865x defconfigs selecting the shared
package. Together, these show that a device-specific reset pin is applied through a family-wide
loader rather than supplied per board.

Rule 7: No device-specific values in generic configuration
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[19-20]
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[32-33]
br-ext-chip-fullhan/configs/fh8652_lite_defconfig[49-52]
Best Practice: Repository guidelines

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The shared FH865x `load_fullhan` script hardcodes GPIO 13 for sensor reset, applying that pin assignment to every board that selects the package.
## Fix Focus Areas
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[19-20]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[32-33]
- br-ext-chip-fullhan/configs/fh8652_lite_defconfig[42-52]
## Recommended Fix
Remove the literal GPIO 13 assignment from the shared loader. Obtain the reset pin or method from applicable per-board pinmux, GPIO, or driver configuration, or from autodetection, and preserve the reset sequence for boards that define that pin.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View action required (2)
4. FH865x images ship an unused audio driver ✓ Resolved
Description
The package builds and installs bgm.ko as part of FULLHAN_OSDRV_FH865X_MODULES, but the new
loader never loads that module. The installed driver and its shipped object files therefore add
image contents without a reachable runtime consumer on these boards.
Code

general/package/fullhan-osdrv-fh865x/fullhan-osdrv-fh865x.mk[R21-22]

+FULLHAN_OSDRV_FH865X_MODULES = xbus_rpc vmm media_process media_process_no_sc \
+	vpu isp bgm enc jpeg
Evidence
The package's module list includes bgm, and the install loop copies every listed module into the
target filesystem. The loader loads vmm, xbus_rpc, the selected media module, isp, vpu,
enc, and jpeg, but has no bgm load or runtime reference.

general/package/fullhan-osdrv-fh865x/fullhan-osdrv-fh865x.mk[21-22]
general/package/fullhan-osdrv-fh865x/fullhan-osdrv-fh865x.mk[38-40]
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[35-39]
Best Practice: Repository guidelines

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`bgm.ko` is built and installed for every FH865x image, but no runtime script or other selected component loads or references it.
## Fix Focus Areas
- general/package/fullhan-osdrv-fh865x/fullhan-osdrv-fh865x.mk[21-22]
- general/package/fullhan-osdrv-fh865x/fullhan-osdrv-fh865x.mk[38-40]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[35-39]
## Recommended Fix
Remove `bgm` and its associated shipped objects from the package unless FH865x audio support requires it; if it is required, add a verified runtime loading path and document the applicable selection.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. FH865x sensors never receive reset 🐞 Bug ≡ Correctness
Description
set_gpio() exports GPIO 13 but writes its direction and value through /sys/class/gpio/GPIO13
instead of the lowercase gpio13 path created by GPIO sysfs. Each FH865x image installs this
loader, so both the sensor-reset and reset-release writes fail during media startup.
Code

general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[R5-8]

+    if [ ! -d "/sys/class/gpio/GPIO$1" ]; then
+        echo $1 > /sys/class/gpio/export
+        echo out > /sys/class/gpio/GPIO$1/direction
+    fi
Evidence
The new loader exports the pin and writes through uppercase GPIO$1, then invokes the helper to
assert and release sensor reset. The FH865x kernel enables GPIO sysfs, and all three new board
configurations select the package that installs this loader; another repository GPIO sysfs user
accesses lowercase gpio27 and gpio28.

general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[3-10]
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[19-35]
br-ext-chip-fullhan/board/fh8852v200/fh865x.generic.config[1172-1179]
general/package/hisilicon-osdrv-hi3516cv500/files/script/demo_config.sh[17-23]
br-ext-chip-fullhan/configs/fh8652_lite_defconfig[49-51]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The FH865x loader uses uppercase GPIO sysfs paths, so its sensor reset writes target nonexistent files.
## Fix Focus Areas
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[5-10]
## Recommended Fix
Use `/sys/class/gpio/gpio$1` consistently for the directory check, direction write, and value write; then verify the reset sequence on FH865x hardware.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

6. Sensor reset comments only restate actions ✓ Resolved
Description
The new loader comments #reset sensor and #unreset sensor merely repeat the immediately
following GPIO writes without explaining why the sensor must be held in reset during module
initialization. Future readers still have no reason for the ordering or guidance about which
hardware requirement it protects.
Code

general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[19]

+#reset sensor
Evidence
The added comments only label the adjacent GPIO writes as reset and unreset operations, without
explaining their purpose or required ordering. This conflicts with the checklist requirement that
new comments explain why rather than what.

CLAUDE.md: Write comments that explain why, not what: CLAUDE.md: Write comments that explain why, not what: CLAUDE.md: Write comments that explain why, not what: CLAUDE.md: Write comments that explain why, not what: CLAUDE.md: Write comments that explain why, not what: CLAUDE.md: Write comments that explain why, not what: CLAUDE.md: Write comments that explain why, not what: CLAUDE.md: Write comments that explain why, not what
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[19-20]
general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[32-33]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The loader adds comments that narrate the next GPIO operation but do not explain why the sensor reset must surround media initialization.
## Fix Focus Areas
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[19-20]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[32-33]
## Recommended Fix
Replace the action-only comments with a concise explanation of the hardware or initialization requirement that makes the reset-before-load and release-after-load ordering necessary.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Tip of the day
💡 Did you know, you can turn on the rule miner and Qodo learns your standards from review history

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment on lines +49 to +52
# Packages
BR2_PACKAGE_DROPBEAR_OPENIPC=y
BR2_PACKAGE_FULLHAN_OSDRV_FH865X=y
BR2_PACKAGE_IPCTOOL=y

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. New boards lack hardware validation 📘 Rule violation ☼ Reliability

The four new defconfigs add firmware images, including a media-loading stack for the FH865x boards,
without any real-camera test evidence. The PR explicitly states that no FH8626V100 or FH865x camera
was tested, so boot and media behaviour remain unverified on every affected board.
Agent Prompt
## Issue description
The PR adds new camera firmware images and enables the FH865x media package, but the submitted evidence says no FH8626V100 or FH865x camera was tested.

## Fix Focus Areas
- br-ext-chip-fullhan/configs/fh8626v100_lite_defconfig[46-50]
- br-ext-chip-fullhan/configs/fh8652_lite_defconfig[49-52]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[13-39]

## Recommended Fix
Test the affected boards on real hardware and add board-specific before/after output covering boot, media-driver loading, and streaming or clearly documented hardware limitations with the corresponding evidence.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +35 to +39
insmod $media
insmod isp.ko
insmod vpu.ko
insmod enc.ko
insmod jpeg.ko

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Module dependencies bypass standard loading 📘 Rule violation ☼ Reliability

The shipped load_fullhan script invokes insmod directly for vmm.ko, xbus_rpc.ko, the
selected media module, and each dependent codec module. Direct insertion bypasses the tree's
dependency-resolving loader, so a changed or additional module dependency can make media startup
fail even when the required module is present in the image.
Agent Prompt
## Issue description
The shipped FH865x loader uses `insmod` for all kernel modules instead of the repository-standard dependency-aware loader.

## Fix Focus Areas
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[17-17]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[26-30]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[35-39]

## Recommended Fix
Install the modules in the standard module directory and replace direct `insmod` calls with `modprobe`, passing module parameters in modprobe-compatible form so dependencies are resolved from the module metadata.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

insmod vmm.ko mmz=anonymous,0,0xA2000000,32M anony=1

#reset sensor
set_gpio 13 0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

3. Other cameras inherit a sensor reset 📘 Rule violation ≡ Correctness

load_fullhan unconditionally drives GPIO 13 low and high around media loading instead of obtaining
the sensor-reset pin from board-specific configuration. Because the FH8652, FH8656 and FH8658
defconfigs select the shared package, that sequence also runs on variants whose sensor wiring may
use a different pin or reset method.
Agent Prompt
## Issue description
The shared FH865x `load_fullhan` script hardcodes GPIO 13 for sensor reset, applying that pin assignment to every board that selects the package.

## Fix Focus Areas
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[19-20]
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[32-33]
- br-ext-chip-fullhan/configs/fh8652_lite_defconfig[42-52]

## Recommended Fix
Remove the literal GPIO 13 assignment from the shared loader. Obtain the reset pin or method from applicable per-board pinmux, GPIO, or driver configuration, or from autodetection, and preserve the reset sequence for boards that define that pin.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread general/package/fullhan-osdrv-fh865x/fullhan-osdrv-fh865x.mk Outdated
Comment on lines +5 to +8
if [ ! -d "/sys/class/gpio/GPIO$1" ]; then
echo $1 > /sys/class/gpio/export
echo out > /sys/class/gpio/GPIO$1/direction
fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

5. Fh865x sensors never receive reset 🐞 Bug ≡ Correctness

set_gpio() exports GPIO 13 but writes its direction and value through /sys/class/gpio/GPIO13
instead of the lowercase gpio13 path created by GPIO sysfs. Each FH865x image installs this
loader, so both the sensor-reset and reset-release writes fail during media startup.
Agent Prompt
## Issue description
The FH865x loader uses uppercase GPIO sysfs paths, so its sensor reset writes target nonexistent files.
## Fix Focus Areas
- general/package/fullhan-osdrv-fh865x/files/script/load_fullhan[5-10]
## Recommended Fix
Use `/sys/class/gpio/gpio$1` consistently for the directory check, direction write, and value write; then verify the reset sequence on FH865x hardware.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@dimerr

dimerr commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator Author

Qodo review, point by point. Fixes are in 030322a.

  1. No hardware validation: correct, and the reason this is a draft.
  2. insmod instead of modprobe: fixed. load_fullhan uses modprobe, and depmod indexes fullhan/. One exception, with a comment in the script: when the ARC does not start, media_process_no_sc stands in for media_process. depmod records isp, vpu, enc and jpeg as depending on media_process → xbus_rpc (modules.dep: fullhan/isp.ko: fullhan/media_process.ko fullhan/xbus_rpc.ko), so modprobe isp would pull the ARC path back in and fail. On that branch they go in by path.
  3. GPIO13 sensor reset in a shared loader: kept. GPIO13 is the SoC's CIS_RSTN. It is the same in the SDK's load_modules_FH885{2,6,8}V200.sh, in the FH8652 camera's load_modules_FH8652.sh and in the existing fullhan-osdrv-fh8852v200 loader, so it is the family default, not one board's.
  4. bgm.ko shipped but not loaded: fixed. It is no longer built (FH885xV200's loader does not load it either).
  5. GPIO sysfs path is lowercase: declined. This kernel's Fullhan GPIO driver names its lines. On fh8652 under qemu, echo 13 > /sys/class/gpio/export; ls /sys/class/gpio gives GPIO13 export gpiochip0 gpiochip32 unexport.
  6. Comments restate actions: fixed. They now say why the sensor is held in reset.

Re-tested in qemu-hisilicon fh8652: modprobe xbus_rpc fails (QEMU has no ARC), then media_process_no_sc, isp, vpu, enc and jpeg load, and the boot checks pass 5/5. rootfs is 4672/5120 KB.

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Qodo review, point by point. Fixes are in 030322a.

  1. No hardware validation: correct, and the reason this is a draft.
  2. insmod instead of modprobe: fixed. load_fullhan uses modprobe, and depmod indexes fullhan/. One exception, with a comment in the script: when the ARC does not start, media_process_no_sc stands in for media_process. depmod records isp, vpu, enc and jpeg as depending on media_process → xbus_rpc (modules.dep: fullhan/isp.ko: fullhan/media_process.ko fullhan/xbus_rpc.ko), so modprobe isp would pull the ARC path back in and fail. On that branch they go in by path.
  3. GPIO13 sensor reset in a shared loader: kept. GPIO13 is the SoC's CIS_RSTN. It is the same in the SDK's load_modules_FH885{2,6,8}V200.sh, in the FH8652 camera's load_modules_FH8652.sh and in the existing fullhan-osdrv-fh8852v200 loader, so it is the family default, not one board's.
  4. bgm.ko shipped but not loaded: fixed. It is no longer built (FH885xV200's loader does not load it either).
  5. GPIO sysfs path is lowercase: declined. This kernel's Fullhan GPIO driver names its lines. On fh8652 under qemu, echo 13 > /sys/class/gpio/export; ls /sys/class/gpio gives GPIO13 export gpiochip0 gpiochip32 unexport.
  6. Comments restate actions: fixed. They now say why the sensor is held in reset.

Re-tested in qemu-hisilicon fh8652: modprobe xbus_rpc fails (QEMU has no ARC), then media_process_no_sc, isp, vpu, enc and jpeg load, and the boot checks pass 5/5. rootfs is 4672/5120 KB.

Thanks for the point-by-point update. Based on the explanation, commit 030322a appears to address finding 2, finding 4, and finding 6:

  • finding 1 — New boards lack hardware validation: remains valid and intentionally open while this is a draft.
  • finding 2 — Module dependencies bypass standard loading: the modprobe path addresses the normal case. The documented insmod fallback for media_process_no_sc is technically justified because the generated dependency metadata would otherwise reintroduce media_process and the unavailable ARC path.
  • finding 3 — Other cameras inherit a sensor reset: the cited SDK and existing loader consistency supports keeping GPIO13 as the FH865x family default. The shared-loader concern is therefore likely resolved by the additional evidence, though hardware confirmation would strengthen it.
  • finding 4 — Unused bgm.ko: addressed by removing it from the build/install set.
  • finding 5 — GPIO sysfs casing: the QEMU result directly contradicts the original assumption for this Fullhan GPIO driver (GPIO13), so this finding appears invalid for the target kernel.
  • finding 6 — Sensor-reset comments: addressed by explaining the reset ordering and purpose.

I can’t independently verify commit 030322a or change finding states from this comment alone. The remaining substantive blocker is finding 1, unless the draft’s documented lack of hardware validation is considered an intentional limitation.

Base automatically changed from fullhan/siblings-external-toolchain to master October 28, 2026 12:10
Both now run on the one fullhan-fh8852v200 4.9.129 kernel: FH8626V100
from OpenIPC/linux#53, FH865x from the ARCH_FH865x port. So the boards
take OPENIPC_SOC_FAMILY=fh8852v200 and reuse its published kernel
tarball and toolchain; only the kernel config differs.

- fh8626v100.generic.config: the FH8852V200 config moved to
  ARCH_FH8626V100, with the v2 SADC it has. The AJL33PQ0866-only SD0
  option stays off; that is one camera's pinmux, not the SoC's.
- fh865x.generic.config: ARCH_FH865x, ARMv7, VFPv3/NEON, shared by
  fh8652, fh8656 and fh8658. Userland stays ARMv6 on the family
  toolchain, which a Cortex-A7 runs as is.

These images carry no media stack yet. FH865x gets one in the next
commit. FH8626V100 does not: its media drivers come from an
FH8626V100_IPC SDK (V1.0.0 on 3.0.8, V2.0.0 on 4.9), and neither SDK has
been published. The FH885xV200 SDK's media_process has no FH8626 chip
table, and the factory-image modules are not something this tree takes
(best_practices.md 2.4).

Depends on the FH865x kernel port reaching fullhan-fh8852v200.

Built locally against that branch: fh8652_lite uImage 1435/2048 KB,
rootfs 2308/5120 KB; fh8626v100_lite 1434/2048 KB, 2312/5120 KB. In
qemu-hisilicon the fh8652, fh8656, fh8658 and fh8626v100 machines boot
them to the login prompt with a DHCP lease and a written JFFS2 overlay.
Not run on a camera.
… objects

FH865x runs the FH885xV200 media code: the FH885XV200_IPC_V1.1.0 SDK
covers it (its media_process carries chip_fh865x, and its guides are
"FH885xV200 & FH865x"), and an FH8652 camera loads exactly that module
set. The SDK's prebuilt modules are ARMv6 builds for the FH885xV200
kernel, so they cannot load on the Cortex-A7 kernel. But the SDK also
ships them as objects to link against the board's kernel
(media_support/make_drivers). This package carries those objects, the
V1.1.0 release with FP13 over it, and links them against this kernel at
build time. Linked the same way against the FH885xV200 kernel, they
reproduce every module in fullhan-osdrv-fh8852v200 instruction for
instruction.

The libraries, sensors and ARC firmware are fullhan-osdrv-fh8852v200's,
which are that SDK's, so the boards take OPENIPC_SOC_FAMILY=fh8852v200
and majestic.fh8852v200. fh8652, fh8656 and fh8658 now select this
package and majestic.

load_fullhan uses the FH885xV200 memory layout (U-Boot gives FH865x
mem=32M too). The SDK has no FH865x build of the ARC firmware, only the
FH885xV200 one, which is the same code as the FH8652 camera's, a few
months newer. The ARC runs audio and the encoders' softcore, not video,
so when xbus_rpc cannot start it the script loads media_process_no_sc
and keeps video.

The kernel side of the ABI (exported v6 cache entry points, kmalloc
slots for 32-byte lines) is in the FH865x port in OpenIPC/linux.

Built locally: fh8652_lite uImage 1435/2048 KB, rootfs 4700/5120 KB.
In qemu-hisilicon's fh8652 machine it boots to the login prompt with
DHCP and the JFFS2 overlay. xbus_rpc stops at "firmware not ready",
since QEMU has no ARC, and then media_process_no_sc, isp, vpu, enc and
jpeg load. majestic starts ("Majestic Lite for Fullhan (fh8852v200)")
and gets no further, because QEMU has no ISP or VPU. Not run on an
FH865x camera.
- load_fullhan loads with modprobe; depmod indexes the fullhan/
  directory. The exception is the fallback with media_process_no_sc,
  which goes in by path: depmod ties isp, vpu, enc and jpeg to
  media_process and xbus_rpc, and modprobe would pull those back in.
- bgm.ko is no longer built: nothing loads it, as on FH885xV200.
- The sensor-reset comments say why GPIO13 is held: it is the SoC's
  CIS_RSTN in the SDK's and the FH8652 camera's load scripts.

In qemu-hisilicon's fh8652 machine (no ARC) modprobe xbus_rpc fails,
then media_process_no_sc, isp, vpu, enc and jpeg load. rootfs
4672/5120 KB.
@dimerr
dimerr force-pushed the fullhan/fh865x-fh8626-boards branch from 030322a to effac50 Compare October 28, 2026 12:22
@dimerr
dimerr merged commit ed56f65 into master Oct 28, 2026
53 of 56 checks passed
@dimerr
dimerr deleted the fullhan/fh865x-fh8626-boards branch October 28, 2026 13:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant