#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>
#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>
{ 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", },
{ 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)
{ 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, "", "", },
};
* 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
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
}
#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
}
-#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);
* 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");
}
}
#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)
{
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)) {
/*
* 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
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);
/*
* 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