---
 tools/mkimage.h  |    6 ++++++
 tools/ublimage.c |   31 +++++++++++++++++++++++++++++--
 tools/ublimage.h |    2 ++
 3 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/tools/mkimage.h b/tools/mkimage.h
index 5fe1a48..cd835f0 100644
--- a/tools/mkimage.h
+++ b/tools/mkimage.h
@@ -140,6 +140,12 @@ struct image_type_params {
 void mkimage_register (struct image_type_params *tparams);
 
 /*
+ * This struct contains the global parameters and is initialized 
+ * by the main core before any image type specific functions are called.
+ */
+extern struct mkimage_params params;
+
+/*
  * There is a c file associated with supported image type low level code
  * for ex. default_image.c, fit_image.c
  * init is the only function referred by mkimage core.
diff --git a/tools/ublimage.c b/tools/ublimage.c
index d6b4017..b5fa5c2 100644
--- a/tools/ublimage.c
+++ b/tools/ublimage.c
@@ -36,6 +36,10 @@
 #include <image.h>
 #include "ublimage.h"
 
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
 /*
  * Supported commands for configuration file
  */
@@ -58,8 +62,9 @@ static table_entry_t ublimage_cmds[] = {
  * this is needed to set the correct flash offset
  */
 static table_entry_t ublimage_bootops[] = {
-       {UBL_MAGIC_SAFE,        "safe", "Safe boot mode",       },
-       {-1,                    "",     "Invalid",              },
+       {UBL_MAGIC_SAFE,"safe", "Safe boot mode",       },
+       {UBL_MAGIC_PLL, "pll", "With PLL enabled to have higher ARM/DMA 
clocks",        },
+       {-1,            "",     "Invalid",              },
 };
 
 static struct ubl_header ublimage_header;
@@ -89,6 +94,22 @@ static void print_hdr(struct ubl_header *ubl_hdr)
        printf("start page : %08x\n", ubl_hdr->page);
 }
 
+/* 
+ * This function calculates the size of the datafile in NAND pages
+ */
+static uint32_t get_data_pages_size(void)
+{
+       uint32_t size = 0;
+       struct stat buf;
+       int rv = stat(params.datafile, &buf);
+       if (rv == 0) {
+               size = (buf.st_size/UBL_BLOCK_SIZE) + (buf.st_size % 
UBL_BLOCK_SIZE == 0 ? 0 : 1);
+       } else {
+               fprintf(stderr, "Error: could not stat datafile %s\n", 
params.datafile);
+       }
+       return size;
+}
+
 static void parse_cfg_cmd(struct ubl_header *ublhdr, int32_t cmd, char *token,
                                char *name, int lineno, int fld, int dcd_len)
 {
@@ -171,6 +192,12 @@ static uint32_t parse_cfg_file(struct ubl_header *ublhdr, 
char *name)
                *ptr = 0xff;
                ptr++;
        }
+       
+        /* By default, the size of the data in NAND pages
+         * will be automatically calculated but it can be overwritten
+         * in the configuration file.
+         */
+       ublhdr->pages = get_data_pages_size();
 
        /*
         * Very simple parsing, line starting with # are comments
diff --git a/tools/ublimage.h b/tools/ublimage.h
index e440625..cbff8b7 100644
--- a/tools/ublimage.h
+++ b/tools/ublimage.h
@@ -61,6 +61,8 @@ enum ublimage_fld_types {
 #define UBL_MAGIC_DMA_IC            (0x44)
 /* DMA + ICache + Fast EMIF boot mode */
 #define UBL_MAGIC_DMA_IC_FAST       (0x55)
+/* With PLL enabled to have higher ARM/DMA clocks */
+#define UBL_MAGIC_PLL               (0x66)
 
 /* Define max UBL image size */
 #define UBL_IMAGE_SIZE              (0x00003800u)
-- 
1.7.9.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to