summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorNitin Garg <nitin.garg@freescale.com>2015-04-02 21:40:39 -0500
committerMax Krummenacher <max.krummenacher@toradex.com>2016-03-09 14:42:22 +0100
commit164e1d59c736ac233b817fa43f9c2d12b8a2b9de (patch)
treed9fa77a59c16d633063a8caf29b7db3cbd71a020 /tools
parent6c0b1859cc52ff929365560c1fefdf2e849d423f (diff)
MLK-10567: Extend u-boot imximage to support check bits set/clr
Add support for HAB "Check data" all bits set and clear check functionality. Rename CHECK_DATA to CHECK_BITS_SET. Flag=0 -> (*address & mask) == 0 | All bits clear Flag=2 -> (*address & mask) == mask | All bits set Signed-off-by: Nitin Garg <nitin.garg@freescale.com> (cherry picked from commit 0836912ef7a53d1f3d65f95556a34d03b8d65399)
Diffstat (limited to 'tools')
-rw-r--r--tools/imximage.c24
-rw-r--r--tools/imximage.h6
2 files changed, 22 insertions, 8 deletions
diff --git a/tools/imximage.c b/tools/imximage.c
index a3af2c83e5..32f5bc46f6 100644
--- a/tools/imximage.c
+++ b/tools/imximage.c
@@ -25,7 +25,8 @@ static table_entry_t imximage_cmds[] = {
{CMD_BOOT_OFFSET, "BOOT_OFFSET", "Boot offset", },
{CMD_DATA, "DATA", "Reg Write Data", },
{CMD_CLR_BIT, "CLR_BIT", "Reg clear bit", },
- {CMD_CHECK_DATA, "CHECK_DATA", "Reg Check Data", },
+ {CMD_CHECK_BITS_SET, "CHECK_BITS_SET", "Reg Check bits set", },
+ {CMD_CHECK_BITS_CLR, "CHECK_BITS_CLR", "Reg Check bits clr", },
{CMD_CSF, "CSF", "Command Sequence File", },
{CMD_IMAGE_VERSION, "IMAGE_VERSION", "image version", },
#ifdef CONFIG_USE_PLUGIN
@@ -190,14 +191,22 @@ static void set_dcd_val_v2(struct imx_header *imxhdr, char *name, int lineno,
dcd_command_block->length = cpu_to_be16(off *
sizeof(dcd_addr_data_t) + 4);
dcd_command_block->param = DCD_CLR_BIT_PARAM;
- } else if (CMD_CHECK_DATA) {
+ } else if (cmd == CMD_CHECK_BITS_SET) {
dcd_command_block->tag = DCD_CHECK_DATA_COMMAND_TAG;
/*
* check data command only supports one entry,
* so use 0xC = size(address + value + command).
*/
dcd_command_block->length = cpu_to_be16(0xC);
- dcd_command_block->param = DCD_CHECK_DATA_PARAM;
+ dcd_command_block->param = DCD_CHECK_BITS_SET_PARAM;
+ } else if (cmd == CMD_CHECK_BITS_CLR) {
+ dcd_command_block->tag = DCD_CHECK_DATA_COMMAND_TAG;
+ /*
+ * check data command only supports one entry,
+ * so use 0xC = size(address + value + command).
+ */
+ dcd_command_block->length = cpu_to_be16(0xC);
+ dcd_command_block->param = DCD_CHECK_BITS_CLR_PARAM;
}
case CFG_REG_ADDRESS:
dcd_command_block->addr_data[off].addr = cpu_to_be32(value);
@@ -612,7 +621,8 @@ static void parse_cfg_fld(struct imx_header *imxhdr, int32_t *cmd,
}
if ((*precmd == CMD_DATA) || (*precmd == CMD_CLR_BIT) ||
- (*precmd == CMD_CHECK_DATA)) {
+ (*precmd == CMD_CHECK_BITS_SET) ||
+ (*precmd == CMD_CHECK_BITS_CLR)) {
if (*cmd != *precmd) {
dataindex += ((*dcd_len) *
sizeof(dcd_addr_data_t) + 4) >> 2;
@@ -621,7 +631,8 @@ static void parse_cfg_fld(struct imx_header *imxhdr, int32_t *cmd,
}
if ((*cmd == CMD_DATA) || (*cmd == CMD_CLR_BIT) ||
- (*cmd == CMD_CHECK_DATA)) {
+ (*cmd == CMD_CHECK_BITS_SET) ||
+ (*cmd == CMD_CHECK_BITS_CLR)) {
/*
* Reserve the first entry for command header,
* So use *dcd_len + 1 as the off.
@@ -639,7 +650,8 @@ static void parse_cfg_fld(struct imx_header *imxhdr, int32_t *cmd,
case CFG_REG_ADDRESS:
case CFG_REG_VALUE:
switch (*cmd) {
- case CMD_CHECK_DATA:
+ case CMD_CHECK_BITS_SET:
+ case CMD_CHECK_BITS_CLR:
case CMD_DATA:
case CMD_CLR_BIT:
value = get_cfg_value(token, name, lineno);
diff --git a/tools/imximage.h b/tools/imximage.h
index 2d33f8f5e1..68602a93df 100644
--- a/tools/imximage.h
+++ b/tools/imximage.h
@@ -66,7 +66,8 @@
#define DCD_WRITE_DATA_PARAM 0x4
#define DCD_CLR_BIT_PARAM 0xC
#define DCD_CHECK_DATA_COMMAND_TAG 0xCF
-#define DCD_CHECK_DATA_PARAM 0x14
+#define DCD_CHECK_BITS_SET_PARAM 0x14
+#define DCD_CHECK_BITS_CLR_PARAM 0x04
enum imximage_cmd {
CMD_INVALID,
@@ -75,7 +76,8 @@ enum imximage_cmd {
CMD_BOOT_OFFSET,
CMD_DATA,
CMD_CLR_BIT,
- CMD_CHECK_DATA,
+ CMD_CHECK_BITS_SET,
+ CMD_CHECK_BITS_CLR,
CMD_CSF,
CMD_PLUGIN,
};