All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V2 06/21] imximage: add plugin commands
Date: Sun, 23 Sep 2012 17:38:06 +0200	[thread overview]
Message-ID: <505F2CDE.3060402@denx.de> (raw)
In-Reply-To: <1348281558-19520-7-git-send-email-troy.kisky@boundarydevices.com>

On 22/09/2012 04:39, Troy Kisky wrote:
> Add commands
> plugin address filename
> iomux_entry addr, data1 [, data2, [, data3]]
> write_entry addr, data1 [, data2, [, data3]]

Why do we need explicitely an IOMUX command ? As far as I can see, the
program image defined in V2 defines a plugin, but not an iomux.
I am expecting that the imximage generates a iMX header only, without
moving some code from the initialization code directly here. In the
manula there is a "Write Data" (what we have always had), a "Check data"
and an "Unlock" commands.

If we start to add special commands, maybe we are staring again to
reimplement U-Boot. We could have some SET_CLK, SET_CPU_FREQ, and so on.
What I am really mising in this series is why you are moving a lot of
things from U-Boot into the iMX header.

It seems to me we want to put much more code in the iMX header as what
it is really required to boot the device.

Adding / modifying the syntax requires to update doc/README.imximage, too.

> 
> Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
> ---
>  tools/imximage.c |  334 ++++++++++++++++++++++++++++++++++++++++++++----------
>  tools/imximage.h |   11 +-
>  2 files changed, 283 insertions(+), 62 deletions(-)
> 
> diff --git a/tools/imximage.c b/tools/imximage.c
> index 2c5a622..fae786a 100644
> --- a/tools/imximage.c
> +++ b/tools/imximage.c
> @@ -31,7 +31,6 @@
>  #include "mkimage.h"
>  #include <image.h>
>  #include "imximage.h"
> -
>  /*
>   * Supported commands for configuration file
>   */
> @@ -39,6 +38,9 @@ static table_entry_t imximage_cmds[] = {
>  	{CMD_BOOT_FROM,         "BOOT_FROM",            "boot command",	  },
>  	{CMD_DATA,              "DATA",                 "Reg Write Data", },
>  	{CMD_IMAGE_VERSION,     "IMAGE_VERSION",        "image version",  },
> +	{CMD_PLUGIN,		"plugin",		"plugin addr,file",  },
> +	{CMD_IOMUX_ENTRY,	"iomux_entry",		"Write iomux reg",  },
> +	{CMD_WRITE_ENTRY,	"write_entry",		"Write register",  },
>  	{-1,                    "",                     "",	          },
>  };
>  
> @@ -69,8 +71,8 @@ static uint32_t imximage_version;
>  
>  static set_dcd_val_t set_dcd_val;
>  static set_imx_hdr_t set_imx_hdr;
> -static set_imx_size_t set_imx_size;
>  static uint32_t *p_max_dcd;
> +static uint32_t *header_size_ptr;
>  static uint32_t g_flash_offset;
>  
>  static struct image_type_params imximage_params;
> @@ -88,8 +90,7 @@ static uint32_t detect_imximage_version(struct imx_header *imx_hdr)
>  		return IMXIMAGE_V1;
>  
>  	/* Try to detect V2 */
> -	if ((fhdr_v2->header.tag == IVT_HEADER_TAG) &&
> -		(hdr_v2->dcd_table.header.tag == DCD_HEADER_TAG))
> +	if ((fhdr_v2->header.tag == IVT_HEADER_TAG))
>  		return IMXIMAGE_V2;

Help me to understand. I am reading i.MX6 manual and, even if the number
of DCD entries could be variable, I do not see why the header tag of DCD
is moving. At least, this is what I can see on picture 7-19, Image
Vector table.

>  
>  	return IMXIMAGE_VER_INVALID;
> @@ -160,7 +161,7 @@ static int set_dcd_val_v2(struct imx_header *imxhdr, uint32_t *data)
>  }
>  
>  static int set_imx_hdr_v1(struct imx_header *imxhdr,
> -		uint32_t entry_point, uint32_t flash_offset)
> +		uint32_t entry_point, uint32_t flash_offset, int plugin)
>  {
>  	imx_header_v1_t *hdr_v1 = &imxhdr->header.hdr_v1;
>  	flash_header_v1_t *fhdr_v1 = &hdr_v1->fhdr;
> @@ -180,22 +181,12 @@ static int set_imx_hdr_v1(struct imx_header *imxhdr,
>  	/* Security feature are not supported */
>  	fhdr_v1->app_code_csf = 0;
>  	fhdr_v1->super_root_key = 0;
> +	header_size_ptr = (uint32_t *)(((char *)imxhdr) + header_length - 4);
>  	return header_length;
>  }
>  
> -static void set_imx_size_v1(struct imx_header *imxhdr, uint32_t file_size,
> -		uint32_t flash_offset)
> -{
> -	uint32_t *p = (uint32_t *)(((char *)imxhdr)
> -			+ imximage_params.header_size);
> -
> -	/* The external flash header must be at the end of the DCD table */
> -	/* file_size includes header */
> -	p[-1] = file_size + flash_offset;
> -}

I think you have to squash some of your patches or to defines them in
another way. You added this code previously, and you drop now. This
makes more difficult to review your patches.

> -
>  static int set_imx_hdr_v2(struct imx_header *imxhdr,
> -		uint32_t entry_point, uint32_t flash_offset)
> +		uint32_t entry_point, uint32_t flash_offset, int plugin)
>  {
>  	imx_header_v2_t *hdr_v2 = &imxhdr->header.hdr_v2;
>  	flash_header_v2_t *fhdr_v2 = &hdr_v2->fhdr;
> @@ -216,27 +207,20 @@ static int set_imx_hdr_v2(struct imx_header *imxhdr,
>  	fhdr_v2->boot_data_ptr = hdr_base
>  			+ offsetof(imx_header_v2_t, boot_data);
>  	hdr_v2->boot_data.start = hdr_base - flash_offset;
> +	hdr_v2->boot_data.plugin = plugin;
>  
>  	/* Security feature are not supported */
>  	fhdr_v2->csf = 0;
> +	header_size_ptr = &hdr_v2->boot_data.size;
>  	return header_length;
>  }
>  
> -static void set_imx_size_v2(struct imx_header *imxhdr, uint32_t file_size,
> -		uint32_t flash_offset)
> -{
> -	imx_header_v2_t *hdr_v2 = &imxhdr->header.hdr_v2;
> -	/* file_size includes header */
> -	hdr_v2->boot_data.size = file_size + flash_offset;
> -}
> -
>  static void set_hdr_func(struct imx_header *imxhdr)
>  {
>  	switch (imximage_version) {
>  	case IMXIMAGE_V1:
>  		set_dcd_val = set_dcd_val_v1;
>  		set_imx_hdr = set_imx_hdr_v1;
> -		set_imx_size = set_imx_size_v1;
>  		p_entry = &imxhdr->header.hdr_v1.dcd_table.addr_data[0].type;
>  		p_max_dcd = &imxhdr->header.hdr_v1.dcd_table
>  				.addr_data[MAX_HW_CFG_SIZE_V1].type;
> @@ -245,7 +229,6 @@ static void set_hdr_func(struct imx_header *imxhdr)
>  	case IMXIMAGE_V2:
>  		set_dcd_val = set_dcd_val_v2;
>  		set_imx_hdr = set_imx_hdr_v2;
> -		set_imx_size = set_imx_size_v2;
>  		p_entry = (uint32_t *)&imxhdr->header.hdr_v2.dcd_table;
>  		p_max_dcd = (uint32_t *)((char *)imxhdr + MAX_HEADER_SIZE);
>  		break;
> @@ -283,31 +266,49 @@ static void print_hdr_v1(struct imx_header *imx_hdr)
>  	printf("Entry Point:  %08x\n", (uint32_t)fhdr_v1->app_code_jump_vector);
>  }
>  
> -static void print_hdr_v2(struct imx_header *imx_hdr)
> +static void print_header_info2(struct imx_header *imx_hdr)
>  {
>  	imx_header_v2_t *hdr_v2 = &imx_hdr->header.hdr_v2;
>  	flash_header_v2_t *fhdr_v2 = &hdr_v2->fhdr;
> +
> +	printf("Data Size:    ");
> +	genimg_print_size(hdr_v2->boot_data.size);
> +	printf("Load Address: %08x\n", (uint32_t)fhdr_v2->boot_data_ptr);
> +	printf("Entry Point:  %08x\n", (uint32_t)fhdr_v2->entry);
> +}
> +
> +static void print_hdr_v2(struct imx_header *imxhdr)
> +{
> +	imx_header_v2_t *hdr_v2 = &imxhdr->header.hdr_v2;
>  	dcd_v2_t *dcd_v2 = &hdr_v2->dcd_table;
>  	uint32_t size, version;
>  
> -	size = be16_to_cpu(dcd_v2->header.length) - 8;
> -	if (size > (MAX_HW_CFG_SIZE_V2 * sizeof(dcd_addr_data_t))) {
> -		fprintf(stderr,
> -			"Error: Image corrupt DCD size %d exceed maximum %d\n",
> -			(uint32_t)(size / sizeof(dcd_addr_data_t)),
> -			MAX_HW_CFG_SIZE_V2);
> -		exit(EXIT_FAILURE);
> +	if (hdr_v2->fhdr.dcd_ptr) {
> +		size = be16_to_cpu(dcd_v2->header.length) - 8;
> +		if (size > (MAX_HW_CFG_SIZE_V2 * sizeof(dcd_addr_data_t))) {
> +			fprintf(stderr,	"Error: Image corrupt DCD size "
> +				"%d exceed maximum %d\n",
> +				(uint32_t)(size / sizeof(dcd_addr_data_t)),
> +				MAX_HW_CFG_SIZE_V2);
> +			exit(EXIT_FAILURE);
> +		}
>  	}
> -
> -	version = detect_imximage_version(imx_hdr);
> +	version = detect_imximage_version(imxhdr);
>  
>  	printf("Image Type:   Freescale IMX Boot Image\n");
>  	printf("Image Ver:    %x", version);
>  	printf("%s\n", get_table_entry_name(imximage_versions, NULL, version));
> -	printf("Data Size:    ");
> -	genimg_print_size(hdr_v2->boot_data.size);
> -	printf("Load Address: %08x\n", (uint32_t)fhdr_v2->boot_data_ptr);
> -	printf("Entry Point:  %08x\n", (uint32_t)fhdr_v2->entry);
> +	print_header_info2(imxhdr);
> +	if (hdr_v2->boot_data.plugin) {
> +		uint32_t flash_offset =
> +				hdr_v2->fhdr.self - hdr_v2->boot_data.start;
> +		/* The 1st size includes flash offset and the next header */
> +		uint32_t plugin_length = hdr_v2->boot_data.size - flash_offset
> +				- offsetof(imx_header_v2_t, dcd_table);
> +
> +		imxhdr = (struct imx_header *)((char *)imxhdr + plugin_length);
> +		print_header_info2(imxhdr);
> +	}
>  }
>  
>  static int cmd_cnt;
> @@ -363,6 +364,24 @@ int skip_separators(struct data_src *ds)
>  	}
>  }
>  
> +int skip_comma(struct data_src *ds)
> +{
> +	char *p = ds->p;
> +
> +	for (;;) {
> +		char c = *p++;
> +		if ((c == '#') || (c == '\r') || (c == '\n') || !c)
> +			return 0;
> +		if (c == ',') {
> +			ds->p = p;
> +			skip_separators(ds);
> +			return 1;
> +		}
> +		if ((c != ' ') && (c == '\t'))
> +			return 0;
> +	}
> +}
> +
>  char *grab_token(char *dest, int size, char *src)
>  {
>  	while (size) {
> @@ -551,16 +570,18 @@ do_unary:
>  static int parse_cmd_data(struct data_src *ds)
>  {
>  	uint32_t data[3];
> -	int ret = get_cfg_value(ds, &data[0]);
> +	int ret, i;
>  
> -	if (ret)
> -		return ret;
> -	ret = get_cfg_value(ds, &data[1]);
> -	if (ret)
> -		return ret;
> -	ret = get_cfg_value(ds, &data[2]);
> -	if (ret)
> -		return ret;
> +	if (ds->plugin) {
> +		fprintf(stderr, "DATA should be before plug command\n");
> +		return -1;
> +	}
> +	for (i = 0; i < 3; i++) {
> +		int ret = get_cfg_value(ds, &data[i]);
> +		if (ret)
> +			return ret;
> +		skip_comma(ds);		/* comma is optional */
> +	}
>  	ret = (*set_dcd_val)(ds->imxhdr, data);
>  	if (ret)
>  		return ret;
> @@ -573,6 +594,99 @@ static int parse_cmd_data(struct data_src *ds)
>  	return 0;
>  }
>  
> +static int get_data(struct data_src *ds, uint32_t *data, int cnt)
> +{
> +	int i = 0;
> +
> +	if (!ds->plugin) {
> +		fprintf(stderr, "missing plug command\n");
> +		return -1;
> +	}
> +	for (;;) {
> +		int ret = get_cfg_value(ds, &data[i++]);
> +		if (ret)
> +			return ret;
> +		if (i >= cnt)
> +			break;
> +		if (!skip_comma(ds))
> +			break;
> +	}
> +	if (i < 2) {
> +		fprintf(stderr, "missing ','\n");
> +		return -1;
> +	}
> +	while (i < cnt) {
> +		data[i] = data[i - 1];
> +		i++;
> +	}
> +	if ((data[1] == ds->prev[1]) && (data[2] == ds->prev[2])
> +			&& (data[3] == ds->prev[3])
> +			&& (data[4] == ds->prev[4]))
> +		i = 0;
> +	else if ((data[1] == data[2]) && (data[2] == data[3])
> +			&& (data[3] == data[4]))
> +		i = 1;
> +	else if ((data[2] == data[3]) && (data[3] == data[4]))
> +		i = 2;
> +	else
> +		i = 3;
> +	return i;
> +}
> +
> +static int store_data(struct data_src *ds, uint32_t *data, int cnt)
> +{
> +	int i;
> +
> +	for (i = 0; i < cnt; i++)
> +		*p_entry++ = data[i];
> +
> +	ds->prev[1] = data[1];
> +	ds->prev[2] = data[2];
> +	ds->prev[3] = data[3];
> +	ds->prev[4] = data[4];
> +	if (p_entry > p_max_dcd) {
> +		uint32_t size = (char *)p_max_dcd - (char *)ds->imxhdr;
> +		fprintf(stderr, "Error: header exceeds maximum size(%d)\n",
> +				size);
> +		return -1;
> +	}
> +	return 0;
> +}
> +
> +static int parse_iomux_entry(struct data_src *ds)
> +{
> +	uint32_t data[5];
> +	int i;
> +
> +	i = get_data(ds, data, 5);
> +	if (i < 0)
> +		return i;
> +	if (data[0] & (3 << 30)) {
> +		fprintf(stderr, "bad 1st value\n");
> +		return -1;
> +	}
> +	if (i < 3)
> +		i++;
> +	data[0] |= (i << 30);
> +	return store_data(ds, data, (i == 3) ? 5 : i);
> +}
> +
> +static int parse_write_entry(struct data_src *ds)
> +{
> +	uint32_t data[5];
> +	int i;
> +
> +	i = get_data(ds, data, 5);
> +	if (i < 0)
> +		return i;
> +	if (data[0] & 3) {
> +		fprintf(stderr, "Address must be aligned on word boundary\n");
> +		return -1;
> +	}
> +	data[0] |= i;
> +	return store_data(ds, data, (i == 3) ? 5 : (i + 1));
> +}
> +
>  static int parse_image_version(struct data_src *ds)
>  {
>  	int ret;
> @@ -618,8 +732,82 @@ static int parse_boot_from(struct data_src *ds)
>  	return 0;
>  }
>  
> +static int parse_plugin(struct data_src *ds)
> +{
> +	struct stat sbuf;
> +	int plug_file;
> +	unsigned char *ptr;
> +	char *p;
> +	char c;
> +	int ret;
> +	uint32_t plug_base;
> +	uint32_t header_length;
> +
> +	if (g_flash_offset == FLASH_OFFSET_UNDEFINED) {
> +		fprintf(stderr, "Error: Place BOOT_FROM before plugin\n");
> +		return -1;
> +	}
> +	ret = get_cfg_value(ds, &plug_base);
> +	if (ret)
> +		return ret;
> +
> +	if (skip_separators(ds))
> +		return -1;
> +	p = ds->p;
> +	for (;;) {
> +		c = *p;
> +		if (!c)
> +			break;
> +		if ((c == ' ') || (c == '\t') || (c == ';') || (c == '#')
> +				|| (c == '\r') || (c == '\n')) {
> +			*p = 0;
> +			break;
> +		}
> +		p++;
> +	}
> +	plug_file = open(ds->p, O_RDONLY|O_BINARY);
> +	if (plug_file < 0) {
> +		fprintf(stderr, "Can't open plugin file %s: %s\n",
> +				ds->p, strerror(errno));
> +		*p = c;
> +		return -1;
> +	}
> +	if (fstat(plug_file, &sbuf) < 0) {
> +		fprintf(stderr, "Can't stat %s: %s\n",
> +			ds->p, strerror(errno));
> +		close(plug_file);
> +		return -1;
> +	}
> +	ptr = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, plug_file, 0);
> +	if (ptr == MAP_FAILED) {
> +		fprintf(stderr, "Can't read %s: %s\n",
> +			ds->p, strerror(errno));
> +		return -1;
> +	}
> +	*p = c;
> +	ds->p = p;
> +	/* Set the plugin header */
> +	header_length = (*set_imx_hdr)(ds->imxhdr, plug_base,
> +			g_flash_offset, 1);
> +
> +	p = ((char *)ds->imxhdr) + header_length;
> +	if ((p + sbuf.st_size) >= (char *)p_max_dcd) {
> +		fprintf(stderr, "Out of space\n");
> +		return -1;
> +	}
> +
> +	ds->plugin = 1;
> +	memcpy(p, ptr, sbuf.st_size);
> +	munmap((void *)ptr, sbuf.st_size);
> +	close(plug_file);
> +
> +	p_entry = (uint32_t *)(p + sbuf.st_size);
> +	return 0;
> +}
> +
>  parse_fld_t cmd_table[] = {
> -	parse_image_version, parse_boot_from, parse_cmd_data
> +	parse_image_version, parse_boot_from, parse_cmd_data, parse_plugin,
> +	parse_iomux_entry, parse_write_entry
>  };
>  
>  static int parse_command(struct data_src *ds)
> @@ -630,9 +818,11 @@ static int parse_command(struct data_src *ds)
>  	return cmd_table[cmd](ds);
>  }
>  
> -static void parse_cfg_file(struct imx_header *imxhdr, char *name)
> +static void parse_cfg_file(struct imx_header *imxhdr, char *name,
> +		uint32_t entry_point)
>  {
>  	struct data_src ds;
> +	uint32_t plugin_length = 0;
>  
>  	ds.line = NULL;
>  	ds.len = 0;
> @@ -662,6 +852,35 @@ static void parse_cfg_file(struct imx_header *imxhdr, char *name)
>  		cmd_cnt++;
>  	}
>  	fclose(ds.fd);
> +
> +	if (ds.plugin) {
> +		uint32_t header_length, more;
> +		struct imx_header *next_imxhdr;
> +
> +		*p_entry++ = 0;
> +		header_length = ((char *)p_entry) - ((char *)imxhdr);
> +		plugin_length = ((header_length - 1) | 0x3f) + 1;
> +		more = plugin_length - header_length;
> +		if (more)
> +			memset(p_entry, 0, more);
> +		next_imxhdr = (struct imx_header *)
> +				(((char *)imxhdr) + plugin_length);
> +		p_entry = (imximage_version == IMXIMAGE_V1) ? (uint32_t *)
> +			&next_imxhdr->header.hdr_v1.dcd_table.addr_data[0].type
> +			: (uint32_t *)&next_imxhdr->header.hdr_v2.dcd_table;
> +		if (p_entry > p_max_dcd) {
> +			fprintf(stderr, "Out of space\n");
> +			exit(EXIT_FAILURE);
> +		}
> +
> +		/* Set the plugin size in header to include next header */
> +		*header_size_ptr = ((char *)p_entry) - ((char *)imxhdr)
> +				+ g_flash_offset;
> +		imxhdr = next_imxhdr;
> +	}
> +	/* Set the imx header */
> +	imximage_params.header_size = (*set_imx_hdr)(imxhdr, entry_point,
> +			g_flash_offset + plugin_length, 0) + plugin_length;
>  	return;
>  }
>  
> @@ -727,7 +946,7 @@ int imximage_vrec_header(struct mkimage_params *params,
>  	set_hdr_func(imxhdr);
>  
>  	/* Parse dcd configuration file */
> -	parse_cfg_file(imxhdr, params->imagename);
> +	parse_cfg_file(imxhdr, params->imagename, params->ep);
>  
>  	/* Exit if there is no BOOT_FROM field specifying the flash_offset */
>  	if (g_flash_offset == FLASH_OFFSET_UNDEFINED) {
> @@ -735,9 +954,6 @@ int imximage_vrec_header(struct mkimage_params *params,
>  				params->imagename);
>  		exit(EXIT_FAILURE);
>  	}
> -	/* Set the imx header */
---> -	imximage_params.header_size = (*set_imx_hdr)(imxhdr, params->ep,
> -			g_flash_offset);
>  	imximage_params.hdr = imxhdr;
>  	return 0;
>  }
> @@ -746,8 +962,10 @@ static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd,
>  				struct mkimage_params *params)
>  {
>  	/* Set the size in header */
> -	(*set_imx_size)((struct imx_header *)ptr, sbuf->st_size,
> -			g_flash_offset);
> +	uint32_t offset = (char *)header_size_ptr - (char *)imximage_params.hdr;
> +	uint32_t *p = (uint32_t *)((char *)ptr + offset);
> +
> +	*p = sbuf->st_size + g_flash_offset;
>  }
>  
>  int imximage_check_params(struct mkimage_params *params)
> diff --git a/tools/imximage.h b/tools/imximage.h
> index efd249b..7613386 100644
> --- a/tools/imximage.h
> +++ b/tools/imximage.h
> @@ -51,7 +51,10 @@
>  enum imximage_cmd {
>  	CMD_IMAGE_VERSION,
>  	CMD_BOOT_FROM,
> -	CMD_DATA
> +	CMD_DATA,
> +	CMD_PLUGIN,
> +	CMD_IOMUX_ENTRY,
> +	CMD_WRITE_ENTRY,
>  };
>  
>  enum imximage_version {
> @@ -158,6 +161,8 @@ struct data_src {
>  	char *filename;
>  	struct imx_header *imxhdr;
>  	char *p;
> +	int plugin;
> +	uint32_t prev[5];
>  };
>  
>  typedef int (*parse_fld_t)(struct data_src *ds);
> @@ -165,8 +170,6 @@ typedef int (*parse_fld_t)(struct data_src *ds);
>  typedef int (*set_dcd_val_t)(struct imx_header *imxhdr, uint32_t *data);
>  
>  typedef int (*set_imx_hdr_t)(struct imx_header *imxhdr, uint32_t entry_point,
> -		uint32_t flash_offset);
> -typedef void (*set_imx_size_t)(struct imx_header *imxhdr, uint32_t file_size,
> -		uint32_t flash_offset);
> +		uint32_t flash_offset, int plugin);
>  
>  #endif /* _IMXIMAGE_H_ */
> 

Best regards,
Stefano Babic

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================

  reply	other threads:[~2012-09-23 15:38 UTC|newest]

Thread overview: 202+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-19  0:02 [U-Boot] (no subject) Troy Kisky
2012-09-19  0:02 ` [U-Boot] [PATCH 01/11] imximage: make header variable length Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 02/11] imximage: check dcd_len as entries added Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 03/11] imximage: enable word writes for version2 header Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 04/11] imximage: cleanup parsing Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 05/11] imximage: add expression evaluation Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 06/11] imximage: add plugin commands Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 07/11] imximage.cfg: run files through C preprocessor Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 08/11] mx6: add plugin file for use with imximage.cfg Troy Kisky
2012-09-19  1:40   ` Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 09/11] mx6qsabrelite: imximage.cfg: use symbols instead of hardcoded constants Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 10/11] mx6qsabrelite: imximage.cfg: allow plugin to work Troy Kisky
2012-09-19  0:03 ` [U-Boot] [PATCH 11/11] RFC mx6qsabrelite: imximage.cfg: enable plugin mode Troy Kisky
2012-09-19  1:52   ` Troy Kisky
2012-09-22  2:38 ` [U-Boot] [PATCH V2 00/21] Add mx6solo/mx6duallite support Troy Kisky
2012-09-22  2:38   ` [U-Boot] [PATCH V2 01/21] imximage: make header variable length Troy Kisky
2012-09-23 10:57     ` Stefano Babic
2012-09-24 20:30       ` Troy Kisky
2012-09-25 11:08         ` Stefano Babic
2012-09-22  2:38   ` [U-Boot] [PATCH V2 02/21] imximage: check dcd_len as entries added Troy Kisky
2012-09-23 11:05     ` Stefano Babic
2012-09-24 20:54       ` Troy Kisky
2012-09-25 11:12         ` Stefano Babic
2012-09-22  2:39   ` [U-Boot] [PATCH V2 03/21] imximage: enable word writes for version2 header Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 04/21] imximage: cleanup parsing Troy Kisky
2012-09-23 11:08     ` Stefano Babic
2012-09-24 20:59       ` Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 05/21] imximage: add expression evaluation Troy Kisky
2012-09-23 14:56     ` Stefano Babic
2012-09-24 21:18       ` Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 06/21] imximage: add plugin commands Troy Kisky
2012-09-23 15:38     ` Stefano Babic [this message]
2012-09-24 21:46       ` Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 07/21] imximage.cfg: run files through C preprocessor Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 08/21] mx6: add plugin file for use with imximage.cfg Troy Kisky
2012-09-22  4:06     ` Vikram Narayanan
2012-09-23 10:17     ` Stefano Babic
2012-09-23 16:23       ` Eric Nelson
2012-09-23 17:08         ` Stefano Babic
2012-09-23 23:29           ` Eric Nelson
2012-09-24  7:22             ` Stefano Babic
2012-09-24 13:48               ` Eric Nelson
2012-09-24 15:17                 ` Stefano Babic
2012-09-24 22:23           ` Troy Kisky
2012-09-25 12:13             ` Stefano Babic
2012-09-24 20:46       ` Troy Kisky
2012-09-25 11:57         ` Stefano Babic
2012-09-22  2:39   ` [U-Boot] [PATCH V2 09/21] mx6q_4x_mt41j128.cfg: use symbols instead of hardcoded constants Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 10/21] mx6q_4x_mt41j128.cfg: allow plugin to work Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 11/21] mx6q_4x_mt41j128.cfg: enable plugin mode Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 12/21] mx6q_4x_mt41j128.cfg: add comments Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 13/21] mx6q_4x_mt41j128.cfg: use ddr3 mode for reset Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 14/21] mx6q_4x_mt41j128.cfg: skip initiailizing non-existent memory Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 15/21] mx6q_4x_mt41j128.cfg: reorder for more efficient storage Troy Kisky
2012-09-22 17:27     ` Fabio Estevam
2012-09-22 17:34       ` Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 16/21] mx6q_4x_mt41j128.cfg: force ZQ calibration Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 17/21] mx6: soc: add get_cpu_type Troy Kisky
2012-09-22  2:50     ` Fabio Estevam
2012-09-22 17:07       ` Troy Kisky
2012-09-23 14:59         ` Stefano Babic
2012-09-22  2:39   ` [U-Boot] [PATCH V2 18/21] arch-mx6: add mx6dl_pins.h Troy Kisky
2012-09-22  4:10     ` Vikram Narayanan
2012-09-22 17:17       ` Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 19/21] mx6qsabrelite: add support for mx6 solo/duallite Troy Kisky
2012-09-22  4:12     ` Vikram Narayanan
2012-09-22 17:24       ` Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 20/21] mx6q_4x_mt41j128.cfg: add mx6 solo/duallite support Troy Kisky
2012-09-22  2:39   ` [U-Boot] [PATCH V2 21/21] mx6qsabrelite: change CONFIG_SYS_PROMPT Troy Kisky
2012-09-22  6:21   ` [U-Boot] [PATCH V2 00/21] Add mx6solo/mx6duallite support Dirk Behme
2012-09-22 16:53     ` Troy Kisky
2012-10-04  1:47   ` [U-Boot] [PATCH V3 00/32] " Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 01/32] imximage: check dcd_len as entries added Troy Kisky
2012-10-20 15:45       ` Stefano Babic
2012-10-04  1:47     ` [U-Boot] [PATCH V3 02/32] imximage: remove redundant setting of app_dest_ptr Troy Kisky
2012-10-08 13:17       ` Stefano Babic
2012-10-20 15:46       ` Stefano Babic
2012-10-04  1:47     ` [U-Boot] [PATCH V3 03/32] imximage: move flash_offset check to common location Troy Kisky
2012-10-08 13:19       ` Stefano Babic
2012-10-18 18:40         ` Troy Kisky
2012-10-19  8:01           ` Stefano Babic
2012-10-20 15:46       ` Stefano Babic
2012-10-04  1:47     ` [U-Boot] [PATCH V3 04/32] imximage: fix size of image to load Troy Kisky
2012-10-20 15:47       ` Stefano Babic
2012-10-04  1:47     ` [U-Boot] [PATCH V3 05/32] imximage: delay setting of image size Troy Kisky
2012-10-20 15:47       ` Stefano Babic
2012-10-04  1:47     ` [U-Boot] [PATCH V3 06/32] imximage: change parameters to set_imx_hdr Troy Kisky
2012-10-20 15:48       ` Stefano Babic
2012-10-04  1:47     ` [U-Boot] [PATCH V3 07/32] imximage: make set_imx_hdr_v1/v2 easier to read Troy Kisky
2012-10-20 15:48       ` Stefano Babic
2012-10-04  1:47     ` [U-Boot] [PATCH V3 08/32] imximage: make header variable length Troy Kisky
2012-10-20 15:52       ` Stefano Babic
2012-10-21  1:31         ` Troy Kisky
2012-10-21  8:35           ` Stefano Babic
2012-10-22 21:03             ` Troy Kisky
2012-11-28  1:31       ` [U-Boot] [PATCH V4 00/11] imximage series Troy Kisky
2012-11-28  1:31         ` [U-Boot] [PATCH V4 01/11] imximage: mx53 needs transfer length a multiple of 512 Troy Kisky
2012-11-28  9:27           ` Wolfgang Denk
2012-11-28 18:18             ` Troy Kisky
2012-11-28 20:25               ` Wolfgang Denk
2012-11-28 21:05                 ` Troy Kisky
2012-11-28 21:35                   ` Wolfgang Denk
2012-11-29  2:42                     ` Troy Kisky
2012-11-29  5:28                       ` Wolfgang Denk
2012-12-03  9:23                         ` Stefano Babic
2012-12-03  9:12                     ` Stefano Babic
2012-11-28 18:26             ` Troy Kisky
2012-11-28 10:34           ` Liu Hui-R64343
2012-11-28  1:31         ` [U-Boot] [PATCH V4 02/11] imximage: make header variable length Troy Kisky
2012-11-28 10:42           ` Liu Hui-R64343
2012-11-28  1:31         ` [U-Boot] [PATCH V4 03/11] imximage: remove static imximage_version Troy Kisky
2012-11-28 10:43           ` Liu Hui-R64343
2012-11-28  1:31         ` [U-Boot] [PATCH V4 04/11] imximage: prepare to move static variables to struct data_src Troy Kisky
2012-11-28  9:38           ` Wolfgang Denk
2012-11-28 18:36             ` Troy Kisky
2012-11-28 20:30               ` Wolfgang Denk
2012-11-28  1:31         ` [U-Boot] [PATCH V4 05/11] imximage: change parameters for set_dcd_val/set_imx_hdr Troy Kisky
2012-11-28 10:43           ` Liu Hui-R64343
2012-11-28  1:31         ` [U-Boot] [PATCH V4 06/11] imximage: move set_imx_hdr to struct data_src Troy Kisky
2012-11-28 10:45           ` Liu Hui-R64343
2012-11-28  1:31         ` [U-Boot] [PATCH V4 07/11] imximage: move set_dcd_val " Troy Kisky
2012-11-28 10:47           ` Liu Hui-R64343
2012-11-28  1:31         ` [U-Boot] [PATCH V4 08/11] imximage: enable word writes for version2 header Troy Kisky
2012-11-28  9:39           ` Wolfgang Denk
2012-11-28 20:40             ` Troy Kisky
2012-12-04  8:23               ` Stefano Babic
2012-11-28 10:47           ` Liu Hui-R64343
2012-11-28  1:31         ` [U-Boot] [PATCH V4 09/11] tools: add parse_helper file Troy Kisky
2012-11-28  9:41           ` Wolfgang Denk
2012-11-28 10:48           ` Liu Hui-R64343
2012-11-28  1:31         ` [U-Boot] [PATCH V4 10/11] imximage: use parse_helper functions Troy Kisky
2012-11-28 10:48           ` Liu Hui-R64343
2012-11-28  1:31         ` [U-Boot] [PATCH V4 11/11] parse_helper: add expression evaluation Troy Kisky
2012-11-28 10:49           ` Liu Hui-R64343
2012-11-28  9:30         ` [U-Boot] [PATCH V4 00/11] imximage series Wolfgang Denk
2012-11-28 18:29           ` Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 09/32] imximage: remove static imximage_version Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 10/32] imximage: prepare to move static variables to struct data_src Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 11/32] imximage: change parameters for set_dcd_val/set_imx_hdr Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 12/32] imximage: move set_imx_hdr to struct data_src Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 13/32] imximage: move set_dcd_val " Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 14/32] imximage: enable word writes for version2 header Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 15/32] tools: add parse_helper file Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 16/32] imximage: use parse_helper functions Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 17/32] imximage.cfg: run files through C preprocessor Troy Kisky
2012-10-07 18:19       ` Eric Nelson
2012-10-08 19:11         ` Troy Kisky
2012-10-08 13:38       ` Stefano Babic
2012-10-08 21:48         ` Troy Kisky
2012-10-10  2:03         ` Troy Kisky
2012-10-11 11:11           ` Stefano Babic
2012-10-11 20:33             ` Troy Kisky
2012-10-11 22:27               ` stefano babic
2012-10-11 23:15                 ` Tom Rini
2012-10-13 10:11                   ` [U-Boot] File placement in Soc / board dirs and make issues (was: [PATCH V3 17/32] imximage.cfg: run files through C preprocessor) Albert ARIBAUD
2012-10-13 15:17                     ` Tom Rini
2012-10-14  8:37                       ` [U-Boot] File placement in Soc / board dirs and make issues Albert ARIBAUD
2012-10-15  1:24                         ` Tom Rini
2012-10-23  6:30                           ` Albert ARIBAUD
2012-10-17 20:32                   ` [U-Boot] [PATCH V3 17/32] imximage.cfg: run files through C preprocessor Troy Kisky
2012-10-17 21:05                     ` Tom Rini
2012-10-17 21:38                       ` Troy Kisky
2012-10-17 22:29                         ` Tom Rini
2012-10-04  1:47     ` [U-Boot] [PATCH V3 18/32] mx6q_4x_mt41j128.cfg: use symbols instead of hardcoded constants Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 19/32] mx6q_4x_mt41j128.cfg: add comments Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 20/32] mx6q_4x_mt41j128.cfg: use ddr3 mode for reset Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 21/32] mx6q_4x_mt41j128.cfg: skip initiailizing non-existent memory Troy Kisky
2012-10-07 21:01       ` Eric Nelson
2012-10-04  1:47     ` [U-Boot] [PATCH V3 22/32] mx6q_4x_mt41j128.cfg: force ZQ calibration Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 23/32] mx6: soc: update get_cpu_rev and get_imx_type for mx6solo/sololite Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 24/32] mx6: use CONFIG_MX6 instead of CONFIG_MX6Q Troy Kisky
2012-10-08 13:41       ` Stefano Babic
2012-10-08 21:49         ` Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 25/32] imx-common: cpu: add imx_ddr_size Troy Kisky
2012-10-08 13:06       ` Stefano Babic
2012-10-08 21:35         ` Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 26/32] arch-mx6: add mx6dl_pins.h Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 27/32] mx6qsabrelite: add support for mx6 solo/duallite Troy Kisky
2012-10-04  3:23       ` Otavio Salvador
2012-10-04 23:34         ` Troy Kisky
2012-10-08 13:47           ` Stefano Babic
2012-10-04  1:47     ` [U-Boot] [PATCH V3 28/32] mx6q_4x_mt41j128.cfg: add mx6 solo/duallite support Troy Kisky
2012-10-08 18:46       ` Eric Nelson
2012-10-08 21:08         ` Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 29/32] Add boards for sabrelite variants mx6s(solo) and mx6dl(duallite) Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 30/32] mx6qsabrelite: change CONFIG_SYS_PROMPT Troy Kisky
2012-10-04  3:00       ` Otavio Salvador
2012-10-04 23:28         ` Troy Kisky
2012-10-08 13:54           ` Stefano Babic
2012-10-08 21:58             ` Troy Kisky
2012-10-08 22:05               ` Fabio Estevam
2012-10-08 22:18               ` stefano babic
2012-10-08 22:22                 ` Eric Nelson
2012-10-08 22:21               ` Eric Nelson
2012-10-04  1:47     ` [U-Boot] [PATCH V3 31/32] parse_helper: add expression evaluation Troy Kisky
2012-10-04  1:47     ` [U-Boot] [PATCH V3 32/32] imx-mkimage.h: use base + offset syntax Troy Kisky
2012-10-04 10:18     ` [U-Boot] [PATCH V3 00/32] Add mx6solo/mx6duallite support Albert ARIBAUD
2012-10-04 14:36       ` Eric Nelson
2012-10-04 19:51         ` Albert ARIBAUD
2012-10-04 14:52     ` Eric Nelson
2012-10-08 13:15     ` Stefano Babic
2012-10-08 23:58       ` Troy Kisky

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=505F2CDE.3060402@denx.de \
    --to=sbabic@denx.de \
    --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.