public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images
@ 2014-11-04  8:27 Ye.Li
  2014-11-04  8:27 ` [U-Boot] [PATCH 2/4] imx: mx6q/dlarm2: Add support for building plugin image Ye.Li
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Ye.Li @ 2014-11-04  8:27 UTC (permalink / raw)
  To: u-boot

Plugin image is a firmware which can be executed by boot ROM to do
device initialization, custom settings, delay assertion, etc.

The boot ROM detects the image type using the plugin flag of the boot
data structure. If the plugin flag is 1, then the ROM uses the image
as a plugin function. The function must initialize the boot device and
copy the program image to the final location. At the end the plugin
function must return with the program image parameters.

This patch supports generating plugin images and implement a framework
for plugin code entry and exit. For any board to generate the plugin
image, the macros below must be implemented:
  imx6_ddr_setting
  imx6_clock_gating
  imx6_qos_setting

Signed-off-by: Ye.Li <B37916@freescale.com>
---
 arch/arm/include/asm/arch-mx6/mx6_plugin.S |  145 +++++++++++++++
 tools/imximage.c                           |  263 ++++++++++++++++++++++------
 tools/imximage.h                           |   10 +-
 3 files changed, 366 insertions(+), 52 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-mx6/mx6_plugin.S

diff --git a/arch/arm/include/asm/arch-mx6/mx6_plugin.S b/arch/arm/include/asm/arch-mx6/mx6_plugin.S
new file mode 100644
index 0000000..1f5ae83
--- /dev/null
+++ b/arch/arm/include/asm/arch-mx6/mx6_plugin.S
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2012-2014 Freescale Semiconductor, Inc.
+ *
+ * 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.
+ */
+
+#include <config.h>
+
+#ifdef CONFIG_ROM_UNIFIED_SECTIONS
+#define ROM_API_TABLE_BASE_ADDR_LEGACY		0x180
+#define ROM_VERSION_OFFSET               	0x80
+#else
+#define ROM_API_TABLE_BASE_ADDR_LEGACY		0xC0
+#define ROM_VERSION_OFFSET               	0x48
+#endif
+#define ROM_API_TABLE_BASE_ADDR_MX6DQ_TO15	0xC4
+#define ROM_API_TABLE_BASE_ADDR_MX6DL_TO12	0xC4
+#define ROM_API_HWCNFG_SETUP_OFFSET		0x08
+#define ROM_VERSION_TO10			0x10
+#define ROM_VERSION_TO12			0x12
+#define ROM_VERSION_TO15			0x15
+
+plugin_start:
+
+	push    {r0-r4, lr}
+
+	imx6_ddr_setting
+	imx6_clock_gating
+	imx6_qos_setting
+
+/*
+ * The following is to fill in those arguments for this ROM function
+ * pu_irom_hwcnfg_setup(void **start, size_t *bytes, const void *boot_data)
+ * This function is used to copy data from the storage media into DDR.
+ * start - Initial (possibly partial) image load address on entry.
+ *         Final image load address on exit.
+ * bytes - Initial (possibly partial) image size on entry.
+ *         Final image size on exit.
+ * boot_data - Initial @ref ivt Boot Data load address.
+ */
+	adr r0, boot_data2
+	adr r1, image_len2
+	adr r2, boot_data2
+
+#ifdef CONFIG_SYS_BOOT_EIMNOR
+#ifdef CONFIG_MX6SX
+	ldr r3, =ROM_VERSION_OFFSET
+	ldr r4, [r3]
+	cmp r4, #ROM_VERSION_TO10
+	bgt before_calling_rom___pu_irom_hwcnfg_setup
+	ldr r3, =0x00900b00
+	ldr r4, =0x50000000
+	str r4, [r3, #0x5c]
+#else
+	ldr r3, =0x00900800
+	ldr r4, =0x08000000
+	str r4, [r3, #0xc0]
+#endif
+#endif
+
+/*
+ * check the _pu_irom_api_table for the address
+ */
+before_calling_rom___pu_irom_hwcnfg_setup:
+	ldr r3, =ROM_VERSION_OFFSET
+	ldr r4, [r3]
+#if defined(CONFIG_MX6SOLO) || defined(CONFIG_MX6DL)
+	ldr r3, =ROM_VERSION_TO12
+	cmp r4, r3
+	ldrge r3, =ROM_API_TABLE_BASE_ADDR_MX6DL_TO12
+	ldrlt r3, =ROM_API_TABLE_BASE_ADDR_LEGACY
+#elif defined(CONFIG_MX6Q)
+	ldr r3, =ROM_VERSION_TO15
+	cmp r4, r3
+	ldrge r3, =ROM_API_TABLE_BASE_ADDR_MX6DQ_TO15
+	ldrlt r3, =ROM_API_TABLE_BASE_ADDR_LEGACY
+#else
+	ldr r3, =ROM_API_TABLE_BASE_ADDR_LEGACY
+#endif
+	ldr r4, [r3, #ROM_API_HWCNFG_SETUP_OFFSET]
+	blx r4
+after_calling_rom___pu_irom_hwcnfg_setup:
+
+
+/* To return to ROM from plugin, we need to fill in these argument.
+ * Here is what need to do:
+ * Need to construct the paramters for this function before return to ROM:
+ * plugin_download(void **start, size_t *bytes, UINT32 *ivt_offset)
+ */
+	pop {r0-r4, lr}
+	push {r5}
+	ldr r5, boot_data2
+	str r5, [r0]
+	ldr r5, image_len2
+	str r5, [r1]
+	ldr r5, second_ivt_offset
+	str r5, [r2]
+	mov r0, #1
+	pop {r5}
+
+	/* return back to ROM code */
+	bx lr
+
+/* make the following data right in the end of the output*/
+.ltorg
+
+#if (defined(CONFIG_SYS_BOOT_EIMNOR) || defined(CONFIG_SYS_BOOT_QSPI))
+#define FLASH_OFFSET 0x1000
+#else
+#define FLASH_OFFSET 0x400
+#endif
+
+/*
+ * second_ivt_offset is the offset from the "second_ivt_header" to
+ * "image_copy_start", which involves FLASH_OFFSET, plus the first
+ * ivt_header, the plugin code size itself recorded by "ivt2_header"
+ */
+
+second_ivt_offset:      .long (ivt2_header + 0x2C + FLASH_OFFSET)
+
+/*
+ * The following is the second IVT header plus the second boot data
+ */
+ivt2_header:            .long 0x0
+app2_code_jump_v:       .long 0x0
+reserv3:                .long 0x0
+dcd2_ptr:               .long 0x0
+boot_data2_ptr:         .long 0x0
+self_ptr2:              .long 0x0
+app_code_csf2:          .long 0x0
+reserv4:                .long 0x0
+boot_data2:             .long 0x0
+image_len2:             .long 0x0
+plugin2:                .long 0x0
diff --git a/tools/imximage.c b/tools/imximage.c
index 526b7d4..70a988e 100644
--- a/tools/imximage.c
+++ b/tools/imximage.c
@@ -24,6 +24,9 @@ static table_entry_t imximage_cmds[] = {
 	{CMD_DATA,              "DATA",                 "Reg Write Data", },
 	{CMD_CSF,               "CSF",           "Command Sequence File", },
 	{CMD_IMAGE_VERSION,     "IMAGE_VERSION",        "image version",  },
+#ifdef CONFIG_USE_PLUGIN
+	{CMD_PLUGIN,			"PLUGIN",				"file plugin_addr",  },
+#endif
 	{-1,                    "",                     "",	          },
 };
 
@@ -75,6 +78,8 @@ static uint32_t imximage_ivt_offset = UNDEFINED;
 static uint32_t imximage_csf_size = UNDEFINED;
 /* Initial Load Region Size */
 static uint32_t imximage_init_loadsize;
+static uint32_t imximage_iram_free_start;
+static uint32_t imximage_plugin_size;
 
 static set_dcd_val_t set_dcd_val;
 static set_dcd_rst_t set_dcd_rst;
@@ -112,7 +117,11 @@ static uint32_t detect_imximage_version(struct imx_header *imx_hdr)
 
 	/* Try to detect V2 */
 	if ((fhdr_v2->header.tag == IVT_HEADER_TAG) &&
-		(hdr_v2->dcd_table.header.tag == DCD_HEADER_TAG))
+		(hdr_v2->data.dcd_table.header.tag == DCD_HEADER_TAG))
+		return IMXIMAGE_V2;
+
+	if ((fhdr_v2->header.tag == IVT_HEADER_TAG) &&
+		hdr_v2->boot_data.plugin)
 		return IMXIMAGE_V2;
 
 	return IMXIMAGE_VER_INVALID;
@@ -157,7 +166,7 @@ static void set_dcd_val_v1(struct imx_header *imxhdr, char *name, int lineno,
 static void set_dcd_val_v2(struct imx_header *imxhdr, char *name, int lineno,
 					int fld, uint32_t value, uint32_t off)
 {
-	dcd_v2_t *dcd_v2 = &imxhdr->header.hdr_v2.dcd_table;
+	dcd_v2_t *dcd_v2 = &imxhdr->header.hdr_v2.data.dcd_table;
 
 	switch (fld) {
 	case CFG_REG_ADDRESS:
@@ -192,16 +201,18 @@ static void set_dcd_rst_v1(struct imx_header *imxhdr, uint32_t dcd_len,
 static void set_dcd_rst_v2(struct imx_header *imxhdr, uint32_t dcd_len,
 						char *name, int lineno)
 {
-	dcd_v2_t *dcd_v2 = &imxhdr->header.hdr_v2.dcd_table;
-
-	dcd_v2->header.tag = DCD_HEADER_TAG;
-	dcd_v2->header.length = cpu_to_be16(
-			dcd_len * sizeof(dcd_addr_data_t) + 8);
-	dcd_v2->header.version = DCD_VERSION;
-	dcd_v2->write_dcd_command.tag = DCD_COMMAND_TAG;
-	dcd_v2->write_dcd_command.length = cpu_to_be16(
-			dcd_len * sizeof(dcd_addr_data_t) + 4);
-	dcd_v2->write_dcd_command.param = DCD_COMMAND_PARAM;
+	if (!imxhdr->header.hdr_v2.boot_data.plugin) {
+		dcd_v2_t *dcd_v2 = &imxhdr->header.hdr_v2.data.dcd_table;
+
+		dcd_v2->header.tag = DCD_HEADER_TAG;
+		dcd_v2->header.length = cpu_to_be16(
+				dcd_len * sizeof(dcd_addr_data_t) + 8);
+		dcd_v2->header.version = DCD_VERSION;
+		dcd_v2->write_dcd_command.tag = DCD_COMMAND_TAG;
+		dcd_v2->write_dcd_command.length = cpu_to_be16(
+				dcd_len * sizeof(dcd_addr_data_t) + 4);
+		dcd_v2->write_dcd_command.param = DCD_COMMAND_PARAM;
+	}
 }
 
 static void set_imx_hdr_v1(struct imx_header *imxhdr, uint32_t dcd_len,
@@ -243,20 +254,87 @@ static void set_imx_hdr_v2(struct imx_header *imxhdr, uint32_t dcd_len,
 	fhdr_v2->header.length = cpu_to_be16(sizeof(flash_header_v2_t));
 	fhdr_v2->header.version = IVT_VERSION; /* 0x40 */
 
-	fhdr_v2->entry = entry_point;
-	fhdr_v2->reserved1 = fhdr_v2->reserved2 = 0;
-	hdr_base = entry_point - imximage_init_loadsize +
-		flash_offset;
-	fhdr_v2->self = hdr_base;
-	fhdr_v2->dcd_ptr = hdr_base + offsetof(imx_header_v2_t, dcd_table);
-	fhdr_v2->boot_data_ptr = hdr_base
-			+ offsetof(imx_header_v2_t, boot_data);
-	hdr_v2->boot_data.start = entry_point - imximage_init_loadsize;
+	if (!hdr_v2->boot_data.plugin) {
+		fhdr_v2->entry = entry_point;
+		fhdr_v2->reserved1 = fhdr_v2->reserved2 = 0;
+		hdr_base = entry_point - imximage_init_loadsize +
+			flash_offset;
+		fhdr_v2->self = hdr_base;
+		fhdr_v2->dcd_ptr = hdr_base + offsetof(imx_header_v2_t, data);
+		fhdr_v2->boot_data_ptr = hdr_base
+				+ offsetof(imx_header_v2_t, boot_data);
+		hdr_v2->boot_data.start = entry_point - imximage_init_loadsize;
+
+		fhdr_v2->csf = 0;
+
+		header_size_ptr = &hdr_v2->boot_data.size;
+		csf_ptr = &fhdr_v2->csf;
+	} else {
+		imx_header_v2_t *next_hdr_v2;
+		flash_header_v2_t *next_fhdr_v2;
+
+		if(imximage_csf_size != 0) {
+			fprintf(stderr, "Error: Header v2: SECURE_BOOT"
+					"is only supported in DCD mode!");
+			exit(EXIT_FAILURE);
+		}
+
+		fhdr_v2->entry = imximage_iram_free_start +
+			flash_offset + sizeof(flash_header_v2_t) +
+			sizeof(boot_data_t);
+
+		fhdr_v2->reserved1 = fhdr_v2->reserved2 = 0;
+		fhdr_v2->self = imximage_iram_free_start + flash_offset;
+
+		fhdr_v2->dcd_ptr = 0;
+
+		fhdr_v2->boot_data_ptr = fhdr_v2->self +
+				offsetof(imx_header_v2_t, boot_data);
 
-	fhdr_v2->csf = 0;
+		hdr_v2->boot_data.start = imximage_iram_free_start;
+		/*
+		 * The actural size of plugin image is "imximage_plugin_size +
+		 * sizeof(flash_header_v2_t) + sizeof(boot_data_t)", plus the
+		 * flash_offset space.The ROM code only need to copy this size
+		 * to run the plugin code. However, later when copy the whole
+		 * U-Boot image to DDR, the ROM code use memcpy to copy the
+		 * first part of the image, and use the storage read function
+		 * to get the remaining part. This requires the dividing point
+		 * must be multiple of storage sector size. Here we set the
+		 * first section to be 16KB for this purpose.
+		 */
+		hdr_v2->boot_data.size = MAX_PLUGIN_CODE_SIZE;
+
+		/* Security feature are not supported */
+		fhdr_v2->csf = 0;
+
+		next_hdr_v2 = (imx_header_v2_t *)((char*)hdr_v2 +
+				imximage_plugin_size);
+
+		next_fhdr_v2 = &next_hdr_v2->fhdr;
+
+		next_fhdr_v2->header.tag = IVT_HEADER_TAG; /* 0xD1 */
+		next_fhdr_v2->header.length =
+			cpu_to_be16(sizeof(flash_header_v2_t));
+		next_fhdr_v2->header.version = IVT_VERSION; /* 0x40 */
 
-	header_size_ptr = &hdr_v2->boot_data.size;
-	csf_ptr = &fhdr_v2->csf;
+		next_fhdr_v2->entry = entry_point;
+		hdr_base = entry_point - sizeof(struct imx_header);
+		next_fhdr_v2->reserved1 = next_fhdr_v2->reserved2 = 0;
+		next_fhdr_v2->self = hdr_base + imximage_plugin_size;
+
+		next_fhdr_v2->dcd_ptr = 0;
+		next_fhdr_v2->boot_data_ptr = next_fhdr_v2->self +
+				offsetof(imx_header_v2_t, boot_data);
+
+		next_hdr_v2->boot_data.start = hdr_base - flash_offset;
+
+		header_size_ptr = &next_hdr_v2->boot_data.size;
+
+		next_hdr_v2->boot_data.plugin = 0;
+
+		next_fhdr_v2->csf = 0;
+	}
 }
 
 static void set_hdr_func(void)
@@ -312,16 +390,19 @@ static void print_hdr_v2(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;
-	dcd_v2_t *dcd_v2 = &hdr_v2->dcd_table;
-	uint32_t size, version;
+	dcd_v2_t *dcd_v2 = &hdr_v2->data.dcd_table;
+	uint32_t size, version, plugin;
 
-	size = be16_to_cpu(dcd_v2->header.length) - 8;
-	if (size > (MAX_HW_CFG_SIZE_V2 * sizeof(dcd_addr_data_t))) {
+	plugin = hdr_v2->boot_data.plugin;
+	if (!plugin) {
+		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);
@@ -329,18 +410,82 @@ static void print_hdr_v2(struct imx_header *imx_hdr)
 	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);
-	if (fhdr_v2->csf && (imximage_ivt_offset != UNDEFINED) &&
-	    (imximage_csf_size != UNDEFINED)) {
-		printf("HAB Blocks:   %08x %08x %08x\n",
-		       (uint32_t)fhdr_v2->self, 0,
-		       hdr_v2->boot_data.size - imximage_ivt_offset -
-		       imximage_csf_size);
+	printf("Mode:         %s\n", plugin ? "PLUGIN" : "DCD");
+	if (!plugin) {
+		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);
+		if (fhdr_v2->csf && (imximage_ivt_offset != UNDEFINED) &&
+		    (imximage_csf_size != UNDEFINED)) {
+			printf("HAB Blocks:   %08x %08x %08x\n",
+			       (uint32_t)fhdr_v2->self, 0,
+			       hdr_v2->boot_data.size - imximage_ivt_offset -
+			       imximage_csf_size);
+		}
+	} else {
+		imx_header_v2_t *next_hdr_v2;
+		flash_header_v2_t *next_fhdr_v2;
+
+		/*First Header*/
+		printf("Plugin Data Size:     ");
+		genimg_print_size(hdr_v2->boot_data.size);
+		printf("Plugin Code Size:     ");
+		genimg_print_size(imximage_plugin_size);
+		printf("Plugin Load Address:  %08x\n", hdr_v2->boot_data.start);
+		printf("Plugin Entry Point:   %08x\n",
+				(uint32_t)fhdr_v2->entry);
+
+		/*Second Header*/
+		next_hdr_v2 = (imx_header_v2_t *)((char*)hdr_v2 +
+				imximage_plugin_size);
+		next_fhdr_v2 = &next_hdr_v2->fhdr;
+		printf("U-Boot Data Size:     ");
+		genimg_print_size(next_hdr_v2->boot_data.size);
+		printf("U-Boot Load Address:  %08x\n", next_hdr_v2->boot_data.start);
+		printf("U-Boot Entry Point:   %08x\n",
+				(uint32_t)next_fhdr_v2->entry);
+	}
+}
+
+#ifdef CONFIG_USE_PLUGIN
+static void copy_plugin_code(struct imx_header *imxhdr, char *plugin_file)
+{
+	int ifd = -1;
+	struct stat sbuf;
+	char *plugin_buf = imxhdr->header.hdr_v2.data.plugin_code;
+	char *ptr;
+
+	ifd = open(plugin_file, O_RDONLY|O_BINARY);
+	if (fstat(ifd, &sbuf) < 0) {
+		fprintf(stderr, "Can't stat %s: %s\n",
+			plugin_file,
+			strerror(errno));
+		exit(EXIT_FAILURE);
+	}
+
+	ptr = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, ifd, 0);
+	if (ptr == MAP_FAILED) {
+		fprintf(stderr, "Can't read %s: %s\n",
+			plugin_file,
+			strerror(errno));
+		exit(EXIT_FAILURE);
+	}
+
+	if (sbuf.st_size > MAX_PLUGIN_CODE_SIZE) {
+		printf("plugin binary size too large\n");
+		exit(EXIT_FAILURE);
 	}
+
+	memcpy(plugin_buf, ptr, sbuf.st_size);
+	imximage_plugin_size = sbuf.st_size;
+
+	(void) munmap((void *)ptr, sbuf.st_size);
+	(void) close(ifd);
+
+	imxhdr->header.hdr_v2.boot_data.plugin = 1;
 }
+#endif
 
 static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token,
 				char *name, int lineno, int fld, int dcd_len)
@@ -411,6 +556,11 @@ static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token,
 		if (unlikely(cmd_ver_first != 1))
 			cmd_ver_first = 0;
 		break;
+#ifdef CONFIG_USE_PLUGIN
+	case CMD_PLUGIN:
+		copy_plugin_code(imxhdr, token);
+		break;
+#endif
 	}
 }
 
@@ -434,20 +584,31 @@ static void parse_cfg_fld(struct imx_header *imxhdr, int32_t *cmd,
 		break;
 	case CFG_REG_ADDRESS:
 	case CFG_REG_VALUE:
-		if (*cmd != CMD_DATA)
-			return;
-
-		value = get_cfg_value(token, name, lineno);
-		(*set_dcd_val)(imxhdr, name, lineno, fld, value, *dcd_len);
-
-		if (fld == CFG_REG_VALUE) {
-			(*dcd_len)++;
-			if (*dcd_len > max_dcd_entries) {
-				fprintf(stderr, "Error: %s[%d] -"
-					"DCD table exceeds maximum size(%d)\n",
-					name, lineno, max_dcd_entries);
-				exit(EXIT_FAILURE);
+		switch (*cmd) {
+		case CMD_DATA:
+			value = get_cfg_value(token, name, lineno);
+			(*set_dcd_val)(imxhdr, name, lineno, fld, value,
+					*dcd_len);
+
+			if (fld == CFG_REG_VALUE) {
+				(*dcd_len)++;
+				if (*dcd_len > max_dcd_entries) {
+					fprintf(stderr, "Error: %s[%d] -"
+						"DCD table exceeds maximum\
+						size(%d)\n",
+						name, lineno, max_dcd_entries);
+					exit(EXIT_FAILURE);
+				}
 			}
+			break;
+#ifdef CONFIG_USE_PLUGIN
+		case CMD_PLUGIN:
+			value = get_cfg_value(token, name, lineno);
+			imximage_iram_free_start = value;
+			break;
+#endif
+		default:
+			return;
 		}
 		break;
 	default:
diff --git a/tools/imximage.h b/tools/imximage.h
index 5b5ad0e..ef41d52 100644
--- a/tools/imximage.h
+++ b/tools/imximage.h
@@ -8,7 +8,9 @@
 #ifndef _IMXIMAGE_H_
 #define _IMXIMAGE_H_
 
+#include <config.h>
 #define MAX_HW_CFG_SIZE_V2 220 /* Max number of registers imx can set for v2 */
+#define MAX_PLUGIN_CODE_SIZE (16*1024)
 #define MAX_HW_CFG_SIZE_V1 60  /* Max number of registers imx can set for v1 */
 #define APP_CODE_BARKER	0xB1
 #define DCD_BARKER	0xB17219E9
@@ -54,6 +56,7 @@ enum imximage_cmd {
 	CMD_BOOT_OFFSET,
 	CMD_DATA,
 	CMD_CSF,
+	CMD_PLUGIN,
 };
 
 enum imximage_fld_types {
@@ -149,7 +152,12 @@ typedef struct {
 typedef struct {
 	flash_header_v2_t fhdr;
 	boot_data_t boot_data;
-	dcd_v2_t dcd_table;
+	union {
+		dcd_v2_t dcd_table;
+#ifdef CONFIG_USE_PLUGIN
+		char plugin_code[MAX_PLUGIN_CODE_SIZE];
+#endif
+	} data;
 } imx_header_v2_t;
 
 /* The header must be aligned to 4k on MX53 for NAND boot */
-- 
1.7.4.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 2/4] imx: mx6q/dlarm2: Add support for building plugin image
  2014-11-04  8:27 [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images Ye.Li
@ 2014-11-04  8:27 ` Ye.Li
  2014-11-04 11:37   ` Otavio Salvador
  2014-11-04  8:27 ` [U-Boot] [PATCH 3/4] imx: mx6slevk: " Ye.Li
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: Ye.Li @ 2014-11-04  8:27 UTC (permalink / raw)
  To: u-boot

Update "cfg" script to build for plugin image. This default plugin
image supports the boot devices as DCD image.

To enable the plugin, must define the CONFIG_USE_PLUGIN in "mx6qarm2.h"

Signed-off-by: Ye.Li <B37916@freescale.com>
---
 board/freescale/mx6qarm2/Makefile           |    4 +
 board/freescale/mx6qarm2/imximage.cfg       |    9 +
 board/freescale/mx6qarm2/imximage_mx6dl.cfg |    9 +
 board/freescale/mx6qarm2/plugin.S           |  943 +++++++++++++++++++++++++++
 4 files changed, 965 insertions(+), 0 deletions(-)
 create mode 100644 board/freescale/mx6qarm2/plugin.S

diff --git a/board/freescale/mx6qarm2/Makefile b/board/freescale/mx6qarm2/Makefile
index 79401f4..ed08acd 100644
--- a/board/freescale/mx6qarm2/Makefile
+++ b/board/freescale/mx6qarm2/Makefile
@@ -7,3 +7,7 @@
 #
 
 obj-y	:= mx6qarm2.o
+
+extra-$(CONFIG_USE_PLUGIN) :=  plugin.bin
+$(obj)/plugin.bin: $(obj)/plugin.o
+	$(OBJCOPY) -O binary --gap-fill 0xff $< $@
diff --git a/board/freescale/mx6qarm2/imximage.cfg b/board/freescale/mx6qarm2/imximage.cfg
index c85bde5..c5b927a 100644
--- a/board/freescale/mx6qarm2/imximage.cfg
+++ b/board/freescale/mx6qarm2/imximage.cfg
@@ -10,6 +10,9 @@
  * The syntax is taken as close as possible with the kwbimage
  */
 
+#define __ASSEMBLY__
+#include <config.h>
+
 /* image version */
 IMAGE_VERSION 2
 
@@ -19,6 +22,11 @@ IMAGE_VERSION 2
  */
 BOOT_FROM	sd
 
+#ifdef CONFIG_USE_PLUGIN
+/*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
+PLUGIN	board/freescale/mx6qarm2/plugin.bin 0x00907000
+#else
+
 /*
  * Device Configuration Data (DCD)
  *
@@ -336,3 +344,4 @@ DATA 4 0x020e0018 0x007F007F
 DATA 4 0x020e001c 0x007F007F
 
 #endif /* CONFIG_MX6DQ_LPDDR2 */
+#endif
diff --git a/board/freescale/mx6qarm2/imximage_mx6dl.cfg b/board/freescale/mx6qarm2/imximage_mx6dl.cfg
index ae8dcc6..0f4048d 100644
--- a/board/freescale/mx6qarm2/imximage_mx6dl.cfg
+++ b/board/freescale/mx6qarm2/imximage_mx6dl.cfg
@@ -10,6 +10,9 @@
  * The syntax is taken as close as possible with the kwbimage
  */
 
+#define __ASSEMBLY__
+#include <config.h>
+
 /* image version */
 IMAGE_VERSION 2
 
@@ -19,6 +22,11 @@ IMAGE_VERSION 2
  */
 BOOT_FROM	sd
 
+#ifdef CONFIG_USE_PLUGIN
+/*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
+PLUGIN	board/freescale/mx6qarm2/plugin.bin 0x00907000
+#else
+
 /*
  * Device Configuration Data (DCD)
  *
@@ -460,3 +468,4 @@ DATA 4 0x020e0010 0xF00000CF
 DATA 4 0x020e0018 0x007F007F
 DATA 4 0x020e001c 0x007F007F
 #endif /* CONFIG_MX6DL_LPDDR2 */
+#endif
diff --git a/board/freescale/mx6qarm2/plugin.S b/board/freescale/mx6qarm2/plugin.S
new file mode 100644
index 0000000..dded80a
--- /dev/null
+++ b/board/freescale/mx6qarm2/plugin.S
@@ -0,0 +1,943 @@
+/*
+ * Copyright (C) 2012-2014 Freescale Semiconductor, Inc.
+ *
+ * Author: Fabio Estevam <fabio.estevam@freescale.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <config.h>
+
+.macro imx6dlarm2_ddr_setting
+	ldr r0, =CCM_BASE_ADDR
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x068]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x06c]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x070]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x074]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x078]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x07c]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x080]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x084]
+
+	ldr r0, =IOMUXC_BASE_ADDR
+	ldr r1, =0x000c0000
+	str r1, [r0, #0x798]
+	ldr r1, =0x00000000
+	str r1, [r0, #0x758]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x588]
+	str r1, [r0, #0x594]
+	str r1, [r0, #0x56c]
+	str r1, [r0, #0x578]
+	str r1, [r0, #0x74c]
+	str r1, [r0, #0x57c]
+
+	ldr r1, =0x00003000
+	str r1, [r0, #0x590]
+	str r1, [r0, #0x598]
+
+	ldr r1, =0x00000000
+	str r1, [r0, #0x58c]
+
+	ldr r1, =0x00003030
+	str r1, [r0, #0x59c]
+	str r1, [r0, #0x5a0]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x78c]
+
+	ldr r1, =0x00020000
+	str r1, [r0, #0x750]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x5a8]
+	str r1, [r0, #0x5b0]
+	str r1, [r0, #0x524]
+	str r1, [r0, #0x51c]
+	str r1, [r0, #0x518]
+	str r1, [r0, #0x50c]
+	str r1, [r0, #0x5b8]
+	str r1, [r0, #0x5c0]
+
+	ldr r1, =0x00020000
+	str r1, [r0, #0x774]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x784]
+	str r1, [r0, #0x788]
+	str r1, [r0, #0x794]
+	str r1, [r0, #0x79c]
+	str r1, [r0, #0x7a0]
+	str r1, [r0, #0x7a4]
+	str r1, [r0, #0x7a8]
+	str r1, [r0, #0x748]
+	str r1, [r0, #0x5ac]
+	str r1, [r0, #0x5b4]
+	str r1, [r0, #0x528]
+	str r1, [r0, #0x520]
+	str r1, [r0, #0x514]
+	str r1, [r0, #0x510]
+	str r1, [r0, #0x5bc]
+	str r1, [r0, #0x5c4]
+
+	ldr r0, =MMDC_P0_BASE_ADDR
+	ldr r1, =MMDC_P1_BASE_ADDR
+	ldr r2, =0xa1390003
+	str r2, [r0, #0x800]
+	str r2, [r1, #0x800]
+
+	ldr r2, =0x001F001F
+	str r2, [r0, #0x80c]
+	str r2, [r0, #0x810]
+
+	ldr r2, =0x00370037
+	str r2, [r1, #0x80c]
+	str r2, [r1, #0x810]
+
+	ldr r2, =0x422f0220
+	str r2, [r0, #0x83c]
+	ldr r2, =0x021f0219
+	str r2, [r0, #0x840]
+
+	ldr r2, =0x422f0220
+	str r2, [r1, #0x83c]
+	ldr r2, =0x022d022f
+	str r2, [r1, #0x840]
+
+	ldr r2, =0x47494b49
+	str r2, [r0, #0x848]
+	ldr r2, =0x48484c47
+	str r2, [r1, #0x848]
+
+	ldr r2, =0x39382b2f
+	str r2, [r0, #0x850]
+	ldr r2, =0x2f35312c
+	str r2, [r1, #0x850]
+
+	ldr r2, =0x33333333
+	str r2, [r0, #0x81c]
+	str r2, [r0, #0x820]
+	str r2, [r0, #0x824]
+	str r2, [r0, #0x828]
+	str r2, [r1, #0x81c]
+	str r2, [r1, #0x820]
+	str r2, [r1, #0x824]
+	str r2, [r1, #0x828]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+	ldr r2, =0x00000800
+	str r2, [r1, #0x8b8]
+
+	ldr r2, =0x0002002d
+	str r2, [r0, #0x004]
+	ldr r2, =0x00333030
+	str r2, [r0, #0x008]
+	ldr r2, =0x40445323
+	str r2, [r0, #0x00c]
+	ldr r2, =0xb66e8c63
+	str r2, [r0, #0x010]
+	ldr r2, =0x01ff00db
+	str r2, [r0, #0x014]
+	ldr r2, =0x00081740
+	str r2, [r0, #0x018]
+
+	ldr r2, =0x00008000
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x000026d2
+	str r2, [r0, #0x02c]
+	ldr r2, =0x00440e21
+	str r2, [r0, #0x030]
+
+#ifdef CONFIG_DDR_32BIT
+	ldr r2, =0x00000017
+	str r2, [r0, #0x040]
+	ldr r2, =0xc3190000
+	str r2, [r0, #0x000]
+#else
+	ldr r2, =0x00000027
+	str r2, [r0, #0x040]
+	ldr r2, =0xc31a0000
+	str r2, [r0, #0x000]
+#endif
+
+	ldr r2, =0x04008032
+	str r2, [r0, #0x01c]
+	ldr r2, =0x0400803a
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x00008033
+	str r2, [r0, #0x01c]
+	ldr r2, =0x0000803b
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x00428031
+	str r2, [r0, #0x01c]
+	ldr r2, =0x00428039
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x07208030
+	str r2, [r0, #0x01c]
+	ldr r2, =0x07208038
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x04008040
+	str r2, [r0, #0x01c]
+	ldr r2, =0x04008048
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x00005800
+	str r2, [r0, #0x020]
+
+	ldr r2, =0x00000007
+	str r2, [r0, #0x818]
+	str r2, [r1, #0x818]
+
+	ldr r2, =0x0002556d
+	str r2, [r0, #0x004]
+	ldr r2, =0x00011006
+	str r2, [r1, #0x004]
+	ldr r2, =0x00000000
+	str r2, [r0, #0x01c]
+.endm
+
+.macro imx6dqarm2_ddr_setting
+	ldr r0, =CCM_BASE_ADDR
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x068]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x06c]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x070]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x074]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x078]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x07c]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x080]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x084]
+
+	ldr r0, =IOMUXC_BASE_ADDR
+	ldr r1, =0x000c0000
+	str r1, [r0, #0x798]
+	ldr r1, =0x00000000
+	str r1, [r0, #0x758]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x588]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x594]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x56c]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x578]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x74c]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x57c]
+
+	ldr r1, =0x00000000
+	str r1, [r0, #0x58c]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x59c]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x5a0]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x78c]
+
+	ldr r1, =0x00000000
+	str r1, [r0, #0x750]
+
+	ldr r1, =0x00000038
+	str r1, [r0, #0x5a8]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x5b0]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x524]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x51c]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x518]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x50c]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x5b8]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x5c0]
+
+	ldr r1, =0x00000000
+	str r1, [r0, #0x774]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x784]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x788]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x794]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x79c]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x7a0]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x7a4]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x7a8]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x748]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x5ac]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x5b4]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x528]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x520]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x514]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x510]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x5bc]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x5c4]
+
+	ldr r0, =MMDC_P0_BASE_ADDR
+	ldr r2, =0xa1390003
+	str r2, [r0, #0x800]
+
+	ldr r2, =0x001F001F
+	str r2, [r0, #0x80c]
+	ldr r2, =0x001F001F
+	str r2, [r0, #0x810]
+
+	ldr r1, =MMDC_P1_BASE_ADDR
+	ldr r2, =0x00440044
+	str r2, [r1, #0x80c]
+	ldr r2, =0x00440044
+	str r2, [r1, #0x810]
+
+	ldr r2, =0x4333033F
+	str r2, [r0, #0x83c]
+	ldr r2, =0x0339033E
+	str r2, [r0, #0x840]
+	ldr r2, =0x433F0343
+	str r2, [r1, #0x83c]
+	ldr r2, =0x03490320
+	str r2, [r1, #0x840]
+
+	ldr r2, =0x42363838
+	str r2, [r0, #0x848]
+	ldr r2, =0x3F343242
+	str r2, [r1, #0x848]
+
+	ldr r2, =0x37424844
+	str r2, [r0, #0x850]
+	ldr r2, =0x48264731
+	str r2, [r1, #0x850]
+
+	ldr r2, =0x33333333
+	str r2, [r0, #0x81c]
+	ldr r2, =0x33333333
+	str r2, [r0, #0x820]
+	ldr r2, =0x33333333
+	str r2, [r0, #0x824]
+	ldr r2, =0x33333333
+	str r2, [r0, #0x828]
+	ldr r2, =0x33333333
+	str r2, [r1, #0x81c]
+	ldr r2, =0x33333333
+	str r2, [r1, #0x820]
+	ldr r2, =0x33333333
+	str r2, [r1, #0x824]
+	ldr r2, =0x33333333
+	str r2, [r1, #0x828]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+	ldr r2, =0x00000800
+	str r2, [r1, #0x8b8]
+
+	ldr r2, =0x00020036
+	str r2, [r0, #0x004]
+	ldr r2, =0x09444040
+	str r2, [r0, #0x008]
+	ldr r2, =0x555A7975
+	str r2, [r0, #0x00c]
+	ldr r2, =0xFF538F64
+	str r2, [r0, #0x010]
+	ldr r2, =0x01ff00db
+	str r2, [r0, #0x014]
+	ldr r2, =0x00081740
+	str r2, [r0, #0x018]
+
+	ldr r2, =0x00008000
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x000026d2
+	str r2, [r0, #0x02c]
+	ldr r2, =0x005a1023
+	str r2, [r0, #0x030]
+	ldr r2, =0x00000027
+	str r2, [r0, #0x040]
+
+	ldr r2, =0x11420000
+	str r2, [r0, #0x400]
+	ldr r2, =0x11420000
+	str r2, [r1, #0x400]
+
+	ldr r2, =0xc31a0000
+	str r2, [r0, #0x000]
+
+	ldr r2, =0x04088032
+	str r2, [r0, #0x01c]
+	ldr r2, =0x0408803a
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x00008033
+	str r2, [r0, #0x01c]
+	ldr r2, =0x0000803b
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x00048031
+	str r2, [r0, #0x01c]
+	ldr r2, =0x00048039
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x09408030
+	str r2, [r0, #0x01c]
+	ldr r2, =0x09408038
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x04008040
+	str r2, [r0, #0x01c]
+	ldr r2, =0x04008048
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x00005800
+	str r2, [r0, #0x020]
+
+	ldr r2, =0x00011117
+	str r2, [r0, #0x818]
+	str r2, [r1, #0x818]
+
+	ldr r2, =0x00025576
+	str r2, [r0, #0x004]
+	ldr r2, =0x00011006
+	str r2, [r0, #0x404]
+	ldr r2, =0x00000000
+	str r2, [r0, #0x01c]
+.endm
+
+.macro imx6dlarm2_lpddr2_setting
+	ldr r0, =CCM_BASE_ADDR
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x068]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x06c]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x070]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x074]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x078]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x07c]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x080]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x084]
+
+	ldr r0, =IOMUXC_BASE_ADDR
+	ldr r1, =0x00003028
+	str r1, [r0, #0x4bc]
+	str r1, [r0, #0x4c0]
+	str r1, [r0, #0x4c4]
+	str r1, [r0, #0x4c8]
+	str r1, [r0, #0x4cc]
+	str r1, [r0, #0x4d0]
+	str r1, [r0, #0x4d4]
+	str r1, [r0, #0x4d8]
+
+	ldr r1, =0x00000038
+	str r1, [r0, #0x470]
+	str r1, [r0, #0x474]
+	str r1, [r0, #0x478]
+	str r1, [r0, #0x47c]
+	str r1, [r0, #0x480]
+	str r1, [r0, #0x484]
+	str r1, [r0, #0x488]
+	str r1, [r0, #0x48c]
+	str r1, [r0, #0x464]
+	str r1, [r0, #0x490]
+	str r1, [r0, #0x4ac]
+	str r1, [r0, #0x4b0]
+	str r1, [r0, #0x494]
+	str r1, [r0, #0x4a4]
+	str r1, [r0, #0x4a8]
+
+	ldr r1, =0x00000000
+	str r1, [r0, #0x4a0]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x4b4]
+	str r1, [r0, #0x4b8]
+	str r1, [r0, #0x764]
+	str r1, [r0, #0x770]
+	str r1, [r0, #0x778]
+	str r1, [r0, #0x77c]
+	str r1, [r0, #0x780]
+	str r1, [r0, #0x784]
+	str r1, [r0, #0x78c]
+	str r1, [r0, #0x748]
+	str r1, [r0, #0x74c]
+	str r1, [r0, #0x76c]
+	ldr r1, =0x00020000
+	str r1, [r0, #0x750]
+	ldr r1, =0x00000000
+	str r1, [r0, #0x754]
+	ldr r1, =0x00020000
+	str r1, [r0, #0x760]
+	ldr r1, =0x00080000
+	str r1, [r0, #0x774]
+
+	ldr r0, =MMDC_P0_BASE_ADDR
+	ldr r1, =MMDC_P1_BASE_ADDR
+	ldr r2, =0x00008000
+	str r2, [r0, #0x1c]
+	str r2, [r1, #0x1c]
+	ldr r2, =0x1b5f01ff
+	str r2, [r0, #0x85c]
+	str r2, [r1, #0x85c]
+	ldr r2, =0xa1390003
+	str r2, [r0, #0x800]
+	ldr r2, =0x00400000
+	str r2, [r0, #0x890]
+	str r2, [r1, #0x890]
+	ldr r2, =0x00055555
+	str r2, [r1, #0x8bc]
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+	str r2, [r1, #0x8b8]
+
+	ldr r2, =0x33333333
+	str r2, [r0, #0x81c]
+	str r2, [r0, #0x820]
+	str r2, [r0, #0x824]
+	str r2, [r0, #0x828]
+	str r2, [r1, #0x81c]
+	str r2, [r1, #0x820]
+	str r2, [r1, #0x824]
+	str r2, [r1, #0x828]
+
+	ldr r2, =0x4b4b524f
+	str r2, [r0, #0x848]
+	ldr r2, =0x494f4c44
+	str r2, [r1, #0x848]
+
+	ldr r2, =0x3c3d303c
+	str r2, [r0, #0x850]
+	ldr r2, =0x3c343d38
+	str r2, [r1, #0x850]
+
+	ldr r2, =0x20000000
+	str r2, [r0, #0x83c]
+	str r2, [r1, #0x83c]
+	ldr r2, =0x00000000
+	str r2, [r0, #0x840]
+	str r2, [r1, #0x840]
+
+	ldr r2, =0x00000a00
+	str r2, [r0, #0x858]
+	str r2, [r1, #0x858]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+	str r2, [r1, #0x8b8]
+
+	ldr r2, =0x34386145
+	str r2, [r0, #0xc]
+	ldr r2, =0x00020036
+	str r2, [r0, #0x4]
+	ldr r2, =0x00100c83
+	str r2, [r0, #0x10]
+	ldr r2, =0x000000Dc
+	str r2, [r0, #0x14]
+	ldr r2, =0x0000174C
+	str r2, [r0, #0x18]
+	ldr r2, =0x0f9f26d2
+	str r2, [r0, #0x2c]
+	ldr r2, =0x0000020e
+	str r2, [r0, #0x30]
+	ldr r2, =0x00190778
+	str r2, [r0, #0x38]
+	ldr r2, =0x00000000
+	str r2, [r0, #0x8]
+
+	ldr r2, =0x0000005f
+	str r2, [r0, #0x40]
+	ldr r2, =0x0000000f
+	str r2, [r0, #0x404]
+
+	ldr r2, =0xc3010000
+	str r2, [r0, #0x0]
+
+	ldr r2, =0x34386145
+	str r2, [r1, #0xc]
+
+	ldr r2, =0x00020036
+	str r2, [r1, #0x4]
+	ldr r2, =0x00100c83
+	str r2, [r1, #0x10]
+	ldr r2, =0x000000Dc
+	str r2, [r1, #0x14]
+	ldr r2, =0x0000174C
+	str r2, [r1, #0x18]
+	ldr r2, =0x0f9f26d2
+	str r2, [r1, #0x2c]
+	ldr r2, =0x0000020e
+	str r2, [r1, #0x30]
+	ldr r2, =0x00190778
+	str r2, [r1, #0x38]
+	ldr r2, =0x00000000
+	str r2, [r1, #0x8]
+
+	ldr r2, =0x0000003f
+	str r2, [r1, #0x40]
+
+	ldr r2, =0xc3010000
+	str r2, [r1, #0x0]
+
+	ldr r2, =0x003f8030
+	str r2, [r0, #0x1c]
+	ldr r2, =0xff0a8030
+	str r2, [r0, #0x1c]
+	ldr r2, =0xa2018030
+	str r2, [r0, #0x1c]
+	ldr r2, =0x06028030
+	str r2, [r0, #0x1c]
+	ldr r2, =0x01038030
+	str r2, [r0, #0x1c]
+
+	ldr r2, =0x003f8030
+	str r2, [r1, #0x1c]
+	ldr r2, =0xff0a8030
+	str r2, [r1, #0x1c]
+	ldr r2, =0xa2018030
+	str r2, [r1, #0x1c]
+	ldr r2, =0x06028030
+	str r2, [r1, #0x1c]
+	ldr r2, =0x01038030
+	str r2, [r1, #0x1c]
+
+	ldr r2, =0x00005800
+	str r2, [r0, #0x20]
+	str r2, [r1, #0x20]
+
+	ldr r2, =0x00000000
+	str r2, [r0, #0x818]
+	str r2, [r1, #0x818]
+
+	ldr r2, =0xa1310003
+	str r2, [r0, #0x800]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+	str r2, [r1, #0x8b8]
+
+	ldr r2, =0x00000000
+	str r2, [r0, #0x1c]
+	str r2, [r1, #0x1c]
+
+	ldr r0, =IOMUXC_BASE_ADDR
+	ldr r1, =0xF00000CF
+	str r1, [r0, #0x10]
+	ldr r1, =0x007F007F
+	str r1, [r0, #0x18]
+	ldr r1, =0x007F007F
+	str r1, [r0, #0x1c]
+.endm
+
+.macro imx6dqarm2_lpddr2_setting
+	ldr r0, =CCM_BASE_ADDR
+	ldr r1, =0x60324
+	str r1, [r0, #0x18]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x068]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x06c]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x070]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x074]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x078]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x07c]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x080]
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x084]
+
+	ldr r0, =IOMUXC_BASE_ADDR
+	ldr r1, =0x00003038
+	str r1, [r0, #0x5a8]
+	str r1, [r0, #0x5b0]
+	str r1, [r0, #0x524]
+	str r1, [r0, #0x51c]
+	str r1, [r0, #0x518]
+	str r1, [r0, #0x50c]
+	str r1, [r0, #0x5b8]
+	str r1, [r0, #0x5c0]
+
+	ldr r1, =0x00000038
+	str r1, [r0, #0x5ac]
+	str r1, [r0, #0x5b4]
+	str r1, [r0, #0x528]
+	str r1, [r0, #0x520]
+	str r1, [r0, #0x514]
+	str r1, [r0, #0x510]
+	str r1, [r0, #0x5bc]
+	str r1, [r0, #0x5c4]
+	str r1, [r0, #0x56c]
+	str r1, [r0, #0x578]
+	str r1, [r0, #0x588]
+	str r1, [r0, #0x594]
+	str r1, [r0, #0x57c]
+	str r1, [r0, #0x590]
+	str r1, [r0, #0x598]
+
+	ldr r1, =0x00000000
+	str r1, [r0, #0x58c]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x59c]
+	str r1, [r0, #0x5a0]
+	str r1, [r0, #0x784]
+	str r1, [r0, #0x788]
+	str r1, [r0, #0x794]
+	str r1, [r0, #0x79c]
+	str r1, [r0, #0x7a0]
+	str r1, [r0, #0x7a4]
+	str r1, [r0, #0x7a8]
+	str r1, [r0, #0x748]
+	str r1, [r0, #0x74c]
+	ldr r1, =0x00020000
+	str r1, [r0, #0x750]
+	ldr r1, =0x00000000
+	str r1, [r0, #0x758]
+	ldr r1, =0x00020000
+	str r1, [r0, #0x774]
+	ldr r1, =0x00000038
+	str r1, [r0, #0x78c]
+	ldr r1, =0x00080000
+	str r1, [r0, #0x798]
+
+	ldr r0, =MMDC_P0_BASE_ADDR
+	ldr r1, =MMDC_P1_BASE_ADDR
+	ldr r2, =0x00008000
+	str r2, [r0, #0x1c]
+	str r2, [r1, #0x1c]
+	ldr r2, =0x1b5f01ff
+	str r2, [r0, #0x85c]
+	str r2, [r1, #0x85c]
+	ldr r2, =0xa1390000
+	str r2, [r0, #0x800]
+	str r2, [r1, #0x800]
+	ldr r2, =0x00400000
+	str r2, [r0, #0x890]
+	str r2, [r1, #0x890]
+	ldr r2, =0x00055555
+	str r2, [r1, #0x8bc]
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+	str r2, [r1, #0x8b8]
+
+	ldr r2, =0x33333333
+	str r2, [r0, #0x81c]
+	str r2, [r0, #0x820]
+	str r2, [r0, #0x824]
+	str r2, [r0, #0x828]
+	str r2, [r1, #0x81c]
+	str r2, [r1, #0x820]
+	str r2, [r1, #0x824]
+	str r2, [r1, #0x828]
+
+	ldr r2, =0xf3333333
+	str r2, [r0, #0x82c]
+	str r2, [r0, #0x830]
+	str r2, [r0, #0x834]
+	str r2, [r0, #0x838]
+	str r2, [r1, #0x82c]
+	str r2, [r1, #0x830]
+	str r2, [r1, #0x834]
+	str r2, [r1, #0x838]
+
+	ldr r2, =0x49383b39
+	str r2, [r0, #0x848]
+	ldr r2, =0x30364738
+	str r2, [r0, #0x850]
+
+	ldr r2, =0x3e3c3846
+	str r2, [r1, #0x848]
+	ldr r2, =0x4c294b35
+	str r2, [r1, #0x850]
+
+	ldr r2, =0x20000000
+	str r2, [r0, #0x83c]
+	str r2, [r1, #0x83c]
+	ldr r2, =0x00000000
+	str r2, [r0, #0x840]
+	str r2, [r1, #0x840]
+
+	ldr r2, =0x00000f00
+	str r2, [r0, #0x858]
+	str r2, [r1, #0x858]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+	str r2, [r1, #0x8b8]
+
+	ldr r2, =0x555a61a5
+	str r2, [r0, #0xc]
+	ldr r2, =0x00020036
+	str r2, [r0, #0x4]
+	ldr r2, =0x00160e83
+	str r2, [r0, #0x10]
+	ldr r2, =0x000000dd
+	str r2, [r0, #0x14]
+	ldr r2, =0x0008174C
+	str r2, [r0, #0x18]
+	ldr r2, =0x0f9f26d2
+	str r2, [r0, #0x2c]
+	ldr r2, =0x0000020e
+	str r2, [r0, #0x30]
+	ldr r2, =0x200aac
+	str r2, [r0, #0x38]
+	ldr r2, =0x00000000
+	str r2, [r0, #0x8]
+
+	ldr r2, =0x0000005f
+	str r2, [r0, #0x40]
+
+	ldr r2, =0xc3010000
+	str r2, [r0, #0x0]
+
+	ldr r2, =0x555a61a5
+	str r2, [r1, #0xc]
+	ldr r2, =0x00020036
+	str r2, [r1, #0x4]
+	ldr r2, =0x00160e83
+	str r2, [r1, #0x10]
+	ldr r2, =0x000000dd
+	str r2, [r1, #0x14]
+	ldr r2, =0x0008174C
+	str r2, [r1, #0x18]
+	ldr r2, =0x0f9f26d2
+	str r2, [r1, #0x2c]
+	ldr r2, =0x0000020e
+	str r2, [r1, #0x30]
+	ldr r2, =0x00200aac
+	str r2, [r1, #0x38]
+	ldr r2, =0x00000000
+	str r2, [r1, #0x8]
+
+	ldr r2, =0x0000003f
+	str r2, [r1, #0x40]
+
+	ldr r2, =0xc3010000
+	str r2, [r1, #0x0]
+
+	ldr r2, =0x003f8030
+	str r2, [r0, #0x1c]
+	ldr r2, =0xff0a8030
+	str r2, [r0, #0x1c]
+	ldr r2, =0xc2018030
+	str r2, [r0, #0x1c]
+	ldr r2, =0x06028030
+	str r2, [r0, #0x1c]
+	ldr r2, =0x02038030
+	str r2, [r0, #0x1c]
+
+	ldr r2, =0x003f8030
+	str r2, [r1, #0x1c]
+	ldr r2, =0xff0a8030
+	str r2, [r1, #0x1c]
+	ldr r2, =0xc2018030
+	str r2, [r1, #0x1c]
+	ldr r2, =0x06028030
+	str r2, [r1, #0x1c]
+	ldr r2, =0x02038030
+	str r2, [r1, #0x1c]
+
+	ldr r2, =0xa1390003
+	str r2, [r0, #0x800]
+	str r2, [r1, #0x800]
+
+	ldr r2, =0x00007800
+	str r2, [r0, #0x20]
+	str r2, [r1, #0x20]
+
+	ldr r2, =0x00000000
+	str r2, [r0, #0x818]
+	str r2, [r1, #0x818]
+
+	ldr r2, =0xa1310003
+	str r2, [r0, #0x800]
+	str r2, [r1, #0x800]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+	str r2, [r1, #0x8b8]
+
+	ldr r2, =0x00000000
+	str r2, [r0, #0x1c]
+	str r2, [r1, #0x1c]
+
+	ldr r2, =0x00011006
+	str r2, [r0, #0x404]
+
+	ldr r0, =IOMUXC_BASE_ADDR
+	ldr r1, =0xF00000CF
+	str r1, [r0, #0x10]
+	ldr r1, =0x007F007F
+	str r1, [r0, #0x18]
+	ldr r1, =0x007F007F
+	str r1, [r0, #0x1c]
+.endm
+
+.macro imx6_ddr_setting
+	#if defined (CONFIG_MX6DQ_LPDDR2)
+	imx6dqarm2_lpddr2_setting
+	#elif defined (CONFIG_MX6Q)
+	imx6dqarm2_ddr_setting
+	#elif defined (CONFIG_MX6DL_LPDDR2)
+	imx6dlarm2_lpddr2_setting
+	#elif defined (CONFIG_MX6DL)
+	imx6dlarm2_ddr_setting
+	#else
+	#error "SOC not configured"
+	#endif
+.endm
+
+.macro imx6_clock_gating
+.endm
+
+.macro imx6_qos_setting
+.endm
+
+/* include the common plugin code here */
+#include <asm/arch/mx6_plugin.S>
-- 
1.7.4.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 3/4] imx: mx6slevk: Add support for building plugin image
  2014-11-04  8:27 [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images Ye.Li
  2014-11-04  8:27 ` [U-Boot] [PATCH 2/4] imx: mx6q/dlarm2: Add support for building plugin image Ye.Li
@ 2014-11-04  8:27 ` Ye.Li
  2014-11-04  8:27 ` [U-Boot] [PATCH 4/4] imx: mx6sxsabresd: " Ye.Li
  2014-11-04 15:46 ` [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images Fabio Estevam
  3 siblings, 0 replies; 7+ messages in thread
From: Ye.Li @ 2014-11-04  8:27 UTC (permalink / raw)
  To: u-boot

Update "cfg" script to build for plugin image. This default plugin
image supports the boot devices as DCD image.

To enable the plugin, must define the CONFIG_USE_PLUGIN in "mx6slevk.h"

Signed-off-by: Ye.Li <B37916@freescale.com>
---
 board/freescale/mx6slevk/Makefile     |    4 +
 board/freescale/mx6slevk/imximage.cfg |    9 ++
 board/freescale/mx6slevk/plugin.S     |  187 +++++++++++++++++++++++++++++++++
 3 files changed, 200 insertions(+), 0 deletions(-)
 create mode 100644 board/freescale/mx6slevk/plugin.S

diff --git a/board/freescale/mx6slevk/Makefile b/board/freescale/mx6slevk/Makefile
index 6e1971e..fb44826 100644
--- a/board/freescale/mx6slevk/Makefile
+++ b/board/freescale/mx6slevk/Makefile
@@ -4,3 +4,7 @@
 #
 
 obj-y  := mx6slevk.o
+
+extra-$(CONFIG_USE_PLUGIN) :=  plugin.bin
+$(obj)/plugin.bin: $(obj)/plugin.o
+	$(OBJCOPY) -O binary --gap-fill 0xff $< $@
diff --git a/board/freescale/mx6slevk/imximage.cfg b/board/freescale/mx6slevk/imximage.cfg
index 16ea597..b574357 100644
--- a/board/freescale/mx6slevk/imximage.cfg
+++ b/board/freescale/mx6slevk/imximage.cfg
@@ -9,6 +9,9 @@
  * The syntax is taken as close as possible with the kwbimage
  */
 
+#define __ASSEMBLY__
+#include <config.h>
+
 /* image version */
 
 IMAGE_VERSION 2
@@ -20,6 +23,11 @@ IMAGE_VERSION 2
 
 BOOT_FROM	sd
 
+#ifdef CONFIG_USE_PLUGIN
+/*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
+PLUGIN	board/freescale/mx6slevk/plugin.bin 0x00907000
+#else
+
 /*
  * Device Configuration Data (DCD)
  *
@@ -113,3 +121,4 @@ DATA 4 0x021b08b8 0x00000800
 DATA 4 0x021b0004 0x00025564
 DATA 4 0x021b0404 0x00011006
 DATA 4 0x021b001c 0x00000000
+#endif
diff --git a/board/freescale/mx6slevk/plugin.S b/board/freescale/mx6slevk/plugin.S
new file mode 100644
index 0000000..287dfed
--- /dev/null
+++ b/board/freescale/mx6slevk/plugin.S
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2014 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <config.h>
+
+/* DDR script */
+.macro imx6slevk_ddr_setting
+	ldr r0, =CCM_BASE_ADDR
+	ldr r1, =0x00260324
+	str r1, [r0, #0x018]
+
+	ldr r0, =IOMUXC_BASE_ADDR
+	ldr r1, =0x00020000
+	str r1, [r0, #0x5c0]
+	ldr r1, =0x00000000
+	str r1, [r0, #0x5b4]
+
+	ldr r1, =0x00000028
+	str r1, [r0, #0x338]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x300]
+	str r1, [r0, #0x31c]
+	str r1, [r0, #0x320]
+
+	ldr r1, =0x00000000
+	str r1, [r0, #0x32c]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x5ac]
+	str r1, [r0, #0x5c8]
+
+	ldr r1, =0x00020000
+	str r1, [r0, #0x5b0]
+
+	ldr r1, =0x00003030
+	str r1, [r0, #0x344]
+	str r1, [r0, #0x348]
+	str r1, [r0, #0x34c]
+	str r1, [r0, #0x350]
+
+	ldr r1, =0x00080000
+	str r1, [r0, #0x5d0]
+
+	ldr r1, =0x00000030
+	str r1, [r0, #0x5c4]
+	str r1, [r0, #0x5cc]
+	str r1, [r0, #0x5d4]
+	str r1, [r0, #0x5d8]
+
+	str r1, [r0, #0x30c]
+	str r1, [r0, #0x310]
+	str r1, [r0, #0x314]
+	str r1, [r0, #0x318]
+
+	ldr r0, =MMDC_P0_BASE_ADDR
+	ldr r2, =0x00008000
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0x1b4700c7
+	str r2, [r0, #0x85c]
+
+	ldr r2, =0xa1390003
+	str r2, [r0, #0x800]
+
+	ldr r2, =0x00300000
+	str r2, [r0, #0x890]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+
+	ldr r2, =0x33333333
+	str r2, [r0, #0x81c]
+	str r2, [r0, #0x820]
+	str r2, [r0, #0x824]
+	str r2, [r0, #0x828]
+	str r2, [r0, #0x82c]
+	str r2, [r0, #0x830]
+	str r2, [r0, #0x834]
+	str r2, [r0, #0x838]
+
+	ldr r2, =0x4241444a
+	str r2, [r0, #0x848]
+
+	ldr r2, =0x3030312b
+	str r2, [r0, #0x850]
+
+	ldr r2, =0x20000000
+	str r2, [r0, #0x83c]
+
+	ldr r2, =0x00000000
+	str r2, [r0, #0x840]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+
+	ldr r2, =0x33374133
+	str r2, [r0, #0x00c]
+
+	ldr r2, =0x00020024
+	str r2, [r0, #0x004]
+
+	ldr r2, =0x00100A82
+	str r2, [r0, #0x010]
+	ldr r2, =0x00000093
+	str r2, [r0, #0x014]
+	ldr r2, =0x00001688
+	str r2, [r0, #0x018]
+	ldr r2, =0x0F9F26D2
+	str r2, [r0, #0x02c]
+
+	ldr r2, =0x0000020E
+	str r2, [r0, #0x030]
+	ldr r2, =0x00190778
+	str r2, [r0, #0x038]
+	ldr r2, =0x00000000
+	str r2, [r0, #0x008]
+	ldr r2, =0x0000004F
+	str r2, [r0, #0x040]
+	ldr r2, =0xC3110000
+	str r2, [r0, #0x000]
+
+	ldr r2, =0x003F8030
+	str r2, [r0, #0x01c]
+	ldr r2, =0xFF0A8030
+	str r2, [r0, #0x01c]
+	ldr r2, =0x82018030
+	str r2, [r0, #0x01c]
+	ldr r2, =0x04028030
+	str r2, [r0, #0x01c]
+	ldr r2, =0x02038030
+	str r2, [r0, #0x01c]
+	ldr r2, =0xFF0A8038
+	str r2, [r0, #0x01c]
+	ldr r2, =0x82018038
+	str r2, [r0, #0x01c]
+	ldr r2, =0x04028038
+	str r2, [r0, #0x01c]
+	ldr r2, =0x02038038
+	str r2, [r0, #0x01c]
+
+	ldr r2, =0xa1310003
+	str r2, [r0, #0x800]
+
+	ldr r2, =0x00001800
+	str r2, [r0, #0x020]
+
+	ldr r2, =0x00000000
+	str r2, [r0, #0x818]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+
+	ldr r2, =0x00025564
+	str r2, [r0, #0x004]
+
+	ldr r2, =0x00011006
+	str r2, [r0, #0x404]
+
+	ldr r2, =0x00000000
+	str r2, [r0, #0x01c]
+.endm
+.macro imx6_clock_gating
+	ldr r0, =CCM_BASE_ADDR
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x068]
+	str r1, [r0, #0x06c]
+	str r1, [r0, #0x070]
+	str r1, [r0, #0x074]
+	str r1, [r0, #0x078]
+	str r1, [r0, #0x07c]
+	str r1, [r0, #0x080]
+	str r1, [r0, #0x084]
+.endm
+
+.macro imx6_qos_setting
+.endm
+
+.macro imx6_ddr_setting
+	imx6slevk_ddr_setting
+.endm
+
+/* include the common plugin code here */
+#include <asm/arch/mx6_plugin.S>
-- 
1.7.4.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 4/4] imx: mx6sxsabresd: Add support for building plugin image
  2014-11-04  8:27 [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images Ye.Li
  2014-11-04  8:27 ` [U-Boot] [PATCH 2/4] imx: mx6q/dlarm2: Add support for building plugin image Ye.Li
  2014-11-04  8:27 ` [U-Boot] [PATCH 3/4] imx: mx6slevk: " Ye.Li
@ 2014-11-04  8:27 ` Ye.Li
  2014-11-04 15:46 ` [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images Fabio Estevam
  3 siblings, 0 replies; 7+ messages in thread
From: Ye.Li @ 2014-11-04  8:27 UTC (permalink / raw)
  To: u-boot

Update "cfg" script to build for plugin image. This default plugin
image supports the boot devices as DCD image.

To enable the plugin, must define the CONFIG_USE_PLUGIN in "mx6sxsabresd.h"

Signed-off-by: Ye.Li <B37916@freescale.com>
---
 board/freescale/mx6sxsabresd/Makefile     |    4 +
 board/freescale/mx6sxsabresd/imximage.cfg |    6 ++
 board/freescale/mx6sxsabresd/plugin.S     |  135 +++++++++++++++++++++++++++++
 3 files changed, 145 insertions(+), 0 deletions(-)
 create mode 100644 board/freescale/mx6sxsabresd/plugin.S

diff --git a/board/freescale/mx6sxsabresd/Makefile b/board/freescale/mx6sxsabresd/Makefile
index 97dbfda..bd9ac6f 100644
--- a/board/freescale/mx6sxsabresd/Makefile
+++ b/board/freescale/mx6sxsabresd/Makefile
@@ -4,3 +4,7 @@
 #
 
 obj-y  := mx6sxsabresd.o
+
+extra-$(CONFIG_USE_PLUGIN) :=  plugin.bin
+$(obj)/plugin.bin: $(obj)/plugin.o
+	$(OBJCOPY) -O binary --gap-fill 0xff $< $@
diff --git a/board/freescale/mx6sxsabresd/imximage.cfg b/board/freescale/mx6sxsabresd/imximage.cfg
index c862617..9a99208 100644
--- a/board/freescale/mx6sxsabresd/imximage.cfg
+++ b/board/freescale/mx6sxsabresd/imximage.cfg
@@ -18,6 +18,11 @@ IMAGE_VERSION 2
 
 BOOT_FROM	sd
 
+#ifdef CONFIG_USE_PLUGIN
+/*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
+PLUGIN	board/freescale/mx6sxsabresd/plugin.bin 0x00907000
+#else
+
 /*
  * Device Configuration Data (DCD)
  *
@@ -130,3 +135,4 @@ DATA 4 0x021b001c 0x04008040
 DATA 4 0x021b0020 0x00000800
 DATA 4 0x021b0818 0x00011117
 DATA 4 0x021b001c 0x00000000
+#endif
diff --git a/board/freescale/mx6sxsabresd/plugin.S b/board/freescale/mx6sxsabresd/plugin.S
new file mode 100644
index 0000000..667095f
--- /dev/null
+++ b/board/freescale/mx6sxsabresd/plugin.S
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2013-2014 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <config.h>
+
+/* DDR script */
+.macro imx6sx_sabresd_ddr_setting
+	ldr r0, =IOMUXC_BASE_ADDR
+	ldr r1, =0x000c0000
+	str r1, [r0, #0x618]
+	ldr r1, =0x00000000
+	str r1, [r0, #0x5fc]
+	ldr r1, =0x00000030
+	str r1, [r0, #0x32c]
+
+	ldr r1, =0x00000020
+	str r1, [r0, #0x300]
+	str r1, [r0, #0x2fc]
+	str r1, [r0, #0x5f4]
+	str r1, [r0, #0x340]
+
+	ldr r1, =0x00000000
+	str r1, [r0, #0x320]
+	ldr r1, =0x00000020
+	str r1, [r0, #0x310]
+	str r1, [r0, #0x314]
+	str r1, [r0, #0x614]
+
+	ldr r1, =0x00020000
+	str r1, [r0, #0x5f8]
+	ldr r1, =0x00000028
+	str r1, [r0, #0x330]
+	str r1, [r0, #0x334]
+	str r1, [r0, #0x338]
+	str r1, [r0, #0x33c]
+	ldr r1, =0x00020000
+	str r1, [r0, #0x608]
+	ldr r1, =0x00000028
+	str r1, [r0, #0x60c]
+	str r1, [r0, #0x610]
+	str r1, [r0, #0x61c]
+	str r1, [r0, #0x620]
+	str r1, [r0, #0x2ec]
+	str r1, [r0, #0x2f0]
+	str r1, [r0, #0x2f4]
+	str r1, [r0, #0x2f8]
+
+	ldr r0, =MMDC_P0_BASE_ADDR
+	ldr r2, =0xa1390003
+	str r2, [r0, #0x800]
+	ldr r2, =0x00290025
+	str r2, [r0, #0x80c]
+	ldr r2, =0x00220022
+	str r2, [r0, #0x810]
+	ldr r2, =0x41480144
+	str r2, [r0, #0x83c]
+	ldr r2, =0x01340130
+	str r2, [r0, #0x840]
+	ldr r2, =0x3C3E4244
+	str r2, [r0, #0x848]
+	ldr r2, =0x34363638
+	str r2, [r0, #0x850]
+
+	ldr r2, =0x33333333
+	str r2, [r0, #0x81c]
+	str r2, [r0, #0x820]
+	str r2, [r0, #0x824]
+	str r2, [r0, #0x828]
+
+	ldr r2, =0x00000800
+	str r2, [r0, #0x8b8]
+	ldr r2, =0x0002002d
+	str r2, [r0, #0x004]
+	ldr r2, =0x00333030
+	str r2, [r0, #0x008]
+	ldr r2, =0x676b52f3
+	str r2, [r0, #0x00c]
+	ldr r2, =0xb66d8b63
+	str r2, [r0, #0x010]
+	ldr r2, =0x01ff00db
+	str r2, [r0, #0x014]
+	ldr r2, =0x00011740
+	str r2, [r0, #0x018]
+	ldr r2, =0x00008000
+	str r2, [r0, #0x01c]
+	ldr r2, =0x000026d2
+	str r2, [r0, #0x02c]
+	ldr r2, =0x006b1023
+	str r2, [r0, #0x030]
+	ldr r2, =0x0000005f
+	str r2, [r0, #0x040]
+	ldr r2, =0x84190000
+	str r2, [r0, #0x000]
+	ldr r2, =0x04008032
+	str r2, [r0, #0x01c]
+	ldr r2, =0x00008033
+	str r2, [r0, #0x01c]
+	ldr r2, =0x00048031
+	str r2, [r0, #0x01c]
+	ldr r2, =0x05208030
+	str r2, [r0, #0x01c]
+	ldr r2, =0x04008040
+	str r2, [r0, #0x01c]
+	ldr r2, =0x00000800
+	str r2, [r0, #0x020]
+	ldr r2, =0x00011117
+	str r2, [r0, #0x818]
+	ldr r2, =0x00000000
+	str r2, [r0, #0x01c]
+.endm
+.macro imx6_clock_gating
+	ldr r0, =CCM_BASE_ADDR
+	ldr r1, =0xffffffff
+	str r1, [r0, #0x068]
+	str r1, [r0, #0x06c]
+	str r1, [r0, #0x070]
+	str r1, [r0, #0x074]
+	str r1, [r0, #0x078]
+	str r1, [r0, #0x07c]
+	str r1, [r0, #0x080]
+	str r1, [r0, #0x084]
+.endm
+
+.macro imx6_qos_setting
+.endm
+
+.macro imx6_ddr_setting
+	imx6sx_sabresd_ddr_setting
+.endm
+
+/* include the common plugin code here */
+#include <asm/arch/mx6_plugin.S>
-- 
1.7.4.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 2/4] imx: mx6q/dlarm2: Add support for building plugin image
  2014-11-04  8:27 ` [U-Boot] [PATCH 2/4] imx: mx6q/dlarm2: Add support for building plugin image Ye.Li
@ 2014-11-04 11:37   ` Otavio Salvador
  0 siblings, 0 replies; 7+ messages in thread
From: Otavio Salvador @ 2014-11-04 11:37 UTC (permalink / raw)
  To: u-boot

On Tue, Nov 4, 2014 at 6:27 AM, Ye.Li <B37916@freescale.com> wrote:
> Update "cfg" script to build for plugin image. This default plugin
> image supports the boot devices as DCD image.
>
> To enable the plugin, must define the CONFIG_USE_PLUGIN in "mx6qarm2.h"
>
> Signed-off-by: Ye.Li <B37916@freescale.com>

I'd prefer:

CONFIG_IMX_BOOTROM_PLUGIN

This makes it easier to spot when looking at the config option.

-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images
  2014-11-04  8:27 [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images Ye.Li
                   ` (2 preceding siblings ...)
  2014-11-04  8:27 ` [U-Boot] [PATCH 4/4] imx: mx6sxsabresd: " Ye.Li
@ 2014-11-04 15:46 ` Fabio Estevam
  2014-11-05  8:12   ` Li Ye-B37916
  3 siblings, 1 reply; 7+ messages in thread
From: Fabio Estevam @ 2014-11-04 15:46 UTC (permalink / raw)
  To: u-boot

Hi Ye Li,

On Tue, Nov 4, 2014 at 6:27 AM, Ye.Li <B37916@freescale.com> wrote:
> Plugin image is a firmware which can be executed by boot ROM to do
> device initialization, custom settings, delay assertion, etc.

Could you please elaborate a bit mode about the usage of the 'plugin image'?

When does it become useful? When should we make use of it instead of
the current DCD table?

Thanks,

Fabio Estevam

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images
  2014-11-04 15:46 ` [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images Fabio Estevam
@ 2014-11-05  8:12   ` Li Ye-B37916
  0 siblings, 0 replies; 7+ messages in thread
From: Li Ye-B37916 @ 2014-11-05  8:12 UTC (permalink / raw)
  To: u-boot

Hi Fabio,

On 11/4/2014 11:46 PM, Fabio Estevam wrote:
> Hi Ye Li,
>
> On Tue, Nov 4, 2014 at 6:27 AM, Ye.Li <B37916@freescale.com> wrote:
>> Plugin image is a firmware which can be executed by boot ROM to do
>> device initialization, custom settings, delay assertion, etc.
> Could you please elaborate a bit mode about the usage of the 'plugin image'?
>
> When does it become useful? When should we make use of it instead of
> the current DCD table?
>
> Thanks,
>
> Fabio Estevam
I will improve the patch message in v2.

Best regards,
Ye Li

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-11-05  8:12 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-04  8:27 [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images Ye.Li
2014-11-04  8:27 ` [U-Boot] [PATCH 2/4] imx: mx6q/dlarm2: Add support for building plugin image Ye.Li
2014-11-04 11:37   ` Otavio Salvador
2014-11-04  8:27 ` [U-Boot] [PATCH 3/4] imx: mx6slevk: " Ye.Li
2014-11-04  8:27 ` [U-Boot] [PATCH 4/4] imx: mx6sxsabresd: " Ye.Li
2014-11-04 15:46 ` [U-Boot] [PATCH 1/4] imx: mx6: Add support for MX6 plugin images Fabio Estevam
2014-11-05  8:12   ` Li Ye-B37916

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox