Home | History | Annotate | Download | only in ubispl
      1 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
      2 /*
      3  * Copyright (c) Thomas Gleixner <tglx (at) linutronix.de>
      4  *
      5  * The parts taken from the kernel implementation are:
      6  *
      7  * Copyright (c) International Business Machines Corp., 2006
      8  */
      9 
     10 #include <common.h>
     11 #include <errno.h>
     12 #include <ubispl.h>
     13 
     14 #include <linux/crc32.h>
     15 
     16 #include "ubispl.h"
     17 
     18 /**
     19  * ubi_calc_fm_size - calculates the fastmap size in bytes for an UBI device.
     20  * @ubi: UBI device description object
     21  */
     22 static size_t ubi_calc_fm_size(struct ubi_scan_info *ubi)
     23 {
     24 	size_t size;
     25 
     26 	size = sizeof(struct ubi_fm_sb) +
     27 		sizeof(struct ubi_fm_hdr) +
     28 		sizeof(struct ubi_fm_scan_pool) +
     29 		sizeof(struct ubi_fm_scan_pool) +
     30 		(ubi->peb_count * sizeof(struct ubi_fm_ec)) +
     31 		(sizeof(struct ubi_fm_eba) +
     32 		(ubi->peb_count * sizeof(__be32))) +
     33 		sizeof(struct ubi_fm_volhdr) * UBI_MAX_VOLUMES;
     34 	return roundup(size, ubi->leb_size);
     35 }
     36 
     37 static int ubi_io_read(struct ubi_scan_info *ubi, void *buf, int pnum,
     38 		       unsigned long from, unsigned long len)
     39 {
     40 	return ubi->read(pnum + ubi->peb_offset, from, len, buf);
     41 }
     42 
     43 static int ubi_io_is_bad(struct ubi_scan_info *ubi, int peb)
     44 {
     45 	return peb >= ubi->peb_count || peb < 0;
     46 }
     47 
     48 static int ubi_io_read_vid_hdr(struct ubi_scan_info *ubi, int pnum,
     49 			       struct ubi_vid_hdr *vh, int unused)
     50 {
     51 	u32 magic;
     52 	int res;
     53 
     54 	/* No point in rescanning a corrupt block */
     55 	if (test_bit(pnum, ubi->corrupt))
     56 		return UBI_IO_BAD_HDR;
     57 	/*
     58 	 * If the block has been scanned already, no need to rescan
     59 	 */
     60 	if (test_and_set_bit(pnum, ubi->scanned))
     61 		return 0;
     62 
     63 	res = ubi_io_read(ubi, vh, pnum, ubi->vid_offset, sizeof(*vh));
     64 
     65 	/*
     66 	 * Bad block, unrecoverable ECC error, skip the block
     67 	 */
     68 	if (res) {
     69 		ubi_dbg("Skipping bad or unreadable block %d", pnum);
     70 		vh->magic = 0;
     71 		generic_set_bit(pnum, ubi->corrupt);
     72 		return res;
     73 	}
     74 
     75 	/* Magic number available ? */
     76 	magic = be32_to_cpu(vh->magic);
     77 	if (magic != UBI_VID_HDR_MAGIC) {
     78 		generic_set_bit(pnum, ubi->corrupt);
     79 		if (magic == 0xffffffff)
     80 			return UBI_IO_FF;
     81 		ubi_msg("Bad magic in block 0%d %08x", pnum, magic);
     82 		return UBI_IO_BAD_HDR;
     83 	}
     84 
     85 	/* Header CRC correct ? */
     86 	if (crc32(UBI_CRC32_INIT, vh, UBI_VID_HDR_SIZE_CRC) !=
     87 	    be32_to_cpu(vh->hdr_crc)) {
     88 		ubi_msg("Bad CRC in block 0%d", pnum);
     89 		generic_set_bit(pnum, ubi->corrupt);
     90 		return UBI_IO_BAD_HDR;
     91 	}
     92 
     93 	ubi_dbg("RV: pnum: %i sqnum %llu", pnum, be64_to_cpu(vh->sqnum));
     94 
     95 	return 0;
     96 }
     97 
     98 static int ubi_rescan_fm_vid_hdr(struct ubi_scan_info *ubi,
     99 				 struct ubi_vid_hdr *vh,
    100 				 u32 fm_pnum, u32 fm_vol_id, u32 fm_lnum)
    101 {
    102 	int res;
    103 
    104 	if (ubi_io_is_bad(ubi, fm_pnum))
    105 		return -EINVAL;
    106 
    107 	res = ubi_io_read_vid_hdr(ubi, fm_pnum, vh, 0);
    108 	if (!res) {
    109 		/* Check volume id, volume type and lnum */
    110 		if (be32_to_cpu(vh->vol_id) == fm_vol_id &&
    111 		    vh->vol_type == UBI_VID_STATIC &&
    112 		    be32_to_cpu(vh->lnum) == fm_lnum)
    113 			return 0;
    114 		ubi_dbg("RS: PEB %u vol: %u : %u typ %u lnum %u %u",
    115 			fm_pnum, fm_vol_id, vh->vol_type,
    116 			be32_to_cpu(vh->vol_id),
    117 			fm_lnum, be32_to_cpu(vh->lnum));
    118 	}
    119 	return res;
    120 }
    121 
    122 /* Insert the logic block into the volume info */
    123 static int ubi_add_peb_to_vol(struct ubi_scan_info *ubi,
    124 			      struct ubi_vid_hdr *vh, u32 vol_id,
    125 			      u32 pnum, u32 lnum)
    126 {
    127 	struct ubi_vol_info *vi = ubi->volinfo + vol_id;
    128 	u32 *ltp;
    129 
    130 	/*
    131 	 * If the volume is larger than expected, yell and give up :(
    132 	 */
    133 	if (lnum >= UBI_MAX_VOL_LEBS) {
    134 		ubi_warn("Vol: %u LEB %d > %d", vol_id, lnum, UBI_MAX_VOL_LEBS);
    135 		return -EINVAL;
    136 	}
    137 
    138 	ubi_dbg("SC: Add PEB %u to Vol %u as LEB %u fnd %d sc %d",
    139 		pnum, vol_id, lnum, !!test_bit(lnum, vi->found),
    140 		!!test_bit(pnum, ubi->scanned));
    141 
    142 	/* Points to the translation entry */
    143 	ltp = vi->lebs_to_pebs + lnum;
    144 
    145 	/* If the block is already assigned, check sqnum */
    146 	if (__test_and_set_bit(lnum, vi->found)) {
    147 		u32 cur_pnum = *ltp;
    148 		struct ubi_vid_hdr *cur = ubi->blockinfo + cur_pnum;
    149 
    150 		/*
    151 		 * If the current block hase not yet been scanned, we
    152 		 * need to do that. The other block might be stale or
    153 		 * the current block corrupted and the FM not yet
    154 		 * updated.
    155 		 */
    156 		if (!test_bit(cur_pnum, ubi->scanned)) {
    157 			/*
    158 			 * If the scan fails, we use the valid block
    159 			 */
    160 			if (ubi_rescan_fm_vid_hdr(ubi, cur, cur_pnum, vol_id,
    161 						  lnum)) {
    162 				*ltp = pnum;
    163 				return 0;
    164 			}
    165 		}
    166 
    167 		/*
    168 		 * Should not happen ....
    169 		 */
    170 		if (test_bit(cur_pnum, ubi->corrupt)) {
    171 			*ltp = pnum;
    172 			return 0;
    173 		}
    174 
    175 		ubi_dbg("Vol %u LEB %u PEB %u->sqnum %llu NPEB %u->sqnum %llu",
    176 			vol_id, lnum, cur_pnum, be64_to_cpu(cur->sqnum), pnum,
    177 			be64_to_cpu(vh->sqnum));
    178 
    179 		/*
    180 		 * Compare sqnum and take the newer one
    181 		 */
    182 		if (be64_to_cpu(cur->sqnum) < be64_to_cpu(vh->sqnum))
    183 			*ltp = pnum;
    184 	} else {
    185 		*ltp = pnum;
    186 		if (lnum > vi->last_block)
    187 			vi->last_block = lnum;
    188 	}
    189 
    190 	return 0;
    191 }
    192 
    193 static int ubi_scan_vid_hdr(struct ubi_scan_info *ubi, struct ubi_vid_hdr *vh,
    194 			    u32 pnum)
    195 {
    196 	u32 vol_id, lnum;
    197 	int res;
    198 
    199 	if (ubi_io_is_bad(ubi, pnum))
    200 		return -EINVAL;
    201 
    202 	res = ubi_io_read_vid_hdr(ubi, pnum, vh, 0);
    203 	if (res)
    204 		return res;
    205 
    206 	/* Get volume id */
    207 	vol_id = be32_to_cpu(vh->vol_id);
    208 
    209 	/* If this is the fastmap anchor, return right away */
    210 	if (vol_id == UBI_FM_SB_VOLUME_ID)
    211 		return ubi->fm_enabled ? UBI_FASTMAP_ANCHOR : 0;
    212 
    213 	/* We only care about static volumes with an id < UBI_SPL_VOL_IDS */
    214 	if (vol_id >= UBI_SPL_VOL_IDS || vh->vol_type != UBI_VID_STATIC)
    215 		return 0;
    216 
    217 	/* We are only interested in the volumes to load */
    218 	if (!test_bit(vol_id, ubi->toload))
    219 		return 0;
    220 
    221 	lnum = be32_to_cpu(vh->lnum);
    222 	return ubi_add_peb_to_vol(ubi, vh, vol_id, pnum, lnum);
    223 }
    224 
    225 static int assign_aeb_to_av(struct ubi_scan_info *ubi, u32 pnum, u32 lnum,
    226 			     u32 vol_id, u32 vol_type, u32 used)
    227 {
    228 	struct ubi_vid_hdr *vh;
    229 
    230 	if (ubi_io_is_bad(ubi, pnum))
    231 		return -EINVAL;
    232 
    233 	ubi->fastmap_pebs++;
    234 
    235 	if (vol_id >= UBI_SPL_VOL_IDS || vol_type != UBI_STATIC_VOLUME)
    236 		return 0;
    237 
    238 	/* We are only interested in the volumes to load */
    239 	if (!test_bit(vol_id, ubi->toload))
    240 		return 0;
    241 
    242 	vh = ubi->blockinfo + pnum;
    243 
    244 	return ubi_scan_vid_hdr(ubi, vh, pnum);
    245 }
    246 
    247 static int scan_pool(struct ubi_scan_info *ubi, __be32 *pebs, int pool_size)
    248 {
    249 	struct ubi_vid_hdr *vh;
    250 	u32 pnum;
    251 	int i;
    252 
    253 	ubi_dbg("Scanning pool size: %d", pool_size);
    254 
    255 	for (i = 0; i < pool_size; i++) {
    256 		pnum = be32_to_cpu(pebs[i]);
    257 
    258 		if (ubi_io_is_bad(ubi, pnum)) {
    259 			ubi_err("FM: Bad PEB in fastmap pool! %u", pnum);
    260 			return UBI_BAD_FASTMAP;
    261 		}
    262 
    263 		vh = ubi->blockinfo + pnum;
    264 		/*
    265 		 * We allow the scan to fail here. The loader will notice
    266 		 * and look for a replacement.
    267 		 */
    268 		ubi_scan_vid_hdr(ubi, vh, pnum);
    269 	}
    270 	return 0;
    271 }
    272 
    273 /*
    274  * Fastmap code is stolen from Linux kernel and this stub structure is used
    275  * to make it happy.
    276  */
    277 struct ubi_attach_info {
    278 	int i;
    279 };
    280 
    281 static int ubi_attach_fastmap(struct ubi_scan_info *ubi,
    282 			      struct ubi_attach_info *ai,
    283 			      struct ubi_fastmap_layout *fm)
    284 {
    285 	struct ubi_fm_hdr *fmhdr;
    286 	struct ubi_fm_scan_pool *fmpl1, *fmpl2;
    287 	struct ubi_fm_ec *fmec;
    288 	struct ubi_fm_volhdr *fmvhdr;
    289 	struct ubi_fm_eba *fm_eba;
    290 	int ret, i, j, pool_size, wl_pool_size;
    291 	size_t fm_pos = 0, fm_size = ubi->fm_size;
    292 	void *fm_raw = ubi->fm_buf;
    293 
    294 	memset(ubi->fm_used, 0, sizeof(ubi->fm_used));
    295 
    296 	fm_pos += sizeof(struct ubi_fm_sb);
    297 	if (fm_pos >= fm_size)
    298 		goto fail_bad;
    299 
    300 	fmhdr = (struct ubi_fm_hdr *)(fm_raw + fm_pos);
    301 	fm_pos += sizeof(*fmhdr);
    302 	if (fm_pos >= fm_size)
    303 		goto fail_bad;
    304 
    305 	if (be32_to_cpu(fmhdr->magic) != UBI_FM_HDR_MAGIC) {
    306 		ubi_err("bad fastmap header magic: 0x%x, expected: 0x%x",
    307 			be32_to_cpu(fmhdr->magic), UBI_FM_HDR_MAGIC);
    308 		goto fail_bad;
    309 	}
    310 
    311 	fmpl1 = (struct ubi_fm_scan_pool *)(fm_raw + fm_pos);
    312 	fm_pos += sizeof(*fmpl1);
    313 	if (fm_pos >= fm_size)
    314 		goto fail_bad;
    315 	if (be32_to_cpu(fmpl1->magic) != UBI_FM_POOL_MAGIC) {
    316 		ubi_err("bad fastmap pool magic: 0x%x, expected: 0x%x",
    317 			be32_to_cpu(fmpl1->magic), UBI_FM_POOL_MAGIC);
    318 		goto fail_bad;
    319 	}
    320 
    321 	fmpl2 = (struct ubi_fm_scan_pool *)(fm_raw + fm_pos);
    322 	fm_pos += sizeof(*fmpl2);
    323 	if (fm_pos >= fm_size)
    324 		goto fail_bad;
    325 	if (be32_to_cpu(fmpl2->magic) != UBI_FM_POOL_MAGIC) {
    326 		ubi_err("bad fastmap pool magic: 0x%x, expected: 0x%x",
    327 			be32_to_cpu(fmpl2->magic), UBI_FM_POOL_MAGIC);
    328 		goto fail_bad;
    329 	}
    330 
    331 	pool_size = be16_to_cpu(fmpl1->size);
    332 	wl_pool_size = be16_to_cpu(fmpl2->size);
    333 	fm->max_pool_size = be16_to_cpu(fmpl1->max_size);
    334 	fm->max_wl_pool_size = be16_to_cpu(fmpl2->max_size);
    335 
    336 	if (pool_size > UBI_FM_MAX_POOL_SIZE || pool_size < 0) {
    337 		ubi_err("bad pool size: %i", pool_size);
    338 		goto fail_bad;
    339 	}
    340 
    341 	if (wl_pool_size > UBI_FM_MAX_POOL_SIZE || wl_pool_size < 0) {
    342 		ubi_err("bad WL pool size: %i", wl_pool_size);
    343 		goto fail_bad;
    344 	}
    345 
    346 	if (fm->max_pool_size > UBI_FM_MAX_POOL_SIZE ||
    347 	    fm->max_pool_size < 0) {
    348 		ubi_err("bad maximal pool size: %i", fm->max_pool_size);
    349 		goto fail_bad;
    350 	}
    351 
    352 	if (fm->max_wl_pool_size > UBI_FM_MAX_POOL_SIZE ||
    353 	    fm->max_wl_pool_size < 0) {
    354 		ubi_err("bad maximal WL pool size: %i", fm->max_wl_pool_size);
    355 		goto fail_bad;
    356 	}
    357 
    358 	/* read EC values from free list */
    359 	for (i = 0; i < be32_to_cpu(fmhdr->free_peb_count); i++) {
    360 		fmec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
    361 		fm_pos += sizeof(*fmec);
    362 		if (fm_pos >= fm_size)
    363 			goto fail_bad;
    364 	}
    365 
    366 	/* read EC values from used list */
    367 	for (i = 0; i < be32_to_cpu(fmhdr->used_peb_count); i++) {
    368 		fmec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
    369 		fm_pos += sizeof(*fmec);
    370 		if (fm_pos >= fm_size)
    371 			goto fail_bad;
    372 
    373 		generic_set_bit(be32_to_cpu(fmec->pnum), ubi->fm_used);
    374 	}
    375 
    376 	/* read EC values from scrub list */
    377 	for (i = 0; i < be32_to_cpu(fmhdr->scrub_peb_count); i++) {
    378 		fmec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
    379 		fm_pos += sizeof(*fmec);
    380 		if (fm_pos >= fm_size)
    381 			goto fail_bad;
    382 	}
    383 
    384 	/* read EC values from erase list */
    385 	for (i = 0; i < be32_to_cpu(fmhdr->erase_peb_count); i++) {
    386 		fmec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
    387 		fm_pos += sizeof(*fmec);
    388 		if (fm_pos >= fm_size)
    389 			goto fail_bad;
    390 	}
    391 
    392 	/* Iterate over all volumes and read their EBA table */
    393 	for (i = 0; i < be32_to_cpu(fmhdr->vol_count); i++) {
    394 		u32 vol_id, vol_type, used, reserved;
    395 
    396 		fmvhdr = (struct ubi_fm_volhdr *)(fm_raw + fm_pos);
    397 		fm_pos += sizeof(*fmvhdr);
    398 		if (fm_pos >= fm_size)
    399 			goto fail_bad;
    400 
    401 		if (be32_to_cpu(fmvhdr->magic) != UBI_FM_VHDR_MAGIC) {
    402 			ubi_err("bad fastmap vol header magic: 0x%x, " \
    403 				"expected: 0x%x",
    404 				be32_to_cpu(fmvhdr->magic), UBI_FM_VHDR_MAGIC);
    405 			goto fail_bad;
    406 		}
    407 
    408 		vol_id = be32_to_cpu(fmvhdr->vol_id);
    409 		vol_type = fmvhdr->vol_type;
    410 		used = be32_to_cpu(fmvhdr->used_ebs);
    411 
    412 		fm_eba = (struct ubi_fm_eba *)(fm_raw + fm_pos);
    413 		fm_pos += sizeof(*fm_eba);
    414 		fm_pos += (sizeof(__be32) * be32_to_cpu(fm_eba->reserved_pebs));
    415 		if (fm_pos >= fm_size)
    416 			goto fail_bad;
    417 
    418 		if (be32_to_cpu(fm_eba->magic) != UBI_FM_EBA_MAGIC) {
    419 			ubi_err("bad fastmap EBA header magic: 0x%x, " \
    420 				"expected: 0x%x",
    421 				be32_to_cpu(fm_eba->magic), UBI_FM_EBA_MAGIC);
    422 			goto fail_bad;
    423 		}
    424 
    425 		reserved = be32_to_cpu(fm_eba->reserved_pebs);
    426 		ubi_dbg("FA: vol %u used %u res: %u", vol_id, used, reserved);
    427 		for (j = 0; j < reserved; j++) {
    428 			int pnum = be32_to_cpu(fm_eba->pnum[j]);
    429 
    430 			if ((int)be32_to_cpu(fm_eba->pnum[j]) < 0)
    431 				continue;
    432 
    433 			if (!__test_and_clear_bit(pnum, ubi->fm_used))
    434 				continue;
    435 
    436 			/*
    437 			 * We only handle static volumes so used_ebs
    438 			 * needs to be handed in. And we do not assign
    439 			 * the reserved blocks
    440 			 */
    441 			if (j >= used)
    442 				continue;
    443 
    444 			ret = assign_aeb_to_av(ubi, pnum, j, vol_id,
    445 					       vol_type, used);
    446 			if (!ret)
    447 				continue;
    448 
    449 			/*
    450 			 * Nasty: The fastmap claims that the volume
    451 			 * has one block more than it, but that block
    452 			 * is always empty and the other blocks have
    453 			 * the correct number of total LEBs in the
    454 			 * headers. Deal with it.
    455 			 */
    456 			if (ret != UBI_IO_FF && j != used - 1)
    457 				goto fail_bad;
    458 			ubi_dbg("FA: Vol: %u Ignoring empty LEB %d of %d",
    459 				vol_id, j, used);
    460 		}
    461 	}
    462 
    463 	ret = scan_pool(ubi, fmpl1->pebs, pool_size);
    464 	if (ret)
    465 		goto fail;
    466 
    467 	ret = scan_pool(ubi, fmpl2->pebs, wl_pool_size);
    468 	if (ret)
    469 		goto fail;
    470 
    471 #ifdef CHECKME
    472 	/*
    473 	 * If fastmap is leaking PEBs (must not happen), raise a
    474 	 * fat warning and fall back to scanning mode.
    475 	 * We do this here because in ubi_wl_init() it's too late
    476 	 * and we cannot fall back to scanning.
    477 	 */
    478 	if (WARN_ON(count_fastmap_pebs(ai) != ubi->peb_count -
    479 		    ai->bad_peb_count - fm->used_blocks))
    480 		goto fail_bad;
    481 #endif
    482 
    483 	return 0;
    484 
    485 fail_bad:
    486 	ret = UBI_BAD_FASTMAP;
    487 fail:
    488 	return ret;
    489 }
    490 
    491 static int ubi_scan_fastmap(struct ubi_scan_info *ubi,
    492 			    struct ubi_attach_info *ai,
    493 			    int fm_anchor)
    494 {
    495 	struct ubi_fm_sb *fmsb, *fmsb2;
    496 	struct ubi_vid_hdr *vh;
    497 	struct ubi_fastmap_layout *fm;
    498 	int i, used_blocks, pnum, ret = 0;
    499 	size_t fm_size;
    500 	__be32 crc, tmp_crc;
    501 	unsigned long long sqnum = 0;
    502 
    503 	fmsb = &ubi->fm_sb;
    504 	fm = &ubi->fm_layout;
    505 
    506 	ret = ubi_io_read(ubi, fmsb, fm_anchor, ubi->leb_start, sizeof(*fmsb));
    507 	if (ret && ret != UBI_IO_BITFLIPS)
    508 		goto free_fm_sb;
    509 	else if (ret == UBI_IO_BITFLIPS)
    510 		fm->to_be_tortured[0] = 1;
    511 
    512 	if (be32_to_cpu(fmsb->magic) != UBI_FM_SB_MAGIC) {
    513 		ubi_err("bad super block magic: 0x%x, expected: 0x%x",
    514 			be32_to_cpu(fmsb->magic), UBI_FM_SB_MAGIC);
    515 		ret = UBI_BAD_FASTMAP;
    516 		goto free_fm_sb;
    517 	}
    518 
    519 	if (fmsb->version != UBI_FM_FMT_VERSION) {
    520 		ubi_err("bad fastmap version: %i, expected: %i",
    521 			fmsb->version, UBI_FM_FMT_VERSION);
    522 		ret = UBI_BAD_FASTMAP;
    523 		goto free_fm_sb;
    524 	}
    525 
    526 	used_blocks = be32_to_cpu(fmsb->used_blocks);
    527 	if (used_blocks > UBI_FM_MAX_BLOCKS || used_blocks < 1) {
    528 		ubi_err("number of fastmap blocks is invalid: %i", used_blocks);
    529 		ret = UBI_BAD_FASTMAP;
    530 		goto free_fm_sb;
    531 	}
    532 
    533 	fm_size = ubi->leb_size * used_blocks;
    534 	if (fm_size != ubi->fm_size) {
    535 		ubi_err("bad fastmap size: %zi, expected: %zi", fm_size,
    536 			ubi->fm_size);
    537 		ret = UBI_BAD_FASTMAP;
    538 		goto free_fm_sb;
    539 	}
    540 
    541 	vh = &ubi->fm_vh;
    542 
    543 	for (i = 0; i < used_blocks; i++) {
    544 		pnum = be32_to_cpu(fmsb->block_loc[i]);
    545 
    546 		if (ubi_io_is_bad(ubi, pnum)) {
    547 			ret = UBI_BAD_FASTMAP;
    548 			goto free_hdr;
    549 		}
    550 
    551 #ifdef LATER
    552 		int image_seq;
    553 		ret = ubi_io_read_ec_hdr(ubi, pnum, ech, 0);
    554 		if (ret && ret != UBI_IO_BITFLIPS) {
    555 			ubi_err("unable to read fastmap block# %i EC (PEB: %i)",
    556 				i, pnum);
    557 			if (ret > 0)
    558 				ret = UBI_BAD_FASTMAP;
    559 			goto free_hdr;
    560 		} else if (ret == UBI_IO_BITFLIPS)
    561 			fm->to_be_tortured[i] = 1;
    562 
    563 		image_seq = be32_to_cpu(ech->image_seq);
    564 		if (!ubi->image_seq)
    565 			ubi->image_seq = image_seq;
    566 		/*
    567 		 * Older UBI implementations have image_seq set to zero, so
    568 		 * we shouldn't fail if image_seq == 0.
    569 		 */
    570 		if (image_seq && (image_seq != ubi->image_seq)) {
    571 			ubi_err("wrong image seq:%d instead of %d",
    572 				be32_to_cpu(ech->image_seq), ubi->image_seq);
    573 			ret = UBI_BAD_FASTMAP;
    574 			goto free_hdr;
    575 		}
    576 #endif
    577 		ret = ubi_io_read_vid_hdr(ubi, pnum, vh, 0);
    578 		if (ret && ret != UBI_IO_BITFLIPS) {
    579 			ubi_err("unable to read fastmap block# %i (PEB: %i)",
    580 				i, pnum);
    581 			goto free_hdr;
    582 		}
    583 
    584 		/*
    585 		 * Mainline code rescans the anchor header. We've done
    586 		 * that already so we merily copy it over.
    587 		 */
    588 		if (pnum == fm_anchor)
    589 			memcpy(vh, ubi->blockinfo + pnum, sizeof(*fm));
    590 
    591 		if (i == 0) {
    592 			if (be32_to_cpu(vh->vol_id) != UBI_FM_SB_VOLUME_ID) {
    593 				ubi_err("bad fastmap anchor vol_id: 0x%x," \
    594 					" expected: 0x%x",
    595 					be32_to_cpu(vh->vol_id),
    596 					UBI_FM_SB_VOLUME_ID);
    597 				ret = UBI_BAD_FASTMAP;
    598 				goto free_hdr;
    599 			}
    600 		} else {
    601 			if (be32_to_cpu(vh->vol_id) != UBI_FM_DATA_VOLUME_ID) {
    602 				ubi_err("bad fastmap data vol_id: 0x%x," \
    603 					" expected: 0x%x",
    604 					be32_to_cpu(vh->vol_id),
    605 					UBI_FM_DATA_VOLUME_ID);
    606 				ret = UBI_BAD_FASTMAP;
    607 				goto free_hdr;
    608 			}
    609 		}
    610 
    611 		if (sqnum < be64_to_cpu(vh->sqnum))
    612 			sqnum = be64_to_cpu(vh->sqnum);
    613 
    614 		ret = ubi_io_read(ubi, ubi->fm_buf + (ubi->leb_size * i), pnum,
    615 				  ubi->leb_start, ubi->leb_size);
    616 		if (ret && ret != UBI_IO_BITFLIPS) {
    617 			ubi_err("unable to read fastmap block# %i (PEB: %i, " \
    618 				"err: %i)", i, pnum, ret);
    619 			goto free_hdr;
    620 		}
    621 	}
    622 
    623 	fmsb2 = (struct ubi_fm_sb *)(ubi->fm_buf);
    624 	tmp_crc = be32_to_cpu(fmsb2->data_crc);
    625 	fmsb2->data_crc = 0;
    626 	crc = crc32(UBI_CRC32_INIT, ubi->fm_buf, fm_size);
    627 	if (crc != tmp_crc) {
    628 		ubi_err("fastmap data CRC is invalid");
    629 		ubi_err("CRC should be: 0x%x, calc: 0x%x", tmp_crc, crc);
    630 		ret = UBI_BAD_FASTMAP;
    631 		goto free_hdr;
    632 	}
    633 
    634 	fmsb2->sqnum = sqnum;
    635 
    636 	fm->used_blocks = used_blocks;
    637 
    638 	ret = ubi_attach_fastmap(ubi, ai, fm);
    639 	if (ret) {
    640 		if (ret > 0)
    641 			ret = UBI_BAD_FASTMAP;
    642 		goto free_hdr;
    643 	}
    644 
    645 	ubi->fm = fm;
    646 	ubi->fm_pool.max_size = ubi->fm->max_pool_size;
    647 	ubi->fm_wl_pool.max_size = ubi->fm->max_wl_pool_size;
    648 	ubi_msg("attached by fastmap %uMB %u blocks",
    649 		ubi->fsize_mb, ubi->peb_count);
    650 	ubi_dbg("fastmap pool size: %d", ubi->fm_pool.max_size);
    651 	ubi_dbg("fastmap WL pool size: %d", ubi->fm_wl_pool.max_size);
    652 
    653 out:
    654 	if (ret)
    655 		ubi_err("Attach by fastmap failed, doing a full scan!");
    656 	return ret;
    657 
    658 free_hdr:
    659 free_fm_sb:
    660 	goto out;
    661 }
    662 
    663 /*
    664  * Scan the flash and attempt to attach via fastmap
    665  */
    666 static void ipl_scan(struct ubi_scan_info *ubi)
    667 {
    668 	unsigned int pnum;
    669 	int res;
    670 
    671 	/*
    672 	 * Scan first for the fastmap super block
    673 	 */
    674 	for (pnum = 0; pnum < UBI_FM_MAX_START; pnum++) {
    675 		res = ubi_scan_vid_hdr(ubi, ubi->blockinfo + pnum, pnum);
    676 		/*
    677 		 * We ignore errors here as we are meriliy scanning
    678 		 * the headers.
    679 		 */
    680 		if (res != UBI_FASTMAP_ANCHOR)
    681 			continue;
    682 
    683 		/*
    684 		 * If fastmap is disabled, continue scanning. This
    685 		 * might happen because the previous attempt failed or
    686 		 * the caller disabled it right away.
    687 		 */
    688 		if (!ubi->fm_enabled)
    689 			continue;
    690 
    691 		/*
    692 		 * Try to attach the fastmap, if that fails continue
    693 		 * scanning.
    694 		 */
    695 		if (!ubi_scan_fastmap(ubi, NULL, pnum))
    696 			return;
    697 		/*
    698 		 * Fastmap failed. Clear everything we have and start
    699 		 * over. We are paranoid and do not trust anything.
    700 		 */
    701 		memset(ubi->volinfo, 0, sizeof(ubi->volinfo));
    702 		pnum = 0;
    703 		break;
    704 	}
    705 
    706 	/*
    707 	 * Continue scanning, ignore errors, we might find what we are
    708 	 * looking for,
    709 	 */
    710 	for (; pnum < ubi->peb_count; pnum++)
    711 		ubi_scan_vid_hdr(ubi, ubi->blockinfo + pnum, pnum);
    712 }
    713 
    714 /*
    715  * Load a logical block of a volume into memory
    716  */
    717 static int ubi_load_block(struct ubi_scan_info *ubi, uint8_t *laddr,
    718 			  struct ubi_vol_info *vi, u32 vol_id, u32 lnum,
    719 			  u32 last)
    720 {
    721 	struct ubi_vid_hdr *vh, *vrepl;
    722 	u32 pnum, crc, dlen;
    723 
    724 retry:
    725 	/*
    726 	 * If this is a fastmap run, we try to rescan full, otherwise
    727 	 * we simply give up.
    728 	 */
    729 	if (!test_bit(lnum, vi->found)) {
    730 		ubi_warn("LEB %d of %d is missing", lnum, last);
    731 		return -EINVAL;
    732 	}
    733 
    734 	pnum = vi->lebs_to_pebs[lnum];
    735 
    736 	ubi_dbg("Load vol %u LEB %u PEB %u", vol_id, lnum, pnum);
    737 
    738 	if (ubi_io_is_bad(ubi, pnum)) {
    739 		ubi_warn("Corrupted mapping block %d PB %d\n", lnum, pnum);
    740 		return -EINVAL;
    741 	}
    742 
    743 	if (test_bit(pnum, ubi->corrupt))
    744 		goto find_other;
    745 
    746 	/*
    747 	 * Lets try to read that block
    748 	 */
    749 	vh = ubi->blockinfo + pnum;
    750 
    751 	if (!test_bit(pnum, ubi->scanned)) {
    752 		ubi_warn("Vol: %u LEB %u PEB %u not yet scanned", vol_id,
    753 			 lnum, pnum);
    754 		if (ubi_rescan_fm_vid_hdr(ubi, vh, pnum, vol_id, lnum))
    755 			goto find_other;
    756 	}
    757 
    758 	/*
    759 	 * Check, if the total number of blocks is correct
    760 	 */
    761 	if (be32_to_cpu(vh->used_ebs) != last) {
    762 		ubi_dbg("Block count missmatch.");
    763 		ubi_dbg("vh->used_ebs: %d nrblocks: %d",
    764 			be32_to_cpu(vh->used_ebs), last);
    765 		generic_set_bit(pnum, ubi->corrupt);
    766 		goto find_other;
    767 	}
    768 
    769 	/*
    770 	 * Get the data length of this block.
    771 	 */
    772 	dlen = be32_to_cpu(vh->data_size);
    773 
    774 	/*
    775 	 * Read the data into RAM. We ignore the return value
    776 	 * here as the only thing which might go wrong are
    777 	 * bitflips. Try nevertheless.
    778 	 */
    779 	ubi_io_read(ubi, laddr, pnum, ubi->leb_start, dlen);
    780 
    781 	/* Calculate CRC over the data */
    782 	crc = crc32(UBI_CRC32_INIT, laddr, dlen);
    783 
    784 	if (crc != be32_to_cpu(vh->data_crc)) {
    785 		ubi_warn("Vol: %u LEB %u PEB %u data CRC failure", vol_id,
    786 			 lnum, pnum);
    787 		generic_set_bit(pnum, ubi->corrupt);
    788 		goto find_other;
    789 	}
    790 
    791 	/* We are good. Return the data length we read */
    792 	return dlen;
    793 
    794 find_other:
    795 	ubi_dbg("Find replacement for LEB %u PEB %u", lnum, pnum);
    796 	generic_clear_bit(lnum, vi->found);
    797 	vrepl = NULL;
    798 
    799 	for (pnum = 0; pnum < ubi->peb_count; pnum++) {
    800 		struct ubi_vid_hdr *tmp = ubi->blockinfo + pnum;
    801 		u32 t_vol_id = be32_to_cpu(tmp->vol_id);
    802 		u32 t_lnum = be32_to_cpu(tmp->lnum);
    803 
    804 		if (test_bit(pnum, ubi->corrupt))
    805 			continue;
    806 
    807 		if (t_vol_id != vol_id || t_lnum != lnum)
    808 			continue;
    809 
    810 		if (!test_bit(pnum, ubi->scanned)) {
    811 			ubi_warn("Vol: %u LEB %u PEB %u not yet scanned",
    812 				 vol_id, lnum, pnum);
    813 			if (ubi_rescan_fm_vid_hdr(ubi, tmp, pnum, vol_id, lnum))
    814 				continue;
    815 		}
    816 
    817 		/*
    818 		 * We found one. If its the first, assign it otherwise
    819 		 * compare the sqnum
    820 		 */
    821 		generic_set_bit(lnum, vi->found);
    822 
    823 		if (!vrepl) {
    824 			vrepl = tmp;
    825 			continue;
    826 		}
    827 
    828 		if (be64_to_cpu(vrepl->sqnum) < be64_to_cpu(tmp->sqnum))
    829 			vrepl = tmp;
    830 	}
    831 
    832 	if (vrepl) {
    833 		/* Update the vi table */
    834 		pnum = vrepl - ubi->blockinfo;
    835 		vi->lebs_to_pebs[lnum] = pnum;
    836 		ubi_dbg("Trying PEB %u for LEB %u", pnum, lnum);
    837 		vh = vrepl;
    838 	}
    839 	goto retry;
    840 }
    841 
    842 /*
    843  * Load a volume into RAM
    844  */
    845 static int ipl_load(struct ubi_scan_info *ubi, const u32 vol_id, uint8_t *laddr)
    846 {
    847 	struct ubi_vol_info *vi;
    848 	u32 lnum, last, len;
    849 
    850 	if (vol_id >= UBI_SPL_VOL_IDS)
    851 		return -EINVAL;
    852 
    853 	len = 0;
    854 	vi = ubi->volinfo + vol_id;
    855 	last = vi->last_block + 1;
    856 
    857 	/* Read the blocks to RAM, check CRC */
    858 	for (lnum = 0 ; lnum < last; lnum++) {
    859 		int res = ubi_load_block(ubi, laddr, vi, vol_id, lnum, last);
    860 
    861 		if (res < 0) {
    862 			ubi_warn("Failed to load volume %u", vol_id);
    863 			return res;
    864 		}
    865 		/* res is the data length of the read block */
    866 		laddr += res;
    867 		len += res;
    868 	}
    869 	return len;
    870 }
    871 
    872 int ubispl_load_volumes(struct ubispl_info *info, struct ubispl_load *lvols,
    873 			int nrvols)
    874 {
    875 	struct ubi_scan_info *ubi = info->ubi;
    876 	int res, i, fastmap = info->fastmap;
    877 	u32 fsize;
    878 
    879 retry:
    880 	/*
    881 	 * We do a partial initializiation of @ubi. Cleaning fm_buf is
    882 	 * not necessary.
    883 	 */
    884 	memset(ubi, 0, offsetof(struct ubi_scan_info, fm_buf));
    885 
    886 	ubi->read = info->read;
    887 
    888 	/* Precalculate the offsets */
    889 	ubi->vid_offset = info->vid_offset;
    890 	ubi->leb_start = info->leb_start;
    891 	ubi->leb_size = info->peb_size - ubi->leb_start;
    892 	ubi->peb_count = info->peb_count;
    893 	ubi->peb_offset = info->peb_offset;
    894 
    895 	fsize = info->peb_size * info->peb_count;
    896 	ubi->fsize_mb = fsize >> 20;
    897 
    898 	/* Fastmap init */
    899 	ubi->fm_size = ubi_calc_fm_size(ubi);
    900 	ubi->fm_enabled = fastmap;
    901 
    902 	for (i = 0; i < nrvols; i++) {
    903 		struct ubispl_load *lv = lvols + i;
    904 
    905 		generic_set_bit(lv->vol_id, ubi->toload);
    906 	}
    907 
    908 	ipl_scan(ubi);
    909 
    910 	for (i = 0; i < nrvols; i++) {
    911 		struct ubispl_load *lv = lvols + i;
    912 
    913 		ubi_msg("Loading VolId #%d", lv->vol_id);
    914 		res = ipl_load(ubi, lv->vol_id, lv->load_addr);
    915 		if (res < 0) {
    916 			if (fastmap) {
    917 				fastmap = 0;
    918 				goto retry;
    919 			}
    920 			ubi_warn("Failed");
    921 			return res;
    922 		}
    923 	}
    924 	return 0;
    925 }
    926