blob: 1bb31e1ce521cbce5b4d53b4d8abcf85d1cbaaac (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#!/bin/bash
#
# This script inserts NAND simulator module to emulate NAND flash of specified
# size.
#
# Author: Artem Bityutskiy
#
fatal()
{
echo "Error: $1" 1>&2
exit 1
}
usage()
{
cat 1>&2 <<EOF
Load NAND simulator to simulate flash of a specified size.
Usage: ${0##*/} <size in MiB> <eraseblock size in KiB> \\
<page size (512 or 2048)>
Only the first parameter is mandatory. Default eraseblock size
is 16KiB, default NAND page size is 512 bytes.
Only the following combinations are supported:
--------------------------------------------------
| size (MiB) | EB size (KiB) | Page size (bytes) |
--------------------------------------------------
| 16 | 16 | 512 |
| 32 | 16 | 512 |
| 64 | 16 | 512 |
| 128 | 16 | 512 |
| 256 | 16 | 512 |
| 64 | 64 | 2048 |
| 64 | 128 | 2048 |
| 64 | 256 | 2048 |
| 64 | 512 | 2048 |
| 128 | 64 | 2048 |
| 128 | 128 | 2048 |
| 128 | 256 | 2048 |
| 128 | 512 | 2048 |
| 256 | 64 | 2048 |
| 256 | 128 | 2048 |
| 256 | 256 | 2048 |
| 256 | 512 | 2048 |
| 512 | 64 | 2048 |
| 512 | 128 | 2048 |
| 512 | 256 | 2048 |
| 512 | 512 | 2048 |
| 1024 | 64 | 2048 |
| 1024 | 128 | 2048 |
| 1024 | 256 | 2048 |
| 1024 | 512 | 2048 |
--------------------------------------------------
EOF
}
if grep -q "NAND simulator" /proc/mtd; then
fatal "nandsim is already loaded"
fi
if [ "$#" -lt "1" ]; then
usage
exit 1
fi
size="$1"
eb_size="$2"
page_size="$3"
if [ "$#" = "1" ]; then
eb_size="16"
page_size="512"
elif [ "$#" = "2" ]; then
page_size="512"
fi
if [ "$page_size" -eq 512 ] && [ "$eb_size" -ne "16" ]; then
fatal "only 16KiB eraseblocks are possible in case of 512 bytes page"
fi
first=
second=
third=
fourth=
if [ "$page_size" -eq "512" ]; then
first="0x20"
case "$size" in
16) second=0x33 ;;
32) second=0x35 ;;
64) second=0x36 ;;
128) second=0x78 ;;
256) second=0x71 ;;
*) fatal "flash size ${size}MiB is not supported, try 16, 32, 64 or 256"
esac
elif [ "$page_size" -eq "2048" ]; then
case "$eb_size" in
64) fourth="0x05" ;;
128) fourth="0x15" ;;
256) fourth="0x25" ;;
512) fourth="0x35" ;;
*) fatal "eraseblock ${eb_size}KiB is not supported"
esac
case "$size" in
64) first="0x20"; second="0xa2"; third="0x00 ";;
128) first="0xec"; second="0xa1"; third="0x00 ";;
256) first="0x20"; second="0xaa"; third="0x00 ";;
512) first="0x20"; second="0xac"; third="0x00 ";;
1024) first="0xec"; second="0xd3"; third="0x51 ";;
*) fatal "unable to emulate ${size}MiB flash with ${eb_size}KiB eraseblock"
esac
else
fatal "bad NAND page size ${page_size}KiB, it has to be either 512 or 2048"
fi
first="first_id_byte=$first"
second="second_id_byte=$second"
[ -z "$third" ] || third="third_id_byte=$third"
[ -z "$fourth" ] || fourth="fourth_id_byte=$fourth"
modprobe nandsim "$first" "$second" $third $fourth
if [ "$?" != "0" ]; then
fatal "Error: cannot load nandsim"
fi
echo "Loaded NAND simulator (${size}MiB, ${eb_size}KiB eraseblock, $page_size bytes NAND page)"
|