From: Ben Gardiner <bengardiner@nanometrics.ca>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v5 3/5] mtdparts: show net size in mtdparts list
Date: Mon, 30 Aug 2010 13:38:58 -0400 [thread overview]
Message-ID: <dd55869c0dce98258874d18c6c9c9a4e0d3d871b.1283187599.git.bengardiner@nanometrics.ca> (raw)
In-Reply-To: <1283185640-0-git-send-email-bengardiner@nanometrics.ca>
This patch adds an additional column to the output of list_partitions. The
additional column will contain the net size and a '(!)' beside it if the net
size is not equal to the partition size.
Signed-off-by: Ben Gardiner <bengardiner@nanometrics.ca>
CC: Wolfgang Denk <wd@denx.de>
CC: Scott Wood <scottwood@freescale.com>
---
V2:
* formatting: spaces after 'if' and 'for'
* the entire new feature is conditional on a macro, there is now a zero-byte
binary size impact when the macro is not defined.
* return the net parition size directly from net_part_size instead of using
an output variable
V3:
* rebased to 54841ab50c20d6fa6c9cc3eb826989da3a22d934 of
git://git.denx.de/u-boot.git
* fix line length over 80 chars
* update copyright of cmd_mtdparts.c
V4:
* rebased to b417260d871d4d8d336c160d95ed40cc8c0fb0fa of
git://git.denx.de/u-boot.git
* removed copyright statement and changelog from file header
* re-grouped list_partition #ifdefs into one
* fixed multi-line comment style
V5:
* rebased to 962ad59e25640e586e2bceabf67a628a27f8f508 of
git://git.denx.de/u-boot.git
* renumbered from 2/4 to 3/5
* return uint64_t instead of u32 for net_size
* do a quick if((cond) return
* calculate net_size by adding-up good blocks instead of subtracting bad
blocks
* try to strike a balance; reuse more code between the branches of
#if defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES) in
print_partition_table
---
common/cmd_mtdparts.c | 74 +++++++++++++++++++++++++++++++++++++++++++-----
drivers/mtd/mtdcore.c | 5 ++-
2 files changed, 69 insertions(+), 10 deletions(-)
diff --git a/common/cmd_mtdparts.c b/common/cmd_mtdparts.c
index 772ad54..a8912ed 100644
--- a/common/cmd_mtdparts.c
+++ b/common/cmd_mtdparts.c
@@ -1215,38 +1215,96 @@ static int generate_mtdparts_save(char *buf, u32 buflen)
return ret;
}
+#if defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES)
/**
- * Format and print out a partition list for each device from global device
- * list.
+ * Get the net size (w/o bad blocks) of the given partition.
+ *
+ * @param mtd the mtd info
+ * @param part the partition
+ * @return the calculated net size of this partition
*/
-static void list_partitions(void)
+static uint64_t net_part_size(struct mtd_info *mtd, struct part_info *part)
+{
+ uint64_t gross_size, trailing_bad_size = 0;
+ int truncated = 0;
+
+ mtd_get_len_incl_bad(mtd, part->offset, part->size, &gross_size,
+ &truncated);
+
+ if (!truncated) {
+ mtd_get_len_incl_bad(mtd, part->offset + part->size,
+ mtd->erasesize, &trailing_bad_size,
+ &truncated);
+ trailing_bad_size -= mtd->erasesize;
+ }
+
+ return part->size - (gross_size - trailing_bad_size - part->size);
+}
+#endif
+
+static void print_partition_table(void)
{
struct list_head *dentry, *pentry;
struct part_info *part;
struct mtd_device *dev;
int part_num;
- debug("\n---list_partitions---\n");
- list_for_each(dentry, &devices) {
+list_for_each(dentry, &devices) {
dev = list_entry(dentry, struct mtd_device, link);
+ /* list partitions for given device */
+ part_num = 0;
+#if defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES)
+ struct mtd_info *mtd;
+
+ if (get_mtd_info(dev->id->type, dev->id->num, &mtd))
+ return;
+
+ printf("\ndevice %s%d <%s>, # parts = %d\n",
+ MTD_DEV_TYPE(dev->id->type), dev->id->num,
+ dev->id->mtd_id, dev->num_parts);
+ printf(" #: name\t\tsize\t\tnet size\toffset\t\tmask_flags\n");
+
+ list_for_each(pentry, &dev->parts) {
+ u32 net_size;
+ char *size_note;
+
+ part = list_entry(pentry, struct part_info, link);
+ net_size = net_part_size(mtd, part);
+ size_note = part->size == net_size ? " " : " (!)";
+ printf("%2d: %-20s0x%08x\t0x%08x%s\t0x%08x\t%d\n",
+ part_num, part->name, part->size,
+ net_size, size_note, part->offset,
+ part->mask_flags);
+#else /* !defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES) */
printf("\ndevice %s%d <%s>, # parts = %d\n",
MTD_DEV_TYPE(dev->id->type), dev->id->num,
dev->id->mtd_id, dev->num_parts);
printf(" #: name\t\tsize\t\toffset\t\tmask_flags\n");
- /* list partitions for given device */
- part_num = 0;
list_for_each(pentry, &dev->parts) {
part = list_entry(pentry, struct part_info, link);
printf("%2d: %-20s0x%08x\t0x%08x\t%d\n",
part_num, part->name, part->size,
part->offset, part->mask_flags);
-
+#endif /* defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES) */
part_num++;
}
}
+
if (list_empty(&devices))
printf("no partitions defined\n");
+}
+
+/**
+ * Format and print out a partition list for each device from global device
+ * list.
+ */
+static void list_partitions(void)
+{
+ struct part_info *part;
+
+ debug("\n---list_partitions---\n");
+ print_partition_table();
/* current_mtd_dev is not NULL only when we have non empty device list */
if (current_mtd_dev) {
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index cb86657..211b993 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -143,7 +143,8 @@ void put_mtd_device(struct mtd_info *mtd)
BUG_ON(c < 0);
}
-#if defined(CONFIG_CMD_MTDPARTS_SPREAD)
+#if defined(CONFIG_CMD_MTDPARTS_SPREAD) || \
+ defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES)
/**
* mtd_get_len_incl_bad
*
@@ -185,4 +186,4 @@ void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset,
}
}
}
-#endif /* defined(CONFIG_CMD_MTDPARTS_SPREAD) */
+#endif
--
1.7.0.4
next prev parent reply other threads:[~2010-08-30 17:38 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-06 16:28 [U-Boot-Users] [PATCH, resend] Support dynamic/patched NAND ENV offset Harald Welte
2008-07-07 18:47 ` Scott Wood
2008-07-08 0:09 ` Harald Welte
2008-07-08 16:05 ` Scott Wood
2008-07-08 21:12 ` Wolfgang Denk
2008-07-09 0:23 ` Harald Welte
2008-07-09 7:05 ` Wolfgang Denk
2008-07-09 7:25 ` Harald Welte
2008-07-09 8:04 ` Wolfgang Denk
2008-07-09 12:13 ` Harald Welte
2010-06-01 20:23 ` [U-Boot] mtdparts: add bad-block skipping Ben Gardiner
2010-06-01 22:20 ` Wolfgang Denk
2010-06-01 22:34 ` Wolfgang Denk
2010-06-02 5:08 ` Ben Gardiner
2010-06-02 15:58 ` [U-Boot] [PATCH 0/4 v2] " Ben Gardiner
2010-07-05 21:43 ` [U-Boot] [PATCH v3 0/4] " Ben Gardiner
2010-07-12 19:06 ` Ben Gardiner
2010-08-09 20:43 ` [U-Boot] [PATCH v4 " Ben Gardiner
2010-08-30 17:38 ` [U-Boot] [PATCH v5 0/5] " Ben Gardiner
2010-08-30 17:38 ` [U-Boot] [PATCH v5 2/5] mtd: add an mtd method for get_len_incl_bad() Ben Gardiner
2010-08-30 20:57 ` Scott Wood
2010-08-31 13:50 ` Ben Gardiner
2010-08-31 21:48 ` [U-Boot] [PATCH v6 " Ben Gardiner
[not found] ` <1283185640-0-git-send-email-bengardiner@nanometrics.ca>
2010-08-30 17:38 ` Ben Gardiner [this message]
2010-08-30 20:50 ` [U-Boot] [PATCH v5 3/5] mtdparts: show net size in mtdparts list Scott Wood
2010-08-31 13:51 ` Ben Gardiner
2010-08-31 15:57 ` Scott Wood
2010-08-31 21:48 ` [U-Boot] [PATCH v6 " Ben Gardiner
2010-08-31 21:47 ` [U-Boot] [PATCH v6 0/5] mtdparts: add bad-block skipping Ben Gardiner
2010-09-09 20:54 ` Scott Wood
2010-08-09 20:43 ` [U-Boot] [PATCH v4 1/4] mtdparts: regroup calls to get_mtd_device_nm Ben Gardiner
2010-08-09 20:43 ` [U-Boot] [PATCH v4 2/4] mtdparts: show net size in mtdparts list Ben Gardiner
2010-08-26 18:57 ` Scott Wood
2010-08-27 13:51 ` Ben Gardiner
2010-08-27 15:44 ` Ben Gardiner
2010-08-27 16:02 ` Scott Wood
2010-08-27 16:45 ` Ben Gardiner
2010-08-09 20:43 ` [U-Boot] [PATCH v4 3/4] mtdparts: add new sub-command "spread" Ben Gardiner
2010-08-26 21:12 ` Scott Wood
2010-08-27 13:51 ` Ben Gardiner
2010-08-27 21:36 ` Ben Gardiner
2010-08-27 21:46 ` Scott Wood
2010-08-27 21:52 ` Ben Gardiner
2010-08-27 21:59 ` Scott Wood
2010-08-28 3:59 ` Ben Gardiner
2010-08-30 20:24 ` Scott Wood
2010-08-30 20:30 ` Ben Gardiner
2010-08-30 17:38 ` [U-Boot] [PATCH v5 4/5] " Ben Gardiner
2010-08-30 21:01 ` Scott Wood
2010-08-30 21:05 ` Scott Wood
2010-08-31 13:51 ` Ben Gardiner
2010-08-31 21:48 ` [U-Boot] [PATCH v6 " Ben Gardiner
2010-08-09 20:44 ` [U-Boot] [PATCH v4 4/4] mtdparts: new add.spread: add part skipping bad blocks Ben Gardiner
2010-08-26 22:26 ` Scott Wood
2010-08-27 13:52 ` Ben Gardiner
2010-08-30 17:39 ` [U-Boot] [PATCH v5 5/5] " Ben Gardiner
2010-08-31 21:48 ` [U-Boot] [PATCH v6 " Ben Gardiner
2010-07-05 21:43 ` [U-Boot] [PATCH v3 1/4] mtdparts: regroup calls to get_mtd_device_nm Ben Gardiner
2010-08-30 17:38 ` [U-Boot] [PATCH v5 1/5] " Ben Gardiner
2010-08-31 21:48 ` [U-Boot] [PATCH v6 " Ben Gardiner
2010-07-05 21:43 ` [U-Boot] [PATCH v3 2/4] mtdparts: show net size in mtdparts list Ben Gardiner
2010-08-07 20:08 ` Wolfgang Denk
2010-08-08 4:06 ` Harald Welte
2010-08-08 13:16 ` Wolfgang Denk
2010-08-09 14:45 ` Ben Gardiner
2010-09-18 19:42 ` Wolfgang Denk
2010-07-05 21:43 ` [U-Boot] [PATCH v3 3/4] mtdparts: add new sub-command "spread" Ben Gardiner
2010-08-07 20:12 ` Wolfgang Denk
2010-07-05 21:43 ` [U-Boot] [PATCH v3 4/4] mtdparts: new add.e: add part skipping bad blocks Ben Gardiner
2010-08-07 20:16 ` Wolfgang Denk
2010-06-02 15:58 ` [U-Boot] [PATCH 1/4 v2] mtdparts: regroup calls to get_mtd_device_nm Ben Gardiner
2010-06-02 15:58 ` [U-Boot] [PATCH 2/4 v2] mtdparts: show net size in mtdparts list Ben Gardiner
2010-06-02 15:58 ` [U-Boot] [PATCH 3/4 v2] mtdparts: add new sub-command "spread" Ben Gardiner
2010-06-02 15:58 ` [U-Boot] [PATCH 4/4 v2] mtdparts: new add.e: add part skipping bad blocks Ben Gardiner
2010-08-09 18:25 ` Scott Wood
2010-08-09 18:39 ` Ben Gardiner
2010-08-09 18:51 ` Scott Wood
2010-06-01 20:23 ` [U-Boot] [PATCH 1/4] mtdparts: regroup calls to get_mtd_device_nm Ben Gardiner
2010-06-02 7:06 ` Stefan Roese
2010-06-01 20:23 ` [U-Boot] [PATCH 2/4] mtdparts: show net size in mtdparts list Ben Gardiner
2010-06-02 7:15 ` Stefan Roese
2010-06-01 20:23 ` [U-Boot] [PATCH 3/4] mtdparts: add new sub-command "spread" Ben Gardiner
2010-06-01 20:23 ` [U-Boot] [PATCH 4/4] mtdparts: new add.e: add part skipping bad blocks Ben Gardiner
2008-07-09 0:18 ` [U-Boot-Users] [PATCH, resend] Support dynamic/patched NAND ENV offset Harald Welte
2008-07-09 5:28 ` Harald Welte
2008-07-09 7:07 ` Harald Welte
2008-07-09 8:11 ` [U-Boot-Users] [PATCH] " Harald Welte
2008-07-11 17:28 ` Scott Wood
2010-05-17 21:04 ` [U-Boot] [PATCH] NAND: Support dynamic location of enviromnent (CONFIG_ENV_OFFSET_OOB) Ben Gardiner
2010-05-26 22:58 ` Scott Wood
2010-05-26 23:38 ` Ben Gardiner
2010-05-31 21:29 ` [U-Boot] [PATCH v2] NAND: environment offset in OOB (CONFIG_ENV_OFFSET_OOB) Ben Gardiner
2010-06-30 21:32 ` [U-Boot] [PATCH v3] " Ben Gardiner
2010-06-30 21:41 ` Wolfgang Denk
2010-07-01 4:09 ` Ben Gardiner
2010-07-01 3:37 ` Vipin KUMAR
2010-07-01 5:29 ` Ben Gardiner
2010-07-01 7:17 ` Harald Welte
2010-07-05 13:57 ` Ben Gardiner
2010-07-05 17:27 ` [U-Boot] [PATCH v4] " Ben Gardiner
2010-07-12 16:17 ` Ben Gardiner
2010-07-12 16:19 ` Scott Wood
2010-07-13 19:26 ` Scott Wood
2010-07-13 21:17 ` Ben Gardiner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=dd55869c0dce98258874d18c6c9c9a4e0d3d871b.1283187599.git.bengardiner@nanometrics.ca \
--to=bengardiner@nanometrics.ca \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).