_sunxi_devices_list="
sun4i-a10-cubieboard
sun4i-a10-olinuxino-lime
sun4i-a10-pcduino
sun4i-a10-pcduino2
sun5i-a10s-olinuxino-micro
sun5i-a13-olinuxino
sun5i-a13-olinuxino-micro
sun6i-a31s-colorfly-e708-q1
sun6i-a31s-sina31s
sun6i-a31s-sinovoip-bpi-m2
sun7i-a20-cubieboard2
sun7i-a20-cubietruck
sun7i-a20-bananapi-m1-plus
sun7i-a20-bananapi
sun7i-a20-bananapro
sun7i-a20-olimex-som-evb
sun7i-a20-olinuxino-lime2
sun7i-a20-olinuxino-lime2-emmc
sun7i-a20-olinuxino-lime
sun7i-a20-olinuxino-micro
sun7i-a20-pcduino3
sun7i-a20-pcduino3-nano
sun8i-a33-sinlinx-sina33

sun8i-h2-plus-orangepi-zero
sun8i-h3-bananapi-m2-plus
sun8i-h3-orangepi-2
sun8i-h3-orangepi-one
sun8i-h3-orangepi-lite
sun8i-h3-orangepi-pc
sun8i-h3-orangepi-pc-plus
sun8i-h3-orangepi-plus
sun8i-h3-orangepi-plus2e
sun8i-h3-nanopi-neo

sun5i-a13-q8-tablet
sun8i-a23-q8-tablet
sun8i-a33-q8-tablet
sun8i-a33-q8-tablet-1024x600
"

sunxi_flash_cap="bootloader kernel"

sunxi_is_available(){
	for i in $_sunxi_devices_list
	do
		if [ "$DEVICE_NAME" = "$i" ]; then
			return 0
		fi
	done
	return 1
}

sunxi_do_flash_bootloader() {
	if [ -e "${TEST_ROOT}/usr/lib/aosc-os-armel-sunxi-boot/u-boot-$DEVICE_NAME" ]; then
		if [ ! "$SUNXI_FIRMWARE_DEVICE" ]; then
			SUNXI_FIRMWARE_DEVICE=/dev/mmcblk0 # fallback
		fi
		if [ "$(echo "$(basename $SUNXI_FIRMWARE_DEVICE)" | cut -c 1-6)" = "spidev" ]; then
			echo "SPI Flashing is not still supported. Sorry." >&2
			return 1
		elif [ "$(echo "$(basename $SUNXI_FIRMWARE_DEVICE)" | cut -c 1-6)" = "mmcblk" ]; then
			dd if="${TEST_ROOT}/usr/lib/aosc-os-armel-sunxi-boot/u-boot-$DEVICE_NAME/u-boot-sunxi-with-spl.bin" of="$SUNXI_FIRMWARE_DEVICE" bs=1024 seek=8
		else
			echo "Unsupported firmware device: $SUNXI_FIRMWARE_DEVICE" >&2
		fi
	else
		echo "Cannot find suitable U-Boot." >&2
	fi
}

sunxi_do_flash_kernel() {
	mount_point=$(mktemp -d)
	if [ ! "$SUNXI_KERNEL_DEVICE" ]; then
		SUNXI_KERNEL_DEVICE=/dev/mmcblk0p1
	fi
	if [ -d "$SUNXI_KERNEL_DEVICE" ]; then
		# should be a /boot
		mount -o bind "$SUNXI_KERNEL_DEVICE" $mount_point
	else
		mount "$SUNXI_KERNEL_DEVICE" $mount_point
	fi
	if [ $? -gt 0 ]; then
		echo "Mount kernel device failed." >&2
		exit 1
	fi
	if [ "$(echo $DEVICE_NAME | cut -c 1-5)" = "sun4i" ] || [ "$(echo $DEVICE_NAME | cut -c 1-5)" = "sun5i" ]; then
		# Non-KVM device
		kernel_variant=nokvm
	else
		kernel_variant=kvm
	fi
	cp ${TEST_ROOT}/usr/lib/aosc-os-armel-sunxi-boot/linux-sunxi-$kernel_variant/zImage $mount_point/
	mkdir -p ${TEST_ROOT}/usr/lib/modules
	cp -r ${TEST_ROOT}/usr/lib/aosc-os-armel-sunxi-boot/linux-sunxi-$kernel_variant/modules/* ${TEST_ROOT}/usr/lib/modules/
	if [ -e ${TEST_ROOT}/usr/lib/aosc-os-armel-sunxi-boot/dtb-$DEVICE_NAME ]; then
		cp ${TEST_ROOT}/usr/lib/aosc-os-armel-sunxi-boot/dtb-$DEVICE_NAME/dtb.dtb $mount_point/
	else
		echo "Suitablt Device Tree binary not found, not updating it." >&2
	fi
	umount $mount_point
	rm -r $mount_point
}
