]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - tools/imximage.c
Merge branch 'master' of git://git.denx.de/u-boot-nand-flash
[karo-tx-uboot.git] / tools / imximage.c
index 63f88b6c422390fa27b47b781f051776cc7978ff..5e8e4701d33a620af019c5c86ae8b52b3ef9eb09 100644 (file)
@@ -37,6 +37,7 @@
  */
 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_IMAGE_VERSION,     "IMAGE_VERSION",        "image version",  },
        {-1,                    "",                     "",               },
@@ -352,6 +353,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;
+       case CMD_BOOT_OFFSET:
+               imxhdr->flash_offset = get_cfg_value(token, name, lineno);
+               if (unlikely(cmd_ver_first != 1))
+                       cmd_ver_first = 0;
+               break;
        case CMD_DATA:
                value = get_cfg_value(token, name, lineno);
                (*set_dcd_val)(imxhdr, name, lineno, fld, value, dcd_len);
@@ -515,7 +521,17 @@ static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd,
 
        /* Set the imx header */
        (*set_imx_hdr)(imxhdr, dcd_len, params->ep, imxhdr->flash_offset);
-       *header_size_ptr = sbuf->st_size + imxhdr->flash_offset;
+
+       /*
+        * ROM bug alert
+        *
+        * MX53 only loads 512 byte multiples in case of SD boot.
+        * MX53 only loads NAND page multiples in case of NAND boot and
+        * supports up to 4096 byte large pages, thus align to 4096.
+        *
+        * The remaining fraction of a block bytes would not be loaded!
+        */
+       *header_size_ptr = ROUND(sbuf->st_size + imxhdr->flash_offset, 4096);
 }
 
 int imximage_check_params(struct mkimage_params *params)
@@ -544,7 +560,7 @@ int imximage_check_params(struct mkimage_params *params)
  * imximage parameters
  */
 static struct image_type_params imximage_params = {
-       .name           = "Freescale i.MX 5x Boot Image support",
+       .name           = "Freescale i.MX Boot Image support",
        .header_size    = sizeof(struct imx_header),
        .hdr            = (void *)&imximage_header,
        .check_image_type = imximage_check_image_types,