| #!/bin/bash |
| |
| # |
| # This script inserts NAND simulator module to emulate NAND flash of specified |
| # size. |
| # |
| # Author: Artem Bityutskiy |
| # |
| |
| # Check if nandsim module is loaded |
| function nandsim_loaded() |
| { |
| local NANDSIM=`lsmod | grep nandsim` |
| if [ -n "$NANDSIM" ]; then |
| return 1 |
| fi |
| return 0 |
| } |
| |
| nandsim_loaded |
| if (( $? != 0 )); then |
| echo "Error: nandsim is already loaded" |
| exit 1 |
| fi |
| |
| if (( $# < 1 )); then |
| echo "Load NAND simulator to simulate flash of a specified size." |
| echo "" |
| echo "Usage: ./load_nandsim.sh <size in MiB> <eraseblock size in KiB>" |
| echo " <page size (512 or 2048)>" |
| echo "" |
| echo "Only the first parameter is mandatory. Default eraseblock size" |
| echo "is 16KiB, default NAND page size is 512 bytes." |
| echo "" |
| echo "Only the following combinations are supported:" |
| echo "--------------------------------------------------" |
| echo "| size (MiB) | EB size (KiB) | Page size (bytes) |" |
| echo "--------------------------------------------------" |
| echo "| 16 | 16 | 512 |" |
| echo "| 32 | 16 | 512 |" |
| echo "| 64 | 16 | 512 |" |
| echo "| 128 | 16 | 512 |" |
| echo "| 256 | 16 | 512 |" |
| echo "| 64 | 64 | 2048 |" |
| echo "| 64 | 128 | 2048 |" |
| echo "| 64 | 256 | 2048 |" |
| echo "| 64 | 512 | 2048 |" |
| echo "| 128 | 64 | 2048 |" |
| echo "| 128 | 128 | 2048 |" |
| echo "| 128 | 256 | 2048 |" |
| echo "| 128 | 512 | 2048 |" |
| echo "| 256 | 64 | 2048 |" |
| echo "| 256 | 128 | 2048 |" |
| echo "| 256 | 256 | 2048 |" |
| echo "| 256 | 512 | 2048 |" |
| echo "| 512 | 64 | 2048 |" |
| echo "| 512 | 128 | 2048 |" |
| echo "| 512 | 256 | 2048 |" |
| echo "| 512 | 512 | 2048 |" |
| echo "| 1024 | 64 | 2048 |" |
| echo "| 1024 | 128 | 2048 |" |
| echo "| 1024 | 256 | 2048 |" |
| echo "| 1024 | 512 | 2048 |" |
| echo "--------------------------------------------------" |
| exit 1 |
| fi |
| |
| SZ=$1 |
| EBSZ=$2 |
| PGSZ=$3 |
| if [[ $# == '1' ]]; then |
| EBSZ=16 |
| PGSZ=512 |
| elif [[ $# == '2' ]]; then |
| PGSZ=512 |
| fi |
| |
| if (( $PGSZ == 512 && $EBSZ != 16 )); then |
| echo "Error: only 16KiB eraseblocks are possible in case of 512 bytes page" |
| exit 1 |
| fi |
| |
| if (( $PGSZ == 512 )); then |
| case $SZ in |
| 16) modprobe nandsim first_id_byte=0x20 second_id_byte=0x33 ;; |
| 32) modprobe nandsim first_id_byte=0x20 second_id_byte=0x35 ;; |
| 64) modprobe nandsim first_id_byte=0x20 second_id_byte=0x36 ;; |
| 128) modprobe nandsim first_id_byte=0x20 second_id_byte=0x78 ;; |
| 256) modprobe nandsim first_id_byte=0x20 second_id_byte=0x71 ;; |
| *) echo "Flash size ${SZ}MiB is not supported, try 16, 32, 64 or 256" |
| exit 1 ;; |
| esac |
| elif (( $PGSZ == 2048 )); then |
| case $EBSZ in |
| 64) FOURTH=0x05 ;; |
| 128) FOURTH=0x15 ;; |
| 256) FOURTH=0x25 ;; |
| 512) FOURTH=0x35 ;; |
| *) echo "Eraseblock ${EBSZ}KiB is not supported" |
| exit 1 |
| esac |
| |
| case $SZ in |
| 64) modprobe nandsim first_id_byte=0x20 second_id_byte=0xa2 third_id_byte=0x00 fourth_id_byte=$FOURTH ;; |
| 128) modprobe nandsim first_id_byte=0xec second_id_byte=0xa1 third_id_byte=0x00 fourth_id_byte=$FOURTH ;; |
| 256) modprobe nandsim first_id_byte=0x20 second_id_byte=0xaa third_id_byte=0x00 fourth_id_byte=$FOURTH ;; |
| 512) modprobe nandsim first_id_byte=0x20 second_id_byte=0xac third_id_byte=0x00 fourth_id_byte=$FOURTH ;; |
| 1024) modprobe nandsim first_id_byte=0xec second_id_byte=0xd3 third_id_byte=0x51 fourth_id_byte=$FOURTH ;; |
| *) echo "Unable to emulate ${SZ}MiB flash with ${EBSZ}KiB eraseblock" |
| exit 1 |
| esac |
| else |
| echo "Error: bad NAND page size ${PGSZ}KiB, it has to be either 512 or 2048" |
| exit 1 |
| fi |
| |
| if (( $? != 0 )); then |
| echo "Error: cannot load nandsim" |
| exit 1 |
| fi |
| |
| echo "Loaded NAND simulator (${SZ}MiB, ${EBSZ}KiB eraseblock, $PGSZ bytes NAND page)" |
| exit 0 |