Lines Matching refs:ubi

35  * @ubi->mtd->writesize field. But as an exception, UBI admits use of another
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
51 * device, e.g., make @ubi->min_io_size = 512 in the example above?
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.
79 #include "ubi.h"
81 static int self_check_not_bad(const struct ubi_device *ubi, int pnum);
82 static int self_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum);
83 static int self_check_ec_hdr(const struct ubi_device *ubi, int pnum,
85 static int self_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum);
86 static int self_check_vid_hdr(const struct ubi_device *ubi, int pnum,
88 static int self_check_write(struct ubi_device *ubi, const void *buf, int pnum,
93 * @ubi: UBI device description object
113 int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,
122 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
123 ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);
126 err = self_check_not_bad(ubi, pnum);
152 addr = (loff_t)pnum * ubi->peb_size + offset;
154 err = mtd_read(ubi->mtd, addr, len, &read, buf);
167 ubi_msg(ubi, "fixable bit-flip detected at PEB %d",
174 ubi_warn(ubi, "error %d%s while reading %d bytes from PEB %d:%d, read only %zd bytes, retry",
180 ubi_err(ubi, "error %d%s while reading %d bytes from PEB %d:%d, read %zd bytes",
196 if (ubi_dbg_is_bitflip(ubi)) {
201 if (ubi_dbg_is_read_failure(ubi, MASK_READ_FAILURE)) {
202 ubi_warn(ubi, "cannot read %d bytes from PEB %d:%d (emulated)",
207 if (ubi_dbg_is_eccerr(ubi)) {
208 ubi_warn(ubi, "ECC error (emulated) while reading %d bytes from PEB %d:%d, read %zd bytes",
219 * @ubi: UBI device description object
234 int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset,
243 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
244 ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);
245 ubi_assert(offset % ubi->hdrs_min_io_size == 0);
246 ubi_assert(len > 0 && len % ubi->hdrs_min_io_size == 0);
248 if (ubi->ro_mode) {
249 ubi_err(ubi, "read-only mode");
253 err = self_check_not_bad(ubi, pnum);
258 err = ubi_self_check_all_ff(ubi, pnum, offset, len);
262 if (offset >= ubi->leb_start) {
267 err = self_check_peb_ec_hdr(ubi, pnum);
270 err = self_check_peb_vid_hdr(ubi, pnum);
275 if (ubi_dbg_is_write_failure(ubi)) {
276 ubi_err(ubi, "cannot write %d bytes to PEB %d:%d (emulated)",
282 addr = (loff_t)pnum * ubi->peb_size + offset;
283 err = mtd_write(ubi->mtd, addr, len, &written, buf);
285 ubi_err(ubi, "error %d while writing %d bytes to PEB %d:%d, written %zd bytes",
288 ubi_dump_flash(ubi, pnum, offset, len);
293 err = self_check_write(ubi, buf, pnum, offset, len);
302 len = ubi->peb_size - offset;
304 err = ubi_self_check_all_ff(ubi, pnum, offset, len);
312 * @ubi: UBI device description object
319 static int do_sync_erase(struct ubi_device *ubi, int pnum)
325 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
327 if (ubi->ro_mode) {
328 ubi_err(ubi, "read-only mode");
335 ei.addr = (loff_t)pnum * ubi->peb_size;
336 ei.len = ubi->peb_size;
338 err = mtd_erase(ubi->mtd, &ei);
341 ubi_warn(ubi, "error %d while erasing PEB %d, retry",
346 ubi_err(ubi, "cannot erase PEB %d, error %d", pnum, err);
351 err = ubi_self_check_all_ff(ubi, pnum, 0, ubi->peb_size);
355 if (ubi_dbg_is_erase_failure(ubi)) {
356 ubi_err(ubi, "cannot erase PEB %d (emulated)", pnum);
368 * @ubi: UBI device description object
375 static int torture_peb(struct ubi_device *ubi, int pnum)
379 ubi_msg(ubi, "run torture test for PEB %d", pnum);
383 mutex_lock(&ubi->buf_mutex);
385 err = do_sync_erase(ubi, pnum);
390 err = ubi_io_read(ubi, ubi->peb_buf, pnum, 0, ubi->peb_size);
394 err = ubi_check_pattern(ubi->peb_buf, 0xFF, ubi->peb_size);
396 ubi_err(ubi, "erased PEB %d, but a non-0xFF byte found",
403 memset(ubi->peb_buf, patterns[i], ubi->peb_size);
404 err = ubi_io_write(ubi, ubi->peb_buf, pnum, 0, ubi->peb_size);
408 memset(ubi->peb_buf, ~patterns[i], ubi->peb_size);
409 err = ubi_io_read(ubi, ubi->peb_buf, pnum, 0, ubi->peb_size);
413 err = ubi_check_pattern(ubi->peb_buf, patterns[i],
414 ubi->peb_size);
416 ubi_err(ubi, "pattern %x checking failed for PEB %d",
424 ubi_msg(ubi, "PEB %d passed torture test, do not mark it as bad", pnum);
427 mutex_unlock(&ubi->buf_mutex);
434 ubi_err(ubi, "read problems on freshly erased PEB %d, must be bad",
443 * @ubi: UBI device description object
461 static int nor_erase_prepare(struct ubi_device *ubi, int pnum)
486 addr = (loff_t)pnum * ubi->peb_size;
487 err = ubi_io_read_ec_hdr(ubi, pnum, &ec_hdr, 0);
490 err = mtd_write(ubi->mtd, addr, 4, &written, (void *)&data);
495 ubi_init_vid_buf(ubi, &vidb, &vid_hdr);
498 err = ubi_io_read_vid_hdr(ubi, pnum, &vidb, 0);
501 addr += ubi->vid_hdr_aloffset;
502 err = mtd_write(ubi->mtd, addr, 4, &written, (void *)&data);
514 ubi_err(ubi, "cannot invalidate PEB %d, write returned %d", pnum, err);
515 ubi_dump_flash(ubi, pnum, 0, ubi->peb_size);
521 * @ubi: UBI device description object
535 int ubi_io_sync_erase(struct ubi_device *ubi, int pnum, int torture)
539 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
541 err = self_check_not_bad(ubi, pnum);
545 if (ubi->ro_mode) {
546 ubi_err(ubi, "read-only mode");
557 if (ubi->nor_flash && ubi->mtd->writesize == 1) {
558 err = nor_erase_prepare(ubi, pnum);
564 ret = torture_peb(ubi, pnum);
569 err = do_sync_erase(ubi, pnum);
578 * @ubi: UBI device description object
584 int ubi_io_is_bad(const struct ubi_device *ubi, int pnum)
586 struct mtd_info *mtd = ubi->mtd;
588 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
590 if (ubi->bad_allowed) {
593 ret = mtd_block_isbad(mtd, (loff_t)pnum * ubi->peb_size);
595 ubi_err(ubi, "error %d while checking if PEB %d is bad",
607 * @ubi: UBI device description object
613 int ubi_io_mark_bad(const struct ubi_device *ubi, int pnum)
616 struct mtd_info *mtd = ubi->mtd;
618 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
620 if (ubi->ro_mode) {
621 ubi_err(ubi, "read-only mode");
625 if (!ubi->bad_allowed)
628 err = mtd_block_markbad(mtd, (loff_t)pnum * ubi->peb_size);
630 ubi_err(ubi, "cannot mark PEB %d bad, error %d", pnum, err);
636 * @ubi: UBI device description object
642 static int validate_ec_hdr(const struct ubi_device *ubi,
653 ubi_err(ubi, "node with incompatible UBI version found: this UBI version is %d, image version is %d",
658 if (vid_hdr_offset != ubi->vid_hdr_offset) {
659 ubi_err(ubi, "bad VID header offset %d, expected %d",
660 vid_hdr_offset, ubi->vid_hdr_offset);
664 if (leb_start != ubi->leb_start) {
665 ubi_err(ubi, "bad data offset %d, expected %d",
666 leb_start, ubi->leb_start);
671 ubi_err(ubi, "bad erase counter %lld", ec);
678 ubi_err(ubi, "bad EC header");
686 * @ubi: UBI device description object
706 int ubi_io_read_ec_hdr(struct ubi_device *ubi, int pnum,
713 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
715 read_err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
744 ubi_warn(ubi, "no EC header found at PEB %d, only 0xFF bytes",
759 ubi_warn(ubi, "bad magic number at PEB %d: %08x instead of %08x",
773 ubi_warn(ubi, "bad EC header CRC at PEB %d, calculated %#08x, read %#08x",
787 err = validate_ec_hdr(ubi, ec_hdr);
789 ubi_err(ubi, "validation failed for PEB %d", pnum);
800 if (ubi_dbg_is_read_failure(ubi, MASK_READ_FAILURE_EC)) {
801 ubi_warn(ubi, "cannot read EC header from PEB %d (emulated)",
806 if (ubi_dbg_is_ff(ubi, MASK_IO_FF_EC)) {
807 ubi_warn(ubi, "bit-all-ff (emulated)");
811 if (ubi_dbg_is_ff_bitflips(ubi, MASK_IO_FF_BITFLIPS_EC)) {
812 ubi_warn(ubi, "bit-all-ff with error reported by MTD driver (emulated)");
816 if (ubi_dbg_is_bad_hdr(ubi, MASK_BAD_HDR_EC)) {
817 ubi_warn(ubi, "bad_hdr (emulated)");
821 if (ubi_dbg_is_bad_hdr_ebadmsg(ubi, MASK_BAD_HDR_EBADMSG_EC)) {
822 ubi_warn(ubi, "bad_hdr with ECC error (emulated)");
831 * @ubi: UBI device description object
844 int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum,
851 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
855 ec_hdr->vid_hdr_offset = cpu_to_be32(ubi->vid_hdr_offset);
856 ec_hdr->data_offset = cpu_to_be32(ubi->leb_start);
857 ec_hdr->image_seq = cpu_to_be32(ubi->image_seq);
861 err = self_check_ec_hdr(ubi, pnum, ec_hdr);
865 if (ubi_dbg_is_power_cut(ubi, MASK_POWER_CUT_EC)) {
866 ubi_warn(ubi, "emulating a power cut when writing EC header");
867 ubi_ro_mode(ubi);
871 err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize);
877 * @ubi: UBI device description object
883 static int validate_vid_hdr(const struct ubi_device *ubi,
895 int usable_leb_size = ubi->leb_size - data_pad;
898 ubi_err(ubi, "bad copy_flag");
904 ubi_err(ubi, "negative values");
909 ubi_err(ubi, "bad vol_id");
914 ubi_err(ubi, "bad compat");
921 ubi_err(ubi, "bad compat");
926 ubi_err(ubi, "bad vol_type");
930 if (data_pad >= ubi->leb_size / 2) {
931 ubi_err(ubi, "bad data_pad");
935 if (data_size > ubi->leb_size) {
936 ubi_err(ubi, "bad data_size");
948 ubi_err(ubi, "zero used_ebs");
952 ubi_err(ubi, "zero data_size");
957 ubi_err(ubi, "bad data_size");
961 ubi_err(ubi, "too high lnum");
967 ubi_err(ubi, "non-zero data CRC");
971 ubi_err(ubi, "non-zero data_size");
976 ubi_err(ubi, "zero data_size of copy");
981 ubi_err(ubi, "bad used_ebs");
989 ubi_err(ubi, "bad VID header");
997 * @ubi: UBI device description object
1010 int ubi_io_read_vid_hdr(struct ubi_device *ubi, int pnum,
1019 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
1021 read_err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
1022 ubi->vid_hdr_shift + UBI_VID_HDR_SIZE);
1033 ubi_warn(ubi, "no VID header found at PEB %d, only 0xFF bytes",
1044 ubi_warn(ubi, "bad magic number at PEB %d: %08x instead of %08x",
1058 ubi_warn(ubi, "bad CRC at PEB %d, calculated %#08x, read %#08x",
1070 err = validate_vid_hdr(ubi, vid_hdr);
1072 ubi_err(ubi, "validation failed for PEB %d", pnum);
1079 if (ubi_dbg_is_read_failure(ubi, MASK_READ_FAILURE_VID)) {
1080 ubi_warn(ubi, "cannot read VID header from PEB %d (emulated)",
1085 if (ubi_dbg_is_ff(ubi, MASK_IO_FF_VID)) {
1086 ubi_warn(ubi, "bit-all-ff (emulated)");
1090 if (ubi_dbg_is_ff_bitflips(ubi, MASK_IO_FF_BITFLIPS_VID)) {
1091 ubi_warn(ubi, "bit-all-ff with error reported by MTD driver (emulated)");
1095 if (ubi_dbg_is_bad_hdr(ubi, MASK_BAD_HDR_VID)) {
1096 ubi_warn(ubi, "bad_hdr (emulated)");
1100 if (ubi_dbg_is_bad_hdr_ebadmsg(ubi, MASK_BAD_HDR_EBADMSG_VID)) {
1101 ubi_warn(ubi, "bad_hdr with ECC error (emulated)");
1110 * @ubi: UBI device description object
1123 int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum,
1132 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
1134 err = self_check_peb_ec_hdr(ubi, pnum);
1143 err = self_check_vid_hdr(ubi, pnum, vid_hdr);
1147 if (ubi_dbg_is_power_cut(ubi, MASK_POWER_CUT_VID)) {
1148 ubi_warn(ubi, "emulating a power cut when writing VID header");
1149 ubi_ro_mode(ubi);
1153 err = ubi_io_write(ubi, p, pnum, ubi->vid_hdr_aloffset,
1154 ubi->vid_hdr_alsize);
1160 * @ubi: UBI device description object
1166 static int self_check_not_bad(const struct ubi_device *ubi, int pnum)
1170 if (!ubi_dbg_chk_io(ubi))
1173 err = ubi_io_is_bad(ubi, pnum);
1177 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1184 * @ubi: UBI device description object
1191 static int self_check_ec_hdr(const struct ubi_device *ubi, int pnum,
1197 if (!ubi_dbg_chk_io(ubi))
1202 ubi_err(ubi, "bad magic %#08x, must be %#08x",
1207 err = validate_ec_hdr(ubi, ec_hdr);
1209 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1223 * @ubi: UBI device description object
1229 static int self_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum)
1235 if (!ubi_dbg_chk_io(ubi))
1238 ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_NOFS);
1242 err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
1249 ubi_err(ubi, "bad CRC, calculated %#08x, read %#08x",
1251 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1258 err = self_check_ec_hdr(ubi, pnum, ec_hdr);
1267 * @ubi: UBI device description object
1274 static int self_check_vid_hdr(const struct ubi_device *ubi, int pnum,
1280 if (!ubi_dbg_chk_io(ubi))
1285 ubi_err(ubi, "bad VID header magic %#08x at PEB %d, must be %#08x",
1290 err = validate_vid_hdr(ubi, vid_hdr);
1292 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1299 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1308 * @ubi: UBI device description object
1314 static int self_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum)
1322 if (!ubi_dbg_chk_io(ubi))
1325 vidb = ubi_alloc_vid_buf(ubi, GFP_NOFS);
1331 err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
1332 ubi->vid_hdr_alsize);
1339 ubi_err(ubi, "bad VID header CRC at PEB %d, calculated %#08x, read %#08x",
1341 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1348 err = self_check_vid_hdr(ubi, pnum, vid_hdr);
1357 * @ubi: UBI device description object
1367 static int self_check_write(struct ubi_device *ubi, const void *buf, int pnum,
1373 loff_t addr = (loff_t)pnum * ubi->peb_size + offset;
1375 if (!ubi_dbg_chk_io(ubi))
1380 ubi_err(ubi, "cannot allocate memory to check writes");
1384 err = mtd_read(ubi->mtd, addr, len, &read, buf1);
1396 ubi_err(ubi, "self-check failed for PEB %d:%d, len %d",
1398 ubi_msg(ubi, "data differ at position %d", i);
1400 ubi_msg(ubi, "hex dump of the original buffer from %d to %d",
1404 ubi_msg(ubi, "hex dump of the read buffer from %d to %d",
1423 * @ubi: UBI device description object
1432 int ubi_self_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len)
1437 loff_t addr = (loff_t)pnum * ubi->peb_size + offset;
1439 if (!ubi_dbg_chk_io(ubi))
1444 ubi_err(ubi, "cannot allocate memory to check for 0xFFs");
1448 err = mtd_read(ubi->mtd, addr, len, &read, buf);
1450 ubi_err(ubi, "err %d while reading %d bytes from PEB %d:%d, read %zd bytes",
1457 ubi_err(ubi, "flash region at PEB %d:%d, length %d does not contain all 0xFF bytes",
1466 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1467 ubi_msg(ubi, "hex dump of the %d-%d region", offset, offset + len);