Files
Arch-R/config/boot.ini
Douglas Teles a1efd4fc01 Pre-merged panel DTBs: eliminate U-Boot fdt apply bugs
Users reported that non-default panel overlays caused broken display,
audio, and controls. Root cause: BSP U-Boot's fdt apply has bugs with
property replacement of different-sized data, corrupting the DTB.

Fix: apply overlays at build-time using fdtoverlay (verified working)
instead of at boot-time. Each panel now gets a pre-merged kernel-*.dtb.
U-Boot simply loads the right DTB by name — no fdt apply needed.

- generate-panel-dtbos.sh: add fdtoverlay pre-merge step
- build-image.sh: copy pre-merged DTBs instead of ScreenFiles
- boot.ini: load PanelDTB by name, remove fdt addr/resize/apply
- panel-detect.py: write DTB filename instead of DTBO overlay path
2026-02-28 00:14:54 -03:00

68 lines
2.2 KiB
INI

odroidgoa-uboot-config
########################################################################
# Arch R Boot Configuration
#
# Auto-detects SD card MMC device:
# Original R36S: eMMC=mmc0, SD=mmc1
# Clone (no eMMC): SD=mmc0
#
# Root device (__ROOTDEV__) substituted by build-image.sh per variant.
# Panel config from panel.txt (managed by panel-detect.py).
# Panel reset handled in Linux (panel-detect.py) -- no GPIO check here
# because X button GPIO differs between boards (modular!).
########################################################################
# --- Turn on LED immediately (feedback: device is booting) ---
gpio set b5
setenv tmp_loadaddr "0x01e00000"
setenv dtb_loadaddr "0x01f00000"
setenv loadaddr "0x02000000"
# --- Auto-detect MMC device (loads kernel Image into memory) ---
setenv mmcdev 1
if load mmc 1:1 ${loadaddr} Image; then
setenv mmcdev 1
elif load mmc 0:1 ${loadaddr} Image; then
setenv mmcdev 0
else
sleep 15
poweroff
fi
# --- Panel DTB selection (read panel.txt written by panel-detect.py) ---
# Pre-merged DTBs: overlay already applied at build-time (no fdt apply needed).
# panel.txt contains PanelDTB=kernel-panelN.dtb (or empty for default).
setenv PanelDTB ""
mw.b ${tmp_loadaddr} 0x00 0x400
if load mmc ${mmcdev}:1 ${tmp_loadaddr} panel.txt; then
env import -t ${tmp_loadaddr} ${filesize}
fi
# Select DTB: pre-merged panel DTB if set, otherwise default kernel.dtb
if test -n "${PanelDTB}"; then
setenv dtb_name "${PanelDTB}"
echo "Panel DTB: ${PanelDTB}"
else
setenv dtb_name "kernel.dtb"
fi
# --- Load DTB and boot (Image already loaded above) ---
if load mmc ${mmcdev}:1 ${dtb_loadaddr} ${dtb_name}; then
setenv bootargs "root=__ROOTDEV__ rootwait rw console=ttyFIQ0 loglevel=0 quiet vt.global_cursor_default=0 consoleblank=0 printk.devkmsg=off fsck.mode=skip"
# Load initramfs (splash appears immediately after kernel boot, before systemd)
setenv initrd_loadaddr "0x04000000"
if load mmc ${mmcdev}:1 ${initrd_loadaddr} initramfs.img; then
booti ${loadaddr} ${initrd_loadaddr}:${filesize} ${dtb_loadaddr}
else
booti ${loadaddr} - ${dtb_loadaddr}
fi
fi
# Power off if boot fails
sleep 15
poweroff