blob: a17c91bf0134d9fc210cade971d37ba207e3007f [file] [log] [blame]
#!/bin/sh
#
# Testcase for nand2bin and bin2nand. Generate testdata and inject
# biterrors. Convert data back and compare with original data.
#
# Conversion:
# bin -> bin2nand -> mif -> nand2bin -> img
#
inject_biterror=./scripts/inject_biterror.pl
pagesize=2048
oobsize=64
# Create test data
dd if=/dev/urandom of=testblock.bin bs=131072 count=1
echo "Test conversion without bitflips ..."
echo -n "Convert bin to mif ... "
bin2nand --pagesize=${pagesize} -o testblock.mif testblock.bin
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
echo -n "Convert mif to bin ... "
nand2bin --pagesize=${pagesize} -o testblock.img testblock.mif
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
echo -n "Comparing data ... "
diff testblock.bin testblock.img
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
echo "Test conversion with uncorrectable ECC erors ..."
echo -n "Inject biterror at offset $ioffs ... "
${inject_biterror} --offset=0 --bitmask=0x81 \
--input=testblock.mif \
--output=testblock_bitflip.mif
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
echo "Convert mif to bin ... "
rm testblock.img
nand2bin --correct-ecc --pagesize=${pagesize} -o testblock.img \
testblock_bitflip.mif
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
echo -n "Comparing data, must fail due to uncorrectable ECC ... "
diff testblock.bin testblock.img
if [ $? -ne "0" ]; then
echo "ok" # Must fail!
else
echo "failed!"
exit 1
fi
echo "Test bitflips in data ... "
for offs in `seq 0 255` ; do
cp testblock.mif testblock_bitflip.mif
for xoffs in 0 256 512 768 ; do
let ioffs=$offs+$xoffs
cp testblock_bitflip.mif testblock_bitflip_tmp.mif
echo -n "Inject biterror at offset $ioffs ... "
${inject_biterror} --offset=${ioffs} --bitmask=0x01 \
--input=testblock_bitflip_tmp.mif \
--output=testblock_bitflip.mif
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
done
echo "Convert mif to bin ... "
rm testblock.img
nand2bin --correct-ecc --pagesize=${pagesize} -o testblock.img \
testblock_bitflip.mif
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
echo -n "Comparing data ... "
diff testblock.bin testblock.img
if [ $? -ne "0" ]; then
hexdump testblock.bin > testblock.bin.txt
hexdump testblock.img > testblock.img.txt
echo "Use tkdiff testblock.bin.txt testblock.img.txt to compare"
echo "failed!"
exit 1
else
echo "ok"
fi
# Without correction
echo "Convert mif to bin ... "
rm testblock.img
nand2bin --pagesize=${pagesize} -o testblock.img \
testblock_bitflip.mif
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
echo -n "Comparing data must differ, correction is disabled ... "
diff testblock.bin testblock.img
if [ $? -ne "0" ]; then
echo "ok" # must fail
else
echo "failed!"
exit 1
fi
done
echo "Test bitflips in OOB data ... "
for offs in `seq 0 $oobsize` ; do
let ioffs=$pagesize+$offs
echo -n "Inject biterror at offset $ioffs ... "
${inject_biterror} --offset=${ioffs} --bitmask=0x01 \
--input=testblock.mif \
--output=testblock_bitflip.mif
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
echo "Convert mif to bin ... "
rm testblock.img
nand2bin --correct-ecc --pagesize=${pagesize} -o testblock.img \
testblock_bitflip.mif
if [ $? -ne "0" ]; then
echo "failed!"
exit 1
else
echo "ok"
fi
echo -n "Comparing data ... "
diff testblock.bin testblock.img
if [ $? -ne "0" ]; then
hexdump testblock.bin > testblock.bin.txt
hexdump testblock.img > testblock.img.txt
echo "Use tkdiff testblock.bin.txt testblock.img.txt to compare"
echo "failed!"
exit 1
else
echo "ok"
fi
done