mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-15 19:51:37 +00:00
riscv: qemu: clear kernel-start/-end in device tree as workaround for BBL
QEMU specifies the location of Linux (supplied with the -kernel argument) in the device tree using the riscv,kernel-start and riscv,kernel-end properties. We currently rely on the SBI implementation of BBL to run Linux and therefore embed Linux as payload in BBL. This causes an issue, because BBL detects the kernel properties in the device tree and ignores the Linux payload as a result. Work around this issue by clearing the kernel properties in the device tree before booting Linux. Signed-off-by: Lukas Auer <lukas.auer@aisec.fraunhofer.de> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
66ffe5783b
commit
897206c5cc
2 changed files with 40 additions and 0 deletions
|
@ -30,5 +30,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
imply CMD_EXT4
|
||||
imply CMD_FAT
|
||||
imply BOARD_LATE_INIT
|
||||
imply OF_BOARD_SETUP
|
||||
|
||||
endif
|
||||
|
|
|
@ -48,3 +48,42 @@ int board_late_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* QEMU specifies the location of Linux (supplied with the -kernel argument)
|
||||
* in the device tree using the riscv,kernel-start and riscv,kernel-end
|
||||
* properties. We currently rely on the SBI implementation of BBL to run
|
||||
* Linux and therefore embed Linux as payload in BBL. This causes an issue,
|
||||
* because BBL detects the kernel properties in the device tree and ignores
|
||||
* the Linux payload as a result. To work around this issue, we clear the
|
||||
* kernel properties before booting Linux.
|
||||
*
|
||||
* This workaround can be removed, once we do not require BBL for its SBI
|
||||
* implementation anymore.
|
||||
*/
|
||||
int ft_board_setup(void *blob, bd_t *bd)
|
||||
{
|
||||
int chosen_offset, ret;
|
||||
|
||||
chosen_offset = fdt_path_offset(blob, "/chosen");
|
||||
if (chosen_offset < 0)
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_ARCH_RV64I
|
||||
ret = fdt_setprop_u64(blob, chosen_offset, "riscv,kernel-start", 0);
|
||||
#else
|
||||
ret = fdt_setprop_u32(blob, chosen_offset, "riscv,kernel-start", 0);
|
||||
#endif
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
#ifdef CONFIG_ARCH_RV64I
|
||||
ret = fdt_setprop_u64(blob, chosen_offset, "riscv,kernel-end", 0);
|
||||
#else
|
||||
ret = fdt_setprop_u32(blob, chosen_offset, "riscv,kernel-end", 0);
|
||||
#endif
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue