bootloader was not packed correctly (v4.0.0-rc3) for Sengled G4 #140
|
@jnilo1 I tried to use |
Replies: 4 comments 1 reply
What happened — confirmed, and sorry about the brickYou are right, and I want to be transparent about the mechanism. The repo ships one pre-built bootloader binary, So the image you flashed contained the Lidl bootloader, whose DRAM bring-up is wrong for the G4 — hence the soft brick. The board-mismatch guard (device-tree model check) could not catch this: it validates that the A warning was clearly not enough of a guard here. My apologies for the lost time. Correct procedure today (v4.0.0-rc3)Build the G4 bootloader first, then run the installer: cd 3-Main-SoC-Realtek-RTL8196E/31-Bootloader
BOARD=sengled-e39-g8c ./build_bootloader.sh # overwrites boot.bin with the G4 build
cd ../..
BOARD=sengled-e39-g8c ./flash_install_rtl8196e.shFor anyone else landing here after the same mistake: recovery is via the serial console and the first-install procedure in Fix planned for v4.0.0The bootloader build is reproducible, so the Lidl One heads-up on timing: we will not publish any new release candidate until issue #99 is definitively closed (rc4 is under field validation), so this fix will land with v4.0.0 itself. |
|
@jnilo1 No worries about the soft brick. Thanks for supporting Sengled G4 porting. Yes, I was able to recover using bootloader mode to reflash full image ( with correct Sengled G4 bootloader binary). Some background information: before v4.0.0-rc3, I used locally built binary for Sengled G4. When trying v4.0.0-rc3, I checked out new workarea, and used your pre-built image. I think what happened was that the bootloader only initializes 32M memory (DDR timing may be incorrect, but at least good enough for bootloader to work), and kernel (using dts) assumed 64M memory and caused malfunction. |
Fix implemented — and it went further than the md5 guardThanks for confirming the recovery. Your analysis matches what the code says: the Lidl stage-1 DDR values are close enough for the bootloader's modest needs on the G4 but wrong for its 64 MiB DDR2, so things fall over once the kernel (whose DTS declares the full 64 MiB) starts using memory the controller never brought up correctly. Rather than the md5 hard-fail I promised above, I implemented the "longer term" item directly — the bootloader now uses the exact same per-board pre-built mechanism as the kernel images:
So with this in place, One zero-risk check you can do for usThe bootloader build is deterministic (pinned build timestamp), so two builds of the same source are byte-identical. The committed G4 pre-built, compiled from the same V2.9 source that is in your v4.0.0-rc3 checkout, has: Could you run If you no longer have that build around, or you'd rather verify the committed binary directly, say so and I'll attach it here (zipped — GitHub doesn't take raw TimingAs said above: this lands publicly with v4.0.0 — no new release candidate before issue #99 is definitively closed (rc4 is still under field validation). |
|
Thanks for fixing it in v4.0.0.-rc5. Close the discussion |
Fix implemented — and it went further than the md5 guard
Thanks for confirming the recovery. Your analysis matches what the code says: the Lidl stage-1 DDR values are close enough for the bootloader's modest needs on the G4 but wrong for its 64 MiB DDR2, so things fall over once the kernel (whose DTS declares the full 64 MiB) starts using memory the controller never brought up correctly.
Rather than the md5 hard-fail I promised above, I implemented the "longer term" item directly — the bootloader now uses the exact same per-board pre-built mechanism as the kernel images:
31-Bootloader/boot-img/<board>/boot.bin(lidlandsengled-e39-g8c).…