
Hi Aiden,
On Tue, Jul 9, 2019 at 8:02 AM Park, Aiden aiden.park@intel.com wrote:
Hi Bin,
-----Original Message----- From: Park, Aiden Sent: Monday, July 8, 2019 9:48 AM To: Bin Meng bmeng.cn@gmail.com Cc: U-Boot Mailing List u-boot@lists.denx.de; Simon Glass sjg@chromium.org Subject: RE: [PATCH v2 7/8] board: Add new slimbootloader board
Hi Bin,
-----Original Message----- From: Bin Meng [mailto:bmeng.cn@gmail.com] Sent: Tuesday, July 2, 2019 7:14 AM To: Park, Aiden aiden.park@intel.com Cc: U-Boot Mailing List u-boot@lists.denx.de; Simon Glass sjg@chromium.org Subject: Re: [PATCH v2 7/8] board: Add new slimbootloader board
Hi Aiden,
On Wed, Jun 26, 2019 at 7:21 AM Park, Aiden aiden.park@intel.com
wrote:
- Add new board/slimbootloader directory with minimum codes
- Add slimbootloader configuration files
- Add README in board/slimbootloader/slimbootloader/
Signed-off-by: Aiden Park aiden.park@intel.com
arch/x86/Kconfig | 4 ++ board/slimbootloader/Kconfig | 25 ++++++++ board/slimbootloader/slimbootloader/Kconfig | 51 +++++++++++++++ board/slimbootloader/slimbootloader/Makefile | 5 ++ board/slimbootloader/slimbootloader/README | 58
+++++++++++++++++
.../slimbootloader/slimbootloader.c | 17 +++++ board/slimbootloader/slimbootloader/start.S | 9 +++ configs/slimbootloader_defconfig | 64 +++++++++++++++++++ include/configs/slimbootloader.h | 54 ++++++++++++++++ 9 files changed, 287 insertions(+) create mode 100644 board/slimbootloader/Kconfig create mode 100644 board/slimbootloader/slimbootloader/Kconfig create mode 100644 board/slimbootloader/slimbootloader/Makefile create mode 100644 board/slimbootloader/slimbootloader/README create mode 100644 board/slimbootloader/slimbootloader/slimbootloader.c create mode 100644 board/slimbootloader/slimbootloader/start.S create mode 100644 configs/slimbootloader_defconfig create mode 100644 include/configs/slimbootloader.h
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 1612246dfc..3d57466a63 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -77,6 +77,9 @@ config VENDOR_GOOGLE config VENDOR_INTEL bool "Intel"
+config VENDOR_SLIMBOOTLOADER
bool "slimbootloader"
I think this should be "Intel".
Okay. Let me use VENDOR_INTEL.
endchoice
# subarchitectures-specific options below @@ -104,6 +107,7 @@ source "board/efi/Kconfig" source "board/emulation/Kconfig" source "board/google/Kconfig" source "board/intel/Kconfig" +source "board/slimbootloader/Kconfig"
So it becomes a "board" in board/intel directory.
Okay. Let me use intel.
# platform-specific options below source "arch/x86/cpu/baytrail/Kconfig" diff --git a/board/slimbootloader/Kconfig b/board/slimbootloader/Kconfig new file mode 100644 index 0000000000..33c6fdf0aa --- /dev/null +++ b/board/slimbootloader/Kconfig @@ -0,0 +1,25 @@ +# SPDX-License-Identifier: GPL-2.0+ # # Copyright (C) 2019 Intel +Corporation <www.intel.com>
+if VENDOR_SLIMBOOTLOADER
+choice
prompt "Select a board"
optional
+config TARGET_SLIMBOOTLOADER
bool "slimbootloader"
help
This target is used for running U-Boot on top of Slim Bootloader
boot firmware as a payload. Slim Bootloader does memory
initialization
and silicon initialization, and it passes necessary information in
HOB(Hand Off Block) to a payload. The payload is responsible for OS
load from media and booting OS.
Refer to board/slimbootloader/slimbootloader/README for
- the
details.
+endchoice
+source "board/slimbootloader/slimbootloader/Kconfig"
+endif diff --git a/board/slimbootloader/slimbootloader/Kconfig b/board/slimbootloader/slimbootloader/Kconfig new file mode 100644 index 0000000000..7262f2bf1b --- /dev/null +++ b/board/slimbootloader/slimbootloader/Kconfig @@ -0,0 +1,51 @@ +# SPDX-License-Identifier: GPL-2.0+ # # Copyright (C) 2019 Intel +Corporation <www.intel.com>
+if TARGET_SLIMBOOTLOADER
+config SYS_BOARD
default "slimbootloader"
+config SYS_VENDOR
default "slimbootloader"
+config SYS_SOC
default "slimbootloader"
+config SYS_TEXT_BASE
default 0x00100000
+comment "slimbootloader-specific options"
+config SYS_CONFIG_NAME
string "Board configuration file"
default "slimbootloader"
help
This option selects the board configuration file in include/configs/
directory to be used to build U-Boot for Slim Bootloader.
+config DEFAULT_DEVICE_TREE
string "Board Device Tree Source (dts) file"
default "slimbootloader"
help
This option selects the board Device Tree Source (dts) file in
arch/x86/dts/ directory to be used to build U-Boot for
+Slim
Bootloader.
+config SYS_CAR_ADDR
hex "Board specific Cache-As-RAM (CAR) address"
default 0x00000000
help
This option specifies the board specific Cache-As-RAM (CAR)
address.
But, CAR is not required for Slim Bootloader environment since it
has already initialized memory and launched u-boot as a payload.
+config SYS_CAR_SIZE
hex "Board specific Cache-As-RAM (CAR) size"
default 0x0000
help
This option specifies the board specific Cache-As-RAM (CAR) size.
But, CAR is not required for Slim Bootloader environment since it
has already initialized memory and launched u-boot as a payload.
+endif diff --git a/board/slimbootloader/slimbootloader/Makefile b/board/slimbootloader/slimbootloader/Makefile new file mode 100644 index 0000000000..fd8fa98a8d --- /dev/null +++ b/board/slimbootloader/slimbootloader/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0+ # # Copyright (C) 2019 Intel +Corporation <www.intel.com>
+obj-y += start.o slimbootloader.o diff --git a/board/slimbootloader/slimbootloader/README b/board/slimbootloader/slimbootloader/README new file mode 100644 index 0000000000..5492dc8883 --- /dev/null +++ b/board/slimbootloader/slimbootloader/README @@ -0,0 +1,58 @@ +# SPDX-License-Identifier: GPL-2.0+ # # Copyright (C) 2019 Intel +Corporation <www.intel.com>
+Introduction +============ +This target is to enable U-Boot as a payload of Slim +Bootloader(a.k.a +SBL) boot +firmware(https://github.com/slimbootloader/slimbootloader) +which currently supports QEMU, Apollolake, Whiskeylake, Coffeelake-
Refresh platforms.
+The Slim Bootloader is designed with multi-stages(Stage1A/B, +Stage2, +Payload) architecture to cover from reset vector to OS booting and +it consumes Intel FSP +(https://github.com/IntelFsp/FSP) for silicon initialization. +* Stage1A: Reset vector, CAR init with FSP-T +* Stage1B: Memory init with FSP-M, CAR teardown, Continue execution +in memory +* Stage2 : Rest of Silicon init with FSP-S, Create HOB, Hand-off to +Payload +* Payload: Load OS from media, Booting OS
+Here is the step-by-step to launch U-Boot on Slim Bootloader.
+Compile U-Boot +==============
make slimbootloader_defconfig all > strip u-boot (To make it- smaller size by removing debug symbols)
+Compile Slim Bootloader with U-Boot +===================================
+For build environment:
+https://slimbootloader.github.io/getting-started/build-host-setup.h +tm +l
+Get source code:
+Copy the built u-boot elf to Slim Bootloader source tree:
mkdir -p <slimbootloader_home>/PayloadPkg/PayloadBins/ cp <u-boot_home>/u-boot+<slimbootloader_home>/PayloadPkg/PayloadBins/
+Update default payload to U-Boot (PayloadId is 4 Bytes):
vi Platform/QemuBoardPkg/CfgData/CfgDataExt_Brd1.dlt- -GEN_CFG_DATA.PayloadId | 'AUTO'
- +GEN_CFG_DATA.PayloadId | 'U-BT'
+Compile for QEMU target:
- The output is Outputs/qemu/SlimBootloader.bin
python BuildLoader.py build qemu -p+"OsLoader.efi:LLDR:Lz4;u-boot:U-
BT:Lzma"
+Launch Slim Bootloader on QEMU +==============================
qemu-system-x86_64 -machine q35 -m 256 -nographic -serialmon:stdio
-pflash Outputs/qemu/SlimBootloader.bin
+Now, you should reach at U-Boot serial console. \ No newline at end of file diff --git a/board/slimbootloader/slimbootloader/slimbootloader.c b/board/slimbootloader/slimbootloader/slimbootloader.c new file mode 100644 index 0000000000..d88aa622a0 --- /dev/null +++ b/board/slimbootloader/slimbootloader/slimbootloader.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0+ +/*
- Copyright (C) 2019 Intel Corporation <www.intel.com> */
+#include <common.h>
+int board_early_init_r(void) +{
/*
* Make sure PCI bus is enumerated so that peripherals on the PCI
bus
* can be discovered by their drivers
*/
pci_init();
return 0;
+} diff --git a/board/slimbootloader/slimbootloader/start.S b/board/slimbootloader/slimbootloader/start.S new file mode 100644 index 0000000000..5c3f3df09e --- /dev/null +++ b/board/slimbootloader/slimbootloader/start.S @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (C) 2019 Intel Corporation <www.intel.com> */
+/* board early initialization */ +.globl early_board_init +early_board_init:
jmp early_board_init_ret
diff --git a/configs/slimbootloader_defconfig b/configs/slimbootloader_defconfig new file mode 100644 index 0000000000..77ff3257b6 --- /dev/null +++ b/configs/slimbootloader_defconfig @@ -0,0 +1,64 @@ +CONFIG_X86=y +CONFIG_VENDOR_SLIMBOOTLOADER=y +CONFIG_TARGET_SLIMBOOTLOADER=y +CONFIG_X86_LOAD_FROM_32_BIT=y +CONFIG_REGMAP=y +CONFIG_SYSCON=y +CONFIG_SYS_CONSOLE_INFO_QUIET=y +CONFIG_BOARD_EARLY_INIT_R=y +CONFIG_LAST_STAGE_INIT=y +CONFIG_HUSH_PARSER=y +CONFIG_CMD_MMC=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_FAT=y +CONFIG_CMD_USB=y +CONFIG_DOS_PARTITION=y +CONFIG_EFI_PARTITION=y +CONFIG_OF_CONTROL=y +CONFIG_OF_EMBED=y
We should use OF_SEPARATE.
Okay. Let me enable OF_SEPARATE.
I have a quick question. The reason I use OF_EMBED is to use u-boot ELF as Slim Bootloader payload because Slim Bootloader does not use fixed text address to load a payload. Is it okay to use OF_EMBED in this case? Or can you suggest better way? Thanks.
Does that mean Slim Bootloader only support ELF payload images?
Regards, Bin