#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
#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" \
"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" \
"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" \
""
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
# 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;
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}"
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