]> git.sur5r.net Git - u-boot/blobdiff - common/image.c
ddr: altera: Add ECC DRAM scrubbing support for Arria10
[u-boot] / common / image.c
index a058eb85e107bce98c7a155344250cc30f16ef18..4f201289ee32cc0801f07552baa0b4200cd4d4ce 100644 (file)
@@ -1,10 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2008 Semihalf
  *
  * (C) Copyright 2000-2006
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #ifndef USE_HOSTCC
 #include <status_led.h>
 #endif
 
-#ifdef CONFIG_HAS_DATAFLASH
-#include <dataflash.h>
-#endif
-
-#ifdef CONFIG_LOGBUFFER
-#include <logbuff.h>
-#endif
-
 #include <rtc.h>
 
 #include <environment.h>
@@ -30,7 +21,7 @@
 #include <mapmem.h>
 
 #if IMAGE_ENABLE_FIT || IMAGE_ENABLE_OF_LIBFDT
-#include <libfdt.h>
+#include <linux/libfdt.h>
 #include <fdt_support.h>
 #include <fpga.h>
 #include <xilinx.h>
@@ -94,11 +85,13 @@ static const table_entry_t uimage_arch[] = {
        {       IH_ARCH_ARC,            "arc",          "ARC",          },
        {       IH_ARCH_X86_64,         "x86_64",       "AMD x86_64",   },
        {       IH_ARCH_XTENSA,         "xtensa",       "Xtensa",       },
+       {       IH_ARCH_RISCV,          "riscv",        "RISC-V",       },
        {       -1,                     "",             "",             },
 };
 
 static const table_entry_t uimage_os[] = {
        {       IH_OS_INVALID,  "invalid",      "Invalid OS",           },
+       {       IH_OS_ARM_TRUSTED_FIRMWARE, "arm-trusted-firmware", "ARM Trusted Firmware"  },
        {       IH_OS_LINUX,    "linux",        "Linux",                },
 #if defined(CONFIG_LYNXKDI) || defined(USE_HOSTCC)
        {       IH_OS_LYNXOS,   "lynxos",       "LynxOS",               },
@@ -107,6 +100,7 @@ static const table_entry_t uimage_os[] = {
        {       IH_OS_OSE,      "ose",          "Enea OSE",             },
        {       IH_OS_PLAN9,    "plan9",        "Plan 9",               },
        {       IH_OS_RTEMS,    "rtems",        "RTEMS",                },
+       {       IH_OS_TEE,      "tee",          "Trusted Execution Environment" },
        {       IH_OS_U_BOOT,   "u-boot",       "U-Boot",               },
        {       IH_OS_VXWORKS,  "vxworks",      "VxWorks",              },
 #if defined(CONFIG_CMD_ELF) || defined(USE_HOSTCC)
@@ -151,7 +145,8 @@ static const table_entry_t uimage_type[] = {
        {       IH_TYPE_PBLIMAGE,   "pblimage",   "Freescale PBL Boot Image",},
        {       IH_TYPE_RAMDISK,    "ramdisk",    "RAMDisk Image",      },
        {       IH_TYPE_SCRIPT,     "script",     "Script",             },
-       {       IH_TYPE_SOCFPGAIMAGE, "socfpgaimage", "Altera SOCFPGA preloader",},
+       {       IH_TYPE_SOCFPGAIMAGE, "socfpgaimage", "Altera SoCFPGA CV/AV preloader",},
+       {       IH_TYPE_SOCFPGAIMAGE_V1, "socfpgaimage_v1", "Altera SoCFPGA A10 preloader",},
        {       IH_TYPE_STANDALONE, "standalone", "Standalone Program", },
        {       IH_TYPE_UBLIMAGE,   "ublimage",   "Davinci UBL image",},
        {       IH_TYPE_MXSIMAGE,   "mxsimage",   "Freescale MXS Boot Image",},
@@ -164,9 +159,12 @@ static const table_entry_t uimage_type[] = {
        {       IH_TYPE_VYBRIDIMAGE, "vybridimage",  "Vybrid Boot Image", },
        {       IH_TYPE_ZYNQIMAGE,  "zynqimage",  "Xilinx Zynq Boot Image" },
        {       IH_TYPE_ZYNQMPIMAGE, "zynqmpimage", "Xilinx ZynqMP Boot Image" },
+       {       IH_TYPE_ZYNQMPBIF,  "zynqmpbif",  "Xilinx ZynqMP Boot Image (bif)" },
        {       IH_TYPE_FPGA,       "fpga",       "FPGA Image" },
        {       IH_TYPE_TEE,        "tee",        "Trusted Execution Environment Image",},
        {       IH_TYPE_FIRMWARE_IVT, "firmware_ivt", "Firmware with HABv4 IVT" },
+       {       IH_TYPE_PMMC,        "pmmc",        "TI Power Management Micro-Controller Firmware",},
+       {       IH_TYPE_STM32IMAGE, "stm32image", "STMicroelectronics STM32 Image" },
        {       -1,                 "",           "",                   },
 };
 
@@ -388,9 +386,6 @@ void image_print_contents(const void *ptr)
  * flag. Verification done covers data and header integrity and os/type/arch
  * fields checking.
  *
- * If dataflash support is enabled routine checks for dataflash addresses
- * and handles required dataflash reads.
- *
  * returns:
  *     pointer to a ramdisk image header, if image was found and valid
  *     otherwise, return NULL
@@ -888,81 +883,6 @@ int genimg_get_format(const void *img_addr)
        return IMAGE_FORMAT_INVALID;
 }
 
-/**
- * genimg_get_image - get image from special storage (if necessary)
- * @img_addr: image start address
- *
- * genimg_get_image() checks if provided image start address is located
- * in a dataflash storage. If so, image is moved to a system RAM memory.
- *
- * returns:
- *     image start address after possible relocation from special storage
- */
-ulong genimg_get_image(ulong img_addr)
-{
-       ulong ram_addr = img_addr;
-
-#ifdef CONFIG_HAS_DATAFLASH
-       ulong h_size, d_size;
-
-       if (addr_dataflash(img_addr)) {
-               void *buf;
-
-               /* ger RAM address */
-               ram_addr = CONFIG_SYS_LOAD_ADDR;
-
-               /* get header size */
-               h_size = image_get_header_size();
-#if IMAGE_ENABLE_FIT
-               if (sizeof(struct fdt_header) > h_size)
-                       h_size = sizeof(struct fdt_header);
-#endif
-
-               /* read in header */
-               debug("   Reading image header from dataflash address "
-                       "%08lx to RAM address %08lx\n", img_addr, ram_addr);
-
-               buf = map_sysmem(ram_addr, 0);
-               read_dataflash(img_addr, h_size, buf);
-
-               /* get data size */
-               switch (genimg_get_format(buf)) {
-#if defined(CONFIG_IMAGE_FORMAT_LEGACY)
-               case IMAGE_FORMAT_LEGACY:
-                       d_size = image_get_data_size(buf);
-                       debug("   Legacy format image found at 0x%08lx, "
-                                       "size 0x%08lx\n",
-                                       ram_addr, d_size);
-                       break;
-#endif
-#if IMAGE_ENABLE_FIT
-               case IMAGE_FORMAT_FIT:
-                       d_size = fit_get_size(buf) - h_size;
-                       debug("   FIT/FDT format image found at 0x%08lx, "
-                                       "size 0x%08lx\n",
-                                       ram_addr, d_size);
-                       break;
-#endif
-               default:
-                       printf("   No valid image found at 0x%08lx\n",
-                               img_addr);
-                       return ram_addr;
-               }
-
-               /* read in image data */
-               debug("   Reading image remaining data from dataflash address "
-                       "%08lx to RAM address %08lx\n", img_addr + h_size,
-                       ram_addr + h_size);
-
-               read_dataflash(img_addr + h_size, d_size,
-                               (char *)(buf + h_size));
-
-       }
-#endif /* CONFIG_HAS_DATAFLASH */
-
-       return ram_addr;
-}
-
 /**
  * fit_has_config - check if there is a valid FIT configuration
  * @images: pointer to the bootm command headers structure
@@ -1095,9 +1015,6 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
                }
 #endif
 
-               /* copy from dataflash if needed */
-               rd_addr = genimg_get_image(rd_addr);
-
                /*
                 * Check if there is an initrd image at the
                 * address provided in the second bootm argument
@@ -1237,11 +1154,6 @@ int boot_ramdisk_high(struct lmb *lmb, ulong rd_data, ulong rd_len,
        }
 
 
-#ifdef CONFIG_LOGBUFFER
-       /* Prevent initrd from overwriting logbuffer */
-       lmb_reserve(lmb, logbuffer_base() - LOGBUFF_OVERHEAD, LOGBUFF_RESERVE);
-#endif
-
        debug("## initrd_high = 0x%08lx, copy_to_ram = %d\n",
                        initrd_high, initrd_copy_to_ram);
 
@@ -1278,7 +1190,8 @@ int boot_ramdisk_high(struct lmb *lmb, ulong rd_data, ulong rd_len,
                         * AMP boot scenarios in which we might not be
                         * HW cache coherent
                         */
-                       flush_cache((unsigned long)*initrd_start, rd_len);
+                       flush_cache((unsigned long)*initrd_start,
+                                   ALIGN(rd_len, ARCH_DMA_MINALIGN));
 #endif
                        puts("OK\n");
                }
@@ -1307,7 +1220,7 @@ int boot_get_setup(bootm_headers_t *images, uint8_t arch,
 }
 
 #if IMAGE_ENABLE_FIT
-#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_XILINX)
+#if defined(CONFIG_FPGA)
 int boot_get_fpga(int argc, char * const argv[], bootm_headers_t *images,
                  uint8_t arch, const ulong *ld_start, ulong * const ld_len)
 {
@@ -1318,8 +1231,6 @@ int boot_get_fpga(int argc, char * const argv[], bootm_headers_t *images,
        const char *uname, *name;
        int err;
        int devnum = 0; /* TODO support multi fpga platforms */
-       const fpga_desc * const desc = fpga_get_desc(devnum);
-       xilinx_desc *desc_xilinx = desc->devdesc;
 
        /* Check to see if the images struct has a FIT configuration */
        if (!genimg_has_config(images)) {
@@ -1329,10 +1240,8 @@ int boot_get_fpga(int argc, char * const argv[], bootm_headers_t *images,
 
        /*
         * Obtain the os FIT header from the images struct
-        * copy from dataflash if needed
         */
        tmp_img_addr = map_to_sysmem(images->fit_hdr_os);
-       tmp_img_addr = genimg_get_image(tmp_img_addr);
        buf = map_sysmem(tmp_img_addr, 0);
        /*
         * Check image type. For FIT images get FIT node
@@ -1366,7 +1275,7 @@ int boot_get_fpga(int argc, char * const argv[], bootm_headers_t *images,
                        return fit_img_result;
                }
 
-               if (img_len >= desc_xilinx->size) {
+               if (!fpga_is_partial_data(devnum, img_len)) {
                        name = "full";
                        err = fpga_loadbitstream(devnum, (char *)img_data,
                                                 img_len, BIT_FULL);
@@ -1441,10 +1350,8 @@ int boot_get_loadable(int argc, char * const argv[], bootm_headers_t *images,
 
        /*
         * Obtain the os FIT header from the images struct
-        * copy from dataflash if needed
         */
        tmp_img_addr = map_to_sysmem(images->fit_hdr_os);
-       tmp_img_addr = genimg_get_image(tmp_img_addr);
        buf = map_sysmem(tmp_img_addr, 0);
        /*
         * Check image type. For FIT images get FIT node
@@ -1506,7 +1413,7 @@ int boot_get_loadable(int argc, char * const argv[], bootm_headers_t *images,
  * @cmd_end: pointer to a ulong variable, will hold cmdline end
  *
  * boot_get_cmdline() allocates space for kernel command line below
- * BOOTMAPSZ + env_get_bootm_low() address. If "bootargs" U-Boot environemnt
+ * BOOTMAPSZ + env_get_bootm_low() address. If "bootargs" U-Boot environment
  * variable is present its contents is copied to allocated kernel
  * command line.
  *