#!/bin/sh
WORK=/tmp/u
NANDDUMP=nanddump
NANDTEST=$WORK/nandtest
FCMP=$WORK/fcmp
nandwrite_sub () {
	flash_eraseall -q $1
	nandwrite -apq $1 $2
	$NANDDUMP -bo $1 | $FCMP $2 && return 0
	$NANDTEST -m $1
	return 1
}

nandwrite_markbad () {
	nandwrite_sub "$@" && return 0
	nandwrite_sub "$@" && return 0
	nandwrite_sub "$@" && return 0
	nandwrite_sub "$@" && return 0
	return 1
}

format_rootfs () {
        flash_eraseall -q /dev/mtd$1 && \
        ubiattach /dev/ubi_ctrl -m $1 -d $2 --vid-hdr-offset 2048 && \
        ubimkvol /dev/ubi$2 -n 0 -N rootfs -m
}

mount_rootfs () {
	ubiattach /dev/ubi_ctrl -m $1 -d $2 --vid-hdr-offset 2048
	r=$?
	if [ $r = 0 ]; then
        	mount -t ubifs ubi$2:rootfs /mnt
		r=$?
		[ $r = 0 ] || ubidetach /dev/ubi_ctrl -m $1
	fi
	return $r
}
 

i=`cat /proc/cmdline | sed 's/.* ubi.mtd=//' | sed 's/,.*//'`
case $i in
    3)
     i=4
     param=bootparam2
     ;;
    *) # 5
     i=2
     param=bootparam1
     ;;
esac

nandwrite_markbad /dev/mtd$i $WORK/uImage || exit $?
i=$((i+1))
mount_rootfs $i 1 || { format_rootfs $i 1 && mount -t ubifs ubi1:rootfs /mnt; } || exit $?
rm -fr /mnt/* || exit $?
tar zxC /mnt < $WORK/rootfs.tgz || exit $?
rm -fr /mnt/tmp
mkdir -p /mnt/proc /mnt/sys /mnt/mnt /mnt/tmp /mnt/var /usr/local/share
for i in mac; do cp /usr/local/share/$i /mnt/usr/local/share/; done
cp /usr/local/root/.cerevo.ini /usr/local/root/.vsui.ini /usr/local/root/.camera.ini /mnt/usr/local/root/
/mnt/usr/local/bin/edid-writer /mnt/usr/local/share/edid.bin
umount /mnt

$WORK/ubootenv $((128*1024)) < $WORK/${param}.txt > $WORK/$param
nandwrite_markbad /dev/mtd1 $WORK/$param
flash_eraseall /dev/mtd0
dd bs=$((128*1024)) seek=1 < $WORK/bootpart.bin > /dev/mtd0
