Repository navigation
Catalogue: hi3516cv610, hi3516cv608 and hi3519dv500, on the split NOR layout - #486
Conversation
… layout OpenIPC/firmware moves hi3516cv6xx and hi3519dv500 onto the split NOR layout of the gk7205v200 family (OpenIPC/firmware#2638): one firmware.bin -- a uImage, then the squashfs at the next 64 KiB -- that the kernel divides at boot (OpenIPC/linux #101-#109), booted by the OpenIPC/u-boot boot images now published in latest (OpenIPC/u-boot#32, #35). They publish only the -split package. Three things the site took as given are not, for them; each is data here, not a case: - One signed boot image per DDR binning, not one bootloader per SoC. Each published one is a catalogue entry of its own, named as the firmware's full images are: HI3516CV610-DDR2-64M (10b), -DDR3-128M (20s), -DDR3-512M (00s), HI3516CV608, HI3519DV500-DMEB and -DMEBPRO. A visitor already has to know which DDR the board carries; the entry is that choice, and its page, wizard and full image follow from it with no new menu. The 20g/00g images carry the same DDR tables as 20s/00s and are not listed apart. - The boot area. nor_firmware_offset (0x50000 when empty) is where the boot partition and environment end; hi3519dv500's board has a 512K boot partition and 256K of environment, 0xC0000. The U-Boot step blanks, erases and writes up to it, and firmware.bin goes there. nor_kernel_read (0x200000 when empty; 0x600000 on hi3519dv500) is what the bootloaders in the field read from there to boot. - Split-only packages. A NOR edition is published when either package is: the index counts openipc.<board>-nor-<edition>-split.tgz, the page links the package that exists, and a split board with nothing published yet is shown the split install at its own offset rather than fixed slots it has none of. Full images for an edition published only as the -split package are the boot image at 0, bounded by the firmware offset, and firmware.bin there, bounded by the chip less one erase block for settings, the rest erased; one whose uImage is longer than the kernel read is refused (layoutVersion 3). Where the plain package is published -- the gk7205v200 family -- the image keeps the fixed slots, as before. The fixture index follows the releases: the boot images as latest has them now (198656 and 240640 bytes, their digests), and the cv6xx and dv500 packages under their -split names. boards.json, availability, the documents golden (every existing SoC's document unchanged; six added), the sitemap golden (18 addresses) and firmware-segments.tsv are regenerated. Checked: service/run.sh test (24 packages, go vet), bin/conformance; TestSplitOnlySoCs (editions, links, the 0xC0000 bootloader and firmware.bin lines on 16 and 32 MB, 0x50000 on 8 MB, the boot image per board) and TestSplitImages (the image byte for byte at 0x50000 and 0xC0000, and the three refusals) are new. Frontend lint, typecheck and tests pass under Node 24. Not deployed; dev.openipc.org first.
The explorer's flash map assumed a 0x50000 boot area on every NOR layout; hi3519dv500's is 0xC0000. A split-layout build reports no kernel cap, so the map is not drawn for it -- say so where the constant is. The wizard menu said hi3516cv6xx and hi3519dv500 are built only as Ultimate; hi3516cv6xx has a Lite build, and only hi3519dv500 is Ultimate-only.
hi3516cv6xx and hi3519dv500 publish only the split NOR package now, but their FIT-era plain packages stay on the release (and in the index) under the plain names: a release only adds and replaces what a build uploads. Inferred from the index, "split-only" turned back into "plain and split" as soon as one was listed, and a full image would then be assembled from uImage/rootfs members those packages do not have. nor_split_only, set on the six entries, decides it: the wizard installs and links the split package, and the builder assembles the split image, whatever plain package is still listed for the board. service/run.sh test passes; TestSplitOnlyIgnoresAStalePlainPackage resolves a cv610 lite image with both packages listed to the split one.
PR Summary by QodoAdd split-NOR support for HI3516CV6xx and HI3519DV500
AI Description
Diagram
High-Level Assessment
Files changed (20)
|
Code Review by Qodo
1.
|
From review. - A split-only SoC (nor_split_only) counted an edition as published when only its board's stale plain package was listed, then linked and assembled the split package, which is not there yet: a latest/ link that 404s and a full image that fails. NORReleases counts, for such a SoC, only editions whose split package is published; availability and the wizard's editions both read it. - On a split SoC that also builds fixed slots (the gk7205v200 family), an edition only the split package carries was offered but linked and assembled from the missing plain package. SplitOnlyEdition decides for both the link and Resolve: the board is split-only, or the edition has only the split package. - A split image ignores the partition layout (firmware.bin goes at the firmware offset), so every layout asked of it took its own file name and cache key for the same bytes. It now has the natural one. service/run.sh test passes, goldens unchanged; new tests: a stale plain package alone offers nothing (availability none), the split one makes it wizard; gk7205v300 ultimate published only split is assembled split while lite stays fixed-slot; a parts8m split image has the natural one's name and key.
Lists hi3516cv610, hi3516cv608 and hi3519dv500 with wizard instructions and on-demand full images, on the split NOR layout their firmware moved to (OpenIPC/firmware#2638, OpenIPC/u-boot#32/#35, OpenIPC/linux#101-#109). Differences are catalogue data; no SoC-name branches in code, and every existing SoC's wizard document is byte-identical.
Catalogue
hi3516cv610-ddr2-64m(10b),hi3516cv610-ddr3-128m(20s),hi3516cv610-ddr3-512m(00s),hi3516cv608,hi3519dv500-dmeb,hi3519dv500-dmebpro. No new wizard menu or URL parameter.nor_firmware_offset(default 0x50000; dv500 0xc0000: 512K boot + 256K env),nor_kernel_read(default 0x200000; dv500 0x600000: what bootloaders in the field read to boot),nor_split_only(no fixed-slot build: install, link and assemble the split package whatever FIT-era plain package the index still lists).Wizard: the U-Boot step blanks/erases/writes up to the SoC's firmware offset (dv500's 0x5FC00-class boot image no longer overruns a 0x50000 erase); firmware.bin goes there and the rest of the chip is erased. Split-only
-split.tgzeditions count as published.Full images: split mode for split-only editions -- boot image at 0 (bounded by the offset), firmware.bin at the offset (bounded by the chip less 64K), the rest 0xFF; a uImage longer than
nor_kernel_readis refused.layoutVersion3. Goke (plain and split) keeps fixed-slot images.Explorer/wizard menu: the boot-area constant and the "Ultimate only" note corrected (cv6xx has lite and ultimate; dv500 ultimate).
Tests:
service/run.sh testpasses (newTestSplitOnlySoCs,TestSplitImages,TestSplitImageOnlyWhenSplitOnly,TestSplitOnlyIgnoresAStalePlainPackage);bin/conformancepasses; frontend lint/typecheck pass,npm testand the Astro build pass under Node 24. Goldens, testdata, sitemap andfirmware-segments.tsvregenerated.For a maintainer to confirm
mvpfor cv6xx (a contributor runs a cv610 on hardware, #2460),wipfor dv500 (QEMU only).load_address0x42000000 for all six.Not verified: against the production index -- the cv6xx/dv500
-splitpackages appear with the next firmware nightly; the fixture's-splitentries are the old plain ones renamed. Validate on dev.openipc.org before production once they are published.