mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
spl: make args file optional in falcon mode
Falcon mode loads a kernel file and an args file which is the device-tree. However in the case of kernel file being a FIT that contains the device-tree within it, loading the args file is not required. Therefore, this patch introduces a new SPL_OS_BOOT_ARGS config options that allows us to enable or disable loading of the args file in falcon mode. Signed-off-by: Anshul Dalal <anshuld@ti.com>
This commit is contained in:
@@ -803,7 +803,7 @@ config SPL_FS_LOAD_KERNEL_NAME
|
|||||||
|
|
||||||
config SPL_FS_LOAD_ARGS_NAME
|
config SPL_FS_LOAD_ARGS_NAME
|
||||||
string "File to load for the OS kernel argument parameters from the filesystem"
|
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"
|
default "args"
|
||||||
help
|
help
|
||||||
Filename to read to load for the OS kernel argument parameters from
|
Filename to read to load for the OS kernel argument parameters from
|
||||||
@@ -1121,7 +1121,7 @@ config SPL_UBI_LOAD_KERNEL_ID
|
|||||||
|
|
||||||
config SPL_UBI_LOAD_ARGS_ID
|
config SPL_UBI_LOAD_ARGS_ID
|
||||||
int "id of kernel args volume"
|
int "id of kernel args volume"
|
||||||
depends on SPL_OS_BOOT
|
depends on SPL_OS_BOOT_ARGS
|
||||||
help
|
help
|
||||||
The UBI volume id from which to load the device tree
|
The UBI volume id from which to load the device tree
|
||||||
|
|
||||||
@@ -1215,9 +1215,16 @@ config SPL_OS_BOOT_SECURE
|
|||||||
to use falcon mode by disabling certain inherently non-securable options
|
to use falcon mode by disabling certain inherently non-securable options
|
||||||
in the SPL boot flow.
|
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
|
config SPL_PAYLOAD_ARGS_ADDR
|
||||||
hex "Address in memory to load 'args' file for Falcon Mode to"
|
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 0x88000000 if ARCH_OMAP2PLUS
|
||||||
default 0x99000000 if ARCH_SC5XX && SC59X_64
|
default 0x99000000 if ARCH_SC5XX && SC59X_64
|
||||||
default 0xA0000000 if ARCH_SC5XX && TARGET_SC594_SOM_EZKIT
|
default 0xA0000000 if ARCH_SC5XX && TARGET_SC594_SOM_EZKIT
|
||||||
@@ -1257,7 +1264,7 @@ config SYS_MMCSD_RAW_MODE_KERNEL_SECTOR
|
|||||||
|
|
||||||
config SYS_MMCSD_RAW_MODE_ARGS_SECTOR
|
config SYS_MMCSD_RAW_MODE_ARGS_SECTOR
|
||||||
hex "Falcon mode: Sector to load 'args' from MMC"
|
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
|
help
|
||||||
When Falcon mode is used with an MMC or SD media, SPL needs to know
|
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
|
where to look for the OS 'args', typically a device tree. The
|
||||||
@@ -1267,7 +1274,7 @@ config SYS_MMCSD_RAW_MODE_ARGS_SECTOR
|
|||||||
|
|
||||||
config SYS_MMCSD_RAW_MODE_ARGS_SECTORS
|
config SYS_MMCSD_RAW_MODE_ARGS_SECTORS
|
||||||
hex "Falcon mode: Number of sectors to load for 'args' from MMC"
|
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
|
config SPL_PAYLOAD
|
||||||
string "SPL payload"
|
string "SPL payload"
|
||||||
@@ -1503,14 +1510,14 @@ config SYS_SPI_KERNEL_OFFS
|
|||||||
|
|
||||||
config SYS_SPI_ARGS_OFFS
|
config SYS_SPI_ARGS_OFFS
|
||||||
hex "Falcon mode: address of args payload in SPI flash"
|
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
|
help
|
||||||
Address within SPI-Flash from where the args payload (usually the
|
Address within SPI-Flash from where the args payload (usually the
|
||||||
dtb) is fetched in falcon boot.
|
dtb) is fetched in falcon boot.
|
||||||
|
|
||||||
config SYS_SPI_ARGS_SIZE
|
config SYS_SPI_ARGS_SIZE
|
||||||
hex "Falcon mode: size of args payload in SPI flash"
|
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
|
config SPL_THERMAL
|
||||||
bool "Driver support for thermal devices"
|
bool "Driver support for thermal devices"
|
||||||
|
|||||||
@@ -692,6 +692,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
|
|||||||
spl_jump_to_image_t jumper = &jump_to_image;
|
spl_jump_to_image_t jumper = &jump_to_image;
|
||||||
struct spl_image_info spl_image;
|
struct spl_image_info spl_image;
|
||||||
int ret, os;
|
int ret, os;
|
||||||
|
void *fdt;
|
||||||
|
|
||||||
debug(">>" PHASE_PROMPT "board_init_r()\n");
|
debug(">>" PHASE_PROMPT "board_init_r()\n");
|
||||||
|
|
||||||
@@ -793,8 +794,11 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
|
|||||||
jumper = &spl_invoke_opensbi;
|
jumper = &spl_invoke_opensbi;
|
||||||
} else if (CONFIG_IS_ENABLED(OS_BOOT) && os == IH_OS_LINUX) {
|
} else if (CONFIG_IS_ENABLED(OS_BOOT) && os == IH_OS_LINUX) {
|
||||||
debug("Jumping to Linux\n");
|
debug("Jumping to Linux\n");
|
||||||
if (IS_ENABLED(CONFIG_SPL_OS_BOOT))
|
if (CONFIG_IS_ENABLED(OS_BOOT_ARGS))
|
||||||
spl_fixup_fdt((void *)SPL_PAYLOAD_ARGS_ADDR);
|
fdt = (void *)SPL_PAYLOAD_ARGS_ADDR;
|
||||||
|
else
|
||||||
|
fdt = spl_image_fdt_addr(&spl_image);
|
||||||
|
spl_fixup_fdt(fdt);
|
||||||
spl_board_prepare_for_linux();
|
spl_board_prepare_for_linux();
|
||||||
jumper = &jump_to_image_linux;
|
jumper = &jump_to_image_linux;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ int spl_load_image_ext_os(struct spl_image_info *spl_image,
|
|||||||
goto defaults;
|
goto defaults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
|
||||||
ext4fs_set_blk_dev(block_dev, &part_info);
|
ext4fs_set_blk_dev(block_dev, &part_info);
|
||||||
ext4fs_mount();
|
ext4fs_mount();
|
||||||
file = env_get("falcon_args_file");
|
file = env_get("falcon_args_file");
|
||||||
@@ -123,6 +124,7 @@ int spl_load_image_ext_os(struct spl_image_info *spl_image,
|
|||||||
} else {
|
} else {
|
||||||
puts("spl: falcon_args_file not set in environment, falling back to default\n");
|
puts("spl: falcon_args_file not set in environment, falling back to default\n");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
puts("spl: falcon_image_file not set in environment, falling back to default\n");
|
puts("spl: falcon_image_file not set in environment, falling back to default\n");
|
||||||
}
|
}
|
||||||
@@ -135,6 +137,7 @@ defaults:
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
|
||||||
ext4fs_set_blk_dev(block_dev, &part_info);
|
ext4fs_set_blk_dev(block_dev, &part_info);
|
||||||
ext4fs_mount();
|
ext4fs_mount();
|
||||||
err = ext4fs_open(CONFIG_SPL_FS_LOAD_ARGS_NAME, &filelen);
|
err = ext4fs_open(CONFIG_SPL_FS_LOAD_ARGS_NAME, &filelen);
|
||||||
@@ -147,6 +150,7 @@ defaults:
|
|||||||
__func__, CONFIG_SPL_FS_LOAD_ARGS_NAME, err);
|
__func__, CONFIG_SPL_FS_LOAD_ARGS_NAME, err);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ int spl_load_image_fat_os(struct spl_image_info *spl_image,
|
|||||||
goto defaults;
|
goto defaults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
|
||||||
file = env_get("falcon_args_file");
|
file = env_get("falcon_args_file");
|
||||||
if (file) {
|
if (file) {
|
||||||
err = file_fat_read(
|
err = file_fat_read(
|
||||||
@@ -139,6 +140,8 @@ int spl_load_image_fat_os(struct spl_image_info *spl_image,
|
|||||||
return 0;
|
return 0;
|
||||||
} else
|
} else
|
||||||
puts("spl: falcon_args_file not set in environment, falling back to default\n");
|
puts("spl: falcon_args_file not set in environment, falling back to default\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
} else
|
} else
|
||||||
puts("spl: falcon_image_file not set in environment, falling back to default\n");
|
puts("spl: falcon_image_file not set in environment, falling back to default\n");
|
||||||
|
|
||||||
@@ -150,6 +153,7 @@ defaults:
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
|
||||||
err = file_fat_read(CONFIG_SPL_FS_LOAD_ARGS_NAME,
|
err = file_fat_read(CONFIG_SPL_FS_LOAD_ARGS_NAME,
|
||||||
(void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR, 0);
|
(void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR, 0);
|
||||||
if (err <= 0) {
|
if (err <= 0) {
|
||||||
@@ -157,6 +161,7 @@ defaults:
|
|||||||
__func__, CONFIG_SPL_FS_LOAD_ARGS_NAME, err);
|
__func__, CONFIG_SPL_FS_LOAD_ARGS_NAME, err);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image,
|
|||||||
static int spl_nand_load_image_os(struct spl_image_info *spl_image,
|
static int spl_nand_load_image_os(struct spl_image_info *spl_image,
|
||||||
struct spl_boot_device *bootdev)
|
struct spl_boot_device *bootdev)
|
||||||
{
|
{
|
||||||
int *src, *dst, err;
|
int err;
|
||||||
struct legacy_img_hdr *header = spl_get_load_buffer(0, sizeof(*header));
|
struct legacy_img_hdr *header = spl_get_load_buffer(0, sizeof(*header));
|
||||||
|
|
||||||
/* load linux */
|
/* load linux */
|
||||||
@@ -101,12 +101,14 @@ static int spl_nand_load_image_os(struct spl_image_info *spl_image,
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
|
||||||
/*
|
/*
|
||||||
* load parameter image load to temp position since nand_spl_load_image
|
* load parameter image load to temp position since nand_spl_load_image
|
||||||
* reads a whole block which is typically larger than
|
* reads a whole block which is typically larger than
|
||||||
* CONFIG_CMD_SPL_WRITE_SIZE therefore may overwrite following sections
|
* CONFIG_CMD_SPL_WRITE_SIZE therefore may overwrite following sections
|
||||||
* like BSS
|
* like BSS
|
||||||
*/
|
*/
|
||||||
|
int *src, *dst;
|
||||||
nand_spl_load_image(CONFIG_CMD_SPL_NAND_OFS, CONFIG_CMD_SPL_WRITE_SIZE,
|
nand_spl_load_image(CONFIG_CMD_SPL_NAND_OFS, CONFIG_CMD_SPL_WRITE_SIZE,
|
||||||
(void *)CONFIG_TEXT_BASE);
|
(void *)CONFIG_TEXT_BASE);
|
||||||
/* copy to destintion */
|
/* copy to destintion */
|
||||||
@@ -116,6 +118,7 @@ static int spl_nand_load_image_os(struct spl_image_info *spl_image,
|
|||||||
src++, dst++) {
|
src++, dst++) {
|
||||||
writel(readl(src), dst);
|
writel(readl(src), dst);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,10 +61,15 @@ static int spl_spi_load_image_os(struct spl_image_info *spl_image,
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_SPL_OS_BOOT_ARGS)
|
||||||
/* Read device tree. */
|
/* Read device tree. */
|
||||||
return spi_flash_read(flash, CONFIG_SYS_SPI_ARGS_OFFS,
|
return spi_flash_read(flash, CONFIG_SYS_SPI_ARGS_OFFS,
|
||||||
CONFIG_SYS_SPI_ARGS_SIZE,
|
CONFIG_SYS_SPI_ARGS_SIZE,
|
||||||
(void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR);
|
(void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR);
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,14 @@ int spl_ubi_load_image_os(struct spl_image_info *spl_image,
|
|||||||
|
|
||||||
volumes[0].vol_id = CONFIG_SPL_UBI_LOAD_KERNEL_ID;
|
volumes[0].vol_id = CONFIG_SPL_UBI_LOAD_KERNEL_ID;
|
||||||
volumes[0].load_addr = (void *)CONFIG_SYS_LOAD_ADDR;
|
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].vol_id = CONFIG_SPL_UBI_LOAD_ARGS_ID;
|
||||||
volumes[1].load_addr = (void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR;
|
volumes[1].load_addr = (void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR;
|
||||||
|
|
||||||
err = ubispl_load_volumes(info, volumes, 2);
|
err = ubispl_load_volumes(info, volumes, 2);
|
||||||
|
#else
|
||||||
|
err = ubispl_load_volumes(info, volumes, 1);
|
||||||
|
#endif
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
IF_ENABLED_INT(CONFIG_SPL_SYS_MALLOC, CONFIG_SPL_SYS_MALLOC_SIZE)
|
IF_ENABLED_INT(CONFIG_SPL_SYS_MALLOC, CONFIG_SPL_SYS_MALLOC_SIZE)
|
||||||
|
|
||||||
/* deal with an optional value */
|
/* 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
|
#define SPL_PAYLOAD_ARGS_ADDR CONFIG_SPL_PAYLOAD_ARGS_ADDR
|
||||||
#else
|
#else
|
||||||
#define SPL_PAYLOAD_ARGS_ADDR 0
|
#define SPL_PAYLOAD_ARGS_ADDR 0
|
||||||
|
|||||||
Reference in New Issue
Block a user