Patchwork [U-Boot,3/3] imximage: Add MX53 boot image support

login
register
mail settings
Submitter Liu Hui-R64343
Date Dec. 22, 2010, 1:23 p.m.
Message ID <1293024231-4897-3-git-send-email-r64343@freescale.com>
Download mbox | patch
Permalink /patch/76405/
State Changes Requested
Delegated to: Stefano Babic
Headers show

Comments

Liu Hui-R64343 - Dec. 22, 2010, 1:23 p.m.
This patch add the MX53 boot image support

This patch has been tested on Freescale MX53EVK board.

Signed-off-by: Jason Liu <r64343@freescale.com>
---
 board/freescale/mx53evk/config.mk    |   25 ++++++++
 board/freescale/mx53evk/imximage.cfg |  108 ++++++++++++++++++++++++++++++++++
 tools/imximage.c                     |  101 +++++++++++++++++++++++++++++--
 tools/imximage.h                     |   75 ++++++++++++++++++++---
 4 files changed, 293 insertions(+), 16 deletions(-)
Stefano Babic - Dec. 27, 2010, 10:55 a.m.
On 12/22/2010 02:23 PM, Jason Liu wrote:
> This patch add the MX53 boot image support
> 
> This patch has been tested on Freescale MX53EVK board.
> 
> Signed-off-by: Jason Liu <r64343@freescale.com>
> ---
>  board/freescale/mx53evk/config.mk    |   25 ++++++++
>  board/freescale/mx53evk/imximage.cfg |  108 ++++++++++++++++++++++++++++++++++
>  tools/imximage.c                     |  101 +++++++++++++++++++++++++++++--
>  tools/imximage.h                     |   75 ++++++++++++++++++++---

You mixed two patches with different meaning. You add support for
mx53evk board (and patches for config.mk and imximage.cfg must belong to
this patch) and you modify imximage to support the MX53 processor, not
related to the mx53evk board. Please split this patch into two separate
patches.

> diff --git a/tools/imximage.c b/tools/imximage.c
> index 39f89c2..884feff 100644
> --- a/tools/imximage.c
> +++ b/tools/imximage.c
> @@ -82,7 +82,7 @@ static int imximage_check_image_types(uint8_t type)
>  static int imximage_verify_header(unsigned char *ptr, int image_size,
>  			struct mkimage_params *params)
>  {
> -
> +#ifdef CONFIG_MX51

NAK. This is wrong: mkimage is a tool running on host and must be
possible to include it in a distro. It must be able (as it now does) to
produce the correct image at runtime. For this reason there are no
#ifdef in the actual code. If a different behavior is required, this
must be added extending the syntax of the imximage.cfg file, for example
adding a processor type (or a version number, or whatever is needed).

> +#if defined(CONFIG_MX51)
>  static void imximage_print_header(const void *ptr)
>  {
>  	struct imx_header *imx_hdr = (struct imx_header *) ptr;
>  	flash_header_t *hdr = &imx_hdr->fhdr;
>  	uint32_t size;
>  	uint32_t length;
> -	dcd_t *dcd = &imx_hdr->dcd_table;
>  
> +	dcd_t *dcd = &imx_hdr->dcd_table;

I do not see any changes on these lines. Please add only changes where
they are required.

Best regards,
Stefano Babic
Jason Liu - Dec. 28, 2010, 8:08 a.m.
Hi, Stefano,

2010/12/27 Stefano Babic <sbabic@denx.de>:
> On 12/22/2010 02:23 PM, Jason Liu wrote:
>> This patch add the MX53 boot image support
>>
>> This patch has been tested on Freescale MX53EVK board.
>>
>> Signed-off-by: Jason Liu <r64343@freescale.com>
>> ---
>>  board/freescale/mx53evk/config.mk    |   25 ++++++++
>>  board/freescale/mx53evk/imximage.cfg |  108 ++++++++++++++++++++++++++++++++++
>>  tools/imximage.c                     |  101 +++++++++++++++++++++++++++++--
>>  tools/imximage.h                     |   75 ++++++++++++++++++++---
>
> You mixed two patches with different meaning. You add support for
> mx53evk board (and patches for config.mk and imximage.cfg must belong to
> this patch) and you modify imximage to support the MX53 processor, not
> related to the mx53evk board. Please split this patch into two separate
> patches.

OK,  I will put config.mk and imximage.cfg to mx53evk board support patch.

>
>> diff --git a/tools/imximage.c b/tools/imximage.c
>> index 39f89c2..884feff 100644
>> --- a/tools/imximage.c
>> +++ b/tools/imximage.c
>> @@ -82,7 +82,7 @@ static int imximage_check_image_types(uint8_t type)
>>  static int imximage_verify_header(unsigned char *ptr, int image_size,
>>                       struct mkimage_params *params)
>>  {
>> -
>> +#ifdef CONFIG_MX51
>
> NAK. This is wrong: mkimage is a tool running on host and must be
> possible to include it in a distro. It must be able (as it now does) to
> produce the correct image at runtime. For this reason there are no
> #ifdef in the actual code. If a different behavior is required, this
> must be added extending the syntax of the imximage.cfg file, for example
> adding a processor type (or a version number, or whatever is needed).

Sorry, I don't notice that. If that, I have to add extending syntax to
support mx53 since
mx53 is different with mx51 for ROM boot structure.

I would like to add one process type into the imximage.cfg file, what
do you think of that?
Any suggestions? Thanks,

>
>> +#if defined(CONFIG_MX51)
>>  static void imximage_print_header(const void *ptr)
>>  {
>>       struct imx_header *imx_hdr = (struct imx_header *) ptr;
>>       flash_header_t *hdr = &imx_hdr->fhdr;
>>       uint32_t size;
>>       uint32_t length;
>> -     dcd_t *dcd = &imx_hdr->dcd_table;
>>
>> +     dcd_t *dcd = &imx_hdr->dcd_table;
>
> I do not see any changes on these lines. Please add only changes where
> they are required.

I don't know why this get into the patch. I will take care later.

>
> 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-0 Fax: +49-8142-66989-80  Email: office@denx.de
> =====================================================================
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
Stefano Babic - Dec. 28, 2010, 8:23 a.m.
On 12/28/2010 09:08 AM, Jason Liu wrote:
>>> +#ifdef CONFIG_MX51
>>
>> NAK. This is wrong: mkimage is a tool running on host and must be
>> possible to include it in a distro. It must be able (as it now does) to
>> produce the correct image at runtime. For this reason there are no
>> #ifdef in the actual code. If a different behavior is required, this
>> must be added extending the syntax of the imximage.cfg file, for example
>> adding a processor type (or a version number, or whatever is needed).
> 
> Sorry, I don't notice that. If that, I have to add extending syntax to
> support mx53 since
> mx53 is different with mx51 for ROM boot structure.
> 
> I would like to add one process type into the imximage.cfg file, what
> do you think of that?
> Any suggestions? Thanks,

You have sure in Freescale a better visibility how to group together
this feature. Is the newer header typical for the MX53 or are there
other processors using the same structure ? John has already pointed out
that the MX28 is very similar, and, after reading the manual, it seems
to me it has the same header as the MX53. Can we distinguish with a
header version ?

As I can see, the actual header is used at least by the MX35, not only
by the MX51. So I would prefer a way to group together processors with
the same header structure else to define a processor type.

Best regards,
Stefano Babic
Jason Liu - Dec. 28, 2010, 8:34 a.m.
Hi, Stefano,

2010/12/28 Stefano Babic <sbabic@denx.de>:
> On 12/28/2010 09:08 AM, Jason Liu wrote:
>>>> +#ifdef CONFIG_MX51
>>>
>>> NAK. This is wrong: mkimage is a tool running on host and must be
>>> possible to include it in a distro. It must be able (as it now does) to
>>> produce the correct image at runtime. For this reason there are no
>>> #ifdef in the actual code. If a different behavior is required, this
>>> must be added extending the syntax of the imximage.cfg file, for example
>>> adding a processor type (or a version number, or whatever is needed).
>>
>> Sorry, I don't notice that. If that, I have to add extending syntax to
>> support mx53 since
>> mx53 is different with mx51 for ROM boot structure.
>>
>> I would like to add one process type into the imximage.cfg file, what
>> do you think of that?
>> Any suggestions? Thanks,
>
> You have sure in Freescale a better visibility how to group together
> this feature. Is the newer header typical for the MX53 or are there
> other processors using the same structure ? John has already pointed out
> that the MX28 is very similar, and, after reading the manual, it seems
> to me it has the same header as the MX53. Can we distinguish with a
> header version ?

In fact, the group should be the followings,

mx25/35/51
mx53
mx23/28,

Here the mx23/28 are much different with mx53 and mx25/35/51.
mx23/28 is Sgmatel chips and buy-in by Freescale years before.


>
> As I can see, the actual header is used at least by the MX35, not only
> by the MX51. So I would prefer a way to group together processors with
> the same header structure else to define a processor type.

OK,  I get it. You want to use version number to group it. Can we do it:

mx25/mx35/mx51 --version 1 ?
mx53 --version 2?

>
> 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-0 Fax: +49-8142-66989-80  Email: office@denx.de
> =====================================================================
>
Stefano Babic - Dec. 28, 2010, 9:21 a.m.
On 12/28/2010 09:34 AM, Jason Liu wrote:

>> You have sure in Freescale a better visibility how to group together
>> this feature. Is the newer header typical for the MX53 or are there
>> other processors using the same structure ? John has already pointed out
>> that the MX28 is very similar, and, after reading the manual, it seems
>> to me it has the same header as the MX53. Can we distinguish with a
>> header version ?
> 
> In fact, the group should be the followings,
> 
> mx25/35/51
> mx53
> mx23/28,
> 
> Here the mx23/28 are much different with mx53 and mx25/35/51.
> mx23/28 is Sgmatel chips and buy-in by Freescale years before.

Ok, understood.

>> As I can see, the actual header is used at least by the MX35, not only
>> by the MX51. So I would prefer a way to group together processors with
>> the same header structure else to define a processor type.
> 
> OK,  I get it. You want to use version number to group it. Can we do it:
> 
> mx25/mx35/mx51 --version 1 ?
> mx53 --version 2?

Ok, fine. Version 1 should be the default value to be compatible with
actual boards. Please document the changes in doc/README.imximage, too.

Best regards,
Stefano Babic

Patch

diff --git a/board/freescale/mx53evk/config.mk b/board/freescale/mx53evk/config.mk
new file mode 100755
index 0000000..0153165
--- /dev/null
+++ b/board/freescale/mx53evk/config.mk
@@ -0,0 +1,25 @@ 
+#
+# Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+IMX_CONFIG = $(SRCTREE)/board/$(BOARDDIR)/imximage.cfg
+ALL += $(obj)u-boot.imx
+
diff --git a/board/freescale/mx53evk/imximage.cfg b/board/freescale/mx53evk/imximage.cfg
new file mode 100644
index 0000000..c86e061
--- /dev/null
+++ b/board/freescale/mx53evk/imximage.cfg
@@ -0,0 +1,108 @@ 
+#
+# (C Copyright 2009
+# Stefano Babic DENX Software Engineering sbabic@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not write to the Free Software
+# Foundation Inc. 51 Franklin Street Fifth Floor Boston,
+# MA 02110-1301 USA
+#
+# Refer docs/README.imxmage for more details about how-to configure
+# and create imximage boot image
+#
+# The syntax is taken as close as possible with the kwbimage
+
+# Boot Device : one of
+# spi, sd (the board has no nand neither onenand)
+
+BOOT_FROM	sd
+
+# Device Configuration Data (DCD)
+#
+# Each entry must have the format:
+# Addr-type           Address        Value
+#
+# where:
+#	Addr-type register length (1,2 or 4 bytes)
+#	Address	  absolute address of the register
+#	value	  value to be stored in the register
+
+# Setting IOMUXC
+DATA 4 0x53fa8554 0x00200000
+DATA 4 0x53fa8560 0x00200000
+DATA 4 0x53fa8594 0x00200000
+DATA 4 0x53fa8584 0x00200000
+DATA 4 0x53fa8558 0x00200040
+DATA 4 0x53fa8568 0x00200040
+DATA 4 0x53fa8590 0x00200040
+DATA 4 0x53fa857c 0x00200040
+DATA 4 0x53fa8564 0x00200040
+DATA 4 0x53fa8580 0x00200040
+DATA 4 0x53fa8570 0x00200000
+DATA 4 0x53fa8578 0x00200000
+DATA 4 0x53fa872c 0x00200000
+DATA 4 0x53fa8728 0x00200000
+DATA 4 0x53fa871c 0x00200000
+DATA 4 0x53fa8718 0x00200000
+DATA 4 0x53fa8574 0x00280000
+DATA 4 0x53fa8588 0x00280000
+DATA 4 0x53fa86f0 0x00280000
+DATA 4 0x53fa8720 0x00280000
+DATA 4 0x53fa86fc 0x00000000
+DATA 4 0x53fa86f4 0x00000200
+DATA 4 0x53fa8714 0x00000000
+DATA 4 0x53fa8724 0x06000000
+DATA 4 0x63fd9088 0x34333936
+DATA 4 0x63fd9090 0x49434942
+DATA 4 0x63fd90F8 0x00000800
+DATA 4 0x63fd907c 0x01350138
+DATA 4 0x63fd9080 0x01380139
+DATA 4 0x63fd9018 0x00001710
+DATA 4 0x63fd9000 0xc4110000
+DATA 4 0x63fd900C 0x4d5122d2
+DATA 4 0x63fd9010 0x92d18a22
+DATA 4 0x63fd9014 0x00c70092
+DATA 4 0x63fd902c 0x000026d2
+DATA 4 0x63fd9030 0x009f000e
+DATA 4 0x63fd9008 0x12272000
+DATA 4 0x63fd9004 0x00030012
+DATA 4 0x63fd901c 0x04008010
+DATA 4 0x63fd901c 0x00008032
+DATA 4 0x63fd901c 0x00008033
+DATA 4 0x63fd901c 0x00008031
+DATA 4 0x63fd901c 0x0b5280b0
+DATA 4 0x63fd901c 0x04008010
+DATA 4 0x63fd901c 0x00008020
+DATA 4 0x63fd901c 0x00008020
+DATA 4 0x63fd901c 0x0a528030
+DATA 4 0x63fd901c 0x03c68031
+DATA 4 0x63fd901c 0x00448031
+DATA 4 0x63fd901c 0x04008018
+DATA 4 0x63fd901c 0x0000803a
+DATA 4 0x63fd901c 0x0000803b
+DATA 4 0x63fd901c 0x00008039
+DATA 4 0x63fd901c 0x0b528138
+DATA 4 0x63fd901c 0x04008018
+DATA 4 0x63fd901c 0x00008028
+DATA 4 0x63fd901c 0x00008028
+DATA 4 0x63fd901c 0x0a528038
+DATA 4 0x63fd901c 0x03c68039
+DATA 4 0x63fd901c 0x00448039
+DATA 4 0x63fd9020 0x00005800
+DATA 4 0x63fd9058 0x00033335
+DATA 4 0x63fd901c 0x00000000
+DATA 4 0x63fd9040 0x04b80003
+DATA 4 0x53fa8004 0x00194005
diff --git a/tools/imximage.c b/tools/imximage.c
index 39f89c2..884feff 100644
--- a/tools/imximage.c
+++ b/tools/imximage.c
@@ -82,7 +82,7 @@  static int imximage_check_image_types(uint8_t type)
 static int imximage_verify_header(unsigned char *ptr, int image_size,
 			struct mkimage_params *params)
 {
-
+#ifdef CONFIG_MX51
 	struct imx_header *imx_hdr = (struct imx_header *) ptr;
 	flash_header_t *hdr = &imx_hdr->fhdr;
 
@@ -92,18 +92,19 @@  static int imximage_verify_header(unsigned char *ptr, int image_size,
 
 	if (imx_hdr->dcd_table.preamble.barker != DCD_BARKER)
 		return -FDT_ERR_BADSTRUCTURE;
-
+#endif
 	return 0;
 }
 
+#if defined(CONFIG_MX51)
 static void imximage_print_header(const void *ptr)
 {
 	struct imx_header *imx_hdr = (struct imx_header *) ptr;
 	flash_header_t *hdr = &imx_hdr->fhdr;
 	uint32_t size;
 	uint32_t length;
-	dcd_t *dcd = &imx_hdr->dcd_table;
 
+	dcd_t *dcd = &imx_hdr->dcd_table;
 	size = imx_hdr->dcd_table.preamble.length;
 	if (size > (MAX_HW_CFG_SIZE * sizeof(dcd_type_addr_data_t))) {
 		fprintf(stderr,
@@ -121,6 +122,32 @@  static void imximage_print_header(const void *ptr)
 	printf("Load Address: %08x\n", (unsigned int)hdr->app_dest_ptr);
 	printf("Entry Point:  %08x\n", (unsigned int)hdr->app_code_jump_vector);
 }
+#endif
+
+#if defined(CONFIG_MX53)
+static void imximage_print_header(const void *ptr)
+{
+	uint32_t size;
+	struct imx_header *imx_hdr = (struct imx_header *) ptr;
+	flash_header_t *hdr = &imx_hdr->fhdr;
+	dcd_t *dcd = &imx_hdr->dcd_table;
+
+	size = be16_to_cpu(dcd->header.length) - 8;
+	if (size > (MAX_HW_CFG_SIZE * 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);
+		exit(EXIT_FAILURE);
+	}
+
+	printf("Image Type:   Freescale IMX Boot Image\n");
+	printf("Data Size:    ");
+	genimg_print_size(imx_hdr->boot_data.size);
+	printf("Load Address: %08x\n", (unsigned int)hdr->boot_data_ptr);
+	printf("Entry Point:  %08x\n", (unsigned int)hdr->entry);
+}
+#endif
 
 static uint32_t imximage_parse_cfg_file(struct imx_header *imxhdr, char *name)
 {
@@ -206,7 +233,9 @@  static uint32_t imximage_parse_cfg_file(struct imx_header *imxhdr, char *name)
 							name, lineno, value);
 						exit(EXIT_FAILURE);
 					}
+				#ifdef CONFIG_MX51
 					dcd->addr_data[dcd_len].type = value;
+				#endif
 					break;
 				}
 
@@ -215,12 +244,21 @@  static uint32_t imximage_parse_cfg_file(struct imx_header *imxhdr, char *name)
 					dcd->addr_data[dcd_len].addr =
 						get_cfg_value(token,
 							name, lineno);
+			#ifdef CONFIG_MX53
+				dcd->addr_data[dcd_len].addr =
+				cpu_to_be32(dcd->addr_data[dcd_len].addr);
+			#endif
 				break;
 			case CFG_REG_VALUE:
 				if (cmd == CMD_DATA) {
 					dcd->addr_data[dcd_len].value =
 						get_cfg_value(token,
 							name, lineno);
+				#ifdef CONFIG_MX53
+					dcd->addr_data[dcd_len].value =
+					cpu_to_be32(
+						dcd->addr_data[dcd_len].value);
+				#endif
 					dcd_len++;
 				}
 				break;
@@ -234,13 +272,24 @@  static uint32_t imximage_parse_cfg_file(struct imx_header *imxhdr, char *name)
 				name, lineno, MAX_HW_CFG_SIZE);
 		}
 	}
+#if defined(CONFIG_MX51)
 	dcd->preamble.barker = DCD_BARKER;
 	dcd->preamble.length = dcd_len * sizeof(dcd_type_addr_data_t);
+#elif defined(CONFIG_MX53)
+	dcd->header.tag = DCD_HEADER_TAG; /* 0xD2 */
+	dcd->header.length = cpu_to_be16(
+			dcd_len * sizeof(dcd_addr_data_t) + 8);
+	dcd->header.version = DCD_VERSION; /* 0x40 */
+	dcd->write_dcd_command.tag = DCD_COMMAND_TAG; /* 0xCC */
+	dcd->write_dcd_command.length = cpu_to_be16(
+			dcd_len * sizeof(dcd_addr_data_t) + 4);
+	dcd->write_dcd_command.param = DCD_COMMAND_PARAM; /* 0x4 */
+
+#endif
 	fclose(fd);
-
 	return dcd_len;
 }
-
+#ifdef CONFIG_MX51
 static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd,
 				struct mkimage_params *params)
 {
@@ -282,6 +331,46 @@  static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	fhdr->super_root_key = 0;
 
 }
+#endif
+
+#ifdef CONFIG_MX53
+static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd,
+				struct mkimage_params *params)
+{
+	struct imx_header *hdr = (struct imx_header *)ptr;
+	flash_header_t *fhdr = &hdr->fhdr;
+	int dcd_len;
+
+	/* Set default offset */
+	hdr->flash_offset = FLASH_OFFSET_STANDARD;
+
+	/* Set magic number */
+	fhdr->header.tag = IVT_HEADER_TAG; /* 0xD1 */
+	fhdr->header.length = cpu_to_be16(sizeof(flash_header_t));
+	fhdr->header.version = IVT_VERSION; /* 0x40 */
+
+	/* Parse dcd configuration file */
+	dcd_len = imximage_parse_cfg_file(hdr, params->imagename);
+
+	fhdr->entry = params->ep;
+	fhdr->reserved1 = fhdr->reserved2 = 0;
+	fhdr->self = params->ep - sizeof(struct imx_header);
+
+	fhdr->dcd_ptr = fhdr->self +
+			offsetof(struct imx_header, dcd_table);
+
+	fhdr->boot_data_ptr = fhdr->self +
+			offsetof(struct imx_header, boot_data);
+
+	hdr->boot_data.start = fhdr->self - hdr->flash_offset;
+	hdr->boot_data.size = sbuf->st_size +
+			hdr->flash_offset +
+			sizeof(struct imx_header);
+
+	/* Security feature are not supported */
+	fhdr->csf = 0;
+}
+#endif
 
 int imximage_check_params(struct mkimage_params *params)
 {
@@ -309,7 +398,7 @@  int imximage_check_params(struct mkimage_params *params)
  * imximage parameters
  */
 static struct image_type_params imximage_params = {
-	.name		= "Freescale i.MX 51 Boot Image support",
+	.name		= "Freescale i.MX 5x Boot Image support",
 	.header_size	= sizeof(struct imx_header),
 	.hdr		= (void *)&imximage_header,
 	.check_image_type = imximage_check_image_types,
diff --git a/tools/imximage.h b/tools/imximage.h
index b4d926d..3a0e588 100644
--- a/tools/imximage.h
+++ b/tools/imximage.h
@@ -24,12 +24,17 @@ 
 #ifndef _IMXIMAGE_H_
 #define _IMXIMAGE_H_
 
+#include <config.h>
+
+#if defined(CONFIG_MX53)
+#define MAX_HW_CFG_SIZE 121     /* Max number of registers imx can set */
+#elif defined(CONFIG_MX51)
 #define MAX_HW_CFG_SIZE 60	/* Max number of registers imx can set */
-#define MAX_EXP_SIZE	4
 #define APP_CODE_BARKER	0xB1
 #define DCD_BARKER	0xB17219E9
-#define HEADER_OFFSET	0x400
+#endif
 
+#define HEADER_OFFSET	0x400
 
 #define CMD_DATA_STR	"DATA"
 #define FLASH_OFFSET_STANDARD	0x400
@@ -38,6 +43,15 @@ 
 #define FLASH_OFFSET_SPI	FLASH_OFFSET_STANDARD
 #define FLASH_OFFSET_ONENAND	0x100
 
+#if defined(CONFIG_MX53)
+#define IVT_HEADER_TAG 0xD1
+#define IVT_VERSION 0x40
+#define DCD_HEADER_TAG 0xD2
+#define DCD_COMMAND_TAG 0xCC
+#define DCD_VERSION 0x40
+#define DCD_COMMAND_PARAM 0x4
+#endif
+
 enum imximage_cmd {
 	CMD_INVALID,
 	CMD_BOOT_FROM,
@@ -52,14 +66,7 @@  enum imximage_fld_types {
 	CFG_REG_VALUE
 };
 
-typedef struct {
-	uint8_t rsa_exponent[MAX_EXP_SIZE];	 /* RSA public exponent */
-	uint8_t *rsa_modulus;			 /* RSA modulus pointer */
-	uint16_t exponent_size;			 /* Exponent size (bytes) */
-	uint16_t modulus_size;			 /* Modulus size (bytes) */
-	uint8_t init_flag;			 /* key initialized */
-} hab_rsa_public_key;
-
+#ifdef CONFIG_MX51
 typedef struct {
 	uint32_t type; /* Type of pointer (byte, halfword, word, wait/read) */
 	uint32_t addr; /* Address to write to */
@@ -101,5 +108,53 @@  struct reg_config {
 	uint32_t raddr;
 	uint32_t rdata;
 };
+#else
+typedef struct {
+	uint32_t addr;
+	uint32_t value;
+} dcd_addr_data_t;
+
+typedef struct {
+	uint8_t tag;
+	uint16_t length;
+	uint8_t version;
+} __attribute__((packed)) ivt_header_t;
+
+typedef struct {
+	uint8_t tag;
+	uint16_t length;
+	uint8_t param;
+} __attribute__((packed)) write_dcd_command_t;
+
+typedef struct {
+	ivt_header_t header;
+	write_dcd_command_t write_dcd_command;
+	dcd_addr_data_t addr_data[MAX_HW_CFG_SIZE];
+} dcd_t;
+
+typedef struct {
+	uint32_t start;
+	uint32_t size;
+	uint32_t plugin;
+} boot_data_t;
+
+typedef struct {
+	ivt_header_t header;
+	uint32_t entry;
+	uint32_t reserved1;
+	uint32_t dcd_ptr;
+	uint32_t boot_data_ptr;
+	uint32_t self;
+	uint32_t csf;
+	uint32_t reserved2;
+} flash_header_t;
+
+struct imx_header {
+	flash_header_t fhdr;
+	boot_data_t boot_data;
+	dcd_t dcd_table;
+	uint32_t flash_offset;
+};
+#endif
 
 #endif /* _IMXIMAGE_H_ */