From: Marek Szyprowski Date: Thu, 11 Apr 2024 09:11:56 +0000 (+0200) Subject: tizen: bootscript: vf2: update boot scripts X-Git-Tag: accepted/tizen/unified/20241126.175211~82 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ee31a8f05f18c7248379b0159a17532ff380c064;p=platform%2Fkernel%2Fu-boot.git tizen: bootscript: vf2: update boot scripts Update VF2 boot script to match the one developped recently for LicheePi4A. This improves the following things: - partitions are discovered by GPT name, not by hardcoded number - root= kernel parameter is correctly set for partitions up to 19th - switch to generic devtype/devnum envs like for typical distro_boot case - reordered some operations and added more comments - tested A/B booting Signed-off-by: Marek Szyprowski Change-Id: I038f42c8b4f1133798b8d8c8e2f89955b717ca9d --- diff --git a/configs/tizen_qemu-riscv64_smode_defconfig b/configs/tizen_qemu-riscv64_smode_defconfig index fb285190f0..1a7da7912d 100644 --- a/configs/tizen_qemu-riscv64_smode_defconfig +++ b/configs/tizen_qemu-riscv64_smode_defconfig @@ -11,7 +11,7 @@ CONFIG_DISTRO_DEFAULTS=y CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80200000 CONFIG_FIT=y -CONFIG_BOOTCOMMAND="load ${bootdevtype} ${bootdevnum}:${bootpart} ${scriptaddr} ${prefix}${script}; devtype=${bootdevtype}; devnum=${bootdevnum}; distro_bootpart=${bootpart}; source ${scriptaddr}" +CONFIG_BOOTCOMMAND="part number ${devtype} ${devnum} ${bootname} bootpart; load ${devtype} ${devnum}:${bootpart} ${scriptaddr} ${prefix}${script}; distro_bootpart=${bootpart}; source ${scriptaddr}" CONFIG_USE_PREBOOT=y CONFIG_PREBOOT="setenv fdt_addr ${fdtcontroladdr}; fdt addr ${fdtcontroladdr}; test -n \"${loadbootenv}\" -a -n \"${importbootenv}\" && run loadbootenv && run importbootenv;" CONFIG_DISPLAY_CPUINFO=y diff --git a/configs/tizen_starfive_visionfive2_defconfig b/configs/tizen_starfive_visionfive2_defconfig index e68eab639e..32c8491984 100644 --- a/configs/tizen_starfive_visionfive2_defconfig +++ b/configs/tizen_starfive_visionfive2_defconfig @@ -32,7 +32,7 @@ CONFIG_QSPI_BOOT=y CONFIG_SD_BOOT=y CONFIG_USE_BOOTARGS=y CONFIG_BOOTARGS="console=ttyS0,115200 debug rootwait earlycon=sbi" -CONFIG_BOOTCOMMAND="load ${bootdevtype} ${bootdevnum}:${bootpart} ${scriptaddr} ${prefix}${script}; devtype=${bootdevtype}; devnum=${bootdevnum}; distro_bootpart=${bootpart}; source ${scriptaddr}" +CONFIG_BOOTCOMMAND="part number ${devtype} ${devnum} ${bootname} bootpart; load ${devtype} ${devnum}:${bootpart} ${scriptaddr} ${prefix}${script}; distro_bootpart=${bootpart}; source ${scriptaddr}" CONFIG_USE_PREBOOT=y CONFIG_PREBOOT="setenv fdt_addr ${fdtcontroladdr}; fdt addr ${fdtcontroladdr}; test -n \"${loadbootenv}\" -a -n \"${importbootenv}\" && run loadbootenv && run importbootenv;" CONFIG_DEFAULT_FDT_FILE="jh7110-starfive-visionfive-2.dtb" @@ -67,6 +67,7 @@ CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS=5 CONFIG_CMD_MEMINFO=y CONFIG_CMD_I2C=y CONFIG_CMD_TFTPPUT=y +CONFIG_CMD_EXT4_WRITE=y CONFIG_OF_BOARD=y CONFIG_ENV_IS_IN_FAT=y CONFIG_ENV_FAT_DEVICE_AND_PART="1:3" diff --git a/include/samsung/tizen_riscv.h b/include/samsung/tizen_riscv.h index b852195f12..ee0d74f19a 100644 --- a/include/samsung/tizen_riscv.h +++ b/include/samsung/tizen_riscv.h @@ -9,23 +9,29 @@ #ifndef __CONFIG_TIZEN_RISCV_H #define __CONFIG_TIZEN_RISCV_H -#ifdef CONFIG_TARGET_STARFIVE_VISIONFIVE2 +#if defined(CONFIG_TARGET_STARFIVE_VISIONFIVE2) || \ + defined(CONFIG_TARGET_LIGHT_FM_C910_LPI4A) #define TIZEN_TARGET_ENV_SETTING \ - "bootdevnum=1\0" \ - "bootdevtype=mmc\0" \ + "devnum=1\0" \ + "devtype=mmc\0" \ "" #elif defined(CONFIG_TARGET_QEMU_VIRT) #define TIZEN_TARGET_ENV_SETTING \ - "bootdevnum=0\0" \ - "bootdevtype=virtio\0" \ + "devnum=0\0" \ + "devtype=virtio\0" \ "" #else /* CONFIG_TARGET_* */ #define TIZEN_TARGET_ENV_SETTING "" #endif /* CONFIG_TARGET_* */ +#define SET_INFORM_PART \ + "part number ${devtype} ${devnum} ${informname} informpart; " + #define CLEAR_REBOOT_PARAM \ + SET_INFORM_PART \ "mw.l ${rebootparam_addr} ${normal_val} ; " \ - "ext4write ${bootdevtype} ${bootdevnum}:${informpart} ${rebootparam_addr} /${rebootparamfile} 8; " + "ext4write ${devtype} ${devnum}:${informpart} ${rebootparam_addr} /${rebootparamfile} 8; " + /* SD/MMC configuration */ #define CONFIG_MMC_DEFAULT_DEV 1 @@ -35,9 +41,8 @@ #define TIZEN_ENV_SETTING \ TIZEN_TARGET_ENV_SETTING \ "kernel=" KERNEL_NAME "\0" \ - "bootpart=3\0" \ - "rootpart=5\0" \ - "informpart=0xb\0" \ + "informname=inform\0" \ + "bootname=boot_a\0" \ "rebootparamfile=reboot-param.bin\0" \ "slotfile=partition-ab.info\0" \ "slot_addr=0x82200000\0" \ @@ -47,9 +52,6 @@ "nodef_val=6665646e\0" \ "normal_val=6d726f6e\0" \ "download_val=6c6e7764\0" \ - "ramdiskpart=9\0" \ - "part=9\0" \ - "bootmode=ramdisk\0" \ "tfm=setenv bootmode download; run bootcmd\0" \ "tizen_bootarg= \0" \ "opts=loglevel=7\0" \ @@ -57,23 +59,26 @@ "script=boot.scr.uimg\0" \ "prefix=/\0" \ "set_to_part_a=" \ - "if test -e ${bootdevtype} ${bootdevnum}:${informpart} ${slotfile}; then; " \ - "load ${bootdevtype} ${bootdevnum}:${informpart} ${slot_addr} /${slotfile} 2; " \ + SET_INFORM_PART \ + "if test -e ${devtype} ${devnum}:${informpart} ${slotfile}; then; " \ + "load ${devtype} ${devnum}:${informpart} ${slot_addr} /${slotfile} 2; " \ "fi; " \ "mw.b ${slot_addr} 0x61; " \ - "ext4write ${bootdevtype} ${bootdevnum}:${informpart} ${slot_addr} /${slotfile} 2;\0" \ + "ext4write ${devtype} ${devnum}:${informpart} ${slot_addr} /${slotfile} 2;\0" \ "set_to_part_b=" \ - "if test -e ${bootdevtype} ${bootdevnum}:${informpart} ${slotfile}; then; " \ - "load ${bootdevtype} ${bootdevnum}:${informpart} ${slot_addr} /${slotfile} 2; " \ + SET_INFORM_PART \ + "if test -e ${devtype} ${devnum}:${informpart} ${slotfile}; then; " \ + "load ${devtype} ${devnum}:${informpart} ${slot_addr} /${slotfile} 2; " \ "fi; " \ "mw.b ${slot_addr} 0x62; " \ - "ext4write ${bootdevtype} ${bootdevnum}:${informpart} ${slot_addr} /${slotfile} 2;\0" \ + "ext4write ${devtype} ${devnum}:${informpart} ${slot_addr} /${slotfile} 2;\0" \ "bootenv=uEnv.txt\0" \ "loadbootenv=" \ - "if test -e ${bootdevtype} ${bootdevnum}:${bootpart} ${loadaddr} ${prefix}${bootenv}; then " \ - "load ${bootdevtype} ${bootdevnum}:${bootpart} ${loadaddr} ${prefix}${bootenv}; " \ + "part number ${devtype} ${devnum} ${bootname} bootpart; " \ + "if test -e ${devtype} ${devnum}:${bootpart} ${loadaddr} ${prefix}${bootenv}; then " \ + "load ${devtype} ${devnum}:${bootpart} ${loadaddr} ${prefix}${bootenv}; " \ "fi;\0" \ - "importbootenv=echo Importing environment from ${bootdevtype} ...; " \ + "importbootenv=echo Importing environment from ${devtype} ...; " \ "env import -t $loadaddr $filesize;\0" \ "" diff --git a/tizen/bootscript/tizen-boot-vf2.scr b/tizen/bootscript/tizen-boot-vf2.scr index 7afbe23605..e3cb235294 100644 --- a/tizen/bootscript/tizen-boot-vf2.scr +++ b/tizen/bootscript/tizen-boot-vf2.scr @@ -16,55 +16,47 @@ if test -z "${devtype}"; then fi fi +# find 'inform' partition +part number $devtype $devnum "inform" informpart +if test -z "${informpart}"; then; + echo No \"inform\" partition found. + exit +fi + +setenv partition_ab "a" if test -e $devtype $devnum:$informpart $slotfile; then; ext4load $devtype $devnum:$informpart $slot_addr $slotfile; if itest.b *${slot_addr} == 0x62; then; - setenv ramdiskpart 0xf - setenv part 15 - setenv partition_ab b - echo "boot from slot_b"; - else - setenv ramdiskpart 9 - setenv part 9 - setenv partition_ab a - echo "boot from slot_a"; + setenv partition_ab "b" fi -else - setenv ramdiskpart 9 - setenv part 9 - setenv partition_ab a - echo "boot from slot_a"; +fi +echo "boot from slot_${partition_ab}" + +# find the boot partition +part number $devtype $devnum "boot_${partition_ab}" bootpart +if test -z "${bootpart}"; then; + echo No \"boot_${partition_ab}\" partition found. + exit +fi + +# set sane defaults +setenv partition_name "ramdisk" +if test -z "${bootmode}"; then; + setenv bootmode "normal" fi +# check rebootparamfile if test -e $devtype $devnum:$informpart $rebootparamfile; then; ext4load $devtype $devnum:$informpart $rebootparam_addr $rebootparamfile; if itest.l *${rebootparam_addr} == ${upgrade_val}; then; - if test "${partition_ab}" = "b"; then - setenv ramdiskpart 0x10 - setenv part 16 - else - setenv ramdiskpart 0xa - setenv part 10 - fi - setenv bootmode fota + setenv partition_name "ramdisk-recovery" + setenv bootmode "fota" elif itest.l *${rebootparam_addr} == ${recovery_val}; then; - if test "${partition_ab}" = "b"; then - setenv ramdiskpart 0x10 - setenv part 16 - else - setenv ramdiskpart 0xa - setenv part 10 - fi - setenv bootmode recovery + setenv partition_name "ramdisk-recovery" + setenv bootmode "recovery" elif itest.l *${rebootparam_addr} == ${download_val}; then; - if test "${partition_ab}" = "b"; then - setenv ramdiskpart 0x10 - setenv part 16 - else - setenv ramdiskpart 0xa - setenv part 10 - fi - setenv bootmode flash + setenv partition_name "ramdisk-recovery" + setenv bootmode "flash" elif itest.l *${rebootparam_addr} == ${nodef_val}; then; echo "This reboot parameter is not supported..."; fi @@ -72,14 +64,8 @@ fi # This is for jumping to flash mode on u-boot. if test "${bootmode}" = "download"; then; - if test "${partition_ab}" = "b"; then - setenv ramdiskpart 0x10 - setenv part 16 - else - setenv ramdiskpart 0xa - setenv part 10 - fi - setenv bootmode flash + setenv partition_name "ramdisk-recovery" + setenv bootmode "flash" fi if test "${bootmode}" = "flash"; then; @@ -88,9 +74,61 @@ if test "${bootmode}" = "flash"; then; fi fi -# setting console device if noting is set +# find the selected ramdisk variant partition and load it +part number $devtype $devnum "${partition_name}_${partition_ab}" ramdiskpart +if test -n "${ramdiskpart}"; then; + # Find the ramdisk offset and block count + part start $devtype $devnum $ramdiskpart ramdisk_start + part size $devtype $devnum $ramdiskpart ramdisk_size + # Set to ramdisksize with real partition size. (Need to multiply block-size 0x200) + setexpr ramdisksize $ramdisk_size * 200 + # Load it + $devtype dev $devnum; + $devtype read $ramdisk_addr_r $ramdisk_start $ramdisk_size; +else + echo No \"${partition_name}_${partition_ab}\" partition found. +fi + +# check loaded ramdisk +if test -e $devtype $devnum:$ramdiskpart sbin/init; then; + echo "Using ramdisk from partition ${ramdiskpart}"; + # boot from ram0 if there is sbin + setenv rootargs root=/dev/ram0 rw +elif itest.w *$ramdisk_addr_r == 0x8b1f; then; # check for gzip (initramfs) magic + echo "Using initramfs from partition ${ramdiskpart}"; + setenv rootargs +else + echo "Booting without initrd/initramfs"; + setenv bootmode normal + setenv ramdisk_size 0 + + # find the rootfs partition + part number $devtype $devnum "rootfs_${partition_ab}" rootfspart + if test -z "${rootfspart}"; then; + echo No \"rootfs_${partition_ab}\" partition found. + exit + fi + + # simplified hex2dec conversion for 0x1..0x13->1..19 range + if itest $rootfspart > 9; then; + setexpr rootfspart $rootfspart + 6 + else + setexpr rootfspart $rootfspart + 0 + fi + if test "${devtype}" = "mmc"; then; + setenv rootargs root=/dev/mmcblk${devnum}p${rootfspart} rw rootwait + elif test "${devtype}" = "usb"; then; + setenv rootargs root=/dev/sda${rootfspart} rw rootwait + elif test "${devtype}" = "nvme"; then; + setenv rootargs root=/dev/nvme0n1p${rootfspart} rw rootwait + elif test "${devtype}" = "virtio"; then; + setenv rootargs root=/dev/vda${rootfspart} rw rootwait + fi +fi + +# set console device if nothing is set if test -z "${console}"; then; - setenv console "console=ttyS0,115200 earlycon" + setenv console "console=ttyS0,115200n8 earlycon"; fi echo "console: ${console}" @@ -104,63 +142,22 @@ if setexpr pcb_revision sub "^VF7110(.).*" "\\1" "${serial#}"; then fi fi -setenv boot_prefixes \"/\" +setenv bootargs \"${tizen_bootarg} ${rootargs} bootmode=${bootmode} partition_ab=${partition_ab} ${console} ${opts} ${ip_opt}\" -# Find the ramdisk offset and block count -part start $devtype $devnum $ramdiskpart ramdisk_start -part size $devtype $devnum $ramdiskpart ramdisk_size +setenv boot_prefixes \"/\" -# Set to ramdisksize with real partition size. (Need to multiply block-size 0x200) -setexpr ramdisksize $ramdisk_size * 200 setexpr tizen_kernel_addr_r $ramdisk_addr_r + $ramdisksize - -# boot from ramdisk if there is sbin or it is initramfs -if test -e $devtype $devnum:$ramdiskpart sbin/init; then; - setenv rootdev ram0 - echo "Loading Ramdisk from partition" ${part}; - echo "Environment value of ramdiskpart is" ${ramdiskpart}; - $devtype dev $devnum - $devtype read $ramdisk_addr_r $ramdisk_start $ramdisk_size; -else - # Check for gzip (initramfs) magic - $devtype dev $devnum; - $devtype read $ramdisk_addr_r $ramdisk_start 1; - if itest.w *$ramdisk_addr_r == 0x8b1f; then; - setenv rootdev ram0 - echo "Loading initramfs from partition ${part}"; - echo "Environment value of ramdiskpart is" ${ramdiskpart}; - $devtype read $ramdisk_addr_r $ramdisk_start $ramdisk_size; - else - if test "${devtype}" = "mmc"; then; - setenv rootdev mmcblk${devnum}p${rootpart} - fi - if test "${devtype}" = "usb"; then; - setenv rootdev sda${rootpart} - fi - if test "${devtype}" = "nvme"; then; - setenv rootdev nvme0n1p${rootpart} - fi - if test "${devtype}" = "virtio"; then; - setenv rootdev vda${rootpart} - fi - setenv bootmode normal - fi -fi - -# To use cmdline for using serial console. /* Normal mode */ -setenv bootargs \"${tizen_bootarg} root=/dev/${rootdev} rw bootmode=${bootmode} partition_ab=${partition_ab} rootwait ${console} ${opts} ${ip_opt} stmmaceth=chain_mode:1\" - echo "Searching for kernel in"; for prefix in $boot_prefixes; do -if load $devtype $devnum:$distro_bootpart $tizen_kernel_addr_r $prefix$kernel; then; +echo $prefix$kernel; +if load $devtype $devnum:$bootpart $tizen_kernel_addr_r $prefix$kernel; then; echo ${bootmode} "boot"; - if test "${board_name}" = "qemu-riscv"; then # If running in QEMU use the DeviceTree provided by # the emulator. It is the most accurate description of # the platform. fdt move $fdt_addr $fdt_addr_r else - load $devtype $devnum:$distro_bootpart $fdt_addr_r $prefix$fdtfile + load $devtype $devnum:$bootpart $fdt_addr_r $prefix$fdtfile fi booti $tizen_kernel_addr_r $ramdisk_addr_r:$ramdisksize $fdt_addr_r; fi