mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-03-31 14:41:55 -07:00
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
68 lines
2.2 KiB
INI
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
|