tizen: bootscript: Add tizen-boot-bpif3.scr file 98/315498/3
authorJaehoon Chung <jh80.chung@samsung.com>
Wed, 31 Jul 2024 05:42:10 +0000 (14:42 +0900)
committerJaehoon Chung <jh80.chung@samsung.com>
Fri, 2 Aug 2024 03:29:50 +0000 (12:29 +0900)
Add tizen-boot-bpif3.scr file for tizen boot script.

Change-Id: I2528655cce03079df51f0b0ae64a3ed77202c8b2
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
tizen/bootscript/tizen-boot-bpif3.scr [new file with mode: 0644]

diff --git a/tizen/bootscript/tizen-boot-bpif3.scr b/tizen/bootscript/tizen-boot-bpif3.scr
new file mode 100644 (file)
index 0000000..0733e63
--- /dev/null
@@ -0,0 +1,157 @@
+# U-boot script for tizen BPIF3 and QEMU
+
+if test -z "${devtype}"; then
+       setenv devtype "${bootdevtype}"
+       if test "${target}" = "virtio0"; then;
+               setenv devtype virtio
+       fi
+       if test "${target}" = "mmc0" -o "${target}" = "mmc1"; then;
+               setenv devtype mmc
+       fi
+       if test "${target}" = "usb0"; then;
+               setenv devtype usb
+       fi
+       if test "${target}" = "nvme" -o "${target}" = "nvme0"; then;
+               setenv devtype nvme
+       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"
+setenv slotfile "partition-ab.info"
+if test -e $devtype $devnum:$informpart $slotfile; then;
+       ext4load $devtype $devnum:$informpart $slot_addr $slotfile;
+       if itest.b *${slot_addr} == 0x62; then;
+               setenv partition_ab "b"
+       fi
+fi
+echo "boot from slot_${partition_ab}"
+
+# find the boot partition
+part number $devtype $devnum "bootfs" bootpart
+
+# 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;
+               setenv partition_name "ramdisk-recovery"
+               setenv bootmode "fota"
+               if test -e $devtype $devnum:$informpart $upgradetypefile; then;
+                       ext4load $devtype $devnum:$informpart $upgradetype_addr $upgradetypefile;
+                       if itest.l *${upgradetype_addr} == ${upgradetype_online_val}; then;
+                               setenv partition_name "ramdisk"
+                       fi
+               fi
+       elif itest.l *${rebootparam_addr} == ${recovery_val}; then;
+               setenv partition_name "ramdisk-recovery"
+               setenv bootmode "recovery"
+       elif itest.l *${rebootparam_addr} == ${download_val}; then;
+               setenv partition_name "ramdisk-recovery"
+               setenv bootmode "flash"
+       elif itest.l *${rebootparam_addr} == ${nodef_val}; then;
+               echo "This reboot parameter is not supported...";
+       fi
+fi
+
+# This is for jumping to flash mode on u-boot.
+if test "${bootmode}" = "download"; then;
+       setenv partition_name "ramdisk-recovery"
+       setenv bootmode "flash"
+fi
+
+if test "${bootmode}" = "flash"; then;
+       if test -n "${ipaddr}"; then;
+               ip_opt=\"ip=${ipaddr}::${gateway}:${netmask}::eth0:off\"
+       fi
+fi
+
+# 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
+       # Load it
+       $devtype dev $devnum;
+       $devtype read $ramdisk_addr_r $ramdisk_start $ramdisk_size;
+       # Set to ramdisk_size with real partition size. (Need to multiply block-size 0x200)
+       setexpr ramdisk_size $ramdisk_size * 200
+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";
+fi
+echo "console: ${console}"
+
+setenv bootargs \"${tizen_bootarg} ${rootargs} bootmode=${bootmode} partition_ab=${partition_ab} ${console} ${opts} ${ip_opt}\"
+
+setenv boot_prefixes \"/\"
+
+setexpr tizen_kernel_addr_r $ramdisk_addr_r + $ramdisk_size
+echo "Searching for kernel in"; for prefix in $boot_prefixes; do
+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:$bootpart $fdt_addr_r $prefix$fdtfile
+       fi
+       booti $tizen_kernel_addr_r $ramdisk_addr_r:$ramdisk_size $fdt_addr_r;
+fi
+done