From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Gardiner Date: Mon, 5 Jul 2010 17:43:32 -0400 Subject: [U-Boot] [PATCH v3 4/4] mtdparts: new add.e: add part skipping bad blocks In-Reply-To: <1275494319-29010-1-git-send-email-bengardiner@nanometrics.ca> References: <1275494319-29010-1-git-send-email-bengardiner@nanometrics.ca> Message-ID: <1278366212-24023-5-git-send-email-bengardiner@nanometrics.ca> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de This patch adds a new 'mtdparts add' variant: add.e (with a synomym add.i). This command variant adds a new partition to the mtdparts variable but also increases the partitions size by skipping bad blocks and aggregating any additional bad blocks found at the end of the partition. Signed-off-by: Ben Gardiner --- V2: * formatting: spaces after 'if' and 'for' * trailing whitespace removed V3: * rebased to 54841ab50c20d6fa6c9cc3eb826989da3a22d934 of git://git.denx.de/u-boot.git * fix more checkpatch errors * updating copyright to include addition of add.e command --- common/cmd_mtdparts.c | 38 +++++++++++++++++++++++++++++++++++++- 1 files changed, 37 insertions(+), 1 deletions(-) diff --git a/common/cmd_mtdparts.c b/common/cmd_mtdparts.c index c1adbd4..d57f9ad 100644 --- a/common/cmd_mtdparts.c +++ b/common/cmd_mtdparts.c @@ -26,6 +26,8 @@ * Added net partition size output to mtdparts list command. * Ported 'dynamic partitions' support to current u-boot 'mtdparts spread' * command. Current mtdparts variable is now used as input. + * Add the 'add.e' mtdparts command. Dynamic partitions can be added one at + * a time -- specified by size only. * * $Id: cmdlinepart.c,v 1.17 2004/11/26 11:18:47 lavinen Exp $ * Copyright 2002 SYSGO Real-Time Solutions GmbH @@ -1951,9 +1953,14 @@ int do_mtdparts(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) } /* mtdparts add [@] [ro] */ - if (((argc == 5) || (argc == 6)) && (strcmp(argv[1], "add") == 0)) { + if (((argc == 5) || (argc == 6)) && (strncmp(argv[1], "add", 3) == 0)) { #define PART_ADD_DESC_MAXLEN 64 char tmpbuf[PART_ADD_DESC_MAXLEN]; +#if defined(CONFIG_CMD_MTDPARTS_SPREAD) + char *s; + struct mtd_info *mtd; + u32 next_offset; +#endif u8 type, num, len; struct mtd_device *dev; struct mtd_device *dev_tmp; @@ -1988,11 +1995,36 @@ int do_mtdparts(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) debug("+ %s\t%d\t%s\n", MTD_DEV_TYPE(dev->id->type), dev->id->num, dev->id->mtd_id); +#if defined(CONFIG_CMD_MTDPARTS_SPREAD) + s = strchr(argv[1], '.'); + + if (get_mtd_info(dev->id->type, dev->id->num, &mtd)) + return 1; +#endif + if ((dev_tmp = device_find(dev->id->type, dev->id->num)) == NULL) { +#if defined(CONFIG_CMD_MTDPARTS_SPREAD) + if (!strcmp(s, ".e") || !strcmp(s, ".i")) { + p = list_entry(dev->parts.next, + struct part_info, link); + spread_partition(mtd, p, &next_offset); + + debug("increased %s to %d bytes\n", p->name, + p->size); + } +#endif device_add(dev); } else { /* merge new partition with existing ones*/ p = list_entry(dev->parts.next, struct part_info, link); +#if defined(CONFIG_CMD_MTDPARTS_SPREAD) + if (!strcmp(s, ".e") || !strcmp(s, ".i")) { + spread_partition(mtd, p, &next_offset); + + debug("increased %s to %d bytes\n", p->name, + p->size); + } +#endif if (part_add(dev_tmp, p) != 0) { device_del(dev); return 1; @@ -2042,6 +2074,10 @@ U_BOOT_CMD( " - delete partition (e.g. part-id = nand0,1)\n" "mtdparts add [@] [] [ro]\n" " - add partition\n" +#if defined(CONFIG_CMD_MTDPARTS_SPREAD) + "mtdparts add.e [@] [] [ro]\n" + " - add partition, padding size by skipping bad blocks\n" +#endif "mtdparts default\n" " - reset partition table to defaults\n" #if defined(CONFIG_CMD_MTDPARTS_SPREAD) -- 1.7.0.4