Add gk7202v300_lite_generic-w7 device profile (GK-W7, GC2053-DVP, SSV6006C Wi-Fi) (#119)

GK-W7 board (product string ipc533331a-W7-gc2053dvp-f8): GK7202V300, 8MB NOR,
GC2053 wired in DVP/parallel mode with the SID strap high, iComm/SSV SSV6006C USB
WiFi (8065:6000), no Ethernet PHY.

Differs from the generic gk7202v300_lite target in two ways it cannot express
without a profile. The sensor is on the DVP pads, so open_sys_config's MIPI
arguments mux i2c to pads nothing is connected to and no sensor is ever detected;
customizer.sh opts into the sensor_dvp / sensor_mclk gate added in
OpenIPC/firmware#2276. And the Lite target ships only mt7601u, which will never
bind an SSV part, so the defconfig selects BR2_PACKAGE_SSV635X_OPENIPC and the
overlay adds the ssv6x5x-generic wlandev branch.

Named generic-w7 rather than after a vendor: the board carries no identifiable
vendor marking, and "gk" is Goke -- the SoC vendor, already encoded in the soc
field -- not the board's. `generic` is the established token here
(gk7205v200_otg_generic, ssc30kq_rubyfpv_generic).

Verified: builds green, rootfs 5017600B with 220KB of headroom in the 5120KB
partition; the baked load_goke is master's verbatim (md5 confirmed after
normalising the build's comment stripping); customizer.sh carries both env vars
and is sh/dash/ash clean; S30customizer runs it on first boot ahead of S70vendor,
so the vars are set before load_goke reads them; and on hardware, master's
load_goke driven only by those two vars brings up the DVP GC2053 at 1920x1080
@ 25 fps with i2c init failures 0 and ISP errors 0.

Not verified: the conjunction of the above on a single unattended first boot from
this image with no hand-set environment. Each link is independently evidenced;
the composition is not. Follow-up expected on the PR.

Headroom note for later: 220KB of rootfs headroom is about 4% of the partition,
and this family has a history of profiles going over as majestic grows.
gk7202v300_lite.list is the lever.

Refs: OpenIPC/firmware#2074, OpenIPC/firmware#2276
This commit is contained in:
Ben Neigher
2026-08-29 07:58:06 +03:00
committed by GitHub
parent 15d004912b
commit b676643864
5 changed files with 280 additions and 0 deletions
@@ -0,0 +1,69 @@
# Architecture
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_EABI=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_ARM_INSTRUCTIONS_THUMB2=y
# Toolchain
BR2_TOOLCHAIN_EXTERNAL=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_4_9=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
# Kernel
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/$(OPENIPC_KERNEL).tar.gz"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/gk7202v300.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
# 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
BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y
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="goke"
BR2_OPENIPC_SOC_MODEL="gk7202v300"
BR2_OPENIPC_SOC_FAMILY="gk7205v200"
BR2_OPENIPC_VARIANT="lite"
BR2_OPENIPC_FLASH_SIZE="8"
# Packages
BR2_PACKAGE_DROPBEAR_OPENIPC=y
BR2_PACKAGE_GOKE_OSDRV_GK7205V200=y
BR2_PACKAGE_HISILICON_OPENSDK=y
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_MAJESTIC_FONTS=y
BR2_PACKAGE_MAJESTIC_WEBUI=y
BR2_PACKAGE_MAJESTIC=y
BR2_PACKAGE_MBEDTLS_OPENIPC=y
BR2_PACKAGE_OPUS_OPENIPC=y
BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y
BR2_PACKAGE_SSV635X_OPENIPC=y
BR2_PACKAGE_VTUND_OPENIPC=y
BR2_PACKAGE_YAML_CLI=y
@@ -0,0 +1,97 @@
[sensor]
Sensor_type=stSnsGc2053ForCarObj
Mode=WDR_MODE_NONE
DllFile=libsns_gc2053_forcar.so
[mode]
input_mode=INPUT_MODE_CMOS
raw_bitness=10
[mipi]
lane_id = 0|2|-1|-1|-1|-1|-1|-1| ;lane_id: -1 - disable
[isp_image]
Isp_FrameRate=25
Isp_Bayer=0
[vi_dev]
Input_mod=VI_MODE_DIGITAL_CAMERA
Work_mod =0 ;VI_WORK_MODE_1Multiplex = 0
;VI_WORK_MODE_2Multiplex,
;VI_WORK_MODE_4Multiplex
Combine_mode =0 ;Y/C composite or separation mode
;VI_COMBINE_COMPOSITE = 0 /*Composite mode */
;VI_COMBINE_SEPARATE, /*Separate mode */
Comp_mode =0 ;Component mode (single-component or dual-component)
;VI_COMP_MODE_SINGLE = 0, /*single component mode */
;VI_COMP_MODE_DOUBLE = 1, /*double component mode */
Clock_edge =1 ;Clock edge mode (sampling on the rising or falling edge)
;VI_CLK_EDGE_SINGLE_UP=0, /*rising edge */
;VI_CLK_EDGE_SINGLE_DOWN, /*falling edge */
Mask_num =2 ;Component mask
Mask_0 =0xFF300000
Mask_1 =0x0
Scan_mode = 1;VI_SCAN_INTERLACED = 0
;VI_SCAN_PROGRESSIVE,
Data_seq = VI_DATA_SEQ_YUYV ;data sequence (ONLY for YUV format)
;----2th component U/V sequence in bt1120
; VI_INPUT_DATA_VUVU = 0,
; VI_INPUT_DATA_UVUV,
;----input sequence for yuv
; VI_INPUT_DATA_UYVY = 0,
; VI_INPUT_DATA_VYUY,
; VI_INPUT_DATA_YUYV,
; VI_INPUT_DATA_YVYU
Vsync =0 ; vertical synchronization signal
;VI_VSYNC_FIELD = 0,
;VI_VSYNC_PULSE,
VsyncNeg=0 ;Polarity of the vertical synchronization signal
;VI_VSYNC_NEG_HIGH = 0,
;VI_VSYNC_NEG_LOW /*if VIU_VSYNC_E
Hsync =0 ;Attribute of the horizontal synchronization signal
;VI_HSYNC_VALID_SINGNAL = 0,
;VI_HSYNC_PULSE,
HsyncNeg =0 ;Polarity of the horizontal synchronization signal
;VI_HSYNC_NEG_HIGH = 0,
;VI_HSYNC_NEG_LOW
VsyncValid =1 ;Attribute of the valid vertical synchronization signal
;VI_VSYNC_NORM_PULSE = 0,
;VI_VSYNC_VALID_SINGAL,
VsyncValidNeg =0;Polarity of the valid vertical synchronization signal
;VI_VSYNC_VALID_NEG_HIGH = 0,
;VI_VSYNC_VALID_NEG_LOW
Timingblank_HsyncHfb =0 ;Horizontal front blanking width
Timingblank_HsyncAct =1920 ;Horizontal effetive width
Timingblank_HsyncHbb =0 ;Horizontal back blanking width
Timingblank_VsyncVfb =0 ;Vertical front blanking height
Timingblank_VsyncVact =1080 ;Vertical effetive width
Timingblank_VsyncVbb=0 ;Vertical back blanking height
Timingblank_VsyncVbfb =0 ;Even-field vertical front blanking height(interlace, invalid progressive)
Timingblank_VsyncVbact=0 ;Even-field vertical effetive width(interlace, invalid progressive)
Timingblank_VsyncVbbb =0 ;Even-field vertical back blanking height(interlace, invalid progressive)
InputDataType=1 ;VI_DATA_TYPE_YUV = 0,VI_DATA_TYPE_RGB = 1,
DataRev =FALSE ;Data reverse. FALSE = 0; TRUE = 1
DevRect_x=200
DevRect_y=20
DevRect_w=1920
DevRect_h=1080
;[vi_chn]
;CapRect_X =0
;CapRect_Y =0
;CapRect_Width=1920
;CapRect_Height=1080
;DestSize_Width=1920
;DestSize_Height=1080
;CapSel =2 ;Frame/field select. ONLY used in interlaced mode
;VI_CAPSEL_TOP = 0, /* top field */
;VI_CAPSEL_BOTTOM, /* bottom field */
;VI_CAPSEL_BOTH, /* top and bottom field */
;PixFormat =26;PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 26 ...etc
;CompressMode =0 ;COMPRESS_MODE_NONE = 0
;COMPRESS_MODE_SEG =1 ...etc
SrcFrameRate=30 ;Source frame rate. -1: not controll
FrameRate =30 ;Target frame rate. -1: not controll
@@ -0,0 +1,13 @@
#!/bin/sh
set_gpio() {
[ "$2" -eq 1 ] && gpio set $1 || gpio clear $1
sleep 1
}
if [ "$1" = "ssv6x5x-generic" ]; then
modprobe ssv6x5x
exit 0
fi
exit 1
@@ -0,0 +1,56 @@
#!/bin/sh
#
# Perform basic settings on a known IP camera
#
# GK-W7 (product string ipc533331a-W7-gc2053dvp-f8): GK7202V300, 8MB NOR,
# GC2053 wired in DVP/parallel mode with the SID strap HIGH, and an
# iComm/SSV SSV6006C USB Wi-Fi part (USB ID 8065:6000).
#
# Set custom upgrade url
#
fw_setenv upgrade 'https://github.com/OpenIPC/builder/releases/download/latest/gk7202v300_lite_generic-w7-nor.tgz'
#
# Set wlan device and credentials if need
#
fw_setenv wlandev ssv6x5x-generic
#fw_setenv wlanssid Router
#fw_setenv wlanpass 12345678
#
# DVP SENSOR BRING-UP.
#
# This board routes the GC2053's parallel data, sync, PCLK and i2c to the
# SoC's DVP pads, not its MIPI lanes. open_sys_config picks the pad routing
# from its insmod arguments, and the generic gk7202v300 arguments select the
# MIPI path — which muxes the i2c controller to pads that are not connected
# to anything here, so every address NACKs and no sensor is ever found.
#
# sensor_dvp tells load_goke to take the DVP branch. It is read as an
# opt-in env var rather than keyed off the SoC name, because MIPI-wired
# gk7202v300 boards exist and must keep the current behaviour.
#
fw_setenv sensor_dvp 1
#
# ...and 24 MHz MCLK. This is NOT optional on this board, and it is not
# something the ini can supply: majestic's ini is read in userspace, while MCLK
# is an SoC clock programmed from the CRG before any of that runs.
#
# parse_sensor_clock() maps gc2053 to 0x6, and PERI_CRG60 bits [5:2] = 0x6 is
# 27 MHz. Measured on hardware: the register reads 0x00000019 at the moment
# load_goke would write it — bits [5:2] = 0x6, i.e. exactly that 27 MHz default.
# The GC2053 ForCar PLL tables this profile relies on are 24 MHz values, so
# without this the sensor is clocked 12.5% fast against its own init table.
#
fw_setenv sensor_mclk 24
fw_setenv sensor gc2053
#
# The shipped gc2053_i2c_1080p.ini declares MIPI input. Pin the DVP variant
# explicitly rather than relying on ini-glob ordering.
#
cli -s .isp.sensorConfig /etc/sensors/gc2053_i2c_dc_1080p.ini
#
# Set majestic settings
#
cli -s .audio.enabled true
cli -s .audio.outputEnabled true
exit 0
@@ -0,0 +1,45 @@
/etc/sensors/4l_sc223a_i2c_1080p.ini
/etc/sensors/60fps/720p_imx307_i2c_2l.ini
/etc/sensors/WDR/5M_imx335.ini
/etc/sensors/WDR/imx335_i2c_4M.ini
/etc/sensors/5M_imx335.ini
/etc/sensors/bt656_720p.ini
/etc/sensors/gc2053_i2c_1080p.ini
/etc/sensors/gc4653_i2c_4M.ini
/etc/sensors/imx307_i2c_2l_1080p.ini
/etc/sensors/imx335_i2c_4M.ini
/etc/sensors/jxf23_i2c_1080p.ini
/etc/sensors/jxf23_i2c_dc_1080p.ini
/etc/sensors/sc200ai_i2c_1080p.ini
/etc/sensors/sc2232h_i2c_1080p.ini
/etc/sensors/sc2239_i2c_1080p.ini
/etc/sensors/sc2335_i2c_1080p.ini
/etc/sensors/smtsec_imx307_i2c_4l_1080p.ini
/etc/sensors/jxh63_i2c_720p.ini
#
/etc/sensors/iq/f23.ini
/etc/sensors/iq/gc2053.ini
/etc/sensors/iq/imx335.ini
/etc/sensors/iq/sc2232.ini
/etc/sensors/iq/sc2335.ini
#
/usr/lib/sensors/libsns_bt656.so
/usr/lib/sensors/libsns_f23.so
/usr/lib/sensors/libsns_f37.so
/usr/lib/sensors/libsns_gc2053.so
/usr/lib/sensors/libsns_gc4653_2l.so
/usr/lib/sensors/libsns_imx307.so
/usr/lib/sensors/libsns_imx307_2l.so
/usr/lib/sensors/libsns_imx335.so
/usr/lib/sensors/libsns_sc200ai.so
/usr/lib/sensors/libsns_sc223a_4l.so
/usr/lib/sensors/libsns_sc2239.so
/usr/lib/sensors/libsns_sc2335.so
/usr/lib/sensors/libsns_sc2232h.so
/usr/lib/sensors/libsns_sc3235.so
/usr/lib/sensors/libsns_sc3335.so
/usr/lib/sensors/libsns_h63.so
#
/lib/modules/4.9.37/kernel/drivers/i2c/*/*.ko
/lib/modules/4.9.37/kernel/drivers/scsi/*.ko
/lib/modules/4.9.37/kernel/fs/f2fs/*.ko