]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/image.c
driver/serial: delete at91rm9200_usart
[karo-tx-uboot.git] / common / image.c
index d7fcd1db21b3cb4a448b07c108536b00ce69c87b..e542a5736710ec94ef547158211c0365bc2372e3 100644 (file)
@@ -60,12 +60,12 @@ static int fit_check_ramdisk (const void *fit, int os_noffset,
 #endif
 
 #ifdef CONFIG_CMD_BDI
-extern int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
+extern int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
 #endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
+static const image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
                                                int verify);
 #else
 #include "mkimage.h"
@@ -74,13 +74,7 @@ static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
 #include <image.h>
 #endif /* !USE_HOSTCC*/
 
-typedef struct table_entry {
-       int     id;             /* as defined in image.h        */
-       char    *sname;         /* short (input) name           */
-       char    *lname;         /* long (output) name           */
-} table_entry_t;
-
-static table_entry_t uimage_arch[] = {
+static const table_entry_t uimage_arch[] = {
        {       IH_ARCH_INVALID,        NULL,           "Invalid ARCH", },
        {       IH_ARCH_ALPHA,          "alpha",        "Alpha",        },
        {       IH_ARCH_ARM,            "arm",          "ARM",          },
@@ -90,7 +84,6 @@ static table_entry_t uimage_arch[] = {
        {       IH_ARCH_MICROBLAZE,     "microblaze",   "MicroBlaze",   },
        {       IH_ARCH_MIPS,           "mips",         "MIPS",         },
        {       IH_ARCH_MIPS64,         "mips64",       "MIPS 64 Bit",  },
-       {       IH_ARCH_NIOS,           "nios",         "NIOS",         },
        {       IH_ARCH_NIOS2,          "nios2",        "NIOS II",      },
        {       IH_ARCH_PPC,            "powerpc",      "PowerPC",      },
        {       IH_ARCH_PPC,            "ppc",          "PowerPC",      },
@@ -103,13 +96,14 @@ static table_entry_t uimage_arch[] = {
        {       -1,                     "",             "",             },
 };
 
-static table_entry_t uimage_os[] = {
+static const table_entry_t uimage_os[] = {
        {       IH_OS_INVALID,  NULL,           "Invalid OS",           },
        {       IH_OS_LINUX,    "linux",        "Linux",                },
 #if defined(CONFIG_LYNXKDI) || defined(USE_HOSTCC)
        {       IH_OS_LYNXOS,   "lynxos",       "LynxOS",               },
 #endif
        {       IH_OS_NETBSD,   "netbsd",       "NetBSD",               },
+       {       IH_OS_OSE,      "ose",          "Enea OSE",             },
        {       IH_OS_RTEMS,    "rtems",        "RTEMS",                },
        {       IH_OS_U_BOOT,   "u-boot",       "U-Boot",               },
 #if defined(CONFIG_CMD_ELF) || defined(USE_HOSTCC)
@@ -135,7 +129,7 @@ static table_entry_t uimage_os[] = {
        {       -1,             "",             "",                     },
 };
 
-static table_entry_t uimage_type[] = {
+static const table_entry_t uimage_type[] = {
        {       IH_TYPE_INVALID,    NULL,         "Invalid Image",      },
        {       IH_TYPE_FILESYSTEM, "filesystem", "Filesystem Image",   },
        {       IH_TYPE_FIRMWARE,   "firmware",   "Firmware",           },
@@ -145,19 +139,22 @@ static table_entry_t uimage_type[] = {
        {       IH_TYPE_SCRIPT,     "script",     "Script",             },
        {       IH_TYPE_STANDALONE, "standalone", "Standalone Program", },
        {       IH_TYPE_FLATDT,     "flat_dt",    "Flat Device Tree",   },
+       {       IH_TYPE_KWBIMAGE,   "kwbimage",   "Kirkwood Boot Image",},
+       {       IH_TYPE_IMXIMAGE,   "imximage",   "Freescale i.MX Boot Image",},
        {       -1,                 "",           "",                   },
 };
 
-static table_entry_t uimage_comp[] = {
+static const table_entry_t uimage_comp[] = {
        {       IH_COMP_NONE,   "none",         "uncompressed",         },
        {       IH_COMP_BZIP2,  "bzip2",        "bzip2 compressed",     },
        {       IH_COMP_GZIP,   "gzip",         "gzip compressed",      },
+       {       IH_COMP_LZMA,   "lzma",         "lzma compressed",      },
+       {       IH_COMP_LZO,    "lzo",          "lzo compressed",       },
        {       -1,             "",             "",                     },
 };
 
 uint32_t crc32 (uint32_t, const unsigned char *, uint);
 uint32_t crc32_wd (uint32_t, const unsigned char *, uint, uint);
-static void genimg_print_size (uint32_t size);
 #if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || defined(USE_HOSTCC)
 static void genimg_print_time (time_t timestamp);
 #endif
@@ -165,7 +162,7 @@ static void genimg_print_time (time_t timestamp);
 /*****************************************************************************/
 /* Legacy format routines */
 /*****************************************************************************/
-int image_check_hcrc (image_header_t *hdr)
+int image_check_hcrc (const image_header_t *hdr)
 {
        ulong hcrc;
        ulong len = image_get_header_size ();
@@ -180,7 +177,7 @@ int image_check_hcrc (image_header_t *hdr)
        return (hcrc == image_get_hcrc (hdr));
 }
 
-int image_check_dcrc (image_header_t *hdr)
+int image_check_dcrc (const image_header_t *hdr)
 {
        ulong data = image_get_data (hdr);
        ulong len = image_get_data_size (hdr);
@@ -202,7 +199,7 @@ int image_check_dcrc (image_header_t *hdr)
  * returns:
  *     number of components
  */
-ulong image_multi_count (image_header_t *hdr)
+ulong image_multi_count (const image_header_t *hdr)
 {
        ulong i, count = 0;
        uint32_t *size;
@@ -235,7 +232,7 @@ ulong image_multi_count (image_header_t *hdr)
  *     data address and size of the component, if idx is valid
  *     0 in data and len, if idx is out of range
  */
-void image_multi_getimg (image_header_t *hdr, ulong idx,
+void image_multi_getimg (const image_header_t *hdr, ulong idx,
                        ulong *data, ulong *len)
 {
        int i;
@@ -271,7 +268,7 @@ void image_multi_getimg (image_header_t *hdr, ulong idx,
        }
 }
 
-static void image_print_type (image_header_t *hdr)
+static void image_print_type (const image_header_t *hdr)
 {
        const char *os, *arch, *type, *comp;
 
@@ -285,7 +282,7 @@ static void image_print_type (image_header_t *hdr)
 
 /**
  * image_print_contents - prints out the contents of the legacy format image
- * @hdr: pointer to the legacy format image header
+ * @ptr: pointer to the legacy format image header
  * @p: pointer to prefix string
  *
  * image_print_contents() formats a multi line legacy image contents description.
@@ -295,8 +292,9 @@ static void image_print_type (image_header_t *hdr)
  * returns:
  *     no returned results
  */
-void image_print_contents (image_header_t *hdr)
+void image_print_contents (const void *ptr)
 {
+       const image_header_t *hdr = (const image_header_t *)ptr;
        const char *p;
 
 #ifdef USE_HOSTCC
@@ -362,10 +360,10 @@ void image_print_contents (image_header_t *hdr)
  *     pointer to a ramdisk image header, if image was found and valid
  *     otherwise, return NULL
  */
-static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
+static const image_header_t *image_get_ramdisk (ulong rd_addr, uint8_t arch,
                                                int verify)
 {
-       image_header_t *rd_hdr = (image_header_t *)rd_addr;
+       const image_header_t *rd_hdr = (const image_header_t *)rd_addr;
 
        if (!image_check_magic (rd_hdr)) {
                puts ("Bad Magic Number\n");
@@ -425,8 +423,8 @@ ulong getenv_bootm_low(void)
                return tmp;
        }
 
-#if defined(CFG_SDRAM_BASE)
-       return CFG_SDRAM_BASE;
+#if defined(CONFIG_SYS_SDRAM_BASE)
+       return CONFIG_SYS_SDRAM_BASE;
 #elif defined(CONFIG_ARM)
        return gd->bd->bi_dram[0].start;
 #else
@@ -436,26 +434,47 @@ ulong getenv_bootm_low(void)
 
 phys_size_t getenv_bootm_size(void)
 {
+       phys_size_t tmp;
        char *s = getenv ("bootm_size");
        if (s) {
-               phys_size_t tmp;
-#ifdef CFG_64BIT_STRTOUL
                tmp = (phys_size_t)simple_strtoull (s, NULL, 16);
+               return tmp;
+       }
+       s = getenv("bootm_low");
+       if (s)
+               tmp = (phys_size_t)simple_strtoull (s, NULL, 16);
+       else
+               tmp = 0;
+
+
+#if defined(CONFIG_ARM)
+       return gd->bd->bi_dram[0].size - tmp;
 #else
-               tmp = (phys_size_t)simple_strtoul (s, NULL, 16);
+       return gd->bd->bi_memsize - tmp;
 #endif
+}
+
+phys_size_t getenv_bootm_mapsize(void)
+{
+       phys_size_t tmp;
+       char *s = getenv ("bootm_mapsize");
+       if (s) {
+               tmp = (phys_size_t)simple_strtoull (s, NULL, 16);
                return tmp;
        }
 
-#if defined(CONFIG_ARM)
-       return gd->bd->bi_dram[0].size;
+#if defined(CONFIG_SYS_BOOTMAPSZ)
+       return CONFIG_SYS_BOOTMAPSZ;
 #else
-       return gd->bd->bi_memsize;
+       return getenv_bootm_size();
 #endif
 }
 
 void memmove_wd (void *to, void *from, size_t len, ulong chunksz)
 {
+       if (to == from)
+               return;
+
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
        while (len > 0) {
                size_t tail = (len > chunksz) ? chunksz : len;
@@ -471,7 +490,7 @@ void memmove_wd (void *to, void *from, size_t len, ulong chunksz)
 }
 #endif /* !USE_HOSTCC */
 
-static void genimg_print_size (uint32_t size)
+void genimg_print_size (uint32_t size)
 {
 #ifndef USE_HOSTCC
        printf ("%d Bytes = ", size);
@@ -513,11 +532,15 @@ static void genimg_print_time (time_t timestamp)
  *     long entry name if translation succeeds
  *     msg otherwise
  */
-static char *get_table_entry_name (table_entry_t *table, char *msg, int id)
+char *get_table_entry_name(const table_entry_t *table, char *msg, int id)
 {
        for (; table->id >= 0; ++table) {
                if (table->id == id)
-                       return (table->lname);
+#if defined(USE_HOSTCC) || !defined(CONFIG_NEEDS_MANUAL_RELOC)
+                       return table->lname;
+#else
+                       return table->lname + gd->reloc_off;
+#endif
        }
        return (msg);
 }
@@ -556,10 +579,10 @@ const char *genimg_get_comp_name (uint8_t comp)
  *     entry id if translation succeeds
  *     -1 otherwise
  */
-static int get_table_entry_id (table_entry_t *table,
+int get_table_entry_id(const table_entry_t *table,
                const char *table_name, const char *name)
 {
-       table_entry_t *t;
+       const table_entry_t *t;
 #ifdef USE_HOSTCC
        int first = 1;
 
@@ -578,7 +601,11 @@ static int get_table_entry_id (table_entry_t *table,
        fprintf (stderr, "\n");
 #else
        for (t = table; t->id >= 0; ++t) {
+#ifdef CONFIG_NEEDS_MANUAL_RELOC
+               if (t->sname && strcmp(t->sname + gd->reloc_off, name) == 0)
+#else
                if (t->sname && strcmp(t->sname, name) == 0)
+#endif
                        return (t->id);
        }
        debug ("Invalid %s Type: %s\n", table_name, name);
@@ -623,13 +650,13 @@ int genimg_get_comp_id (const char *name)
  */
 int genimg_get_format (void *img_addr)
 {
-       ulong           format = IMAGE_FORMAT_INVALID;
-       image_header_t  *hdr;
+       ulong format = IMAGE_FORMAT_INVALID;
+       const image_header_t *hdr;
 #if defined(CONFIG_FIT) || defined(CONFIG_OF_LIBFDT)
-       char            *fit_hdr;
+       char *fit_hdr;
 #endif
 
-       hdr = (image_header_t *)img_addr;
+       hdr = (const image_header_t *)img_addr;
        if (image_check_magic(hdr))
                format = IMAGE_FORMAT_LEGACY;
 #if defined(CONFIG_FIT) || defined(CONFIG_OF_LIBFDT)
@@ -662,7 +689,7 @@ ulong genimg_get_image (ulong img_addr)
 
        if (addr_dataflash (img_addr)){
                /* ger RAM address */
-               ram_addr = CFG_LOAD_ADDR;
+               ram_addr = CONFIG_SYS_LOAD_ADDR;
 
                /* get header size */
                h_size = image_get_header_size ();
@@ -680,7 +707,7 @@ ulong genimg_get_image (ulong img_addr)
                /* get data size */
                switch (genimg_get_format ((void *)ram_addr)) {
                case IMAGE_FORMAT_LEGACY:
-                       d_size = image_get_data_size ((image_header_t *)ram_addr);
+                       d_size = image_get_data_size ((const image_header_t *)ram_addr);
                        debug ("   Legacy format image found at 0x%08lx, size 0x%08lx\n",
                                        ram_addr, d_size);
                        break;
@@ -752,12 +779,12 @@ int genimg_has_config (bootm_headers_t *images)
  *     1, if ramdisk image is found but corrupted, or invalid
  *     rd_start and rd_end are set to 0 if no ramdisk exists
  */
-int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,
+int boot_get_ramdisk (int argc, char * const argv[], bootm_headers_t *images,
                uint8_t arch, ulong *rd_start, ulong *rd_end)
 {
        ulong rd_addr, rd_load;
        ulong rd_data, rd_len;
-       image_header_t *rd_hdr;
+       const image_header_t *rd_hdr;
 #if defined(CONFIG_FIT)
        void            *fit_hdr;
        const char      *fit_uname_config = NULL;
@@ -981,7 +1008,7 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,
        return 0;
 }
 
-#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_SPARC)
+#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH
 /**
  * boot_ramdisk_high - relocate init ramdisk
  * @lmb: pointer to lmb handle, will be used for memory mgmt
@@ -1070,6 +1097,7 @@ int boot_ramdisk_high (struct lmb *lmb, ulong rd_data, ulong rd_len,
 error:
        return -1;
 }
+#endif /* CONFIG_SYS_BOOT_RAMDISK_HIGH */
 
 #ifdef CONFIG_OF_LIBFDT
 static void fdt_error (const char *msg)
@@ -1079,9 +1107,9 @@ static void fdt_error (const char *msg)
        puts (" - must RESET the board to recover.\n");
 }
 
-static image_header_t *image_get_fdt (ulong fdt_addr)
+static const image_header_t *image_get_fdt (ulong fdt_addr)
 {
-       image_header_t *fdt_hdr = (image_header_t *)fdt_addr;
+       const image_header_t *fdt_hdr = (const image_header_t *)fdt_addr;
 
        image_print_contents (fdt_hdr);
 
@@ -1153,19 +1181,48 @@ static int fit_check_fdt (const void *fit, int fdt_noffset, int verify)
 }
 #endif /* CONFIG_FIT */
 
-#ifndef CFG_FDT_PAD
-#define CFG_FDT_PAD 0x3000
+#ifndef CONFIG_SYS_FDT_PAD
+#define CONFIG_SYS_FDT_PAD 0x3000
 #endif
 
+#if defined(CONFIG_OF_LIBFDT)
+/**
+ * boot_fdt_add_mem_rsv_regions - Mark the memreserve sections as unusable
+ * @lmb: pointer to lmb handle, will be used for memory mgmt
+ * @fdt_blob: pointer to fdt blob base address
+ *
+ * Adds the memreserve regions in the dtb to the lmb block.  Adding the
+ * memreserve regions prevents u-boot from using them to store the initrd
+ * or the fdt blob.
+ */
+void boot_fdt_add_mem_rsv_regions(struct lmb *lmb, void *fdt_blob)
+{
+       uint64_t addr, size;
+       int i, total;
+
+       if (fdt_check_header (fdt_blob) != 0)
+               return;
+
+       total = fdt_num_mem_rsv(fdt_blob);
+       for (i = 0; i < total; i++) {
+               if (fdt_get_mem_rsv(fdt_blob, i, &addr, &size) != 0)
+                       continue;
+               printf("   reserving fdt memory region: addr=%llx size=%llx\n",
+                       (unsigned long long)addr, (unsigned long long)size);
+               lmb_reserve(lmb, addr, size);
+       }
+}
+
 /**
  * boot_relocate_fdt - relocate flat device tree
  * @lmb: pointer to lmb handle, will be used for memory mgmt
- * @bootmap_base: base address of the bootmap region
  * @of_flat_tree: pointer to a char* variable, will hold fdt start address
  * @of_size: pointer to a ulong variable, will hold fdt length
  *
- * boot_relocate_fdt() determines if the of_flat_tree address is within
- * the bootmap and if not relocates it into that region
+ * boot_relocate_fdt() allocates a region of memory within the bootmap and
+ * relocates the of_flat_tree into that region, even if the fdt is already in
+ * the bootmap.  It also expands the size of the fdt by CONFIG_SYS_FDT_PAD
+ * bytes.
  *
  * of_flat_tree and of_size are set to final (after relocation) values
  *
@@ -1173,12 +1230,12 @@ static int fit_check_fdt (const void *fit, int fdt_noffset, int verify)
  *      0 - success
  *      1 - failure
  */
-int boot_relocate_fdt (struct lmb *lmb, ulong bootmap_base,
-               char **of_flat_tree, ulong *of_size)
+int boot_relocate_fdt (struct lmb *lmb, char **of_flat_tree, ulong *of_size)
 {
-       char    *fdt_blob = *of_flat_tree;
-       ulong   relocate = 0;
+       void    *fdt_blob = *of_flat_tree;
+       void    *of_start = 0;
        ulong   of_len = 0;
+       int     err;
 
        /* nothing to do */
        if (*of_size == 0)
@@ -1189,62 +1246,32 @@ int boot_relocate_fdt (struct lmb *lmb, ulong bootmap_base,
                goto error;
        }
 
-#ifndef CFG_NO_FLASH
-       /* move the blob if it is in flash (set relocate) */
-       if (addr2info ((ulong)fdt_blob) != NULL)
-               relocate = 1;
-#endif
+       /* position on a 4K boundary before the alloc_current */
+       /* Pad the FDT by a specified amount */
+       of_len = *of_size + CONFIG_SYS_FDT_PAD;
+       of_start = (void *)(unsigned long)lmb_alloc_base(lmb, of_len, 0x1000,
+                       getenv_bootm_mapsize() + getenv_bootm_low());
 
-       /*
-        * The blob needs to be inside the boot mapping.
-        */
-       if (fdt_blob < (char *)bootmap_base)
-               relocate = 1;
-
-       if ((fdt_blob + *of_size + CFG_FDT_PAD) >=
-                       ((char *)CFG_BOOTMAPSZ + bootmap_base))
-               relocate = 1;
-
-       /* move flattend device tree if needed */
-       if (relocate) {
-               int err;
-               ulong of_start = 0;
-
-               /* position on a 4K boundary before the alloc_current */
-               /* Pad the FDT by a specified amount */
-               of_len = *of_size + CFG_FDT_PAD;
-               of_start = (unsigned long)lmb_alloc_base(lmb, of_len, 0x1000,
-                               (CFG_BOOTMAPSZ + bootmap_base));
-
-               if (of_start == 0) {
-                       puts("device tree - allocation error\n");
-                       goto error;
-               }
+       if (of_start == 0) {
+               puts("device tree - allocation error\n");
+               goto error;
+       }
 
-               debug ("## device tree at 0x%08lX ... 0x%08lX (len=%ld=0x%lX)\n",
-                       (ulong)fdt_blob, (ulong)fdt_blob + *of_size - 1,
-                       of_len, of_len);
+       debug ("## device tree at %p ... %p (len=%ld [0x%lX])\n",
+               fdt_blob, fdt_blob + *of_size - 1, of_len, of_len);
 
-               printf ("   Loading Device Tree to %08lx, end %08lx ... ",
-                       of_start, of_start + of_len - 1);
+       printf ("   Loading Device Tree to %p, end %p ... ",
+               of_start, of_start + of_len - 1);
 
-               err = fdt_open_into (fdt_blob, (void *)of_start, of_len);
-               if (err != 0) {
-                       fdt_error ("fdt move failed");
-                       goto error;
-               }
-               puts ("OK\n");
-
-               *of_flat_tree = (char *)of_start;
-               *of_size = of_len;
-       } else {
-               *of_flat_tree = fdt_blob;
-               of_len = (CFG_BOOTMAPSZ + bootmap_base) - (ulong)fdt_blob;
-               lmb_reserve(lmb, (ulong)fdt_blob, of_len);
-               fdt_set_totalsize(*of_flat_tree, of_len);
-
-               *of_size = of_len;
+       err = fdt_open_into (fdt_blob, of_start, of_len);
+       if (err != 0) {
+               fdt_error ("fdt move failed");
+               goto error;
        }
+       puts ("OK\n");
+
+       *of_flat_tree = of_start;
+       *of_size = of_len;
 
        set_working_fdt_addr(*of_flat_tree);
        return 0;
@@ -1252,6 +1279,7 @@ int boot_relocate_fdt (struct lmb *lmb, ulong bootmap_base,
 error:
        return 1;
 }
+#endif /* CONFIG_OF_LIBFDT */
 
 /**
  * boot_get_fdt - main fdt handling routine
@@ -1274,11 +1302,11 @@ error:
  *     1, if fdt image is found but corrupted
  *     of_flat_tree and of_size are set to 0 if no fdt exists
  */
-int boot_get_fdt (int flag, int argc, char *argv[], bootm_headers_t *images,
+int boot_get_fdt (int flag, int argc, char * const argv[], bootm_headers_t *images,
                char **of_flat_tree, ulong *of_size)
 {
+       const image_header_t *fdt_hdr;
        ulong           fdt_addr;
-       image_header_t  *fdt_hdr;
        char            *fdt_blob = NULL;
        ulong           image_start, image_end;
        ulong           load_start, load_end;
@@ -1547,7 +1575,7 @@ int boot_get_fdt (int flag, int argc, char *argv[], bootm_headers_t *images,
                                goto error;
                        }
 
-                       if (be32_to_cpu (fdt_totalsize (fdt_blob)) != fdt_len) {
+                       if (fdt_totalsize(fdt_blob) != fdt_len) {
                                fdt_error ("fdt size != image size");
                                goto error;
                        }
@@ -1561,7 +1589,7 @@ int boot_get_fdt (int flag, int argc, char *argv[], bootm_headers_t *images,
        }
 
        *of_flat_tree = fdt_blob;
-       *of_size = be32_to_cpu (fdt_totalsize (fdt_blob));
+       *of_size = fdt_totalsize(fdt_blob);
        debug ("   of_flat_tree at 0x%08lx size 0x%08lx\n",
                        (ulong)*of_flat_tree, *of_size);
 
@@ -1574,16 +1602,15 @@ error:
 }
 #endif /* CONFIG_OF_LIBFDT */
 
+#ifdef CONFIG_SYS_BOOT_GET_CMDLINE
 /**
  * boot_get_cmdline - allocate and initialize kernel cmdline
  * @lmb: pointer to lmb handle, will be used for memory mgmt
  * @cmd_start: pointer to a ulong variable, will hold cmdline start
  * @cmd_end: pointer to a ulong variable, will hold cmdline end
- * @bootmap_base: ulong variable, holds offset in physical memory to
- * base of bootmap
  *
  * boot_get_cmdline() allocates space for kernel command line below
- * BOOTMAPSZ + bootmap_base address. If "bootargs" U-boot environemnt
+ * BOOTMAPSZ + getenv_bootm_low() address. If "bootargs" U-boot environemnt
  * variable is present its contents is copied to allocated kernel
  * command line.
  *
@@ -1591,14 +1618,13 @@ error:
  *      0 - success
  *     -1 - failure
  */
-int boot_get_cmdline (struct lmb *lmb, ulong *cmd_start, ulong *cmd_end,
-                       ulong bootmap_base)
+int boot_get_cmdline (struct lmb *lmb, ulong *cmd_start, ulong *cmd_end)
 {
        char *cmdline;
        char *s;
 
-       cmdline = (char *)(ulong)lmb_alloc_base(lmb, CFG_BARGSIZE, 0xf,
-                                        CFG_BOOTMAPSZ + bootmap_base);
+       cmdline = (char *)(ulong)lmb_alloc_base(lmb, CONFIG_SYS_BARGSIZE, 0xf,
+                               getenv_bootm_mapsize() + getenv_bootm_low());
 
        if (cmdline == NULL)
                return -1;
@@ -1615,26 +1641,26 @@ int boot_get_cmdline (struct lmb *lmb, ulong *cmd_start, ulong *cmd_end,
 
        return 0;
 }
+#endif /* CONFIG_SYS_BOOT_GET_CMDLINE */
 
+#ifdef CONFIG_SYS_BOOT_GET_KBD
 /**
  * boot_get_kbd - allocate and initialize kernel copy of board info
  * @lmb: pointer to lmb handle, will be used for memory mgmt
  * @kbd: double pointer to board info data
- * @bootmap_base: ulong variable, holds offset in physical memory to
- * base of bootmap
  *
  * boot_get_kbd() allocates space for kernel copy of board info data below
- * BOOTMAPSZ + bootmap_base address and kernel board info is initialized with
- * the current u-boot board info data.
+ * BOOTMAPSZ + getenv_bootm_low() address and kernel board info is initialized
+ * with the current u-boot board info data.
  *
  * returns:
  *      0 - success
  *     -1 - failure
  */
-int boot_get_kbd (struct lmb *lmb, bd_t **kbd, ulong bootmap_base)
+int boot_get_kbd (struct lmb *lmb, bd_t **kbd)
 {
        *kbd = (bd_t *)(ulong)lmb_alloc_base(lmb, sizeof(bd_t), 0xf,
-                                     CFG_BOOTMAPSZ + bootmap_base);
+                               getenv_bootm_mapsize() + getenv_bootm_low());
        if (*kbd == NULL)
                return -1;
 
@@ -1648,7 +1674,7 @@ int boot_get_kbd (struct lmb *lmb, bd_t **kbd, ulong bootmap_base)
 
        return 0;
 }
-#endif /* CONFIG_PPC || CONFIG_M68K */
+#endif /* CONFIG_SYS_BOOT_GET_KBD */
 #endif /* !USE_HOSTCC */
 
 #if defined(CONFIG_FIT)
@@ -1851,7 +1877,10 @@ void fit_print_contents (const void *fit)
  * @p: pointer to prefix string
  *
  * fit_image_print() lists all mandatory properies for the processed component
- * image. If present, hash nodes are printed out as well.
+ * image. If present, hash nodes are printed out as well. Load
+ * address for images of type firmware is also printed out. Since the load
+ * address is not mandatory for firmware images, it will be output as
+ * "unavailable" when not present.
  *
  * returns:
  *     no returned results
@@ -1910,14 +1939,17 @@ void fit_image_print (const void *fit, int image_noffset, const char *p)
                printf ("%s  OS:           %s\n", p, genimg_get_os_name (os));
        }
 
-       if ((type == IH_TYPE_KERNEL) || (type == IH_TYPE_STANDALONE)) {
+       if ((type == IH_TYPE_KERNEL) || (type == IH_TYPE_STANDALONE) ||
+               (type == IH_TYPE_FIRMWARE)) {
                ret = fit_image_get_load (fit, image_noffset, &load);
                printf ("%s  Load Address: ", p);
                if (ret)
                        printf ("unavailable\n");
                else
                        printf ("0x%08lx\n", load);
+       }
 
+       if ((type == IH_TYPE_KERNEL) || (type == IH_TYPE_STANDALONE)) {
                fit_image_get_entry (fit, image_noffset, &entry);
                printf ("%s  Entry Point:  ", p);
                if (ret)
@@ -2843,7 +2875,7 @@ int fit_check_format (const void *fit)
 #if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || defined(USE_HOSTCC)
        /* mandatory / node 'timestamp' property */
        if (fdt_getprop (fit, 0, FIT_TIMESTAMP_PROP, NULL) == NULL) {
-               debug ("Wrong FIT format: no description\n");
+               debug ("Wrong FIT format: no timestamp\n");
                return 0;
        }
 #endif