config SPL_FS_LOAD_ARGS_NAME
string "File to load for the OS kernel argument parameters from the filesystem"
- depends on (SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS) && SPL_OS_BOOT
+ depends on (SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS) && SPL_OS_BOOT_ARGS
default "args"
help
Filename to read to load for the OS kernel argument parameters from
config SPL_UBI_LOAD_ARGS_ID
int "id of kernel args volume"
- depends on SPL_OS_BOOT
+ depends on SPL_OS_BOOT_ARGS
help
The UBI volume id from which to load the device tree
to use falcon mode by disabling certain inherently non-securable options
in the SPL boot flow.
+config SPL_OS_BOOT_ARGS
+ bool "Allow SPL to load args for kernel in falcon mode"
+ depends on SPL_OS_BOOT || SPL_LOAD_FIT_OPENSBI_OS_BOOT
+ help
+ This option enables the SPL to load an args file (usually the FDT)
+ alongside the kernel image in falcon boot mode.
+
config SPL_PAYLOAD_ARGS_ADDR
hex "Address in memory to load 'args' file for Falcon Mode to"
- depends on SPL_OS_BOOT || SPL_LOAD_FIT_OPENSBI_OS_BOOT
+ depends on SPL_OS_BOOT_ARGS
default 0x88000000 if ARCH_OMAP2PLUS
default 0x99000000 if ARCH_SC5XX && SC59X_64
default 0xA0000000 if ARCH_SC5XX && TARGET_SC594_SOM_EZKIT
config SYS_MMCSD_RAW_MODE_ARGS_SECTOR
hex "Falcon mode: Sector to load 'args' from MMC"
- depends on SPL_FALCON_BOOT_MMCSD
+ depends on SPL_FALCON_BOOT_MMCSD && SPL_OS_BOOT_ARGS
help
When Falcon mode is used with an MMC or SD media, SPL needs to know
where to look for the OS 'args', typically a device tree. The
config SYS_MMCSD_RAW_MODE_ARGS_SECTORS
hex "Falcon mode: Number of sectors to load for 'args' from MMC"
- depends on SPL_FALCON_BOOT_MMCSD && SYS_MMCSD_RAW_MODE_ARGS_SECTOR != 0x0
+ depends on SPL_FALCON_BOOT_MMCSD && SPL_OS_BOOT_ARGS
config SPL_PAYLOAD
string "SPL payload"
config SYS_SPI_ARGS_OFFS
hex "Falcon mode: address of args payload in SPI flash"
- depends on SPL_SPI_FLASH_SUPPORT && SPL_OS_BOOT
+ depends on SPL_SPI_FLASH_SUPPORT && SPL_OS_BOOT_ARGS
help
Address within SPI-Flash from where the args payload (usually the
dtb) is fetched in falcon boot.
config SYS_SPI_ARGS_SIZE
hex "Falcon mode: size of args payload in SPI flash"
- depends on SPL_SPI_FLASH_SUPPORT && SPL_OS_BOOT
+ depends on SPL_SPI_FLASH_SUPPORT && SPL_OS_BOOT_ARGS
config SPL_THERMAL
bool "Driver support for thermal devices"
spl_jump_to_image_t jumper = &jump_to_image;
struct spl_image_info spl_image;
int ret, os;
+ void *fdt;
debug(">>" PHASE_PROMPT "board_init_r()\n");
jumper = &spl_invoke_opensbi;
} else if (CONFIG_IS_ENABLED(OS_BOOT) && os == IH_OS_LINUX) {
debug("Jumping to Linux\n");
- if (IS_ENABLED(CONFIG_SPL_OS_BOOT))
- spl_fixup_fdt((void *)SPL_PAYLOAD_ARGS_ADDR);
+ if (CONFIG_IS_ENABLED(OS_BOOT_ARGS))
+ fdt = (void *)SPL_PAYLOAD_ARGS_ADDR;
+ else
+ fdt = spl_image_fdt_addr(&spl_image);
+ spl_fixup_fdt(fdt);
spl_board_prepare_for_linux();
jumper = &jump_to_image_linux;
} else {
goto defaults;
}
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
ext4fs_set_blk_dev(block_dev, &part_info);
ext4fs_mount();
file = env_get("falcon_args_file");
} else {
puts("spl: falcon_args_file not set in environment, falling back to default\n");
}
+#endif
} else {
puts("spl: falcon_image_file not set in environment, falling back to default\n");
}
if (err)
return err;
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
ext4fs_set_blk_dev(block_dev, &part_info);
ext4fs_mount();
err = ext4fs_open(CONFIG_SPL_FS_LOAD_ARGS_NAME, &filelen);
__func__, CONFIG_SPL_FS_LOAD_ARGS_NAME, err);
return -1;
}
+#endif
return 0;
}
goto defaults;
}
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
file = env_get("falcon_args_file");
if (file) {
err = file_fat_read(
return 0;
} else
puts("spl: falcon_args_file not set in environment, falling back to default\n");
+#endif
+
} else
puts("spl: falcon_image_file not set in environment, falling back to default\n");
if (err)
return err;
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
err = file_fat_read(CONFIG_SPL_FS_LOAD_ARGS_NAME,
(void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR, 0);
if (err <= 0) {
__func__, CONFIG_SPL_FS_LOAD_ARGS_NAME, err);
return -1;
}
+#endif
return 0;
}
static int spl_nand_load_image_os(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev)
{
- int *src, *dst, err;
+ int err;
struct legacy_img_hdr *header = spl_get_load_buffer(0, sizeof(*header));
/* load linux */
if (err)
return err;
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
/*
* load parameter image load to temp position since nand_spl_load_image
* reads a whole block which is typically larger than
* CONFIG_CMD_SPL_WRITE_SIZE therefore may overwrite following sections
* like BSS
*/
+ int *src, *dst;
nand_spl_load_image(CONFIG_CMD_SPL_NAND_OFS, CONFIG_CMD_SPL_WRITE_SIZE,
(void *)CONFIG_TEXT_BASE);
/* copy to destintion */
src++, dst++) {
writel(readl(src), dst);
}
+#endif
return 0;
}
if (err)
return err;
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
/* Read device tree. */
return spi_flash_read(flash, CONFIG_SYS_SPI_ARGS_OFFS,
CONFIG_SYS_SPI_ARGS_SIZE,
(void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR);
+#else
+ return 0;
+#endif
+
}
#endif
volumes[0].vol_id = CONFIG_SPL_UBI_LOAD_KERNEL_ID;
volumes[0].load_addr = (void *)CONFIG_SYS_LOAD_ADDR;
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
volumes[1].vol_id = CONFIG_SPL_UBI_LOAD_ARGS_ID;
volumes[1].load_addr = (void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR;
err = ubispl_load_volumes(info, volumes, 2);
+#else
+ err = ubispl_load_volumes(info, volumes, 1);
+#endif
if (err)
return err;
IF_ENABLED_INT(CONFIG_SPL_SYS_MALLOC, CONFIG_SPL_SYS_MALLOC_SIZE)
/* deal with an optional value */
-#ifdef CONFIG_SPL_OS_BOOT
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
#define SPL_PAYLOAD_ARGS_ADDR CONFIG_SPL_PAYLOAD_ARGS_ADDR
#else
#define SPL_PAYLOAD_ARGS_ADDR 0