|
@@ -619,6 +619,9 @@ static int get_bad_peb_limit(const struct ubi_device *ubi, int max_beb_per1024)
|
|
|
*/
|
|
|
static int io_init(struct ubi_device *ubi, int max_beb_per1024)
|
|
|
{
|
|
|
+ dbg_gen("sizeof(struct ubi_ainf_peb) %zu", sizeof(struct ubi_ainf_peb));
|
|
|
+ dbg_gen("sizeof(struct ubi_wl_entry) %zu", sizeof(struct ubi_wl_entry));
|
|
|
+
|
|
|
if (ubi->mtd->numeraseregions != 0) {
|
|
|
/*
|
|
|
* Some flashes have several erase regions. Different regions
|
|
@@ -690,11 +693,11 @@ static int io_init(struct ubi_device *ubi, int max_beb_per1024)
|
|
|
ubi->ec_hdr_alsize = ALIGN(UBI_EC_HDR_SIZE, ubi->hdrs_min_io_size);
|
|
|
ubi->vid_hdr_alsize = ALIGN(UBI_VID_HDR_SIZE, ubi->hdrs_min_io_size);
|
|
|
|
|
|
- dbg_msg("min_io_size %d", ubi->min_io_size);
|
|
|
- dbg_msg("max_write_size %d", ubi->max_write_size);
|
|
|
- dbg_msg("hdrs_min_io_size %d", ubi->hdrs_min_io_size);
|
|
|
- dbg_msg("ec_hdr_alsize %d", ubi->ec_hdr_alsize);
|
|
|
- dbg_msg("vid_hdr_alsize %d", ubi->vid_hdr_alsize);
|
|
|
+ dbg_gen("min_io_size %d", ubi->min_io_size);
|
|
|
+ dbg_gen("max_write_size %d", ubi->max_write_size);
|
|
|
+ dbg_gen("hdrs_min_io_size %d", ubi->hdrs_min_io_size);
|
|
|
+ dbg_gen("ec_hdr_alsize %d", ubi->ec_hdr_alsize);
|
|
|
+ dbg_gen("vid_hdr_alsize %d", ubi->vid_hdr_alsize);
|
|
|
|
|
|
if (ubi->vid_hdr_offset == 0)
|
|
|
/* Default offset */
|
|
@@ -711,10 +714,10 @@ static int io_init(struct ubi_device *ubi, int max_beb_per1024)
|
|
|
ubi->leb_start = ubi->vid_hdr_offset + UBI_VID_HDR_SIZE;
|
|
|
ubi->leb_start = ALIGN(ubi->leb_start, ubi->min_io_size);
|
|
|
|
|
|
- dbg_msg("vid_hdr_offset %d", ubi->vid_hdr_offset);
|
|
|
- dbg_msg("vid_hdr_aloffset %d", ubi->vid_hdr_aloffset);
|
|
|
- dbg_msg("vid_hdr_shift %d", ubi->vid_hdr_shift);
|
|
|
- dbg_msg("leb_start %d", ubi->leb_start);
|
|
|
+ dbg_gen("vid_hdr_offset %d", ubi->vid_hdr_offset);
|
|
|
+ dbg_gen("vid_hdr_aloffset %d", ubi->vid_hdr_aloffset);
|
|
|
+ dbg_gen("vid_hdr_shift %d", ubi->vid_hdr_shift);
|
|
|
+ dbg_gen("leb_start %d", ubi->leb_start);
|
|
|
|
|
|
/* The shift must be aligned to 32-bit boundary */
|
|
|
if (ubi->vid_hdr_shift % 4) {
|
|
@@ -740,7 +743,7 @@ static int io_init(struct ubi_device *ubi, int max_beb_per1024)
|
|
|
ubi->max_erroneous = ubi->peb_count / 10;
|
|
|
if (ubi->max_erroneous < 16)
|
|
|
ubi->max_erroneous = 16;
|
|
|
- dbg_msg("max_erroneous %d", ubi->max_erroneous);
|
|
|
+ dbg_gen("max_erroneous %d", ubi->max_erroneous);
|
|
|
|
|
|
/*
|
|
|
* It may happen that EC and VID headers are situated in one minimal
|
|
@@ -760,17 +763,6 @@ static int io_init(struct ubi_device *ubi, int max_beb_per1024)
|
|
|
ubi->ro_mode = 1;
|
|
|
}
|
|
|
|
|
|
- ubi_msg("physical eraseblock size: %d bytes (%d KiB)",
|
|
|
- ubi->peb_size, ubi->peb_size >> 10);
|
|
|
- ubi_msg("logical eraseblock size: %d bytes", ubi->leb_size);
|
|
|
- ubi_msg("smallest flash I/O unit: %d", ubi->min_io_size);
|
|
|
- if (ubi->hdrs_min_io_size != ubi->min_io_size)
|
|
|
- ubi_msg("sub-page size: %d",
|
|
|
- ubi->hdrs_min_io_size);
|
|
|
- ubi_msg("VID header offset: %d (aligned %d)",
|
|
|
- ubi->vid_hdr_offset, ubi->vid_hdr_aloffset);
|
|
|
- ubi_msg("data offset: %d", ubi->leb_start);
|
|
|
-
|
|
|
/*
|
|
|
* Note, ideally, we have to initialize @ubi->bad_peb_count here. But
|
|
|
* unfortunately, MTD does not provide this information. We should loop
|
|
@@ -932,8 +924,6 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
|
|
|
spin_lock_init(&ubi->volumes_lock);
|
|
|
|
|
|
ubi_msg("attaching mtd%d to ubi%d", mtd->index, ubi_num);
|
|
|
- dbg_msg("sizeof(struct ubi_ainf_peb) %zu", sizeof(struct ubi_ainf_peb));
|
|
|
- dbg_msg("sizeof(struct ubi_wl_entry) %zu", sizeof(struct ubi_wl_entry));
|
|
|
|
|
|
err = io_init(ubi, max_beb_per1024);
|
|
|
if (err)
|
|
@@ -976,23 +966,24 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
|
|
|
goto out_debugfs;
|
|
|
}
|
|
|
|
|
|
- ubi_msg("attached mtd%d to ubi%d", mtd->index, ubi_num);
|
|
|
- ubi_msg("MTD device name: \"%s\"", mtd->name);
|
|
|
- ubi_msg("MTD device size: %llu MiB", ubi->flash_size >> 20);
|
|
|
- ubi_msg("number of good PEBs: %d", ubi->good_peb_count);
|
|
|
- ubi_msg("number of bad PEBs: %d", ubi->bad_peb_count);
|
|
|
- ubi_msg("number of corrupted PEBs: %d", ubi->corr_peb_count);
|
|
|
- ubi_msg("max. allowed volumes: %d", ubi->vtbl_slots);
|
|
|
- ubi_msg("wear-leveling threshold: %d", CONFIG_MTD_UBI_WL_THRESHOLD);
|
|
|
- ubi_msg("number of internal volumes: %d", UBI_INT_VOL_COUNT);
|
|
|
- ubi_msg("number of user volumes: %d",
|
|
|
- ubi->vol_count - UBI_INT_VOL_COUNT);
|
|
|
- ubi_msg("available PEBs: %d", ubi->avail_pebs);
|
|
|
- ubi_msg("total number of reserved PEBs: %d", ubi->rsvd_pebs);
|
|
|
- ubi_msg("number of PEBs reserved for bad PEB handling: %d",
|
|
|
- ubi->beb_rsvd_pebs);
|
|
|
- ubi_msg("max/mean erase counter: %d/%d", ubi->max_ec, ubi->mean_ec);
|
|
|
- ubi_msg("image sequence number: %u", ubi->image_seq);
|
|
|
+ ubi_msg("attached mtd%d (name \"%s\", size %llu MiB) to ubi%d",
|
|
|
+ mtd->index, mtd->name, ubi->flash_size >> 20, ubi_num);
|
|
|
+ ubi_msg("PEB size: %d bytes (%d KiB), LEB size: %d bytes",
|
|
|
+ ubi->peb_size, ubi->peb_size >> 10, ubi->leb_size);
|
|
|
+ ubi_msg("min./max. I/O unit sizes: %d/%d, sub-page size %d",
|
|
|
+ ubi->min_io_size, ubi->max_write_size, ubi->hdrs_min_io_size);
|
|
|
+ ubi_msg("VID header offset: %d (aligned %d), data offset: %d",
|
|
|
+ ubi->vid_hdr_offset, ubi->vid_hdr_aloffset, ubi->leb_start);
|
|
|
+ ubi_msg("good PEBs: %d, bad PEBs: %d, corrupted PEBs: %d",
|
|
|
+ ubi->good_peb_count, ubi->bad_peb_count, ubi->corr_peb_count);
|
|
|
+ ubi_msg("user volume: %d, internal volumes: %d, max. volumes count: %d",
|
|
|
+ ubi->vol_count - UBI_INT_VOL_COUNT, UBI_INT_VOL_COUNT,
|
|
|
+ ubi->vtbl_slots);
|
|
|
+ ubi_msg("max/mean erase counter: %d/%d, WL threshold: %d, image sequence number: %u",
|
|
|
+ ubi->max_ec, ubi->mean_ec, CONFIG_MTD_UBI_WL_THRESHOLD,
|
|
|
+ ubi->image_seq);
|
|
|
+ ubi_msg("available PEBs: %d, total reserved PEBs: %d, PEBs reserved for bad PEB handling: %d",
|
|
|
+ ubi->avail_pebs, ubi->rsvd_pebs, ubi->beb_rsvd_pebs);
|
|
|
|
|
|
/*
|
|
|
* The below lock makes sure we do not race with 'ubi_thread()' which
|
|
@@ -1069,7 +1060,7 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway)
|
|
|
|
|
|
ubi_assert(ubi_num == ubi->ubi_num);
|
|
|
ubi_notify_all(ubi, UBI_VOLUME_REMOVED, NULL);
|
|
|
- dbg_msg("detaching mtd%d from ubi%d", ubi->mtd->index, ubi_num);
|
|
|
+ ubi_msg("detaching mtd%d from ubi%d", ubi->mtd->index, ubi_num);
|
|
|
|
|
|
/*
|
|
|
* Before freeing anything, we have to stop the background thread to
|