summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMing Liu <ming.liu@toradex.com>2021-02-24 10:35:30 +0100
committerMing Liu <ming.liu@toradex.com>2021-03-04 11:53:01 +0100
commit412c94d34b9e4c585cf2cc15592b67eb0b0037ea (patch)
treeb22bf0487a9715049ddb4e0ed4bdc8b6df4e4ee5
parent5e1b1f1d77b50005c4342669a25beebc6e6c248e (diff)
u-boot-distro-boot: add fitimage support
When the kernel image type is fitimage, load it to ${ramdisk_addr_r} and boot it from there. A new variable fitconf_fdt_overlays is introduced to collect overlays boot configs from overlays.txt file, and it would be passed to boot command. Related-to: TOR-1700 Signed-off-by: Ming Liu <ming.liu@toradex.com>
-rw-r--r--recipes-bsp/u-boot/u-boot-distro-boot.bb4
-rw-r--r--recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in24
2 files changed, 21 insertions, 7 deletions
diff --git a/recipes-bsp/u-boot/u-boot-distro-boot.bb b/recipes-bsp/u-boot/u-boot-distro-boot.bb
index 596d6df..97fa88f 100644
--- a/recipes-bsp/u-boot/u-boot-distro-boot.bb
+++ b/recipes-bsp/u-boot/u-boot-distro-boot.bb
@@ -9,8 +9,8 @@ SRC_URI = " \
file://boot.cmd.in \
"
-KERNEL_BOOTCMD ??= "bootz"
-KERNEL_BOOTCMD_aarch64 ?= "booti"
+KERNEL_BOOTCMD ??= "${@'bootm' if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else 'bootz'}"
+KERNEL_BOOTCMD_aarch64 ?= "${@'bootm' if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else 'booti'}"
inherit deploy
diff --git a/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in b/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in
index 9f3f2e6..b3e15a5 100644
--- a/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in
+++ b/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in
@@ -78,15 +78,31 @@ then
env set kernel_addr_load ${loadaddr}
env set bootcmd_unzip 'unzip ${kernel_addr_load} ${kernel_addr_r}'
else
- env set kernel_addr_load ${kernel_addr_r}
env set bootcmd_unzip ';'
+ if test ${kernel_image} = "fitImage"
+ then
+ env set kernel_addr_load ${ramdisk_addr_r}
+ else
+ env set kernel_addr_load ${kernel_addr_r}
+ fi
fi
# Set dynamic commands
env set set_bootcmd_kernel 'env set bootcmd_kernel "${load_cmd} \\${kernel_addr_load} \\${kernel_image}"'
-env set set_bootcmd_dtb 'env set bootcmd_dtb "echo Loading DeviceTree: \\${fdtfile}; ${load_cmd} \\${fdt_addr_r} \\${fdtfile}"'
env set set_load_overlays_file 'env set load_overlays_file "${load_cmd} \\${loadaddr} \\${overlays_file}; env import -t \\${loadaddr} \\${filesize}"'
-env set set_apply_overlays 'env set apply_overlays "for overlay_file in \\${fdt_overlays}; do echo Applying Overlay: \\${overlay_file} && ${load_cmd} \\${loadaddr} \\${overlays_prefix}\\${overlay_file} && fdt apply \\${loadaddr}; env set overlay_file; done; true"'
+if test ${kernel_image} = "fitImage"
+then
+ env set fdt_high
+ env set fdt_resize true
+ env set set_bootcmd_dtb 'env set bootcmd_dtb "true"'
+ env set set_apply_overlays 'env set apply_overlays "for overlay_file in \"\\${fdt_overlays}\"; do env set fitconf_fdt_overlays \"\\"\\${fitconf_fdt_overlays}#conf@\\${overlay_file}\\"\"; env set overlay_file; done; true"'
+ env set bootcmd_boot 'echo "Bootargs: \${bootargs}" && @@KERNEL_BOOTCMD@@ ${ramdisk_addr_r}#conf@\${fdtfile}\${fitconf_fdt_overlays}'
+else
+ env set fdt_resize 'fdt addr ${fdt_addr_r} && fdt resize 0x20000'
+ env set set_bootcmd_dtb 'env set bootcmd_dtb "echo Loading DeviceTree: \\${fdtfile}; ${load_cmd} \\${fdt_addr_r} \\${fdtfile}"'
+ env set set_apply_overlays 'env set apply_overlays "for overlay_file in \\${fdt_overlays}; do echo Applying Overlay: \\${overlay_file} && ${load_cmd} \\${loadaddr} \\${overlays_prefix}\\${overlay_file} && fdt apply \\${loadaddr}; env set overlay_file; done; true"'
+ env set bootcmd_boot 'echo "Bootargs: \${bootargs}" && @@KERNEL_BOOTCMD@@ ${kernel_addr_r} - ${fdt_addr_r}'
+fi
# Set static commands
if test ${root_devtype} = "nfs-dhcp"; then
@@ -101,13 +117,11 @@ else
fi
env set bootcmd_args 'run rootfsargs_set && env set bootargs ${defargs} ${rootfsargs} ${setupargs} ${vidargs} ${tdxargs}'
-env set fdt_resize 'fdt addr ${fdt_addr_r} && fdt resize 0x20000'
if test ${skip_fdt_overlays} != 1; then
env set bootcmd_overlays 'run load_overlays_file && run fdt_resize && run apply_overlays'
else
env set bootcmd_overlays true
fi
-env set bootcmd_boot 'echo "Bootargs: \${bootargs}" && @@KERNEL_BOOTCMD@@ ${kernel_addr_r} - ${fdt_addr_r}'
env set bootcmd_prepare 'run set_bootcmd_kernel; run set_bootcmd_dtb; run set_load_overlays_file; run set_apply_overlays'
env set bootcmd_run 'run m4boot; run bootcmd_dtb && run bootcmd_overlays && run bootcmd_args && run bootcmd_kernel && run bootcmd_unzip && run bootcmd_boot; echo "Booting from ${devtype} failed!" && false'