'Vz{&iq2[          Fة%                                      ############################################################
# Configuration
############################################################

setenv LOADADDR 0x42000000
setenv CHUNKSZ  0x800000      # 8 MiB (safe for 128 MB RAM)
setenv BLKSZ    0x200         # 512 bytes

setenv UBOOTBIN u-boot-sunxi-with-spl.bin
setenv IMG      emmc.img

############################################################
# Flash U-Boot + SPL to boot0
############################################################

echo "=== Flashing U-Boot + SPL to boot0 ==="

mmc dev 1 1

load usb 0:1 ${LOADADDR} ${UBOOTBIN}

setexpr BLKCNT ${filesize} + 0x1ff
setexpr BLKCNT ${BLKCNT} / ${BLKSZ}

echo "Writing ${BLKCNT} blocks to mmcblk1boot0"
mmc write ${LOADADDR} 0 ${BLKCNT}

############################################################
# Switch to user area
############################################################

echo "=== Switching to eMMC user area ==="
mmc dev 1 0
mmc rescan

############################################################
# Flash full eMMC disk image in chunks
############################################################

echo "=== Flashing full eMMC image (dd-style, LBA 0) ==="

setenv OFFSET 0
setenv MMCBLK 0
setenv DONE 0

while test ${DONE} -eq 0; do
    echo ""
    echo "Loading image chunk @ offset ${OFFSET}"

    load usb 0:1 ${LOADADDR} ${IMG} ${CHUNKSZ} ${OFFSET}

    if test ${filesize} -eq 0; then
        echo "End of image reached"
        setenv DONE 1
    else
        setexpr CURBLKS ${filesize} + 0x1ff
        setexpr CURBLKS ${CURBLKS} / ${BLKSZ}

        echo "Writing ${CURBLKS} blocks to user area @ block ${MMCBLK}"
        mmc write ${LOADADDR} ${MMCBLK} ${CURBLKS}

        setexpr OFFSET ${OFFSET} + ${filesize}
        setexpr MMCBLK ${MMCBLK} + ${CURBLKS}
    fi
done

############################################################
# Done
############################################################

reset
