The ABL loads boot.img segments at fixed file offsets and does not fill
/chosen/linux,initrd-start reliably, so trusting $prevbl_initrd_start_addr
failed with "can't get kernel image!". The bootcmd now reads the FIT from
boot_a at offset 0x18c000 over UFS/SCSI (block size derived at runtime),
falling back to the old address and then to the phone menu.
Also sync pmos_bootargs with the device's deviceinfo: quiet splash with
plymouth, cpuidle.off=1, msm.separate_gpu_kms=1, deferred_probe_timeout=30,
no *_ignore_unused and no ath12k debug mask.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DnHwDU5yL8L6qgPEN5CV5m
Custom bootcmd/bootargs for the Motorola Edge 40 Pro (rtwo, SM8550).
The Motorola ABL loads this U-Boot as its "kernel" and always fills
/chosen/linux,initrd-start with the RAM address of whatever it loaded
as "ramdisk" (standard Android/GKI boot protocol). We package a FIT
image (mainline pmOS kernel + dtb + initramfs) as that ramdisk, so
bootcmd reads $prevbl_initrd_start_addr (populated by
CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR from that same DT property)
and does `bootm` on it, with a menu/bootefi fallback if the FIT boot
fails.
Part of the rtwo bring-up: see project notes rtwo-uboot-chainload for
the full mechanism and why this replaced booting the mainline kernel
directly from the Motorola ABL.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015ADQrjdgE8awSA7TSaGgfr