]> Git Repo - u-boot.git/blame - drivers/mtd/ubi/io.c
arm64: configs: Remove SYS_BOOTM_LEN for TI devices
[u-boot.git] / drivers / mtd / ubi / io.c
CommitLineData
83d290c5 1// SPDX-License-Identifier: GPL-2.0+
2d262c48
KP
2/*
3 * Copyright (c) International Business Machines Corp., 2006
4 * Copyright (c) Nokia Corporation, 2006, 2007
2d262c48
KP
5 *
6 * Author: Artem Bityutskiy (Битюцкий Артём)
7 */
8
9/*
ff94bc40 10 * UBI input/output sub-system.
2d262c48 11 *
ff94bc40
HS
12 * This sub-system provides a uniform way to work with all kinds of the
13 * underlying MTD devices. It also implements handy functions for reading and
14 * writing UBI headers.
2d262c48
KP
15 *
16 * We are trying to have a paranoid mindset and not to trust to what we read
ff94bc40
HS
17 * from the flash media in order to be more secure and robust. So this
18 * sub-system validates every single header it reads from the flash media.
2d262c48
KP
19 *
20 * Some words about how the eraseblock headers are stored.
21 *
22 * The erase counter header is always stored at offset zero. By default, the
23 * VID header is stored after the EC header at the closest aligned offset
24 * (i.e. aligned to the minimum I/O unit size). Data starts next to the VID
25 * header at the closest aligned offset. But this default layout may be
26 * changed. For example, for different reasons (e.g., optimization) UBI may be
27 * asked to put the VID header at further offset, and even at an unaligned
28 * offset. Of course, if the offset of the VID header is unaligned, UBI adds
29 * proper padding in front of it. Data offset may also be changed but it has to
30 * be aligned.
31 *
32 * About minimal I/O units. In general, UBI assumes flash device model where
33 * there is only one minimal I/O unit size. E.g., in case of NOR flash it is 1,
34 * in case of NAND flash it is a NAND page, etc. This is reported by MTD in the
35 * @ubi->mtd->writesize field. But as an exception, UBI admits of using another
36 * (smaller) minimal I/O unit size for EC and VID headers to make it possible
37 * to do different optimizations.
38 *
39 * This is extremely useful in case of NAND flashes which admit of several
40 * write operations to one NAND page. In this case UBI can fit EC and VID
41 * headers at one NAND page. Thus, UBI may use "sub-page" size as the minimal
42 * I/O unit for the headers (the @ubi->hdrs_min_io_size field). But it still
43 * reports NAND page size (@ubi->min_io_size) as a minimal I/O unit for the UBI
44 * users.
45 *
46 * Example: some Samsung NANDs with 2KiB pages allow 4x 512-byte writes, so
47 * although the minimal I/O unit is 2K, UBI uses 512 bytes for EC and VID
48 * headers.
49 *
50 * Q: why not just to treat sub-page as a minimal I/O unit of this flash
51 * device, e.g., make @ubi->min_io_size = 512 in the example above?
52 *
53 * A: because when writing a sub-page, MTD still writes a full 2K page but the
ff94bc40
HS
54 * bytes which are not relevant to the sub-page are 0xFF. So, basically,
55 * writing 4x512 sub-pages is 4 times slower than writing one 2KiB NAND page.
56 * Thus, we prefer to use sub-pages only for EC and VID headers.
2d262c48
KP
57 *
58 * As it was noted above, the VID header may start at a non-aligned offset.
59 * For example, in case of a 2KiB page NAND flash with a 512 bytes sub-page,
60 * the VID header may reside at offset 1984 which is the last 64 bytes of the
61 * last sub-page (EC header is always at offset zero). This causes some
62 * difficulties when reading and writing VID headers.
63 *
64 * Suppose we have a 64-byte buffer and we read a VID header at it. We change
65 * the data and want to write this VID header out. As we can only write in
66 * 512-byte chunks, we have to allocate one more buffer and copy our VID header
67 * to offset 448 of this buffer.
68 *
ff94bc40
HS
69 * The I/O sub-system does the following trick in order to avoid this extra
70 * copy. It always allocates a @ubi->vid_hdr_alsize bytes buffer for the VID
71 * header and returns a pointer to offset @ubi->vid_hdr_shift of this buffer.
72 * When the VID header is being written out, it shifts the VID header pointer
73 * back and writes the whole sub-page.
2d262c48
KP
74 */
75
ff94bc40 76#ifndef __UBOOT__
f7ae49fc 77#include <log.h>
61b29b82 78#include <dm/devres.h>
2d262c48
KP
79#include <linux/crc32.h>
80#include <linux/err.h>
ff94bc40 81#include <linux/slab.h>
3db71108 82#include <u-boot/crc.h>
ff94bc40 83#else
f8c987f8 84#include <hexdump.h>
ff94bc40 85#include <ubi_uboot.h>
2d262c48
KP
86#endif
87
2d262c48
KP
88#include "ubi.h"
89
ff94bc40
HS
90static int self_check_not_bad(const struct ubi_device *ubi, int pnum);
91static int self_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum);
92static int self_check_ec_hdr(const struct ubi_device *ubi, int pnum,
93 const struct ubi_ec_hdr *ec_hdr);
94static int self_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum);
95static int self_check_vid_hdr(const struct ubi_device *ubi, int pnum,
96 const struct ubi_vid_hdr *vid_hdr);
97static int self_check_write(struct ubi_device *ubi, const void *buf, int pnum,
98 int offset, int len);
2d262c48
KP
99
100/**
101 * ubi_io_read - read data from a physical eraseblock.
102 * @ubi: UBI device description object
103 * @buf: buffer where to store the read data
104 * @pnum: physical eraseblock number to read from
105 * @offset: offset within the physical eraseblock from where to read
106 * @len: how many bytes to read
107 *
108 * This function reads data from offset @offset of physical eraseblock @pnum
109 * and stores the read data in the @buf buffer. The following return codes are
110 * possible:
111 *
112 * o %0 if all the requested data were successfully read;
113 * o %UBI_IO_BITFLIPS if all the requested data were successfully read, but
114 * correctable bit-flips were detected; this is harmless but may indicate
115 * that this eraseblock may become bad soon (but do not have to);
116 * o %-EBADMSG if the MTD subsystem reported about data integrity problems, for
117 * example it can be an ECC error in case of NAND; this most probably means
118 * that the data is corrupted;
119 * o %-EIO if some I/O error occurred;
120 * o other negative error codes in case of other errors.
121 */
122int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,
123 int len)
124{
125 int err, retries = 0;
126 size_t read;
127 loff_t addr;
128
129 dbg_io("read %d bytes from PEB %d:%d", len, pnum, offset);
130
131 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
132 ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);
133 ubi_assert(len > 0);
134
ff94bc40 135 err = self_check_not_bad(ubi, pnum);
2d262c48 136 if (err)
ff94bc40
HS
137 return err;
138
139 /*
140 * Deliberately corrupt the buffer to improve robustness. Indeed, if we
141 * do not do this, the following may happen:
142 * 1. The buffer contains data from previous operation, e.g., read from
143 * another PEB previously. The data looks like expected, e.g., if we
144 * just do not read anything and return - the caller would not
145 * notice this. E.g., if we are reading a VID header, the buffer may
146 * contain a valid VID header from another PEB.
147 * 2. The driver is buggy and returns us success or -EBADMSG or
148 * -EUCLEAN, but it does not actually put any data to the buffer.
149 *
150 * This may confuse UBI or upper layers - they may think the buffer
151 * contains valid data while in fact it is just old data. This is
152 * especially possible because UBI (and UBIFS) relies on CRC, and
153 * treats data as correct even in case of ECC errors if the CRC is
154 * correct.
155 *
156 * Try to prevent this situation by changing the first byte of the
157 * buffer.
158 */
159 *((uint8_t *)buf) ^= 0xFF;
2d262c48
KP
160
161 addr = (loff_t)pnum * ubi->peb_size + offset;
162retry:
dfe64e2c 163 err = mtd_read(ubi->mtd, addr, len, &read, buf);
2d262c48 164 if (err) {
ff94bc40
HS
165 const char *errstr = mtd_is_eccerr(err) ? " (ECC error)" : "";
166
167 if (mtd_is_bitflip(err)) {
2d262c48
KP
168 /*
169 * -EUCLEAN is reported if there was a bit-flip which
170 * was corrected, so this is harmless.
ff94bc40
HS
171 *
172 * We do not report about it here unless debugging is
173 * enabled. A corresponding message will be printed
174 * later, when it is has been scrubbed.
2d262c48 175 */
0195a7bb
HS
176 ubi_msg(ubi, "fixable bit-flip detected at PEB %d",
177 pnum);
2d262c48
KP
178 ubi_assert(len == read);
179 return UBI_IO_BITFLIPS;
180 }
181
ff94bc40 182 if (retries++ < UBI_IO_RETRIES) {
0195a7bb 183 ubi_warn(ubi, "error %d%s while reading %d bytes from PEB %d:%d, read only %zd bytes, retry",
ff94bc40 184 err, errstr, len, pnum, offset, read);
2d262c48
KP
185 yield();
186 goto retry;
187 }
188
0195a7bb 189 ubi_err(ubi, "error %d%s while reading %d bytes from PEB %d:%d, read %zd bytes",
ff94bc40
HS
190 err, errstr, len, pnum, offset, read);
191 dump_stack();
2d262c48
KP
192
193 /*
194 * The driver should never return -EBADMSG if it failed to read
195 * all the requested data. But some buggy drivers might do
196 * this, so we change it to -EIO.
197 */
ff94bc40 198 if (read != len && mtd_is_eccerr(err)) {
2d262c48 199 ubi_assert(0);
ff94bc40 200 err = -EIO;
2d262c48
KP
201 }
202 } else {
203 ubi_assert(len == read);
204
ff94bc40
HS
205 if (ubi_dbg_is_bitflip(ubi)) {
206 dbg_gen("bit-flip (emulated)");
2d262c48
KP
207 err = UBI_IO_BITFLIPS;
208 }
209 }
210
211 return err;
212}
213
214/**
215 * ubi_io_write - write data to a physical eraseblock.
216 * @ubi: UBI device description object
217 * @buf: buffer with the data to write
218 * @pnum: physical eraseblock number to write to
219 * @offset: offset within the physical eraseblock where to write
220 * @len: how many bytes to write
221 *
222 * This function writes @len bytes of data from buffer @buf to offset @offset
223 * of physical eraseblock @pnum. If all the data were successfully written,
224 * zero is returned. If an error occurred, this function returns a negative
225 * error code. If %-EIO is returned, the physical eraseblock most probably went
226 * bad.
227 *
228 * Note, in case of an error, it is possible that something was still written
229 * to the flash media, but may be some garbage.
230 */
231int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset,
232 int len)
233{
234 int err;
235 size_t written;
236 loff_t addr;
237
238 dbg_io("write %d bytes to PEB %d:%d", len, pnum, offset);
239
240 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
241 ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);
242 ubi_assert(offset % ubi->hdrs_min_io_size == 0);
243 ubi_assert(len > 0 && len % ubi->hdrs_min_io_size == 0);
244
245 if (ubi->ro_mode) {
0195a7bb 246 ubi_err(ubi, "read-only mode");
2d262c48
KP
247 return -EROFS;
248 }
249
ff94bc40 250 err = self_check_not_bad(ubi, pnum);
2d262c48 251 if (err)
ff94bc40 252 return err;
2d262c48
KP
253
254 /* The area we are writing to has to contain all 0xFF bytes */
ff94bc40 255 err = ubi_self_check_all_ff(ubi, pnum, offset, len);
2d262c48 256 if (err)
ff94bc40 257 return err;
2d262c48
KP
258
259 if (offset >= ubi->leb_start) {
260 /*
261 * We write to the data area of the physical eraseblock. Make
262 * sure it has valid EC and VID headers.
263 */
ff94bc40 264 err = self_check_peb_ec_hdr(ubi, pnum);
2d262c48 265 if (err)
ff94bc40
HS
266 return err;
267 err = self_check_peb_vid_hdr(ubi, pnum);
2d262c48 268 if (err)
ff94bc40 269 return err;
2d262c48
KP
270 }
271
ff94bc40 272 if (ubi_dbg_is_write_failure(ubi)) {
0195a7bb 273 ubi_err(ubi, "cannot write %d bytes to PEB %d:%d (emulated)",
ff94bc40
HS
274 len, pnum, offset);
275 dump_stack();
2d262c48
KP
276 return -EIO;
277 }
278
279 addr = (loff_t)pnum * ubi->peb_size + offset;
dfe64e2c 280 err = mtd_write(ubi->mtd, addr, len, &written, buf);
2d262c48 281 if (err) {
0195a7bb 282 ubi_err(ubi, "error %d while writing %d bytes to PEB %d:%d, written %zd bytes",
ff94bc40
HS
283 err, len, pnum, offset, written);
284 dump_stack();
285 ubi_dump_flash(ubi, pnum, offset, len);
2d262c48
KP
286 } else
287 ubi_assert(written == len);
288
ff94bc40
HS
289 if (!err) {
290 err = self_check_write(ubi, buf, pnum, offset, len);
291 if (err)
292 return err;
293
294 /*
295 * Since we always write sequentially, the rest of the PEB has
296 * to contain only 0xFF bytes.
297 */
298 offset += len;
299 len = ubi->peb_size - offset;
300 if (len)
301 err = ubi_self_check_all_ff(ubi, pnum, offset, len);
302 }
303
2d262c48
KP
304 return err;
305}
306
2d262c48
KP
307/**
308 * do_sync_erase - synchronously erase a physical eraseblock.
309 * @ubi: UBI device description object
310 * @pnum: the physical eraseblock number to erase
311 *
312 * This function synchronously erases physical eraseblock @pnum and returns
313 * zero in case of success and a negative error code in case of failure. If
314 * %-EIO is returned, the physical eraseblock most probably went bad.
315 */
316static int do_sync_erase(struct ubi_device *ubi, int pnum)
317{
318 int err, retries = 0;
319 struct erase_info ei;
320 wait_queue_head_t wq;
321
322 dbg_io("erase PEB %d", pnum);
ff94bc40
HS
323 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
324
325 if (ubi->ro_mode) {
0195a7bb 326 ubi_err(ubi, "read-only mode");
ff94bc40
HS
327 return -EROFS;
328 }
2d262c48
KP
329
330retry:
331 init_waitqueue_head(&wq);
332 memset(&ei, 0, sizeof(struct erase_info));
333
334 ei.mtd = ubi->mtd;
335 ei.addr = (loff_t)pnum * ubi->peb_size;
336 ei.len = ubi->peb_size;
2d262c48
KP
337 ei.priv = (unsigned long)&wq;
338
dfe64e2c 339 err = mtd_erase(ubi->mtd, &ei);
2d262c48
KP
340 if (err) {
341 if (retries++ < UBI_IO_RETRIES) {
0195a7bb 342 ubi_warn(ubi, "error %d while erasing PEB %d, retry",
ff94bc40 343 err, pnum);
2d262c48
KP
344 yield();
345 goto retry;
346 }
0195a7bb 347 ubi_err(ubi, "cannot erase PEB %d, error %d", pnum, err);
ff94bc40 348 dump_stack();
2d262c48
KP
349 return err;
350 }
351
352 err = wait_event_interruptible(wq, ei.state == MTD_ERASE_DONE ||
353 ei.state == MTD_ERASE_FAILED);
354 if (err) {
0195a7bb 355 ubi_err(ubi, "interrupted PEB %d erasure", pnum);
2d262c48
KP
356 return -EINTR;
357 }
358
359 if (ei.state == MTD_ERASE_FAILED) {
360 if (retries++ < UBI_IO_RETRIES) {
0195a7bb
HS
361 ubi_warn(ubi, "error while erasing PEB %d, retry",
362 pnum);
2d262c48
KP
363 yield();
364 goto retry;
365 }
0195a7bb 366 ubi_err(ubi, "cannot erase PEB %d", pnum);
ff94bc40 367 dump_stack();
2d262c48
KP
368 return -EIO;
369 }
370
ff94bc40 371 err = ubi_self_check_all_ff(ubi, pnum, 0, ubi->peb_size);
2d262c48 372 if (err)
ff94bc40 373 return err;
2d262c48 374
ff94bc40 375 if (ubi_dbg_is_erase_failure(ubi)) {
0195a7bb 376 ubi_err(ubi, "cannot erase PEB %d (emulated)", pnum);
2d262c48
KP
377 return -EIO;
378 }
379
380 return 0;
381}
382
2d262c48
KP
383/* Patterns to write to a physical eraseblock when torturing it */
384static uint8_t patterns[] = {0xa5, 0x5a, 0x0};
385
386/**
387 * torture_peb - test a supposedly bad physical eraseblock.
388 * @ubi: UBI device description object
389 * @pnum: the physical eraseblock number to test
390 *
391 * This function returns %-EIO if the physical eraseblock did not pass the
392 * test, a positive number of erase operations done if the test was
393 * successfully passed, and other negative error codes in case of other errors.
394 */
395static int torture_peb(struct ubi_device *ubi, int pnum)
396{
397 int err, i, patt_count;
398
0195a7bb 399 ubi_msg(ubi, "run torture test for PEB %d", pnum);
2d262c48
KP
400 patt_count = ARRAY_SIZE(patterns);
401 ubi_assert(patt_count > 0);
402
403 mutex_lock(&ubi->buf_mutex);
404 for (i = 0; i < patt_count; i++) {
405 err = do_sync_erase(ubi, pnum);
406 if (err)
407 goto out;
408
409 /* Make sure the PEB contains only 0xFF bytes */
ff94bc40 410 err = ubi_io_read(ubi, ubi->peb_buf, pnum, 0, ubi->peb_size);
2d262c48
KP
411 if (err)
412 goto out;
413
ff94bc40 414 err = ubi_check_pattern(ubi->peb_buf, 0xFF, ubi->peb_size);
2d262c48 415 if (err == 0) {
0195a7bb 416 ubi_err(ubi, "erased PEB %d, but a non-0xFF byte found",
2d262c48
KP
417 pnum);
418 err = -EIO;
419 goto out;
420 }
421
422 /* Write a pattern and check it */
ff94bc40
HS
423 memset(ubi->peb_buf, patterns[i], ubi->peb_size);
424 err = ubi_io_write(ubi, ubi->peb_buf, pnum, 0, ubi->peb_size);
2d262c48
KP
425 if (err)
426 goto out;
427
ff94bc40
HS
428 memset(ubi->peb_buf, ~patterns[i], ubi->peb_size);
429 err = ubi_io_read(ubi, ubi->peb_buf, pnum, 0, ubi->peb_size);
2d262c48
KP
430 if (err)
431 goto out;
432
ff94bc40
HS
433 err = ubi_check_pattern(ubi->peb_buf, patterns[i],
434 ubi->peb_size);
2d262c48 435 if (err == 0) {
0195a7bb 436 ubi_err(ubi, "pattern %x checking failed for PEB %d",
2d262c48
KP
437 patterns[i], pnum);
438 err = -EIO;
439 goto out;
440 }
441 }
442
443 err = patt_count;
0195a7bb 444 ubi_msg(ubi, "PEB %d passed torture test, do not mark it as bad", pnum);
2d262c48
KP
445
446out:
447 mutex_unlock(&ubi->buf_mutex);
ff94bc40 448 if (err == UBI_IO_BITFLIPS || mtd_is_eccerr(err)) {
2d262c48
KP
449 /*
450 * If a bit-flip or data integrity error was detected, the test
451 * has not passed because it happened on a freshly erased
452 * physical eraseblock which means something is wrong with it.
453 */
0195a7bb 454 ubi_err(ubi, "read problems on freshly erased PEB %d, must be bad",
2d262c48
KP
455 pnum);
456 err = -EIO;
457 }
458 return err;
459}
460
ff94bc40
HS
461/**
462 * nor_erase_prepare - prepare a NOR flash PEB for erasure.
463 * @ubi: UBI device description object
464 * @pnum: physical eraseblock number to prepare
465 *
466 * NOR flash, or at least some of them, have peculiar embedded PEB erasure
467 * algorithm: the PEB is first filled with zeroes, then it is erased. And
468 * filling with zeroes starts from the end of the PEB. This was observed with
469 * Spansion S29GL512N NOR flash.
470 *
471 * This means that in case of a power cut we may end up with intact data at the
472 * beginning of the PEB, and all zeroes at the end of PEB. In other words, the
473 * EC and VID headers are OK, but a large chunk of data at the end of PEB is
474 * zeroed. This makes UBI mistakenly treat this PEB as used and associate it
475 * with an LEB, which leads to subsequent failures (e.g., UBIFS fails).
476 *
477 * This function is called before erasing NOR PEBs and it zeroes out EC and VID
478 * magic numbers in order to invalidate them and prevent the failures. Returns
479 * zero in case of success and a negative error code in case of failure.
480 */
481static int nor_erase_prepare(struct ubi_device *ubi, int pnum)
482{
483 int err;
484 size_t written;
485 loff_t addr;
486 uint32_t data = 0;
487 struct ubi_ec_hdr ec_hdr;
488
489 /*
490 * Note, we cannot generally define VID header buffers on stack,
491 * because of the way we deal with these buffers (see the header
492 * comment in this file). But we know this is a NOR-specific piece of
493 * code, so we can do this. But yes, this is error-prone and we should
494 * (pre-)allocate VID header buffer instead.
495 */
496 struct ubi_vid_hdr vid_hdr;
497
498 /*
499 * If VID or EC is valid, we have to corrupt them before erasing.
500 * It is important to first invalidate the EC header, and then the VID
501 * header. Otherwise a power cut may lead to valid EC header and
502 * invalid VID header, in which case UBI will treat this PEB as
503 * corrupted and will try to preserve it, and print scary warnings.
504 */
505 addr = (loff_t)pnum * ubi->peb_size;
506 err = ubi_io_read_ec_hdr(ubi, pnum, &ec_hdr, 0);
507 if (err != UBI_IO_BAD_HDR_EBADMSG && err != UBI_IO_BAD_HDR &&
508 err != UBI_IO_FF){
509 err = mtd_write(ubi->mtd, addr, 4, &written, (void *)&data);
510 if(err)
511 goto error;
512 }
513
514 err = ubi_io_read_vid_hdr(ubi, pnum, &vid_hdr, 0);
515 if (err != UBI_IO_BAD_HDR_EBADMSG && err != UBI_IO_BAD_HDR &&
516 err != UBI_IO_FF){
517 addr += ubi->vid_hdr_aloffset;
518 err = mtd_write(ubi->mtd, addr, 4, &written, (void *)&data);
519 if (err)
520 goto error;
521 }
522 return 0;
523
524error:
525 /*
526 * The PEB contains a valid VID or EC header, but we cannot invalidate
527 * it. Supposedly the flash media or the driver is screwed up, so
528 * return an error.
529 */
0195a7bb 530 ubi_err(ubi, "cannot invalidate PEB %d, write returned %d", pnum, err);
ff94bc40
HS
531 ubi_dump_flash(ubi, pnum, 0, ubi->peb_size);
532 return -EIO;
533}
534
2d262c48
KP
535/**
536 * ubi_io_sync_erase - synchronously erase a physical eraseblock.
537 * @ubi: UBI device description object
538 * @pnum: physical eraseblock number to erase
539 * @torture: if this physical eraseblock has to be tortured
540 *
541 * This function synchronously erases physical eraseblock @pnum. If @torture
542 * flag is not zero, the physical eraseblock is checked by means of writing
543 * different patterns to it and reading them back. If the torturing is enabled,
ff94bc40 544 * the physical eraseblock is erased more than once.
2d262c48
KP
545 *
546 * This function returns the number of erasures made in case of success, %-EIO
547 * if the erasure failed or the torturing test failed, and other negative error
548 * codes in case of other errors. Note, %-EIO means that the physical
549 * eraseblock is bad.
550 */
551int ubi_io_sync_erase(struct ubi_device *ubi, int pnum, int torture)
552{
553 int err, ret = 0;
554
555 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
556
ff94bc40 557 err = self_check_not_bad(ubi, pnum);
2d262c48 558 if (err != 0)
ff94bc40 559 return err;
2d262c48
KP
560
561 if (ubi->ro_mode) {
0195a7bb 562 ubi_err(ubi, "read-only mode");
2d262c48
KP
563 return -EROFS;
564 }
565
6d7a8bf8
TK
566 /*
567 * If the flash is ECC-ed then we have to erase the ECC block before we
568 * can write to it. But the write is in preparation to an erase in the
569 * first place. This means we cannot zero out EC and VID before the
570 * erase and we just have to hope the flash starts erasing from the
571 * start of the page.
572 */
573 if (ubi->nor_flash && ubi->mtd->writesize == 1) {
ff94bc40
HS
574 err = nor_erase_prepare(ubi, pnum);
575 if (err)
576 return err;
577 }
578
2d262c48
KP
579 if (torture) {
580 ret = torture_peb(ubi, pnum);
581 if (ret < 0)
582 return ret;
583 }
584
585 err = do_sync_erase(ubi, pnum);
586 if (err)
587 return err;
588
589 return ret + 1;
590}
591
592/**
593 * ubi_io_is_bad - check if a physical eraseblock is bad.
594 * @ubi: UBI device description object
595 * @pnum: the physical eraseblock number to check
596 *
597 * This function returns a positive number if the physical eraseblock is bad,
598 * zero if not, and a negative error code if an error occurred.
599 */
600int ubi_io_is_bad(const struct ubi_device *ubi, int pnum)
601{
602 struct mtd_info *mtd = ubi->mtd;
603
604 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
605
606 if (ubi->bad_allowed) {
607 int ret;
608
dfe64e2c 609 ret = mtd_block_isbad(mtd, (loff_t)pnum * ubi->peb_size);
2d262c48 610 if (ret < 0)
0195a7bb 611 ubi_err(ubi, "error %d while checking if PEB %d is bad",
2d262c48
KP
612 ret, pnum);
613 else if (ret)
614 dbg_io("PEB %d is bad", pnum);
615 return ret;
616 }
617
618 return 0;
619}
620
621/**
622 * ubi_io_mark_bad - mark a physical eraseblock as bad.
623 * @ubi: UBI device description object
624 * @pnum: the physical eraseblock number to mark
625 *
626 * This function returns zero in case of success and a negative error code in
627 * case of failure.
628 */
629int ubi_io_mark_bad(const struct ubi_device *ubi, int pnum)
630{
631 int err;
632 struct mtd_info *mtd = ubi->mtd;
633
634 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
635
636 if (ubi->ro_mode) {
0195a7bb 637 ubi_err(ubi, "read-only mode");
2d262c48
KP
638 return -EROFS;
639 }
640
641 if (!ubi->bad_allowed)
642 return 0;
643
dfe64e2c 644 err = mtd_block_markbad(mtd, (loff_t)pnum * ubi->peb_size);
2d262c48 645 if (err)
0195a7bb 646 ubi_err(ubi, "cannot mark PEB %d bad, error %d", pnum, err);
2d262c48
KP
647 return err;
648}
649
650/**
651 * validate_ec_hdr - validate an erase counter header.
652 * @ubi: UBI device description object
653 * @ec_hdr: the erase counter header to check
654 *
655 * This function returns zero if the erase counter header is OK, and %1 if
656 * not.
657 */
658static int validate_ec_hdr(const struct ubi_device *ubi,
659 const struct ubi_ec_hdr *ec_hdr)
660{
661 long long ec;
662 int vid_hdr_offset, leb_start;
663
664 ec = be64_to_cpu(ec_hdr->ec);
665 vid_hdr_offset = be32_to_cpu(ec_hdr->vid_hdr_offset);
666 leb_start = be32_to_cpu(ec_hdr->data_offset);
667
668 if (ec_hdr->version != UBI_VERSION) {
0195a7bb 669 ubi_err(ubi, "node with incompatible UBI version found: this UBI version is %d, image version is %d",
2d262c48
KP
670 UBI_VERSION, (int)ec_hdr->version);
671 goto bad;
672 }
673
674 if (vid_hdr_offset != ubi->vid_hdr_offset) {
0195a7bb 675 ubi_err(ubi, "bad VID header offset %d, expected %d",
2d262c48
KP
676 vid_hdr_offset, ubi->vid_hdr_offset);
677 goto bad;
678 }
679
680 if (leb_start != ubi->leb_start) {
0195a7bb 681 ubi_err(ubi, "bad data offset %d, expected %d",
2d262c48
KP
682 leb_start, ubi->leb_start);
683 goto bad;
684 }
685
686 if (ec < 0 || ec > UBI_MAX_ERASECOUNTER) {
0195a7bb 687 ubi_err(ubi, "bad erase counter %lld", ec);
2d262c48
KP
688 goto bad;
689 }
690
691 return 0;
692
693bad:
0195a7bb 694 ubi_err(ubi, "bad EC header");
ff94bc40
HS
695 ubi_dump_ec_hdr(ec_hdr);
696 dump_stack();
2d262c48
KP
697 return 1;
698}
699
700/**
701 * ubi_io_read_ec_hdr - read and check an erase counter header.
702 * @ubi: UBI device description object
703 * @pnum: physical eraseblock to read from
704 * @ec_hdr: a &struct ubi_ec_hdr object where to store the read erase counter
705 * header
706 * @verbose: be verbose if the header is corrupted or was not found
707 *
708 * This function reads erase counter header from physical eraseblock @pnum and
709 * stores it in @ec_hdr. This function also checks CRC checksum of the read
710 * erase counter header. The following codes may be returned:
711 *
712 * o %0 if the CRC checksum is correct and the header was successfully read;
713 * o %UBI_IO_BITFLIPS if the CRC is correct, but bit-flips were detected
714 * and corrected by the flash driver; this is harmless but may indicate that
715 * this eraseblock may become bad soon (but may be not);
ff94bc40
HS
716 * o %UBI_IO_BAD_HDR if the erase counter header is corrupted (a CRC error);
717 * o %UBI_IO_BAD_HDR_EBADMSG is the same as %UBI_IO_BAD_HDR, but there also was
718 * a data integrity error (uncorrectable ECC error in case of NAND);
719 * o %UBI_IO_FF if only 0xFF bytes were read (the PEB is supposedly empty)
2d262c48
KP
720 * o a negative error code in case of failure.
721 */
722int ubi_io_read_ec_hdr(struct ubi_device *ubi, int pnum,
723 struct ubi_ec_hdr *ec_hdr, int verbose)
724{
ff94bc40 725 int err, read_err;
2d262c48
KP
726 uint32_t crc, magic, hdr_crc;
727
728 dbg_io("read EC header from PEB %d", pnum);
729 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
2d262c48 730
ff94bc40
HS
731 read_err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
732 if (read_err) {
733 if (read_err != UBI_IO_BITFLIPS && !mtd_is_eccerr(read_err))
734 return read_err;
2d262c48
KP
735
736 /*
737 * We read all the data, but either a correctable bit-flip
ff94bc40
HS
738 * occurred, or MTD reported a data integrity error
739 * (uncorrectable ECC error in case of NAND). The former is
740 * harmless, the later may mean that the read data is
741 * corrupted. But we have a CRC check-sum and we will detect
742 * this. If the EC header is still OK, we just report this as
743 * there was a bit-flip, to force scrubbing.
2d262c48 744 */
2d262c48
KP
745 }
746
747 magic = be32_to_cpu(ec_hdr->magic);
748 if (magic != UBI_EC_HDR_MAGIC) {
ff94bc40
HS
749 if (mtd_is_eccerr(read_err))
750 return UBI_IO_BAD_HDR_EBADMSG;
751
2d262c48
KP
752 /*
753 * The magic field is wrong. Let's check if we have read all
754 * 0xFF. If yes, this physical eraseblock is assumed to be
755 * empty.
2d262c48 756 */
ff94bc40 757 if (ubi_check_pattern(ec_hdr, 0xFF, UBI_EC_HDR_SIZE)) {
2d262c48 758 /* The physical eraseblock is supposedly empty */
2d262c48 759 if (verbose)
0195a7bb 760 ubi_warn(ubi, "no EC header found at PEB %d, only 0xFF bytes",
ff94bc40
HS
761 pnum);
762 dbg_bld("no EC header found at PEB %d, only 0xFF bytes",
763 pnum);
764 if (!read_err)
765 return UBI_IO_FF;
766 else
767 return UBI_IO_FF_BITFLIPS;
2d262c48
KP
768 }
769
770 /*
771 * This is not a valid erase counter header, and these are not
772 * 0xFF bytes. Report that the header is corrupted.
773 */
774 if (verbose) {
0195a7bb 775 ubi_warn(ubi, "bad magic number at PEB %d: %08x instead of %08x",
ff94bc40
HS
776 pnum, magic, UBI_EC_HDR_MAGIC);
777 ubi_dump_ec_hdr(ec_hdr);
2d262c48 778 }
ff94bc40
HS
779 dbg_bld("bad magic number at PEB %d: %08x instead of %08x",
780 pnum, magic, UBI_EC_HDR_MAGIC);
781 return UBI_IO_BAD_HDR;
2d262c48
KP
782 }
783
784 crc = crc32(UBI_CRC32_INIT, ec_hdr, UBI_EC_HDR_SIZE_CRC);
785 hdr_crc = be32_to_cpu(ec_hdr->hdr_crc);
786
787 if (hdr_crc != crc) {
788 if (verbose) {
0195a7bb 789 ubi_warn(ubi, "bad EC header CRC at PEB %d, calculated %#08x, read %#08x",
ff94bc40
HS
790 pnum, crc, hdr_crc);
791 ubi_dump_ec_hdr(ec_hdr);
2d262c48 792 }
ff94bc40
HS
793 dbg_bld("bad EC header CRC at PEB %d, calculated %#08x, read %#08x",
794 pnum, crc, hdr_crc);
795
796 if (!read_err)
797 return UBI_IO_BAD_HDR;
798 else
799 return UBI_IO_BAD_HDR_EBADMSG;
2d262c48
KP
800 }
801
802 /* And of course validate what has just been read from the media */
803 err = validate_ec_hdr(ubi, ec_hdr);
804 if (err) {
0195a7bb 805 ubi_err(ubi, "validation failed for PEB %d", pnum);
2d262c48
KP
806 return -EINVAL;
807 }
808
ff94bc40
HS
809 /*
810 * If there was %-EBADMSG, but the header CRC is still OK, report about
811 * a bit-flip to force scrubbing on this PEB.
812 */
2d262c48
KP
813 return read_err ? UBI_IO_BITFLIPS : 0;
814}
815
816/**
817 * ubi_io_write_ec_hdr - write an erase counter header.
818 * @ubi: UBI device description object
819 * @pnum: physical eraseblock to write to
820 * @ec_hdr: the erase counter header to write
821 *
822 * This function writes erase counter header described by @ec_hdr to physical
823 * eraseblock @pnum. It also fills most fields of @ec_hdr before writing, so
824 * the caller do not have to fill them. Callers must only fill the @ec_hdr->ec
825 * field.
826 *
827 * This function returns zero in case of success and a negative error code in
828 * case of failure. If %-EIO is returned, the physical eraseblock most probably
829 * went bad.
830 */
831int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum,
832 struct ubi_ec_hdr *ec_hdr)
833{
834 int err;
835 uint32_t crc;
836
837 dbg_io("write EC header to PEB %d", pnum);
838 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
839
840 ec_hdr->magic = cpu_to_be32(UBI_EC_HDR_MAGIC);
841 ec_hdr->version = UBI_VERSION;
842 ec_hdr->vid_hdr_offset = cpu_to_be32(ubi->vid_hdr_offset);
843 ec_hdr->data_offset = cpu_to_be32(ubi->leb_start);
ff94bc40 844 ec_hdr->image_seq = cpu_to_be32(ubi->image_seq);
2d262c48
KP
845 crc = crc32(UBI_CRC32_INIT, ec_hdr, UBI_EC_HDR_SIZE_CRC);
846 ec_hdr->hdr_crc = cpu_to_be32(crc);
847
ff94bc40 848 err = self_check_ec_hdr(ubi, pnum, ec_hdr);
2d262c48 849 if (err)
ff94bc40 850 return err;
2d262c48 851
0195a7bb
HS
852 if (ubi_dbg_power_cut(ubi, POWER_CUT_EC_WRITE))
853 return -EROFS;
854
2d262c48
KP
855 err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize);
856 return err;
857}
858
859/**
860 * validate_vid_hdr - validate a volume identifier header.
861 * @ubi: UBI device description object
862 * @vid_hdr: the volume identifier header to check
863 *
864 * This function checks that data stored in the volume identifier header
865 * @vid_hdr. Returns zero if the VID header is OK and %1 if not.
866 */
867static int validate_vid_hdr(const struct ubi_device *ubi,
868 const struct ubi_vid_hdr *vid_hdr)
869{
870 int vol_type = vid_hdr->vol_type;
871 int copy_flag = vid_hdr->copy_flag;
872 int vol_id = be32_to_cpu(vid_hdr->vol_id);
873 int lnum = be32_to_cpu(vid_hdr->lnum);
874 int compat = vid_hdr->compat;
875 int data_size = be32_to_cpu(vid_hdr->data_size);
876 int used_ebs = be32_to_cpu(vid_hdr->used_ebs);
877 int data_pad = be32_to_cpu(vid_hdr->data_pad);
878 int data_crc = be32_to_cpu(vid_hdr->data_crc);
879 int usable_leb_size = ubi->leb_size - data_pad;
880
881 if (copy_flag != 0 && copy_flag != 1) {
0195a7bb 882 ubi_err(ubi, "bad copy_flag");
2d262c48
KP
883 goto bad;
884 }
885
886 if (vol_id < 0 || lnum < 0 || data_size < 0 || used_ebs < 0 ||
887 data_pad < 0) {
0195a7bb 888 ubi_err(ubi, "negative values");
2d262c48
KP
889 goto bad;
890 }
891
892 if (vol_id >= UBI_MAX_VOLUMES && vol_id < UBI_INTERNAL_VOL_START) {
0195a7bb 893 ubi_err(ubi, "bad vol_id");
2d262c48
KP
894 goto bad;
895 }
896
897 if (vol_id < UBI_INTERNAL_VOL_START && compat != 0) {
0195a7bb 898 ubi_err(ubi, "bad compat");
2d262c48
KP
899 goto bad;
900 }
901
902 if (vol_id >= UBI_INTERNAL_VOL_START && compat != UBI_COMPAT_DELETE &&
903 compat != UBI_COMPAT_RO && compat != UBI_COMPAT_PRESERVE &&
904 compat != UBI_COMPAT_REJECT) {
0195a7bb 905 ubi_err(ubi, "bad compat");
2d262c48
KP
906 goto bad;
907 }
908
909 if (vol_type != UBI_VID_DYNAMIC && vol_type != UBI_VID_STATIC) {
0195a7bb 910 ubi_err(ubi, "bad vol_type");
2d262c48
KP
911 goto bad;
912 }
913
914 if (data_pad >= ubi->leb_size / 2) {
0195a7bb 915 ubi_err(ubi, "bad data_pad");
2d262c48
KP
916 goto bad;
917 }
918
919 if (vol_type == UBI_VID_STATIC) {
920 /*
921 * Although from high-level point of view static volumes may
922 * contain zero bytes of data, but no VID headers can contain
923 * zero at these fields, because they empty volumes do not have
924 * mapped logical eraseblocks.
925 */
926 if (used_ebs == 0) {
0195a7bb 927 ubi_err(ubi, "zero used_ebs");
2d262c48
KP
928 goto bad;
929 }
930 if (data_size == 0) {
0195a7bb 931 ubi_err(ubi, "zero data_size");
2d262c48
KP
932 goto bad;
933 }
934 if (lnum < used_ebs - 1) {
935 if (data_size != usable_leb_size) {
0195a7bb 936 ubi_err(ubi, "bad data_size");
2d262c48
KP
937 goto bad;
938 }
939 } else if (lnum == used_ebs - 1) {
940 if (data_size == 0) {
0195a7bb 941 ubi_err(ubi, "bad data_size at last LEB");
2d262c48
KP
942 goto bad;
943 }
944 } else {
0195a7bb 945 ubi_err(ubi, "too high lnum");
2d262c48
KP
946 goto bad;
947 }
948 } else {
949 if (copy_flag == 0) {
950 if (data_crc != 0) {
0195a7bb 951 ubi_err(ubi, "non-zero data CRC");
2d262c48
KP
952 goto bad;
953 }
954 if (data_size != 0) {
0195a7bb 955 ubi_err(ubi, "non-zero data_size");
2d262c48
KP
956 goto bad;
957 }
958 } else {
959 if (data_size == 0) {
0195a7bb 960 ubi_err(ubi, "zero data_size of copy");
2d262c48
KP
961 goto bad;
962 }
963 }
964 if (used_ebs != 0) {
0195a7bb 965 ubi_err(ubi, "bad used_ebs");
2d262c48
KP
966 goto bad;
967 }
968 }
969
970 return 0;
971
972bad:
0195a7bb 973 ubi_err(ubi, "bad VID header");
ff94bc40
HS
974 ubi_dump_vid_hdr(vid_hdr);
975 dump_stack();
2d262c48
KP
976 return 1;
977}
978
979/**
980 * ubi_io_read_vid_hdr - read and check a volume identifier header.
981 * @ubi: UBI device description object
982 * @pnum: physical eraseblock number to read from
983 * @vid_hdr: &struct ubi_vid_hdr object where to store the read volume
984 * identifier header
985 * @verbose: be verbose if the header is corrupted or wasn't found
986 *
987 * This function reads the volume identifier header from physical eraseblock
988 * @pnum and stores it in @vid_hdr. It also checks CRC checksum of the read
ff94bc40
HS
989 * volume identifier header. The error codes are the same as in
990 * 'ubi_io_read_ec_hdr()'.
2d262c48 991 *
ff94bc40
HS
992 * Note, the implementation of this function is also very similar to
993 * 'ubi_io_read_ec_hdr()', so refer commentaries in 'ubi_io_read_ec_hdr()'.
2d262c48
KP
994 */
995int ubi_io_read_vid_hdr(struct ubi_device *ubi, int pnum,
996 struct ubi_vid_hdr *vid_hdr, int verbose)
997{
ff94bc40 998 int err, read_err;
2d262c48
KP
999 uint32_t crc, magic, hdr_crc;
1000 void *p;
1001
1002 dbg_io("read VID header from PEB %d", pnum);
1003 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
2d262c48
KP
1004
1005 p = (char *)vid_hdr - ubi->vid_hdr_shift;
ff94bc40 1006 read_err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
2d262c48 1007 ubi->vid_hdr_alsize);
ff94bc40
HS
1008 if (read_err && read_err != UBI_IO_BITFLIPS && !mtd_is_eccerr(read_err))
1009 return read_err;
2d262c48
KP
1010
1011 magic = be32_to_cpu(vid_hdr->magic);
1012 if (magic != UBI_VID_HDR_MAGIC) {
ff94bc40
HS
1013 if (mtd_is_eccerr(read_err))
1014 return UBI_IO_BAD_HDR_EBADMSG;
2d262c48 1015
ff94bc40 1016 if (ubi_check_pattern(vid_hdr, 0xFF, UBI_VID_HDR_SIZE)) {
2d262c48 1017 if (verbose)
0195a7bb 1018 ubi_warn(ubi, "no VID header found at PEB %d, only 0xFF bytes",
ff94bc40
HS
1019 pnum);
1020 dbg_bld("no VID header found at PEB %d, only 0xFF bytes",
1021 pnum);
1022 if (!read_err)
1023 return UBI_IO_FF;
1024 else
1025 return UBI_IO_FF_BITFLIPS;
2d262c48
KP
1026 }
1027
2d262c48 1028 if (verbose) {
0195a7bb 1029 ubi_warn(ubi, "bad magic number at PEB %d: %08x instead of %08x",
ff94bc40
HS
1030 pnum, magic, UBI_VID_HDR_MAGIC);
1031 ubi_dump_vid_hdr(vid_hdr);
2d262c48 1032 }
ff94bc40
HS
1033 dbg_bld("bad magic number at PEB %d: %08x instead of %08x",
1034 pnum, magic, UBI_VID_HDR_MAGIC);
1035 return UBI_IO_BAD_HDR;
2d262c48
KP
1036 }
1037
1038 crc = crc32(UBI_CRC32_INIT, vid_hdr, UBI_VID_HDR_SIZE_CRC);
1039 hdr_crc = be32_to_cpu(vid_hdr->hdr_crc);
1040
1041 if (hdr_crc != crc) {
1042 if (verbose) {
0195a7bb 1043 ubi_warn(ubi, "bad CRC at PEB %d, calculated %#08x, read %#08x",
ff94bc40
HS
1044 pnum, crc, hdr_crc);
1045 ubi_dump_vid_hdr(vid_hdr);
2d262c48 1046 }
ff94bc40
HS
1047 dbg_bld("bad CRC at PEB %d, calculated %#08x, read %#08x",
1048 pnum, crc, hdr_crc);
1049 if (!read_err)
1050 return UBI_IO_BAD_HDR;
1051 else
1052 return UBI_IO_BAD_HDR_EBADMSG;
2d262c48
KP
1053 }
1054
2d262c48
KP
1055 err = validate_vid_hdr(ubi, vid_hdr);
1056 if (err) {
0195a7bb 1057 ubi_err(ubi, "validation failed for PEB %d", pnum);
2d262c48
KP
1058 return -EINVAL;
1059 }
1060
1061 return read_err ? UBI_IO_BITFLIPS : 0;
1062}
1063
1064/**
1065 * ubi_io_write_vid_hdr - write a volume identifier header.
1066 * @ubi: UBI device description object
1067 * @pnum: the physical eraseblock number to write to
1068 * @vid_hdr: the volume identifier header to write
1069 *
1070 * This function writes the volume identifier header described by @vid_hdr to
1071 * physical eraseblock @pnum. This function automatically fills the
1072 * @vid_hdr->magic and the @vid_hdr->version fields, as well as calculates
1073 * header CRC checksum and stores it at vid_hdr->hdr_crc.
1074 *
1075 * This function returns zero in case of success and a negative error code in
1076 * case of failure. If %-EIO is returned, the physical eraseblock probably went
1077 * bad.
1078 */
1079int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum,
1080 struct ubi_vid_hdr *vid_hdr)
1081{
1082 int err;
1083 uint32_t crc;
1084 void *p;
1085
1086 dbg_io("write VID header to PEB %d", pnum);
1087 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
1088
ff94bc40 1089 err = self_check_peb_ec_hdr(ubi, pnum);
2d262c48 1090 if (err)
ff94bc40 1091 return err;
2d262c48
KP
1092
1093 vid_hdr->magic = cpu_to_be32(UBI_VID_HDR_MAGIC);
1094 vid_hdr->version = UBI_VERSION;
1095 crc = crc32(UBI_CRC32_INIT, vid_hdr, UBI_VID_HDR_SIZE_CRC);
1096 vid_hdr->hdr_crc = cpu_to_be32(crc);
1097
ff94bc40 1098 err = self_check_vid_hdr(ubi, pnum, vid_hdr);
2d262c48 1099 if (err)
ff94bc40 1100 return err;
2d262c48 1101
0195a7bb
HS
1102 if (ubi_dbg_power_cut(ubi, POWER_CUT_VID_WRITE))
1103 return -EROFS;
1104
2d262c48
KP
1105 p = (char *)vid_hdr - ubi->vid_hdr_shift;
1106 err = ubi_io_write(ubi, p, pnum, ubi->vid_hdr_aloffset,
1107 ubi->vid_hdr_alsize);
1108 return err;
1109}
1110
2d262c48 1111/**
ff94bc40 1112 * self_check_not_bad - ensure that a physical eraseblock is not bad.
2d262c48
KP
1113 * @ubi: UBI device description object
1114 * @pnum: physical eraseblock number to check
1115 *
ff94bc40
HS
1116 * This function returns zero if the physical eraseblock is good, %-EINVAL if
1117 * it is bad and a negative error code if an error occurred.
2d262c48 1118 */
ff94bc40 1119static int self_check_not_bad(const struct ubi_device *ubi, int pnum)
2d262c48
KP
1120{
1121 int err;
1122
ff94bc40
HS
1123 if (!ubi_dbg_chk_io(ubi))
1124 return 0;
1125
2d262c48
KP
1126 err = ubi_io_is_bad(ubi, pnum);
1127 if (!err)
1128 return err;
1129
0195a7bb 1130 ubi_err(ubi, "self-check failed for PEB %d", pnum);
ff94bc40
HS
1131 dump_stack();
1132 return err > 0 ? -EINVAL : err;
2d262c48
KP
1133}
1134
1135/**
ff94bc40 1136 * self_check_ec_hdr - check if an erase counter header is all right.
2d262c48
KP
1137 * @ubi: UBI device description object
1138 * @pnum: physical eraseblock number the erase counter header belongs to
1139 * @ec_hdr: the erase counter header to check
1140 *
1141 * This function returns zero if the erase counter header contains valid
ff94bc40 1142 * values, and %-EINVAL if not.
2d262c48 1143 */
ff94bc40
HS
1144static int self_check_ec_hdr(const struct ubi_device *ubi, int pnum,
1145 const struct ubi_ec_hdr *ec_hdr)
2d262c48
KP
1146{
1147 int err;
1148 uint32_t magic;
1149
ff94bc40
HS
1150 if (!ubi_dbg_chk_io(ubi))
1151 return 0;
1152
2d262c48
KP
1153 magic = be32_to_cpu(ec_hdr->magic);
1154 if (magic != UBI_EC_HDR_MAGIC) {
0195a7bb 1155 ubi_err(ubi, "bad magic %#08x, must be %#08x",
2d262c48
KP
1156 magic, UBI_EC_HDR_MAGIC);
1157 goto fail;
1158 }
1159
1160 err = validate_ec_hdr(ubi, ec_hdr);
1161 if (err) {
0195a7bb 1162 ubi_err(ubi, "self-check failed for PEB %d", pnum);
2d262c48
KP
1163 goto fail;
1164 }
1165
1166 return 0;
1167
1168fail:
ff94bc40
HS
1169 ubi_dump_ec_hdr(ec_hdr);
1170 dump_stack();
1171 return -EINVAL;
2d262c48
KP
1172}
1173
1174/**
ff94bc40 1175 * self_check_peb_ec_hdr - check erase counter header.
2d262c48
KP
1176 * @ubi: UBI device description object
1177 * @pnum: the physical eraseblock number to check
1178 *
ff94bc40
HS
1179 * This function returns zero if the erase counter header is all right and and
1180 * a negative error code if not or if an error occurred.
2d262c48 1181 */
ff94bc40 1182static int self_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum)
2d262c48
KP
1183{
1184 int err;
1185 uint32_t crc, hdr_crc;
1186 struct ubi_ec_hdr *ec_hdr;
1187
ff94bc40
HS
1188 if (!ubi_dbg_chk_io(ubi))
1189 return 0;
1190
2d262c48
KP
1191 ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_NOFS);
1192 if (!ec_hdr)
1193 return -ENOMEM;
1194
1195 err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
ff94bc40 1196 if (err && err != UBI_IO_BITFLIPS && !mtd_is_eccerr(err))
2d262c48
KP
1197 goto exit;
1198
1199 crc = crc32(UBI_CRC32_INIT, ec_hdr, UBI_EC_HDR_SIZE_CRC);
1200 hdr_crc = be32_to_cpu(ec_hdr->hdr_crc);
1201 if (hdr_crc != crc) {
0195a7bb
HS
1202 ubi_err(ubi, "bad CRC, calculated %#08x, read %#08x",
1203 crc, hdr_crc);
1204 ubi_err(ubi, "self-check failed for PEB %d", pnum);
ff94bc40
HS
1205 ubi_dump_ec_hdr(ec_hdr);
1206 dump_stack();
1207 err = -EINVAL;
2d262c48
KP
1208 goto exit;
1209 }
1210
ff94bc40 1211 err = self_check_ec_hdr(ubi, pnum, ec_hdr);
2d262c48
KP
1212
1213exit:
1214 kfree(ec_hdr);
1215 return err;
1216}
1217
1218/**
ff94bc40 1219 * self_check_vid_hdr - check that a volume identifier header is all right.
2d262c48
KP
1220 * @ubi: UBI device description object
1221 * @pnum: physical eraseblock number the volume identifier header belongs to
1222 * @vid_hdr: the volume identifier header to check
1223 *
1224 * This function returns zero if the volume identifier header is all right, and
ff94bc40 1225 * %-EINVAL if not.
2d262c48 1226 */
ff94bc40
HS
1227static int self_check_vid_hdr(const struct ubi_device *ubi, int pnum,
1228 const struct ubi_vid_hdr *vid_hdr)
2d262c48
KP
1229{
1230 int err;
1231 uint32_t magic;
1232
ff94bc40
HS
1233 if (!ubi_dbg_chk_io(ubi))
1234 return 0;
1235
2d262c48
KP
1236 magic = be32_to_cpu(vid_hdr->magic);
1237 if (magic != UBI_VID_HDR_MAGIC) {
0195a7bb 1238 ubi_err(ubi, "bad VID header magic %#08x at PEB %d, must be %#08x",
2d262c48
KP
1239 magic, pnum, UBI_VID_HDR_MAGIC);
1240 goto fail;
1241 }
1242
1243 err = validate_vid_hdr(ubi, vid_hdr);
1244 if (err) {
0195a7bb 1245 ubi_err(ubi, "self-check failed for PEB %d", pnum);
2d262c48
KP
1246 goto fail;
1247 }
1248
1249 return err;
1250
1251fail:
0195a7bb 1252 ubi_err(ubi, "self-check failed for PEB %d", pnum);
ff94bc40
HS
1253 ubi_dump_vid_hdr(vid_hdr);
1254 dump_stack();
1255 return -EINVAL;
2d262c48
KP
1256
1257}
1258
1259/**
ff94bc40 1260 * self_check_peb_vid_hdr - check volume identifier header.
2d262c48
KP
1261 * @ubi: UBI device description object
1262 * @pnum: the physical eraseblock number to check
1263 *
1264 * This function returns zero if the volume identifier header is all right,
ff94bc40 1265 * and a negative error code if not or if an error occurred.
2d262c48 1266 */
ff94bc40 1267static int self_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum)
2d262c48
KP
1268{
1269 int err;
1270 uint32_t crc, hdr_crc;
1271 struct ubi_vid_hdr *vid_hdr;
1272 void *p;
1273
ff94bc40
HS
1274 if (!ubi_dbg_chk_io(ubi))
1275 return 0;
1276
2d262c48
KP
1277 vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
1278 if (!vid_hdr)
1279 return -ENOMEM;
1280
1281 p = (char *)vid_hdr - ubi->vid_hdr_shift;
1282 err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
1283 ubi->vid_hdr_alsize);
ff94bc40 1284 if (err && err != UBI_IO_BITFLIPS && !mtd_is_eccerr(err))
2d262c48
KP
1285 goto exit;
1286
1287 crc = crc32(UBI_CRC32_INIT, vid_hdr, UBI_EC_HDR_SIZE_CRC);
1288 hdr_crc = be32_to_cpu(vid_hdr->hdr_crc);
1289 if (hdr_crc != crc) {
0195a7bb 1290 ubi_err(ubi, "bad VID header CRC at PEB %d, calculated %#08x, read %#08x",
ff94bc40 1291 pnum, crc, hdr_crc);
0195a7bb 1292 ubi_err(ubi, "self-check failed for PEB %d", pnum);
ff94bc40
HS
1293 ubi_dump_vid_hdr(vid_hdr);
1294 dump_stack();
1295 err = -EINVAL;
2d262c48
KP
1296 goto exit;
1297 }
1298
ff94bc40 1299 err = self_check_vid_hdr(ubi, pnum, vid_hdr);
2d262c48
KP
1300
1301exit:
1302 ubi_free_vid_hdr(ubi, vid_hdr);
1303 return err;
1304}
1305
1306/**
ff94bc40
HS
1307 * self_check_write - make sure write succeeded.
1308 * @ubi: UBI device description object
1309 * @buf: buffer with data which were written
1310 * @pnum: physical eraseblock number the data were written to
1311 * @offset: offset within the physical eraseblock the data were written to
1312 * @len: how many bytes were written
1313 *
1314 * This functions reads data which were recently written and compares it with
1315 * the original data buffer - the data have to match. Returns zero if the data
1316 * match and a negative error code if not or in case of failure.
1317 */
1318static int self_check_write(struct ubi_device *ubi, const void *buf, int pnum,
1319 int offset, int len)
1320{
1321 int err, i;
1322 size_t read;
1323 void *buf1;
1324 loff_t addr = (loff_t)pnum * ubi->peb_size + offset;
1325
1326 if (!ubi_dbg_chk_io(ubi))
1327 return 0;
1328
1329 buf1 = __vmalloc(len, GFP_NOFS, PAGE_KERNEL);
1330 if (!buf1) {
0195a7bb 1331 ubi_err(ubi, "cannot allocate memory to check writes");
ff94bc40
HS
1332 return 0;
1333 }
1334
1335 err = mtd_read(ubi->mtd, addr, len, &read, buf1);
1336 if (err && !mtd_is_bitflip(err))
1337 goto out_free;
1338
1339 for (i = 0; i < len; i++) {
1340 uint8_t c = ((uint8_t *)buf)[i];
1341 uint8_t c1 = ((uint8_t *)buf1)[i];
1342#if !defined(CONFIG_UBI_SILENCE_MSG)
1343 int dump_len = max_t(int, 128, len - i);
1344#endif
1345
1346 if (c == c1)
1347 continue;
1348
0195a7bb 1349 ubi_err(ubi, "self-check failed for PEB %d:%d, len %d",
ff94bc40 1350 pnum, offset, len);
5ebd3df6 1351#if !defined(CONFIG_UBI_SILENCE_MSG)
0195a7bb 1352 ubi_msg(ubi, "data differ at position %d", i);
0195a7bb 1353 ubi_msg(ubi, "hex dump of the original buffer from %d to %d",
ff94bc40 1354 i, i + dump_len);
f8c987f8 1355 print_hex_dump("", DUMP_PREFIX_OFFSET, 32, 1,
ff94bc40 1356 buf + i, dump_len, 1);
0195a7bb 1357 ubi_msg(ubi, "hex dump of the read buffer from %d to %d",
ff94bc40 1358 i, i + dump_len);
f8c987f8 1359 print_hex_dump("", DUMP_PREFIX_OFFSET, 32, 1,
ff94bc40 1360 buf1 + i, dump_len, 1);
5ebd3df6 1361#endif
ff94bc40
HS
1362 dump_stack();
1363 err = -EINVAL;
1364 goto out_free;
1365 }
1366
1367 vfree(buf1);
1368 return 0;
1369
1370out_free:
1371 vfree(buf1);
1372 return err;
1373}
1374
1375/**
1376 * ubi_self_check_all_ff - check that a region of flash is empty.
2d262c48
KP
1377 * @ubi: UBI device description object
1378 * @pnum: the physical eraseblock number to check
1379 * @offset: the starting offset within the physical eraseblock to check
1380 * @len: the length of the region to check
1381 *
1382 * This function returns zero if only 0xFF bytes are present at offset
ff94bc40
HS
1383 * @offset of the physical eraseblock @pnum, and a negative error code if not
1384 * or if an error occurred.
2d262c48 1385 */
ff94bc40 1386int ubi_self_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len)
2d262c48
KP
1387{
1388 size_t read;
1389 int err;
ff94bc40 1390 void *buf;
2d262c48
KP
1391 loff_t addr = (loff_t)pnum * ubi->peb_size + offset;
1392
ff94bc40
HS
1393 if (!ubi_dbg_chk_io(ubi))
1394 return 0;
1395
1396 buf = __vmalloc(len, GFP_NOFS, PAGE_KERNEL);
1397 if (!buf) {
0195a7bb 1398 ubi_err(ubi, "cannot allocate memory to check for 0xFFs");
ff94bc40
HS
1399 return 0;
1400 }
1401
1402 err = mtd_read(ubi->mtd, addr, len, &read, buf);
1403 if (err && !mtd_is_bitflip(err)) {
0195a7bb 1404 ubi_err(ubi, "err %d while reading %d bytes from PEB %d:%d, read %zd bytes",
ff94bc40 1405 err, len, pnum, offset, read);
2d262c48
KP
1406 goto error;
1407 }
1408
ff94bc40 1409 err = ubi_check_pattern(buf, 0xFF, len);
2d262c48 1410 if (err == 0) {
0195a7bb 1411 ubi_err(ubi, "flash region at PEB %d:%d, length %d does not contain all 0xFF bytes",
ff94bc40 1412 pnum, offset, len);
2d262c48
KP
1413 goto fail;
1414 }
2d262c48 1415
ff94bc40 1416 vfree(buf);
2d262c48
KP
1417 return 0;
1418
1419fail:
0195a7bb
HS
1420 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1421 ubi_msg(ubi, "hex dump of the %d-%d region", offset, offset + len);
f8c987f8 1422 print_hex_dump("", DUMP_PREFIX_OFFSET, 32, 1, buf, len, 1);
ff94bc40 1423 err = -EINVAL;
2d262c48 1424error:
ff94bc40
HS
1425 dump_stack();
1426 vfree(buf);
2d262c48
KP
1427 return err;
1428}
This page took 0.548328 seconds and 5 git commands to generate.