diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2013-08-03 05:52:11 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2013-08-30 16:34:18 -0400 |
commit | bf9c223664e6f5fdf538919c715c45c26dbb4268 (patch) | |
tree | 5ae7296f62750375c2dded9d348914a8b2b33e72 /drivers/mtd/tests | |
parent | 66b28183eeba83998a52bd6e598aa2abbe877ef3 (diff) |
mtd: mtd_readtest: use mtd_test helpers
Use mtdtest_read() and mtdtest_scan_for_bad_eraseblocks() in mtd_test
helpers.
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Brian Norris <computersforpeace@gmail.com>
Cc: Vikram Narayanan <vikram186@gmail.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd/tests')
-rw-r--r-- | drivers/mtd/tests/readtest.c | 49 |
1 files changed, 8 insertions, 41 deletions
diff --git a/drivers/mtd/tests/readtest.c b/drivers/mtd/tests/readtest.c index 2cdd0c47cac1..ffd50d628219 100644 --- a/drivers/mtd/tests/readtest.c +++ b/drivers/mtd/tests/readtest.c | |||
@@ -29,6 +29,8 @@ | |||
29 | #include <linux/slab.h> | 29 | #include <linux/slab.h> |
30 | #include <linux/sched.h> | 30 | #include <linux/sched.h> |
31 | 31 | ||
32 | #include "mtd_test.h" | ||
33 | |||
32 | static int dev = -EINVAL; | 34 | static int dev = -EINVAL; |
33 | module_param(dev, int, S_IRUGO); | 35 | module_param(dev, int, S_IRUGO); |
34 | MODULE_PARM_DESC(dev, "MTD device number to use"); | 36 | MODULE_PARM_DESC(dev, "MTD device number to use"); |
@@ -44,7 +46,6 @@ static int pgcnt; | |||
44 | 46 | ||
45 | static int read_eraseblock_by_page(int ebnum) | 47 | static int read_eraseblock_by_page(int ebnum) |
46 | { | 48 | { |
47 | size_t read; | ||
48 | int i, ret, err = 0; | 49 | int i, ret, err = 0; |
49 | loff_t addr = ebnum * mtd->erasesize; | 50 | loff_t addr = ebnum * mtd->erasesize; |
50 | void *buf = iobuf; | 51 | void *buf = iobuf; |
@@ -52,16 +53,12 @@ static int read_eraseblock_by_page(int ebnum) | |||
52 | 53 | ||
53 | for (i = 0; i < pgcnt; i++) { | 54 | for (i = 0; i < pgcnt; i++) { |
54 | memset(buf, 0 , pgsize); | 55 | memset(buf, 0 , pgsize); |
55 | ret = mtd_read(mtd, addr, pgsize, &read, buf); | 56 | ret = mtdtest_read(mtd, addr, pgsize, buf); |
56 | if (ret == -EUCLEAN) | 57 | if (ret) { |
57 | ret = 0; | ||
58 | if (ret || read != pgsize) { | ||
59 | pr_err("error: read failed at %#llx\n", | 58 | pr_err("error: read failed at %#llx\n", |
60 | (long long)addr); | 59 | (long long)addr); |
61 | if (!err) | 60 | if (!err) |
62 | err = ret; | 61 | err = ret; |
63 | if (!err) | ||
64 | err = -EINVAL; | ||
65 | } | 62 | } |
66 | if (mtd->oobsize) { | 63 | if (mtd->oobsize) { |
67 | struct mtd_oob_ops ops; | 64 | struct mtd_oob_ops ops; |
@@ -127,39 +124,6 @@ static void dump_eraseblock(int ebnum) | |||
127 | } | 124 | } |
128 | } | 125 | } |
129 | 126 | ||
130 | static int is_block_bad(int ebnum) | ||
131 | { | ||
132 | loff_t addr = ebnum * mtd->erasesize; | ||
133 | int ret; | ||
134 | |||
135 | ret = mtd_block_isbad(mtd, addr); | ||
136 | if (ret) | ||
137 | pr_info("block %d is bad\n", ebnum); | ||
138 | return ret; | ||
139 | } | ||
140 | |||
141 | static int scan_for_bad_eraseblocks(void) | ||
142 | { | ||
143 | int i, bad = 0; | ||
144 | |||
145 | bbt = kzalloc(ebcnt, GFP_KERNEL); | ||
146 | if (!bbt) | ||
147 | return -ENOMEM; | ||
148 | |||
149 | if (!mtd_can_have_bb(mtd)) | ||
150 | return 0; | ||
151 | |||
152 | pr_info("scanning for bad eraseblocks\n"); | ||
153 | for (i = 0; i < ebcnt; ++i) { | ||
154 | bbt[i] = is_block_bad(i) ? 1 : 0; | ||
155 | if (bbt[i]) | ||
156 | bad += 1; | ||
157 | cond_resched(); | ||
158 | } | ||
159 | pr_info("scanned %d eraseblocks, %d are bad\n", i, bad); | ||
160 | return 0; | ||
161 | } | ||
162 | |||
163 | static int __init mtd_readtest_init(void) | 127 | static int __init mtd_readtest_init(void) |
164 | { | 128 | { |
165 | uint64_t tmp; | 129 | uint64_t tmp; |
@@ -208,7 +172,10 @@ static int __init mtd_readtest_init(void) | |||
208 | if (!iobuf1) | 172 | if (!iobuf1) |
209 | goto out; | 173 | goto out; |
210 | 174 | ||
211 | err = scan_for_bad_eraseblocks(); | 175 | bbt = kzalloc(ebcnt, GFP_KERNEL); |
176 | if (!bbt) | ||
177 | goto out; | ||
178 | err = mtdtest_scan_for_bad_eraseblocks(mtd, bbt, 0, ebcnt); | ||
212 | if (err) | 179 | if (err) |
213 | goto out; | 180 | goto out; |
214 | 181 | ||