On 12/17/2012 02:32:48 AM, Vipin Kumar wrote:
This patch adds support to list images in NAND flash through imls

Signed-off-by: Vipin Kumar <vipin.ku...@st.com>
---
Changes in v4
- Keep stdout dumps in one line
- Continue even after read errors for all the blocks

 README             |   3 +-
common/cmd_bootm.c | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 166 insertions(+), 4 deletions(-)

diff --git a/README b/README
index 2077c3b..46fd21d 100644
--- a/README
+++ b/README
@@ -831,7 +831,8 @@ The following options need to be configured:
                CONFIG_CMD_I2C          * I2C serial bus support
                CONFIG_CMD_IDE          * IDE harddisk support
                CONFIG_CMD_IMI            iminfo
-               CONFIG_CMD_IMLS           List all found images
+ CONFIG_CMD_IMLS List all images found in NOR flash + CONFIG_CMD_IMLS_NAND List all images found in NAND flash
                CONFIG_CMD_IMMAP        * IMMR dump support
                CONFIG_CMD_IMPORTENV    * import an environment
CONFIG_CMD_INI * import data from an ini file into the env
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index d256ddf..938e500 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -80,9 +80,15 @@ static int image_info(unsigned long addr);
 #include <flash.h>
 #include <mtd/cfi_flash.h>
 extern flash_info_t flash_info[]; /* info for FLASH chips */
+#endif
+
+#if defined(CONFIG_CMD_IMLS) || defined(CONFIG_CMD_IMLS_NAND)
static int do_imls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
 #endif

+#include <linux/err.h>
+#include <nand.h>
+
 #ifdef CONFIG_SILENT_CONSOLE
 static void fixup_silent_linux(void);
 #endif
@@ -1175,7 +1181,7 @@ U_BOOT_CMD(
 /* imls - list all images found in flash */
 /*******************************************************************/
 #if defined(CONFIG_CMD_IMLS)
-static int do_imls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_imls_nor(void)
 {
        flash_info_t *info;
        int i, j;
@@ -1224,6 +1230,161 @@ next_sector:            ;
                }
 next_bank:     ;
        }
+       return 0;
+}
+#endif
+
+#if defined(CONFIG_CMD_IMLS_NAND)
+static int nand_imls_legacyimage(nand_info_t *nand, int nand_dev, loff_t off,
+               size_t len)
+{
+       void *imgdata;
+       int ret;
+
+       imgdata = malloc(len);
+       if (!imgdata) {
+ printf("May be a Legacy Image at NAND device %d offset %08llX:\n",
+                               nand_dev, off);
+ printf(" Low memory(cannot allocate memory for image)\n");
+               return -ENOMEM;
+       }

So, it looks like any reasonably-sized kernel image is going to hit this out-of-memory condition given how unreasonably small U-Boot malloc heaps generally are.

As a side note, running this showed U-Boot itself as "may be a legacy image"... it seems that for some reason all the ppc arches start with the uImage header, but otherwise aren't valid uImages.

-Scott
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to