Skip to content
Snippets Groups Projects
boot.txt 2.86 KiB
if test "${bootfstype}" = "btrfs"; then
	subvol="/@"
else
	subvol=""
fi

loaded=0
for bootdir in ${prefix} ${boot_prefixes}; do
	if test "${loaded}" != "1"; then
		if test -e ${devtype} ${devnum}:${distro_bootpart} ${subvol}${bootdir}zImage && test -e ${devtype} ${devnum}:${distro_bootpart} ${subvol}${bootdir}${fdtfile}; then
			echo "Found Kernel image ${subvol}${bootdir}zImage"
			if load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} ${subvol}${bootdir}zImage; then
				echo "Found Device Tree file ${subvol}${bootdir}${fdtfile}"
				if load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${subvol}${bootdir}${fdtfile}; then
					loaded=1
				fi
			fi
		fi
	fi
done

if test "${loaded}" = "1"; then
	# Kernel may be stored on first FAT partition and rootfs on second btrfs partition
	if test "${bootfstype}" = "fat"; then
		setexpr bootpart2 ${distro_bootpart} + 1
		if part size ${devtype} ${devnum} ${bootpart2} fssize; then
			if fstype ${devtype} ${devnum}:${bootpart2} fstype; then else
				# U-Boot does not have to support btrfs, so check for btrfs superblock
				part start ${devtype} ${devnum} ${bootpart2} fsstart
				setexpr superblock ${fsstart} + 0x80
				${devtype} read ${loadaddr} ${superblock} 1
				setexpr loadaddr4 ${loadaddr} + 0x4
				setexpr loadaddr40 ${loadaddr} + 0x40
				mw ${loadaddr} 0x5f424852 # _BHR
				mw ${loadaddr4} 0x66535f4d # fS_M
				if cmp ${loadaddr} ${loadaddr40} 2; then
					setenv fstype "btrfs"
				else
					setenv fstype
				fi
				setenv fsstart
				setenv superblock
				setenv loadaddr4
				setenv loadaddr40
			fi
			if test ${fstype} = "btrfs"; then
				setenv bootfstype "btrfs"
				setenv distro_bootpart ${bootpart2}
			fi
			setenv fstype
		fi
		setenv bootpart2
		setenv fssize
	fi

	if test "${devtype}" = "ubi"; then
		rootflags="chk_data_crc"
	elif test "${bootfstype}" = "btrfs"; then
		rootflags="subvol=@,commit=5"
	elif test "${bootfstype}" = "ext4"; then
		rootflags="commit=5"
	else
		rootflags=""
	fi

	if test "${devtype}" = "ubi"; then
		# old fdt files have rootfs mtd named "rootfs-ubifs" and new just "rootfs"
		# read mtd label from loaded fdt file, it may be on two different locations
		fdt addr ${fdt_addr_r}
		fdt get value rootfsmtd /localbus@ffe05000/nand@1,0/partitions/partition@0 label || fdt get value rootfsmtd /localbus@ffe05000/nand@1,0/partition@00 label || setenv rootfsmtd rootfs
		setenv bootfstype "ubifs"
		setenv bootargs root=ubi0:${bootubivol} ubi.mtd=${rootfsmtd},2048
		setenv rootfsmtd
	else
		part uuid ${devtype} ${devnum}:${distro_bootpart} partuuid
		setenv bootargs root=PARTUUID=${partuuid}
	fi
	setenv bootargs ${bootargs} rootfstype=${bootfstype} rootflags=${rootflags} rootwait rw cfg80211.freg=${regdomain} console=ttyS0,115200 ${quirks}

	# Disable watchdog
	mw.b 0xffa00002 0x03

	# In reality kernel image is in uImage format and not in zImage format
	bootm ${kernel_addr_r} - ${fdt_addr_r}
fi