
Hi Bin,
-----Original Message----- From: Bin Meng [mailto:bmeng.cn@gmail.com] Sent: Monday, July 8, 2019 10:04 PM 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 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-set +up.h +tm +l
+Get source code:
git clone+https://github.com/slimbootloader/slimbootloader.git
+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?
Slim Bootloader supports FV, PE32, ELF and raw format as well, but raw binary requires additional configuration change in Slim Bootloader to match text base. Let me use u-boot-dtb.bin and add detailed steps in board/intel/slimbootloader/README in v3 patch.
Regards, Bin
Best Regards, Aiden