#define LOG_CATEGORY LOGC_BOOT
+#include <bootflow.h>
#include <command.h>
#include <dm.h>
#include <env.h>
* Returns 1 for success, or < 0 on error
*/
static int get_relfile(struct pxe_context *ctx, const char *file_path,
- unsigned long file_addr, ulong *filesizep)
+ unsigned long file_addr, enum bootflow_img_t type,
+ ulong *filesizep)
{
size_t path_len;
char relfile[MAX_TFTP_PATH_LEN + 1];
sprintf(addr_buf, "%lx", file_addr);
- ret = ctx->getfile(ctx, relfile, addr_buf, &size);
+ ret = ctx->getfile(ctx, relfile, addr_buf, type, &size);
if (ret < 0)
return log_msg_ret("get", ret);
if (filesizep)
int err;
char *buf;
- err = get_relfile(ctx, file_path, file_addr, &size);
+ err = get_relfile(ctx, file_path, file_addr, BFI_EXTLINUX_CFG,
+ &size);
if (err < 0)
return err;
* @file_path: File path to read (relative to the PXE file)
* @envaddr_name: Name of environment variable which contains the address to
* load to
+ * @type: File type
* @filesizep: Returns the file size in bytes
* Returns 1 on success, -ENOENT if @envaddr_name does not exist as an
* environment variable, -EINVAL if its format is not valid hex, or other
* value < 0 on other error
*/
static int get_relfile_envaddr(struct pxe_context *ctx, const char *file_path,
- const char *envaddr_name, ulong *filesizep)
+ const char *envaddr_name,
+ enum bootflow_img_t type, ulong *filesizep)
{
unsigned long file_addr;
char *envaddr;
if (strict_strtoul(envaddr, 16, &file_addr) < 0)
return -EINVAL;
- return get_relfile(ctx, file_path, file_addr, filesizep);
+ return get_relfile(ctx, file_path, file_addr, type, filesizep);
}
/**
/* Load overlay file */
err = get_relfile_envaddr(ctx, overlayfile, "fdtoverlay_addr_r",
+ (enum bootflow_img_t)IH_TYPE_FLATDT,
NULL);
if (err < 0) {
printf("Failed loading overlay %s\n", overlayfile);
}
if (get_relfile_envaddr(ctx, label->kernel, "kernel_addr_r",
- NULL) < 0) {
+ (enum bootflow_img_t)IH_TYPE_KERNEL, NULL)
+ < 0) {
printf("Skipping %s for failure retrieving kernel\n",
label->name);
return 1;
} else if (label->initrd) {
ulong size;
if (get_relfile_envaddr(ctx, label->initrd, "ramdisk_addr_r",
+ (enum bootflow_img_t)IH_TYPE_RAMDISK,
&size) < 0) {
printf("Skipping %s for failure retrieving initrd\n",
label->name);
if (fdtfile) {
int err = get_relfile_envaddr(ctx, fdtfile,
- "fdt_addr_r", NULL);
+ "fdt_addr_r",
+ (enum bootflow_img_t)IH_TYPE_FLATDT, NULL);
free(fdtfilefree);
if (err < 0) {
if (IS_ENABLED(CONFIG_CMD_BMP)) {
/* display BMP if available */
if (cfg->bmp) {
- if (get_relfile(ctx, cfg->bmp, image_load_addr, NULL)) {
+ if (get_relfile(ctx, cfg->bmp, image_load_addr,
+ BFI_LOGO, NULL)) {
#if defined(CONFIG_VIDEO)
struct udevice *dev;