Repository navigation
ambarella: s3l: replace s3l_lite with s3l_ultimate - #2787
Conversation
The microcode from #2782 and Majestic from #2785 together overflow the lite rootfs slot, 5516 KB against 5120 KB, so make BOARD=s3l_lite fails on master. Each passed CI alone, because neither base had the other. lite means an 8 MB board, so its flash size can't grow. The split NOR layout doesn't rescue it: with the firmware at 0xF0000, as on the IP4M-1026E, it caps uImage and rootfs at 6976 KB against 7103 KB, and this kernel has no split code. Majestic stays the lite build, the only one published for S3L.
PR Summary by QodoReplace S3L lite with a 16 MB ultimate build
AI Description
Diagram
High-Level Assessment
Files changed (3)
|
Code Review by Qodo
1. S3L image layout changes with no camera boot test
|
|
Tested on the IP4M-1026E with what master now ships for S3L: Majestic Lite ( How it was run. My IP4M-1026E profile on master Fresh boot: Majestic can't start preview. After the microcode loads, IAV's source buffers keep their default types, and on this board buffer 2 is a VOUT preview buffer: This board has no VOUT configured, so With the preview type cleared, Majestic works. While IAV is idle, I read the source-buffer setup, cleared the preview type and wrote it back (
IAV keeps the types across runs, so once they're cleared Majestic also starts on later restarts. After a reboot it needs clearing again. A one-shot step before Statistics: on #2767 I mentioned that a streamer setting up 3A statistics after the first preview gets none on 284712. That doesn't apply to Majestic as it stands: it sends no Minor, from the web UI: the dashboard's ISP panel says "This SoC reports no ISP metrics", so Majestic's S3L backend doesn't report exposure, gain or white balance. The picture is fine; it's just empty. The driver has the values: the VIN's Timestamp OSD flickers. The date/time overlay flickers visibly. Measured on stream 0 at 30 fps: the mean brightness of the OSD box is about 112, but every 6th frame it drops to about 100 (25 of 151 frames in 5 s, evenly spaced). In those frames the box background is darker and more opaque, the text has lost its outline, and there's a torn strip along the top edge. That looks like the bitmap being redrawn about 5 times a second in place, in the overlay buffer the DSP is reading. Writing to an idle copy and then pointing the area at it (two pages per region, as the Divinus S3L backend does) avoids it. Night mode: the IR-cut and IR LED pins work:
IAV left stuck after a restart (seen once). Restarting Majestic ( |
|
@DeathCamel58 thanks for the thorough report. widgetii/majestic#1216 addresses it. It's merged, and Preview on a fresh boot. Majestic now turns off source buffers 3–5 before IAV stuck after a restart. The idle, preview and encode ioctls now run with signals blocked. The 3A netlink thread, and the image-library threads it starts, never take a signal. On my camera, 30 starts each sent SIGTERM between 0 and 2.4 s in gave no refused state change. ISP panel / night thresholds.
The exposure had a bug too. Light sensor on the ADC. Set OSD flicker. Majestic already double-buffers. It draws into the half the encoder isn't reading, then points the area at it. The timer runs once a second unless the template uses On my camera I measured the OSD box's mean luma per frame on stream A. Without Your dips were 12 levels at 2688×1512p30, which I can't test here. Could you repeat your measurement with the new build? |
|
@widgetii thanks, that was quick. I tested Preview on a fresh boot: works now. From power-on, Majestic enters preview ( IAV stuck after a restart: couldn't reproduce it. I ran five OSD flicker: gone. I repeated the same measurement as before: the mean luma of the timestamp box on stream 0, 151 frames at 30 fps. The median is 92, and every frame is within about ±2 levels of it apart from one at +3.4, around a seconds change. Before, every 6th frame dropped by about 12 levels. ISP metrics: ADC light sensor: it works, with two notes.
With Each switch shows up in the first |
|
@DeathCamel58 thanks for testing all of it, and on both ADC points you're right.
So for this board the full setup is: nightMode:
lightMonitor: true
adcReadout: true
adcChannel: 1
adcInvert: true
minThreshold: 256
maxThreshold: 672With Good to hear the preview, the restarts and the OSD are sorted on the OV4689 board too. |
Problem
masterdoesn't build S3L:#2782 (microcode) and #2785 (Majestic) each passed CI, because each was tested without the other. That first measurement had #2781 applied, which only changes the kernel. The next nightly's S3L job would fail, as
Firmware (s3l_lite)already has on #2786.Change
s3l_litebecomess3l_ultimate:BR2_OPENIPC_VARIANT="ultimate"andBR2_OPENIPC_FLASH_SIZE="16".ci-matrix.pyandtoolchain.ymlfollow. Nothing else names the old board.litemeans an 8 MB board, so raising its flash size isn't an option. The split NOR layout doesn't fit either:0xF0000, as on the IP4M-1026Eambarella-s3lalso has no split code. The 3.10 port ongk710x(OpenIPC/linux#152) was 344 lines.Not the same as other
ultimateboards:BR2_OPENIPC_MAJESTICstays at its default,lite, because that's the only S3L build published:majestic.s3l.ultimate.master.tar.bz2returns 403.ultimateboards carry.Effect on images: the published names become
openipc.s3l-nor-ultimate.tgzandopenipc.s3l-nand-ultimate.tgz, and S3L cameras with only 8 MB NOR are no longer covered. The cameras in this work don't need that: the IP4M-1026E has an 8192 KB rootfs slot, and the Hikvision S3Lm is NAND. No S3L image has ever been published, so there are no upgrades to carry over.@DeathCamel58 your
s3l_lite_amcrest-ip4m1026eprofile will want renaming to match when it goes upstream.Hardware tested on
Not run on a camera. Same kernel config and packages as before, apart from the variant and the flash size. @DeathCamel58's runs on #2781 and #2782 used a 16 MB layout of the same size on the IP4M-1026E, but with different builds.
Evidence
Full
make BOARD=s3l_ultimateon this branch, without #2781:ci-matrix.py --self-test:Scope
general/package/all-patches/linux/(those go to OpenIPC/linux)general/overlay/or in a sharedload_<vendor>script hardcodes a value specific to my boardLD_PRELOAD, and no binaries that cannot be rebuilt from source