Repository navigation
nor: split layout on the gk7205v500 family - #52
Conversation
CONFIG_OPENIPC_NOR_SPLIT for gk7205v500, gk7205v510 and gk7205v530 (xm720xxx_config, which build.sh uses for all three, and xm72050500_config), now that their kernel (OpenIPC/linux goke-gk7205v500) finds the split layout from its device tree. The scan takes a uImage at 0x50000 with the squashfs at the next 64 KiB as the split image and boots it with a root-less command line; fwupd and recovery take firmware.bin.<soc>. Fixed-slot cameras boot as before. The NAND builds compile the split code out. misc_init_r() on xm720xxx and xm72050500 set verify=n after openipc_helper(), undoing the scan's clearing of it for a split image so bootm never checked the uImage CRC; it is set before the scan, as #48 did for the boards that had it then. NOR images: u-boot-gk7205v500/v510/v530-nor.bin 225792 bytes each, inside the 256K boot area; NAND images build as before. Tested in qemu-hisilicon with a gk7205v500_lite build: gk7205v500 8 MB and gk7205v510/v530 16 MB, the split firmware.bin -> "Found RootFS at 0x00240000", "Verifying Checksum ... OK", root-less command line, the kernel's split, root on 31:4, login; the fixed-slot uImage + rootfs -> "Found RootFS at 0x00250000", fixed mtdparts, root on 31:3. Not run on hardware.
PR Summary by QodoEnable split NOR boot on the gk7205v500 family
AI Description
Diagram
High-Level Assessment
Files changed (5)
|
Code Review by Qodo
1. Fixed-slot updates erase saved data
|
From review: boards set verify=n before openipc_helper() so the split scan can clear it for bootm (#48, and this PR for xm720xxx/xm72050500), and recovery then ran with verify=n: source skipped the data CRC of a uImage-wrapped script.txt. openipc_helper() now drops verify while firmware_recovery() runs and puts it back for the boot, on every board. QEMU (gk7205v500, 8 MB, split image): 'Verifying Checksum ... OK' before the kernel, split, root on 31:4, login; hi3516ev300 builds.
The gk7205v500 firmware now ships the split NOR package beside the fixed-slot one (OpenIPC/firmware#2658). Its kernel (OpenIPC/linux#137) and NOR U-Boot (OpenIPC/u-boot#52) both know the layout. - `gk7205v500` joins `NOR_SPLIT_SOCS`, so `install` writes `firmware.bin.gk7205v500` at 0x50000 and erases the rest of the chip. - `FIRMWARE_PACKAGE_BOARD` maps gk7205v510/v530 to `gk7205v500`, the one build the family installs, as NAND already does (`_UBI_NAND_BOARD`). Each keeps its own `-nor` U-Boot. A fixed-slot package named for the chip itself is still accepted. - V500 boot-ROM recovery (`HiSiliconV500`) and the agent's donor are unchanged. Local: `pytest` (1084 passed), `ruff`, `mypy` clean. Not run on hardware. The firmware side was checked in qemu-hisilicon (see OpenIPC/firmware#2658): split boot under the new and the published U-Boot, the overlay kept across a power cycle, and U-Boot recovery from a fixed-slot install to the split image. qemu-hisilicon does not emulate the V500 boot ROM, so `defib install` itself was not run against it.
gk7205v500 ships the split NOR package beside the fixed-slot one since OpenIPC/firmware#2658, on a kernel (OpenIPC/linux#137) and a -nor U-Boot (OpenIPC/u-boot#52) that scan the layout. nor_split on gk7205v500, gk7205v510 and gk7205v530 lets the wizard give the split install where the -split package is published, as on the gk7205v200 family. gk7205v510 installs the gk7205v500 build on NOR too, as defib does since OpenIPC/defib#163 and as gk7205v530 already did here. Its own openipc.gk7205v510-nor-lite.tgz dates from 2026-10-02 and has no defconfig behind it any more. Without the move, deleting that stale asset from the release would leave v510 with no NOR download. v510 keeps its own -nor and -nand U-Boot. nand_board, which only v510 used, has no user now; the field stays. Tests: the fixture index loses the v510 package and gains the two gk7205v500 -split packages (sizes and digests from the latest release). boards.json moves v510 to the gk7205v500 build. The nand_board wizard test becomes TestV510InstallsTheV500Build: v510's NOR and NAND installs use the gk7205v500 build, and NOR uses the split firmware.bin.gk7205v500. The golden is regenerated for the three V500 SoCs. go test ./... (uncached) passes.
* nor-split: the Hi3516EV200 family, Hi3516EV300 split-only - nor-split-layout: Hi3516EV200, Hi3518EV300 and Hi3516DV200 ship the split package beside the fixed-slot one (OpenIPC/firmware#2655, on OpenIPC/linux#131 and OpenIPC/u-boot#48); Hi3516EV300 lite and ultimate ship the split package only, its kernel filling the 2 MiB kernel slot (neo keeps fixed slots). Going back to fixed slots lists them accordingly. - sysupgrade: `sysupgrade -k -r` installs the split layout on them. Checked in qemu-hisilicon (hi3516ev200, hi3518ev300, hi3516ev300; 8 and 16 MB). Not run on hardware. * nor-split: the GK7205V500 family GK7205V500 ships the split package beside the fixed-slot one (OpenIPC/firmware#2658, on OpenIPC/linux#137 and OpenIPC/u-boot#52). GK7205V510 and GK7205V530 install that one gk7205v500 build, as defib (OpenIPC/defib#163) and the site's installer do. Each keeps its own u-boot-<soc>-nor.bin. sysupgrade -k -r takes the split package on them too, and they go back to fixed slots the same way. Checked in qemu-hisilicon (gk7205v500 8 and 16 MB, gk7205v510/v530 16 MB). Not run on hardware. * sysupgrade: the split list is for NOR cameras, and Hi3516EV300 lite and ultimate From review: the list of SoCs whose sysupgrade -k -r installs the split package now says it is about NOR flash, and points NAND cameras to their own layout page. Hi3516EV300 is listed for lite and ultimate only: neo keeps fixed slots, as the layout page says.
* nor: split layout on gk7201v200 CONFIG_OPENIPC_NOR_SPLIT for xm72010200_config, which gk7201v200_config names, now that its kernel (OpenIPC/linux goke-gk7205v500, ARCH_XM72050200) finds the split layout from its device tree. misc_init_r() sets verify=n before openipc_helper(), as #52 did for xm720xxx and xm72050500, so a split image's uImage CRC is checked by bootm. NOR image: u-boot-gk7201v200-nor.bin 213729 bytes, inside the 256K boot area; the NAND build compiles the split code out. Tested in qemu-hisilicon (gk7201v200, 8 MB) with a gk7201v200_lite build on this kernel (uImage 1836K, squashfs 4956K, firmware.bin 6848K): - split firmware.bin, new U-Boot: "Found RootFS at 0x00220000", "sfc: split NOR layout, device tree partitions", rootfs_data from 0x700000, root on 31:4, login; a second boot on the same flash reads the seed the first saved in the overlay; - the same image under the published u-boot-gk7201v200-nor.bin: "root=/dev/mtdblock3 ignored, the flash names its own root", root on 31:4; - the fixed-slot package: 6 cmdlinepart partitions, root on 31:3, login; - recovery: from fixed slots, and from a split image with one kernel byte flipped ("kernel at 0x50000 fails its CRC"), fwupd over TFTP writes firmware.bin.gk7201v200 (byte-identical on flash) and the next boot reaches login on 31:4. Not run on hardware. * nor: split layout on the hi3516cv200 family CONFIG_OPENIPC_NOR_SPLIT for hi3516cv200 and hi3518ev200 (hi3518ev201 boots the hi3518ev200 image), whose kernel (OpenIPC/linux hisilicon-hi3516cv200) finds the split layout from its device tree. misc_init_r() sets verify=n before openipc_helper(), so the scan can clear it for a split image and bootm checks the uImage CRC. NOR images: u-boot-hi3516cv200-nor.bin 140376 bytes, u-boot-hi3518ev200-nor.bin 140488 bytes.
CONFIG_OPENIPC_NOR_SPLITfor gk7205v500, gk7205v510 and gk7205v530 (xm720xxx_config, whichbuild.shuses for all three, andxm72050500_config), now that their kernel finds the split layout from its device tree (OpenIPC/linux#137, merged ongoke-gk7205v500). The scan takes a uImage at 0x50000 with the squashfs at the next 64 KiB as the split image and boots it with a root-less command line;fwupdand recovery takefirmware.bin.<soc>. Fixed-slot cameras boot as before. The NAND builds compile the split code out.misc_init_r()on xm720xxx and xm72050500 setverify=nafteropenipc_helper(), undoing the scan's clearing of it for a split image, sobootmnever checked the uImage CRC. It is now set before the scan, as #48 did for the boards that had the same order.NOR images:
u-boot-gk7205v500/v510/v530-nor.bin225792 bytes each (rebased on #51), inside the 256K boot area; NAND images build as before.Tested in qemu-hisilicon with a gk7205v500_lite build:
firmware.bin:Found RootFS at 0x00240000,Verifying Checksum ... OK, root-less command line, the kernel's split, root on 31:4, login;Found RootFS at 0x00250000, fixed mtdparts, root on 31:3.Not run on hardware.