static set_dcd_rst_t set_dcd_rst;
 static set_imx_hdr_t set_imx_hdr;
 static uint32_t max_dcd_entries;
+static uint32_t *header_size_ptr;
 
 static uint32_t get_cfg_value(char *token, char *name,  int linenr)
 {
        flash_header_v1_t *fhdr_v1 = &hdr_v1->fhdr;
        dcd_v1_t *dcd_v1 = &hdr_v1->dcd_table;
        uint32_t base_offset;
+       uint32_t header_length = (((char *)&dcd_v1->addr_data[dcd_len].addr)
+                       - ((char *)imxhdr));
 
        /* Set magic number */
        fhdr_v1->app_code_barker = APP_CODE_BARKER;
        fhdr_v1->dcd_ptr = base_offset +
                        offsetof(imx_header_v1_t, dcd_table);
 
-       /* The external flash header must be at the end of the DCD table */
-       dcd_v1->addr_data[dcd_len].type = sbuf->st_size +
-                               imxhdr->flash_offset;
-
        /* Security feature are not supported */
        fhdr_v1->app_code_csf = 0;
        fhdr_v1->super_root_key = 0;
+       header_size_ptr = (uint32_t *)(((char *)imxhdr) + header_length - 4);
 }
 
 static void set_imx_hdr_v2(struct imx_header *imxhdr, uint32_t dcd_len,
                        offsetof(imx_header_v2_t, boot_data);
 
        hdr_v2->boot_data.start = fhdr_v2->self - imxhdr->flash_offset;
-       hdr_v2->boot_data.size = sbuf->st_size +
-                       imxhdr->flash_offset;
 
        /* Security feature are not supported */
        fhdr_v2->csf = 0;
+       header_size_ptr = &hdr_v2->boot_data.size;
 }
 
 static void set_hdr_func(struct imx_header *imxhdr)
 
        /* Set the imx header */
        (*set_imx_hdr)(imxhdr, dcd_len, sbuf, params);
+       *header_size_ptr = sbuf->st_size + imxhdr->flash_offset;
 }
 
 int imximage_check_params(struct mkimage_params *params)