From patchwork Wed Jul 15 22:49:09 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrian Alonso X-Patchwork-Id: 496031 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 598051402B2 for ; Thu, 16 Jul 2015 10:54:27 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4AA1F4B632; Thu, 16 Jul 2015 02:54:23 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TWVYyL0AnGsY; Thu, 16 Jul 2015 02:54:23 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 7124B4B61D; Thu, 16 Jul 2015 02:54:22 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4486D4B61D for ; Thu, 16 Jul 2015 02:54:18 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id UhWKoOmMMo4Y for ; Thu, 16 Jul 2015 02:54:17 +0200 (CEST) X-Greylist: delayed 7408 seconds by postgrey-1.34 at theia; Thu, 16 Jul 2015 02:54:13 CEST X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1on0132.outbound.protection.outlook.com [157.56.110.132]) by theia.denx.de (Postfix) with ESMTPS id 3FD494B61C for ; Thu, 16 Jul 2015 02:54:13 +0200 (CEST) Received: from BY2PR03CA002.namprd03.prod.outlook.com (10.255.93.19) by BL2PR03MB244.namprd03.prod.outlook.com (10.255.231.26) with Microsoft SMTP Server (TLS) id 15.1.219.9; Wed, 15 Jul 2015 23:00:59 +0000 Received: from BY2FFO11FD054.protection.gbl (10.255.93.4) by BY2PR03CA002.outlook.office365.com (10.255.93.19) with Microsoft SMTP Server (TLS) id 15.1.219.17 via Frontend Transport; Wed, 15 Jul 2015 23:00:53 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BY2FFO11FD054.mail.protection.outlook.com (10.1.15.191) with Microsoft SMTP Server (TLS) id 15.1.190.9 via Frontend Transport; Wed, 15 Jul 2015 22:50:25 +0000 Received: from bluefly.am.freescale.net (bluefly.am.freescale.net [10.81.17.130]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id t6FMoOQX030445; Wed, 15 Jul 2015 15:50:24 -0700 From: Adrian Alonso To: , Date: Wed, 15 Jul 2015 17:49:09 -0500 Message-ID: <1437000559-3208-1-git-send-email-aalonso@freescale.com> X-Mailer: git-send-email 2.1.4 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD054; 1:yQtdRzLh2BWyCTKaI2l2v7v/q2Otd86OvHoIIadhr6fK0UZt/obUvJsJkjQl1pV1SfgnG0aEoaZE8gD2adgXTznzbrPianJsSmfjaovrtPQshcUJ6bT1PnhLvBTl3OngTqBbXT8UOMGvm+5QCv2G2Qdp+d3lUilgp2c9fiD0NXNQDUDaB9sTmvX8KglMZuTiw6GbIkSBtjkXUUJLesfznvA/zx9e1Dpqj0WF9FuxVvyNw19RDyEa9COnjvpXal+sPLOJhjKBzQwiDQQ4rf4G9ZVP1JAuUKwg4JKUGIdRMyQHXuadIMv2XKaNGkNvFXurBupEsSgnp/hp/jJsALxl3g== X-Forefront-Antispam-Report: CIP:192.88.158.2; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(339900001)(199003)(189002)(85426001)(105606002)(86362001)(87936001)(189998001)(5001960100002)(107886002)(5003940100001)(36756003)(46102003)(229853001)(19580405001)(19580395003)(50986999)(104016003)(48376002)(50466002)(50226001)(6806004)(47776003)(5001770100001)(5001920100001)(77156002)(106466001)(62966003)(77096005)(33646002)(92566002)(217873001)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BL2PR03MB244; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:sfv; A:1; MX:1; LANG:; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB244; 2:8Bb27sKN/0RikooSJgjHCiUmAxndSWvcD4K+/5BpkFqPhMcJ6mZf+kc15PQqAlxi; 3:9JlqO5TgINZMopkIIkBm6y2a9QroKG0uPM2g9jE1o/jWv3PSo5kJ7Rj5Oo527Myx7xXbpJi0TnZL7t4Z0v80X0gmWtwk0erB7qp43QqyMT5SxKlV7OVNSYb0QA/efRnR2PqL9e5vAVCaYZ6Lko2sEF7nIQsEeXHC1DQ1oEkM0ulkES4rHKDu0j1GG/5+wrEjVP+VuC+Um01ZDtIgTPGFTuP1FNXWyKTFOZp3wrUQYas=; 25:C0u9AIWgQW3+PezmOkEYw/ux1XGDnvPAMXQN2c1I93x7K7rxmoExLDZTCcTN15XbHHCr5p73I/vS05hpoWyORM2i/KL7k07BM7p7Nuv8tOV4REirYagFRu1gFhnxeuEmzZElAlvK3sCRDw6+wXooQ11IBtMrahNVk5L0xZrfzRPNw7dcImbK0CfYUUHtU9kg9oP81c14+Vvtu2vBC+bqfACezim6og+ONmLgmq2aAI7V9mqDlgEs0Y0C/2SEmtuNM/g8hPpzrluYBiTb2RVAkw==; 20:Az4snUaKOM6FmSUvdaqfGLPNVxND0ADm/eqxLNvFSeoKB4dew/XmqZjjL1QvM/8RlCdIEAr8+z9QUa5oHQxKfKYMTyTxOeuW5kk4++XVgD0+2Zld0eoUr0GE1G+ZLpZVspxivM3Sqcs1Da33saFePKLeRevvrP1Loe2OLArK8x6oCbOLFKW2sYyiGogtZU7BZ/fp+TrAcZxhfwIHj5MW4iPiUjmtB3Wilh+1/8A8tgCug1PWhCHDLp0xCZlZ33+0aa2euSZivs6iwbZBmE3oJtdomknpZPnacjfconjhKgsTR8WBlbtUxTqCe9T+HqUUkZ7wWqaJPmvO/1nmJMPV/4o1PRpGGmsoFhlxIveE+TE= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BL2PR03MB244; BL2PR03MB244: X-MS-Exchange-Organization-RulesExecuted X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(3002001); SRVR:BL2PR03MB244; BCL:0; PCL:0; RULEID:; SRVR:BL2PR03MB244; X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB244; 4:VIS65PPv4jrLLOEQqrlBbTDt4TpTD8X+JyV/e0Pgsqr3NC9gIFYDsX0e1WKIl2DbNYatDbdsxT8MrqoYYx6O/Ff/vtQK6pUt64TBRAbsvu40aUMpixjonRSfX50FCmaZXNBRvCuksE20MQG9bv4nPjdZJUVMCbq3b7NCbPhSNXNqOAUO6vD4H73nku5FvWwbHsVZ9Nekg1A6LWUv3RXWeKT6cybEJ1Lm89nmG7sZZ41kdjGQUKCsvn1+mfu1/S4O0XB+M1dfOXXNklSXjzMdwWbGRSeGIwVfelyqlimcqyY= X-Forefront-PRVS: 0639027A9E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BL2PR03MB244; 23:EoVi6ukTpr8ubHZyVoqe27+RIwxzB2gvE+JWHYTeS5?= =?us-ascii?Q?ZTr2JqAz4uLpu3yVlqTvRUhOl2T34E5aYv4AdIbgCRaU+SOHzIH+SByIIX26?= =?us-ascii?Q?RvnLt04T3mh9wAzC7g2O4tVA75wbadRE9qWwzpI/mJBUdpsUXavNS6Q44X9F?= =?us-ascii?Q?0yni2HLxnKvYHv7Ch+fBtybQv4KWsk0IY+3e8o9glL9noZXmqsn/Zd7Yf0Oz?= =?us-ascii?Q?5GwNDt1rj8yjE21UEFO/cC3QcSdtPT8SfPWbNnXb58xjMA20Al26FdwLOGHG?= =?us-ascii?Q?uA1ImPc2u4Rgy7lcgKf8/f3NNKZVY962gmBU+75BnrJJnM+yLJa/mSxr0EuA?= =?us-ascii?Q?TBbJrlcRv8tyANvC5rsXuAJNx9mwPYzUQ4SVM+2zO7xpd6LuX6S3vgG9vtWd?= =?us-ascii?Q?KoI/A4r2/JnLWPaws9MmQAd+cGg4XoE+hvtpTFFWoeHv0bbMMPPzFwYBMlSR?= =?us-ascii?Q?8TpNwzGOsWlzM9u2BcfQ2KgdqnsjQVZAVWOy5etC47X74r0XgHPJFPAuIcKT?= =?us-ascii?Q?DcfIKkQp2jv848xZ19EUeolUx8+kBsdvlr+HiHxq9N4591PPuBivD9GrXZ1i?= =?us-ascii?Q?HHlT1EojS/dwIybbUC8XynC/3iuZW4jx10pN1mBEFcmX6iwm+exI9zHWmlYe?= =?us-ascii?Q?Af9nb76YVd4l2RGcmgcr5qFdSPHw2ju3q73yKkDCd02s2cjt9Sp9WxvTMusG?= =?us-ascii?Q?rjo24xUstosecRp4JsN1QBKMiYTvcBYRyfx6NzqjHxJIPsZiEpaK3lzK7qZG?= =?us-ascii?Q?pd4y9GfAjgl+s2qe00mvLVdXoEQn5y3lSXmBPYWGnbfFeV42smf0N5mEU6pJ?= =?us-ascii?Q?VfWyWT3abB6rQ3PP7CjRZm/lNXhohZ8X7QMTA4X0+/5o5EXvBq9TGGysBytA?= =?us-ascii?Q?nnR8CxDQvy0+n+fFZMP56QMAheLHZJWdwHOU6RsPud4821Q3h5NK5Cb57iyj?= =?us-ascii?Q?RP9DCdZGwsrOYX4m9at036NVOuBVwC2YoIzrikiQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB244; 5:Ijw+80UJz0EYjjtRhY31QfDk328Tg7snRGMMFxPhwgzCfwcp3KQdgz1ypyjqpmME0webX8JdvCs/esiaXNRRMJrTyEZWY2gzopcv0NZQUVl8fbFQ1QfVLRPylW8kRPsBx/WERYS1SVzOxftBWmCGMQ==; 24:CynpLiealxxslz4ZWWYh6VkovawScLx2VDa4Gw7QOhdTf9mF+eaYqT3jSNwmrqIf+u1VAGaAupcfG00vE5AEzp9v+gN0pitE33aggE88BW0=; 20:rPy200BGIhrjlY9UM/mxCb4zZmiRfuo62A7eLeCP2GV9uEXI//7ox/SVNU8r3mGLxoi6SrqVKjYRaUTdrfly5g== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2015 22:50:25.7099 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR03MB244 Cc: Fabio.Estevam@freescale.com, otavio@ossystems.com.br Subject: [U-Boot] [PATCH 01/11][v2] imx: imximage: add new CHECK/CLR BIT command X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" * Extend imximage DCD version 2 to support DCD commands CMD_WRITE_CLR_BIT 4 [address] [mask bit] means: while ((*address & ~mask) != 0); CMD_CHECK_BITS_SET 4 [address] [mask bit] means: while ((*address & mask) != mask); CMD_CHECK_BITS_CLR 4 [address] [mask bit] means: *address = *address & ~mask; * Add set_dcd_param_v2 helper function to set DCD command parameters Signed-off-by: Adrian Alonso Signed-off-by: Peng Fan --- Changes for V2 - Add set_dcd_param_v2 helper function to set DCD command tag and parameters tools/imximage.c | 99 ++++++++++++++++++++++++++++++++++++++++++++------------ tools/imximage.h | 25 ++++++++++---- 2 files changed, 97 insertions(+), 27 deletions(-) diff --git a/tools/imximage.c b/tools/imximage.c index 6f469ae..cc0392f 100644 --- a/tools/imximage.c +++ b/tools/imximage.c @@ -21,7 +21,10 @@ static table_entry_t imximage_cmds[] = { {CMD_BOOT_FROM, "BOOT_FROM", "boot command", }, {CMD_BOOT_OFFSET, "BOOT_OFFSET", "Boot offset", }, - {CMD_DATA, "DATA", "Reg Write Data", }, + {CMD_WRITE_DATA, "DATA", "Reg Write Data", }, + {CMD_WRITE_CLR_BIT, "CLR_BIT", "Reg clear bit", }, + {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", }, {-1, "", "", }, @@ -62,7 +65,7 @@ static table_entry_t imximage_boot_loadsize[] = { */ static table_entry_t imximage_versions[] = { {IMXIMAGE_V1, "", " (i.MX25/35/51 compatible)", }, - {IMXIMAGE_V2, "", " (i.MX53/6 compatible)", }, + {IMXIMAGE_V2, "", " (i.MX53/6/7 compatible)", }, {-1, "", " (Invalid)", }, }; @@ -79,6 +82,7 @@ static uint32_t imximage_csf_size = UNDEFINED; static uint32_t imximage_init_loadsize; static set_dcd_val_t set_dcd_val; +static set_dcd_param_t set_dcd_param; static set_dcd_rst_t set_dcd_rst; static set_imx_hdr_t set_imx_hdr; static uint32_t max_dcd_entries; @@ -128,6 +132,12 @@ static void err_imximage_version(int version) exit(EXIT_FAILURE); } +static void set_dcd_param_v1(struct imx_header *imxhdr, uint32_t dcd_len, + int32_t cmd) +{ + /* DCD V1 no parameter settings */ +} + static void set_dcd_val_v1(struct imx_header *imxhdr, char *name, int lineno, int fld, uint32_t value, uint32_t off) { @@ -156,6 +166,43 @@ static void set_dcd_val_v1(struct imx_header *imxhdr, char *name, int lineno, } } +static void set_dcd_param_v2(struct imx_header *imxhdr, uint32_t dcd_len, + int32_t cmd) +{ + dcd_v2_t *dcd_v2 = &imxhdr->header.hdr_v2.dcd_table; + + switch (cmd) { + case CMD_WRITE_DATA: + dcd_v2->write_dcd_command.tag = DCD_WRITE_DATA_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_WRITE_DATA_PARAM; + break; + case CMD_WRITE_CLR_BIT: + dcd_v2->write_dcd_command.tag = DCD_WRITE_DATA_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_WRITE_CLR_BIT_PARAM; + break; + case CMD_CHECK_BITS_SET: + dcd_v2->write_dcd_command.tag = DCD_CHECK_DATA_COMMAND_TAG; + /* + * Check data command only supports one entry, + * so use 0xC = size(address + value + command). + */ + dcd_v2->write_dcd_command.length = cpu_to_be16(0xC); + dcd_v2->write_dcd_command.param = DCD_CHECK_BITS_SET_PARAM; + break; + case CMD_CHECK_BITS_CLR: + dcd_v2->write_dcd_command.tag = DCD_CHECK_DATA_COMMAND_TAG; + dcd_v2->write_dcd_command.length = cpu_to_be16(0xC); + dcd_v2->write_dcd_command.param = DCD_CHECK_BITS_SET_PARAM; + break; + default: + break; + } +} + static void set_dcd_val_v2(struct imx_header *imxhdr, char *name, int lineno, int fld, uint32_t value, uint32_t off) { @@ -200,10 +247,7 @@ static void set_dcd_rst_v2(struct imx_header *imxhdr, uint32_t dcd_len, 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; + set_dcd_param_v2(imxhdr, dcd_len, CMD_WRITE_DATA); } static void set_imx_hdr_v1(struct imx_header *imxhdr, uint32_t dcd_len, @@ -266,12 +310,14 @@ static void set_hdr_func(void) switch (imximage_version) { case IMXIMAGE_V1: set_dcd_val = set_dcd_val_v1; + set_dcd_param = set_dcd_param_v1; set_dcd_rst = set_dcd_rst_v1; set_imx_hdr = set_imx_hdr_v1; max_dcd_entries = MAX_HW_CFG_SIZE_V1; break; case IMXIMAGE_V2: set_dcd_val = set_dcd_val_v2; + set_dcd_param = set_dcd_param_v2; set_dcd_rst = set_dcd_rst_v2; set_imx_hdr = set_imx_hdr_v2; max_dcd_entries = MAX_HW_CFG_SIZE_V2; @@ -396,8 +442,12 @@ 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; - case CMD_DATA: + case CMD_WRITE_DATA: + case CMD_WRITE_CLR_BIT: + case CMD_CHECK_BITS_SET: + case CMD_CHECK_BITS_CLR: value = get_cfg_value(token, name, lineno); + (*set_dcd_param)(imxhdr, dcd_len, cmd); (*set_dcd_val)(imxhdr, name, lineno, fld, value, dcd_len); if (unlikely(cmd_ver_first != 1)) cmd_ver_first = 0; @@ -436,20 +486,29 @@ 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_WRITE_DATA: + case CMD_WRITE_CLR_BIT: + case CMD_CHECK_BITS_SET: + case CMD_CHECK_BITS_CLR: + + value = get_cfg_value(token, name, lineno); + (*set_dcd_param)(imxhdr, *dcd_len, *cmd); + (*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; + default: + break; } break; default: diff --git a/tools/imximage.h b/tools/imximage.h index 36fe095..c199814 100644 --- a/tools/imximage.h +++ b/tools/imximage.h @@ -42,19 +42,27 @@ #define FLASH_LOADSIZE_SATA FLASH_LOADSIZE_STANDARD #define FLASH_LOADSIZE_QSPI 0x0 /* entire image */ -#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 +/* Command tags and parameters */ +#define IVT_HEADER_TAG 0xD1 +#define IVT_VERSION 0x40 +#define DCD_HEADER_TAG 0xD2 +#define DCD_VERSION 0x40 +#define DCD_WRITE_DATA_COMMAND_TAG 0xCC +#define DCD_WRITE_DATA_PARAM 0x4 +#define DCD_WRITE_CLR_BIT_PARAM 0xC +#define DCD_CHECK_DATA_COMMAND_TAG 0xCF +#define DCD_CHECK_BITS_SET_PARAM 0x14 +#define DCD_CHECK_BITS_CLR_PARAM 0x04 enum imximage_cmd { CMD_INVALID, CMD_IMAGE_VERSION, CMD_BOOT_FROM, CMD_BOOT_OFFSET, - CMD_DATA, + CMD_WRITE_DATA, + CMD_WRITE_CLR_BIT, + CMD_CHECK_BITS_SET, + CMD_CHECK_BITS_CLR, CMD_CSF, }; @@ -167,6 +175,9 @@ typedef void (*set_dcd_val_t)(struct imx_header *imxhdr, int fld, uint32_t value, uint32_t off); +typedef void (*set_dcd_param_t)(struct imx_header *imxhdr, uint32_t dcd_len, + int32_t cmd); + typedef void (*set_dcd_rst_t)(struct imx_header *imxhdr, uint32_t dcd_len, char *name, int lineno);