All of lore.kernel.org
 help / color / mirror / Atom feed
From: Scott Wood <scottwood@freescale.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2] imls: Add support to list images in NAND device
Date: Wed, 12 Dec 2012 17:00:50 -0600	[thread overview]
Message-ID: <1355353250.28445.14@snotra> (raw)
In-Reply-To: <dba14c4ffef38a108f75342968bcd9ce2b75c4c7.1355303894.git.vipin.kumar@st.com> (from vipin.kumar@st.com on Wed Dec 12 03:20:24 2012)

On 12/12/2012 03:20:24 AM, Vipin Kumar wrote:
> imls does not list the images in NAND devices. This patch implements  
> this
> support for legacy type images.
> 
> Signed-off-by: Vipin Kumar <vipin.kumar@st.com>
> ---
> Hello Scott,
> 
> There has been sometime since you reviewed the first version of this  
> patch.
> http://lists.denx.de/pipermail/u-boot/2012-November/139631.html
> 
> I am sorry for a late response on this. I was waiting for other  
> comments if any
> on the whole patch-set
> 
> Regards
> Vipin
> 
>  README             |   3 +-
>  common/cmd_bootm.c | 133  
> ++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 134 insertions(+), 2 deletions(-)
> 
> diff --git a/README b/README
> index 2077c3b..ec5c31e 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 flash
> +		CONFIG_CMD_IMLS_NAND	  List all images found in NAND  
> device

s/in flash/in NOR flash/
s/in NAND device/in NAND flash/

Or better, just have one CONFIG_CMD_IMLS and have it operate on  
whatever flash types are configured into U-Boot.

>  		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..8ee562a 100644
> --- a/common/cmd_bootm.c
> +++ b/common/cmd_bootm.c
> @@ -83,6 +83,9 @@ extern flash_info_t flash_info[]; /* info for FLASH  
> chips */
>  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 +1178,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 void do_imls_flash(void)

s/flash/nor/

>  {
>  	flash_info_t *info;
>  	int i, j;
> @@ -1224,6 +1227,134 @@ next_sector:		;
>  		}
>  next_bank:	;
>  	}
> +}
> +#endif
> +
> +#if defined(CONFIG_CMD_IMLS_NAND)
> +static void do_imls_nand(void)
> +{
> +	nand_info_t *nand;
> +	int nand_dev = nand_curr_device;
> +	size_t read_size;
> +	loff_t off;
> +	u8 buffer[512];

Why 512?

> +	const image_header_t *header = (const image_header_t *)buffer;
> +
> +	/* the following commands operate on the current device */
> +	if (nand_dev < 0 || nand_dev >= CONFIG_SYS_MAX_NAND_DEVICE) {
> +		puts("\nNo NAND devices available\n");
> +		return;
> +	}

"following commands", plural?

And this command seems to operate on all devices, not just the current  
one.

> +
> +	printf("\n");
> +
> +	for (nand_dev = 0; nand_dev < CONFIG_SYS_MAX_NAND_DEVICE;  
> nand_dev++) {
> +

Don't put a blank line inside braces at the beginning/end of blocks.

> +		nand = &nand_info[nand_dev];
> +		if (!nand->name || !nand->size)
> +			continue;
> +
> +		for (off = 0; off < nand->size; off += nand->erasesize)  
> {
> +			int ret;
> +			void *imgdata;
> +
> +			if (nand_block_isbad(nand, off))
> +				goto next_block;
> +
> +			read_size = sizeof(buffer);
> +
> +			ret = nand_read(nand, off, &read_size, buffer);
> +			if (ret < 0 && ret != -EUCLEAN)
> +				goto next_block;

s/goto next_block/continue/

> +			header = (const image_header_t *)buffer;
> +
> +			switch (genimg_get_format(buffer)) {
> +			case IMAGE_FORMAT_LEGACY:
> +				if (!image_check_hcrc(header))
> +					goto next_block;
> +
> +				read_size =  
> image_get_image_size(header);
> +
> +				imgdata = malloc(read_size);
> +				if (!imgdata) {
> +					printf("Not able to list all  
> images " \
> +						"(Low memory)\n");

Don't line-wrap error strings.

> +					goto next_block;
> +				}
> +
> +				ret = nand_read_skip_bad(nand, off,  
> &read_size,
> +						imgdata);
> +				if (ret < 0 && ret != -EUCLEAN) {
> +					free(imgdata);
> +					goto next_block;
> +				}

s/goto next_block/break/g

...or better, factor the switch out to its own function.

> +
> +				printf("Legacy Image at NAND device %d  
> " \
> +					"offset %08llX:\n", nand_dev,  
> off);
> +				image_print_contents(imgdata);
> +
> +				puts("   Verifying Checksum ... ");
> +				if (!image_check_dcrc(imgdata))
> +					puts("Bad Data CRC\n");
> +				else
> +					puts("OK\n");
> +
> +				free(imgdata);
> +				break;
> +#if defined(CONFIG_FIT)
> +			case IMAGE_FORMAT_FIT:
> +				read_size = fit_get_size(buffer);
> +
> +				imgdata = malloc(read_size);
> +				if (!imgdata) {
> +					printf("May be a FIT Image at  
> NAND " \
> +						"device %d offset  
> %08llX:\n",
> +							nand_dev, off);
> +					printf("   Low memory(cannot  
> allocate" \
> +							" memory for  
> image)\n");
> +					goto next_block;

Why is the no-memory error message different for FIT versus legacy  
images?  I realize that at this point you don't know if it's a FIT  
versus some other dtb, but why do you print the device and offset here  
but not in the legacy case?  Why "Low memory(cannot allocate memory for  
image)" versus just " (Low memory)"?

> +				}
> +
> +				ret = nand_read_skip_bad(nand, off,  
> &read_size,
> +						imgdata);
> +				if (ret < 0 && ret != -EUCLEAN) {
> +					free(imgdata);
> +					goto next_block;
> +				}
> +
> +				if (!fit_check_format(imgdata)) {
> +					free(imgdata);
> +					goto next_block;
> +				}
> +
> +				printf("FIT Image at NAND device %d " \
> +					"offset %08llX:\n", nand_dev,  
> off);
> +
> +				fit_print_contents(imgdata);
> +				free(imgdata);
> +				break;
> +#endif
> +			default:
> +				goto next_block;
> +			}

The default: doesn't do anything -- just leave it out.

> +
> +next_block:		;
> +		}

Instead of using goto please factor out the switch to its own function  
and use return.

-Scott

  parent reply	other threads:[~2012-12-12 23:00 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-12  9:20 [U-Boot] [PATCH v2] imls: Add support to list images in NAND device Vipin Kumar
2012-12-12 20:24 ` Wolfgang Denk
2012-12-13  5:51   ` Vipin Kumar
2012-12-12 23:00 ` Scott Wood [this message]
2012-12-13  6:10   ` Vipin Kumar
2012-12-13 21:52     ` Scott Wood
2012-12-14  9:23       ` Vipin Kumar
2012-12-14 18:59         ` Scott Wood
2012-12-17  8:18           ` Vipin Kumar

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=1355353250.28445.14@snotra \
    --to=scottwood@freescale.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.