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