Lines Matching defs: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)) {
207 * @ubi: UBI device description object
222 int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset,
231 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
232 ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);
233 ubi_assert(offset % ubi->hdrs_min_io_size == 0);
234 ubi_assert(len > 0 && len % ubi->hdrs_min_io_size == 0);
236 if (ubi->ro_mode) {
237 ubi_err(ubi, "read-only mode");
241 err = self_check_not_bad(ubi, pnum);
246 err = ubi_self_check_all_ff(ubi, pnum, offset, len);
250 if (offset >= ubi->leb_start) {
255 err = self_check_peb_ec_hdr(ubi, pnum);
258 err = self_check_peb_vid_hdr(ubi, pnum);
263 if (ubi_dbg_is_write_failure(ubi)) {
264 ubi_err(ubi, "cannot write %d bytes to PEB %d:%d (emulated)",
270 addr = (loff_t)pnum * ubi->peb_size + offset;
271 err = mtd_write(ubi->mtd, addr, len, &written, buf);
273 ubi_err(ubi, "error %d while writing %d bytes to PEB %d:%d, written %zd bytes",
276 ubi_dump_flash(ubi, pnum, offset, len);
281 err = self_check_write(ubi, buf, pnum, offset, len);
290 len = ubi->peb_size - offset;
292 err = ubi_self_check_all_ff(ubi, pnum, offset, len);
300 * @ubi: UBI device description object
307 static int do_sync_erase(struct ubi_device *ubi, int pnum)
313 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
315 if (ubi->ro_mode) {
316 ubi_err(ubi, "read-only mode");
323 ei.addr = (loff_t)pnum * ubi->peb_size;
324 ei.len = ubi->peb_size;
326 err = mtd_erase(ubi->mtd, &ei);
329 ubi_warn(ubi, "error %d while erasing PEB %d, retry",
334 ubi_err(ubi, "cannot erase PEB %d, error %d", pnum, err);
339 err = ubi_self_check_all_ff(ubi, pnum, 0, ubi->peb_size);
343 if (ubi_dbg_is_erase_failure(ubi)) {
344 ubi_err(ubi, "cannot erase PEB %d (emulated)", pnum);
356 * @ubi: UBI device description object
363 static int torture_peb(struct ubi_device *ubi, int pnum)
367 ubi_msg(ubi, "run torture test for PEB %d", pnum);
371 mutex_lock(&ubi->buf_mutex);
373 err = do_sync_erase(ubi, pnum);
378 err = ubi_io_read(ubi, ubi->peb_buf, pnum, 0, ubi->peb_size);
382 err = ubi_check_pattern(ubi->peb_buf, 0xFF, ubi->peb_size);
384 ubi_err(ubi, "erased PEB %d, but a non-0xFF byte found",
391 memset(ubi->peb_buf, patterns[i], ubi->peb_size);
392 err = ubi_io_write(ubi, ubi->peb_buf, pnum, 0, ubi->peb_size);
396 memset(ubi->peb_buf, ~patterns[i], ubi->peb_size);
397 err = ubi_io_read(ubi, ubi->peb_buf, pnum, 0, ubi->peb_size);
401 err = ubi_check_pattern(ubi->peb_buf, patterns[i],
402 ubi->peb_size);
404 ubi_err(ubi, "pattern %x checking failed for PEB %d",
412 ubi_msg(ubi, "PEB %d passed torture test, do not mark it as bad", pnum);
415 mutex_unlock(&ubi->buf_mutex);
422 ubi_err(ubi, "read problems on freshly erased PEB %d, must be bad",
431 * @ubi: UBI device description object
449 static int nor_erase_prepare(struct ubi_device *ubi, int pnum)
474 addr = (loff_t)pnum * ubi->peb_size;
475 err = ubi_io_read_ec_hdr(ubi, pnum, &ec_hdr, 0);
478 err = mtd_write(ubi->mtd, addr, 4, &written, (void *)&data);
483 ubi_init_vid_buf(ubi, &vidb, &vid_hdr);
486 err = ubi_io_read_vid_hdr(ubi, pnum, &vidb, 0);
489 addr += ubi->vid_hdr_aloffset;
490 err = mtd_write(ubi->mtd, addr, 4, &written, (void *)&data);
502 ubi_err(ubi, "cannot invalidate PEB %d, write returned %d", pnum, err);
503 ubi_dump_flash(ubi, pnum, 0, ubi->peb_size);
509 * @ubi: UBI device description object
523 int ubi_io_sync_erase(struct ubi_device *ubi, int pnum, int torture)
527 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
529 err = self_check_not_bad(ubi, pnum);
533 if (ubi->ro_mode) {
534 ubi_err(ubi, "read-only mode");
538 if (ubi->nor_flash) {
539 err = nor_erase_prepare(ubi, pnum);
545 ret = torture_peb(ubi, pnum);
550 err = do_sync_erase(ubi, pnum);
559 * @ubi: UBI device description object
565 int ubi_io_is_bad(const struct ubi_device *ubi, int pnum)
567 struct mtd_info *mtd = ubi->mtd;
569 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
571 if (ubi->bad_allowed) {
574 ret = mtd_block_isbad(mtd, (loff_t)pnum * ubi->peb_size);
576 ubi_err(ubi, "error %d while checking if PEB %d is bad",
588 * @ubi: UBI device description object
594 int ubi_io_mark_bad(const struct ubi_device *ubi, int pnum)
597 struct mtd_info *mtd = ubi->mtd;
599 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
601 if (ubi->ro_mode) {
602 ubi_err(ubi, "read-only mode");
606 if (!ubi->bad_allowed)
609 err = mtd_block_markbad(mtd, (loff_t)pnum * ubi->peb_size);
611 ubi_err(ubi, "cannot mark PEB %d bad, error %d", pnum, err);
617 * @ubi: UBI device description object
623 static int validate_ec_hdr(const struct ubi_device *ubi,
634 ubi_err(ubi, "node with incompatible UBI version found: this UBI version is %d, image version is %d",
639 if (vid_hdr_offset != ubi->vid_hdr_offset) {
640 ubi_err(ubi, "bad VID header offset %d, expected %d",
641 vid_hdr_offset, ubi->vid_hdr_offset);
645 if (leb_start != ubi->leb_start) {
646 ubi_err(ubi, "bad data offset %d, expected %d",
647 leb_start, ubi->leb_start);
652 ubi_err(ubi, "bad erase counter %lld", ec);
659 ubi_err(ubi, "bad EC header");
667 * @ubi: UBI device description object
687 int ubi_io_read_ec_hdr(struct ubi_device *ubi, int pnum,
694 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
696 read_err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
725 ubi_warn(ubi, "no EC header found at PEB %d, only 0xFF bytes",
740 ubi_warn(ubi, "bad magic number at PEB %d: %08x instead of %08x",
754 ubi_warn(ubi, "bad EC header CRC at PEB %d, calculated %#08x, read %#08x",
768 err = validate_ec_hdr(ubi, ec_hdr);
770 ubi_err(ubi, "validation failed for PEB %d", pnum);
783 * @ubi: UBI device description object
796 int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum,
803 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
807 ec_hdr->vid_hdr_offset = cpu_to_be32(ubi->vid_hdr_offset);
808 ec_hdr->data_offset = cpu_to_be32(ubi->leb_start);
809 ec_hdr->image_seq = cpu_to_be32(ubi->image_seq);
813 err = self_check_ec_hdr(ubi, pnum, ec_hdr);
817 if (ubi_dbg_power_cut(ubi, POWER_CUT_EC_WRITE))
820 err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize);
826 * @ubi: UBI device description object
832 static int validate_vid_hdr(const struct ubi_device *ubi,
844 int usable_leb_size = ubi->leb_size - data_pad;
847 ubi_err(ubi, "bad copy_flag");
853 ubi_err(ubi, "negative values");
858 ubi_err(ubi, "bad vol_id");
863 ubi_err(ubi, "bad compat");
870 ubi_err(ubi, "bad compat");
875 ubi_err(ubi, "bad vol_type");
879 if (data_pad >= ubi->leb_size / 2) {
880 ubi_err(ubi, "bad data_pad");
884 if (data_size > ubi->leb_size) {
885 ubi_err(ubi, "bad data_size");
897 ubi_err(ubi, "zero used_ebs");
901 ubi_err(ubi, "zero data_size");
906 ubi_err(ubi, "bad data_size");
911 ubi_err(ubi, "bad data_size at last LEB");
915 ubi_err(ubi, "too high lnum");
921 ubi_err(ubi, "non-zero data CRC");
925 ubi_err(ubi, "non-zero data_size");
930 ubi_err(ubi, "zero data_size of copy");
935 ubi_err(ubi, "bad used_ebs");
943 ubi_err(ubi, "bad VID header");
951 * @ubi: UBI device description object
964 int ubi_io_read_vid_hdr(struct ubi_device *ubi, int pnum,
973 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
975 read_err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
976 ubi->vid_hdr_shift + UBI_VID_HDR_SIZE);
987 ubi_warn(ubi, "no VID header found at PEB %d, only 0xFF bytes",
998 ubi_warn(ubi, "bad magic number at PEB %d: %08x instead of %08x",
1012 ubi_warn(ubi, "bad CRC at PEB %d, calculated %#08x, read %#08x",
1024 err = validate_vid_hdr(ubi, vid_hdr);
1026 ubi_err(ubi, "validation failed for PEB %d", pnum);
1035 * @ubi: UBI device description object
1048 int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum,
1057 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
1059 err = self_check_peb_ec_hdr(ubi, pnum);
1068 err = self_check_vid_hdr(ubi, pnum, vid_hdr);
1072 if (ubi_dbg_power_cut(ubi, POWER_CUT_VID_WRITE))
1075 err = ubi_io_write(ubi, p, pnum, ubi->vid_hdr_aloffset,
1076 ubi->vid_hdr_alsize);
1082 * @ubi: UBI device description object
1088 static int self_check_not_bad(const struct ubi_device *ubi, int pnum)
1092 if (!ubi_dbg_chk_io(ubi))
1095 err = ubi_io_is_bad(ubi, pnum);
1099 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1106 * @ubi: UBI device description object
1113 static int self_check_ec_hdr(const struct ubi_device *ubi, int pnum,
1119 if (!ubi_dbg_chk_io(ubi))
1124 ubi_err(ubi, "bad magic %#08x, must be %#08x",
1129 err = validate_ec_hdr(ubi, ec_hdr);
1131 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1145 * @ubi: UBI device description object
1151 static int self_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum)
1157 if (!ubi_dbg_chk_io(ubi))
1160 ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_NOFS);
1164 err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
1171 ubi_err(ubi, "bad CRC, calculated %#08x, read %#08x",
1173 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1180 err = self_check_ec_hdr(ubi, pnum, ec_hdr);
1189 * @ubi: UBI device description object
1196 static int self_check_vid_hdr(const struct ubi_device *ubi, int pnum,
1202 if (!ubi_dbg_chk_io(ubi))
1207 ubi_err(ubi, "bad VID header magic %#08x at PEB %d, must be %#08x",
1212 err = validate_vid_hdr(ubi, vid_hdr);
1214 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1221 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1230 * @ubi: UBI device description object
1236 static int self_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum)
1244 if (!ubi_dbg_chk_io(ubi))
1247 vidb = ubi_alloc_vid_buf(ubi, GFP_NOFS);
1253 err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
1254 ubi->vid_hdr_alsize);
1261 ubi_err(ubi, "bad VID header CRC at PEB %d, calculated %#08x, read %#08x",
1263 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1270 err = self_check_vid_hdr(ubi, pnum, vid_hdr);
1279 * @ubi: UBI device description object
1289 static int self_check_write(struct ubi_device *ubi, const void *buf, int pnum,
1295 loff_t addr = (loff_t)pnum * ubi->peb_size + offset;
1297 if (!ubi_dbg_chk_io(ubi))
1302 ubi_err(ubi, "cannot allocate memory to check writes");
1306 err = mtd_read(ubi->mtd, addr, len, &read, buf1);
1318 ubi_err(ubi, "self-check failed for PEB %d:%d, len %d",
1320 ubi_msg(ubi, "data differ at position %d", i);
1322 ubi_msg(ubi, "hex dump of the original buffer from %d to %d",
1326 ubi_msg(ubi, "hex dump of the read buffer from %d to %d",
1345 * @ubi: UBI device description object
1354 int ubi_self_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len)
1359 loff_t addr = (loff_t)pnum * ubi->peb_size + offset;
1361 if (!ubi_dbg_chk_io(ubi))
1366 ubi_err(ubi, "cannot allocate memory to check for 0xFFs");
1370 err = mtd_read(ubi->mtd, addr, len, &read, buf);
1372 ubi_err(ubi, "err %d while reading %d bytes from PEB %d:%d, read %zd bytes",
1379 ubi_err(ubi, "flash region at PEB %d:%d, length %d does not contain all 0xFF bytes",
1388 ubi_err(ubi, "self-check failed for PEB %d", pnum);
1389 ubi_msg(ubi, "hex dump of the %d-%d region", offset, offset + len);