[U-Boot] [PATCH v7 8/9] board: intel: Add new slimbootloader board

Add slimbootloader board to run U-boot as a Slim Bootloader payload - Add new board/intel/slimbootloader directory with minimum codes - Add slimbootloader configuration files - Add doc/board/intel/slimbootloader.rst
Signed-off-by: Aiden Park aiden.park@intel.com Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Andy Shevchenko andy.shevchenko@gmail.com ---
Changes in v7: * Adding slimbootloader.rst in index.rst
Changes in v6: * Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig * Move USB_STORAGE and USB_KEYBOARD to board Kconfig * Convert README to reST doc/board/intel/slimbootloader.rst
Changes in v5: * Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig
Changes in v3: * Remove VENDOR_SLIMBOOTLOADER * Use VENDOR_INTEL * Move slimbootloader under board/intel/ * Enable generic CONFIGs in slimbootloader_defconfig * Add more description in board/intel/slimbootloader/README
board/intel/Kconfig | 14 ++ board/intel/slimbootloader/Kconfig | 28 ++++ board/intel/slimbootloader/Makefile | 5 + board/intel/slimbootloader/slimbootloader.c | 21 +++ board/intel/slimbootloader/start.S | 9 + configs/slimbootloader_defconfig | 22 +++ doc/board/intel/index.rst | 1 + doc/board/intel/slimbootloader.rst | 174 ++++++++++++++++++++ include/configs/slimbootloader.h | 62 +++++++ 9 files changed, 336 insertions(+) create mode 100644 board/intel/slimbootloader/Kconfig create mode 100644 board/intel/slimbootloader/Makefile create mode 100644 board/intel/slimbootloader/slimbootloader.c create mode 100644 board/intel/slimbootloader/start.S create mode 100644 configs/slimbootloader_defconfig create mode 100644 doc/board/intel/slimbootloader.rst create mode 100644 include/configs/slimbootloader.h
diff --git a/board/intel/Kconfig b/board/intel/Kconfig index 5131836cb0..10859b5f08 100644 --- a/board/intel/Kconfig +++ b/board/intel/Kconfig @@ -73,6 +73,19 @@ config TARGET_MINNOWMAX Note that PCIE_ECAM_BASE is set up by the FSP so the value used by U-Boot matches that value.
+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 consumes HOB data + which is generated by Slim Bootloader for its driver initialization. + Slim Bootloader consumes FSP and its HOB, but FSP HOB is cleared + Before launching a payload. Instead, Slim Bootloader generates its + HOB data such as memory info, serial port info and so on. + Refer to doc/board/intel/slimbootloader.rst for the details. + endchoice
source "board/intel/bayleybay/Kconfig" @@ -82,5 +95,6 @@ source "board/intel/crownbay/Kconfig" source "board/intel/edison/Kconfig" source "board/intel/galileo/Kconfig" source "board/intel/minnowmax/Kconfig" +source "board/intel/slimbootloader/Kconfig"
endif diff --git a/board/intel/slimbootloader/Kconfig b/board/intel/slimbootloader/Kconfig new file mode 100644 index 0000000000..8c7e22cc33 --- /dev/null +++ b/board/intel/slimbootloader/Kconfig @@ -0,0 +1,28 @@ +# 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 "intel" + +config SYS_SOC + default "slimbootloader" + +config SYS_CONFIG_NAME + default "slimbootloader" + +config SYS_TEXT_BASE + default 0x00100000 + +config BOARD_SPECIFIC_OPTIONS + def_bool y + select SYS_SLIMBOOTLOADER + select USB_STORAGE + select USB_KEYBOARD + +endif diff --git a/board/intel/slimbootloader/Makefile b/board/intel/slimbootloader/Makefile new file mode 100644 index 0000000000..fd8fa98a8d --- /dev/null +++ b/board/intel/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/intel/slimbootloader/slimbootloader.c b/board/intel/slimbootloader/slimbootloader.c new file mode 100644 index 0000000000..f50eeb823f --- /dev/null +++ b/board/intel/slimbootloader/slimbootloader.c @@ -0,0 +1,21 @@ +// 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. + * + * Slim Bootloader has already done PCI bus enumeration before loading + * U-Boot, so U-Boot needs to preserve PCI configuration. + * Therefore, '# CONFIG_PCI_PNP is not set' is included in defconfig. + */ + pci_init(); + + return 0; +} diff --git a/board/intel/slimbootloader/start.S b/board/intel/slimbootloader/start.S new file mode 100644 index 0000000000..5c3f3df09e --- /dev/null +++ b/board/intel/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..b16ed71469 --- /dev/null +++ b/configs/slimbootloader_defconfig @@ -0,0 +1,22 @@ +CONFIG_X86=y +CONFIG_VENDOR_INTEL=y +CONFIG_TARGET_SLIMBOOTLOADER=y +CONFIG_DEFAULT_DEVICE_TREE="slimbootloader" +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_BOOTSTAGE=y +CONFIG_BOOTSTAGE_REPORT=y +CONFIG_BOOTDELAY=10 +CONFIG_CONSOLE_SCROLL_LINES=5 +# CONFIG_PCI_PNP is not set diff --git a/doc/board/intel/index.rst b/doc/board/intel/index.rst index f416801910..f545dee87a 100644 --- a/doc/board/intel/index.rst +++ b/doc/board/intel/index.rst @@ -13,3 +13,4 @@ Intel edison galileo minnowmax + slimbootloader diff --git a/doc/board/intel/slimbootloader.rst b/doc/board/intel/slimbootloader.rst new file mode 100644 index 0000000000..4b9c293c2d --- /dev/null +++ b/doc/board/intel/slimbootloader.rst @@ -0,0 +1,174 @@ +.. SPDX-License-Identifier: GPL-2.0+ +.. sectionauthor:: Aiden Park aiden.park@intel.com + +Slim Bootloader +=============== + +Introduction +------------ + +This target is to enable U-Boot_ as a payload of `Slim Bootloader`_ (a.k.a SBL) +boot firmware which currently supports QEMU, Apollolake, Whiskeylake, +Coffeelake-R 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`_ 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: Payload init with HOB, Load OS from media, Booting OS + +The Slim Bootloader stages(Stage1A/B, Stage2) focus on chipset, hardware and +platform specific initialization, and it provides useful information to a +payload in a HOB(Hand-Off Block) which has serial port, memory map, performance +data info and so on. This is Slim Bootloader architectural design to make a +payload light-weight, platform independent and more generic across different +boot solutions or payloads, and to minimize hardware re-initialization in a +payload. + +Build Instruction for U-Boot as a Slim Bootloader payload +--------------------------------------------------------- + +Build U-Boot and obtain u-boot-dtb.bin:: + + $ make distclean + $ make slimbootloader_defconfig + $ make all + +Prepare Slim Bootloader +----------------------- + +1. Setup Build Environment for Slim Bootloader. + + Refer to `Getting Started`_ page in `Slim Bootloader`_ document site. + +2. Get source code. Let's simply clone the repo:: + + $ git clone https://github.com/slimbootloader/slimbootloader.git + +3. Copy u-boot-dtb.bin to Slim Bootloader. + Slim Bootloader looks for a payload from the specific location. + Copy the build u-boot-dtb.bin to the expected location:: + + $ mkdir -p <Slim Bootloader Dir>/PayloadPkg/PayloadBins/ + $ cp <U-Boot Dir>/u-boot-dtb.bin <Slim Bootloader Dir>/PayloadPkg/PayloadBins/u-boot-dtb.bin + +Build Instruction for Slim Bootloader for QEMU target +----------------------------------------------------- + +Slim Bootloader supports multiple payloads, and a board of Slim Bootloader +detects its target payload by PayloadId in board configuration. +The PayloadId can be any 4 Bytes value. + +1. Update PayloadId. Let's use 'U-BT' as an example:: + + $ vi Platform/QemuBoardPkg/CfgData/CfgDataExt_Brd1.dlt + -GEN_CFG_DATA.PayloadId | 'AUTO' + +GEN_CFG_DATA.PayloadId | 'U-BT' + +2. Update payload text base. PAYLOAD_EXE_BASE must be the same as U-Boot + CONFIG_SYS_TEXT_BASE in board/intel/slimbootloader/Kconfig. + PAYLOAD_LOAD_HIGH must be 0:: + + $ vi Platform/QemuBoardPkg/BoardConfig.py + + self.PAYLOAD_LOAD_HIGH = 0 + + self.PAYLOAD_EXE_BASE = 0x00100000 + +3. Build QEMU target. Make sure u-boot-dtb.bin and U-BT PayloadId + in build command. The output is Outputs/qemu/SlimBootloader.bin:: + + $ python BuildLoader.py build qemu -p "OsLoader.efi:LLDR:Lz4;u-boot-dtb.bin:U-BT:Lzma" + +4. Launch Slim Bootloader on QEMU. + You should reach at U-Boot serial console:: + + $ qemu-system-x86_64 -machine q35 -nographic -serial mon:stdio -pflash Outputs/qemu/SlimBootloader.bin + +Build Instruction for Slim Bootloader for LeafHill(APL) target +-------------------------------------------------------------- + +LeafHill is using PCI UART2 device as a serial port. +For MEM32 serial port, CONFIG_SYS_NS16550_MEM32 needs to be enabled in U-Boot. + +1. Enable CONFIG_SYS_NS16550_MEM32 in U-Boot:: + + $ vi include/configs/slimbootloader.h + +#define CONFIG_SYS_NS16550_MEM32 + #ifdef CONFIG_SYS_NS16550_MEM3 + +2. Build U-Boot:: + + $ make disclean + $ make slimbootloader_defconfig + $ make all + +3. Copy u-boot-dtb.bin to Slim Bootloader. + Slim Bootloader looks for a payload from the specific location. + Copy the build u-boot-dtb.bin to the expected location:: + + $ mkdir -p <Slim Bootloader Dir>/PayloadPkg/PayloadBins/ + $ cp <U-Boot Dir>/u-boot-dtb.bin <Slim Bootloader Dir>/PayloadPkg/PayloadBins/u-boot-dtb.bin + +4. Update PayloadId. Let's use 'U-BT' as an example:: + + $ vi Platform/ApollolakeBoardPkg/CfgData/CfgData_Int_LeafHill.dlt + -GEN_CFG_DATA.PayloadId | 'AUTO + +GEN_CFG_DATA.PayloadId | 'U-BT' + +5. Update payload text base. + +* PAYLOAD_EXE_BASE must be the same as U-Boot CONFIG_SYS_TEXT_BASE + in board/intel/slimbootloader/Kconfig. +* PAYLOAD_LOAD_HIGH must be 0:: + + $ vi Platform/ApollolakeBoardPkg/BoardConfig.py + + self.PAYLOAD_LOAD_HIGH = 0 + + self.PAYLOAD_EXE_BASE = 0x00100000 + +6. Build APL target. Make sure u-boot-dtb.bin and U-BT PayloadId + in build command. The output is Outputs/apl/Stitch_Components.zip:: + + $ python BuildLoader.py build apl -p "OsLoader.efi:LLDR:Lz4;u-boot-dtb.bin:U-BT:Lzma" + +7. Stitch IFWI. + + Refer to Apollolake_ page in Slim Bootloader document site:: + + $ python Platform/ApollolakeBoardPkg/Script/StitchLoader.py -i <Existing IFWI> -s Outputs/apl/Stitch_Components.zip -o <Output IFWI> + +8. Flash IFWI. + + Use DediProg to flash IFWI. You should reach at U-Boot serial console. + + +Build Instruction to use ELF U-Boot +----------------------------------- + +1. Enable CONFIG_OF_EMBED:: + + $ vi configs/slimbootloader_defconfig + +CONFIG_OF_EMBED=y + +2. Build U-Boot:: + + $ make disclean + $ make slimbootloader_defconfig + $ make all + $ strip u-boot (removing symbol for reduced size) + +3. Do same steps as above + +* Copy u-boot(ELF) to PayloadBins directory +* Update PayloadId 'U-BT' as above. +* No need to set PAYLOAD_LOAD_HIGH and PAYLOAD_EXE_BASE. +* Build Slim Bootloader. Use u-boot instead of u-boot-dtb.bin:: + + $ python BuildLoader.py build <qemu or apl> -p "OsLoader.efi:LLDR:Lz4;u-boot:U-BT:Lzma" + +.. _U-Boot: https://gitlab.denx.de/ +.. _`Slim Bootloader`: https://github.com/slimbootloader/ +.. _`Intel FSP`: https://github.com/IntelFsp/ +.. _`Getting Started`: https://slimbootloader.github.io/getting-started/ +.. _Apollolake: https://slimbootloader.github.io/supported-hardware/apollo-lake-crb.html#sti... diff --git a/include/configs/slimbootloader.h b/include/configs/slimbootloader.h new file mode 100644 index 0000000000..e0011ed446 --- /dev/null +++ b/include/configs/slimbootloader.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2019 Intel Corporation <www.intel.com> + */ + +#ifndef __SLIMBOOTLOADER_CONFIG_H__ +#define __SLIMBOOTLOADER_CONFIG_H__ + +#include <configs/x86-common.h> + +/* + * By default, CONFIG_SYS_NS16550_PORT_MAPPED is enabled for port io serial. + * To use mmio base serial, enable CONFIG_SYS_NS16550_MEM32 and disable + * CONFIG_SYS_NS16550_PORT_MAPPED until ns16550 driver supports serial port + * configuration in run-time. + * + * #define CONFIG_SYS_NS16550_MEM32 + * #undef CONFIG_SYS_NS16550_PORT_MAPPED + */ +#ifdef CONFIG_SYS_NS16550_MEM32 +#undef CONFIG_SYS_NS16550_PORT_MAPPED +#endif + +#define CONFIG_STD_DEVICES_SETTINGS \ + "stdin=serial,i8042-kbd,usbkbd\0" \ + "stdout=serial\0" \ + "stderr=serial\0" + +/* + * Override CONFIG_EXTRA_ENV_SETTINGS in x86-common.h + */ +#undef CONFIG_EXTRA_ENV_SETTINGS +#define CONFIG_EXTRA_ENV_SETTINGS \ + CONFIG_STD_DEVICES_SETTINGS \ + "netdev=eth0\0" \ + "consoledev=ttyS0\0" \ + "ramdiskaddr=0x4000000\0" \ + "ramdiskfile=initrd\0" \ + "bootdev=usb\0" \ + "bootdevnum=0\0" \ + "bootdevpart=0\0" \ + "bootfsload=fatload\0" \ + "bootusb=setenv bootdev usb; boot\0" \ + "bootscsi=setenv bootdev scsi; boot\0" \ + "bootmmc=setenv bootdev mmc; boot\0" \ + "bootargs=console=ttyS0,115200 console=tty0\0" + +/* + * Override CONFIG_BOOTCOMMAND in x86-common.h + */ +#undef CONFIG_BOOTCOMMAND +#define CONFIG_BOOTCOMMAND \ + "if test ${bootdev} = "usb"; then ${bootdev} start; fi; " \ + "if test ${bootdev} = "scsi"; then ${bootdev} scan; fi; " \ + "${bootdev} info; " \ + "${bootfsload} ${bootdev} ${bootdevnum}:${bootdevpart} " \ + "${loadaddr} ${bootfile}; " \ + "${bootfsload} ${bootdev} ${bootdevnum}:${bootdevpart} " \ + "${ramdiskaddr} ${ramdiskfile}; " \ + "zboot ${loadaddr} 0 ${ramdiskaddr} ${filesize}" + +#endif /* __SLIMBOOTLOADER_CONFIG_H__ */

Hi Aiden,
On Mon, Jul 29, 2019 at 12:36 PM Park, Aiden aiden.park@intel.com wrote:
Add slimbootloader board to run U-boot as a Slim Bootloader payload
- Add new board/intel/slimbootloader directory with minimum codes
- Add slimbootloader configuration files
- Add doc/board/intel/slimbootloader.rst
Signed-off-by: Aiden Park aiden.park@intel.com Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Andy Shevchenko andy.shevchenko@gmail.com
Changes in v7:
- Adding slimbootloader.rst in index.rst
Changes in v6:
- Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig
- Move USB_STORAGE and USB_KEYBOARD to board Kconfig
- Convert README to reST doc/board/intel/slimbootloader.rst
Changes in v5:
- Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig
Changes in v3:
- Remove VENDOR_SLIMBOOTLOADER
- Use VENDOR_INTEL
- Move slimbootloader under board/intel/
- Enable generic CONFIGs in slimbootloader_defconfig
- Add more description in board/intel/slimbootloader/README
board/intel/Kconfig | 14 ++ board/intel/slimbootloader/Kconfig | 28 ++++ board/intel/slimbootloader/Makefile | 5 + board/intel/slimbootloader/slimbootloader.c | 21 +++ board/intel/slimbootloader/start.S | 9 + configs/slimbootloader_defconfig | 22 +++ doc/board/intel/index.rst | 1 + doc/board/intel/slimbootloader.rst | 174 ++++++++++++++++++++ include/configs/slimbootloader.h | 62 +++++++ 9 files changed, 336 insertions(+) create mode 100644 board/intel/slimbootloader/Kconfig create mode 100644 board/intel/slimbootloader/Makefile create mode 100644 board/intel/slimbootloader/slimbootloader.c create mode 100644 board/intel/slimbootloader/start.S create mode 100644 configs/slimbootloader_defconfig create mode 100644 doc/board/intel/slimbootloader.rst create mode 100644 include/configs/slimbootloader.h
diff --git a/board/intel/Kconfig b/board/intel/Kconfig index 5131836cb0..10859b5f08 100644 --- a/board/intel/Kconfig +++ b/board/intel/Kconfig @@ -73,6 +73,19 @@ config TARGET_MINNOWMAX Note that PCIE_ECAM_BASE is set up by the FSP so the value used by U-Boot matches that value.
+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 consumes HOB data
nits: should have one space between HOB and (
Please fix this globally in this series. There are many places including .c file and the reST documentation.
which is generated by Slim Bootloader for its driver initialization.
Slim Bootloader consumes FSP and its HOB, but FSP HOB is cleared
Before launching a payload. Instead, Slim Bootloader generates its
HOB data such as memory info, serial port info and so on.
Refer to doc/board/intel/slimbootloader.rst for the details.
endchoice
source "board/intel/bayleybay/Kconfig" @@ -82,5 +95,6 @@ source "board/intel/crownbay/Kconfig" source "board/intel/edison/Kconfig" source "board/intel/galileo/Kconfig" source "board/intel/minnowmax/Kconfig" +source "board/intel/slimbootloader/Kconfig"
endif diff --git a/board/intel/slimbootloader/Kconfig b/board/intel/slimbootloader/Kconfig new file mode 100644 index 0000000000..8c7e22cc33 --- /dev/null +++ b/board/intel/slimbootloader/Kconfig @@ -0,0 +1,28 @@ +# 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 "intel"
+config SYS_SOC
default "slimbootloader"
+config SYS_CONFIG_NAME
default "slimbootloader"
+config SYS_TEXT_BASE
default 0x00100000
+config BOARD_SPECIFIC_OPTIONS
def_bool y
select SYS_SLIMBOOTLOADER
select USB_STORAGE
select USB_KEYBOARD
+endif diff --git a/board/intel/slimbootloader/Makefile b/board/intel/slimbootloader/Makefile new file mode 100644 index 0000000000..fd8fa98a8d --- /dev/null +++ b/board/intel/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/intel/slimbootloader/slimbootloader.c b/board/intel/slimbootloader/slimbootloader.c new file mode 100644 index 0000000000..f50eeb823f --- /dev/null +++ b/board/intel/slimbootloader/slimbootloader.c @@ -0,0 +1,21 @@ +// 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.
*
* Slim Bootloader has already done PCI bus enumeration before loading
* U-Boot, so U-Boot needs to preserve PCI configuration.
* Therefore, '# CONFIG_PCI_PNP is not set' is included in defconfig.
*/
pci_init();
return 0;
+} diff --git a/board/intel/slimbootloader/start.S b/board/intel/slimbootloader/start.S new file mode 100644 index 0000000000..5c3f3df09e --- /dev/null +++ b/board/intel/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..b16ed71469 --- /dev/null +++ b/configs/slimbootloader_defconfig @@ -0,0 +1,22 @@ +CONFIG_X86=y +CONFIG_VENDOR_INTEL=y +CONFIG_TARGET_SLIMBOOTLOADER=y +CONFIG_DEFAULT_DEVICE_TREE="slimbootloader" +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_BOOTSTAGE=y +CONFIG_BOOTSTAGE_REPORT=y +CONFIG_BOOTDELAY=10 +CONFIG_CONSOLE_SCROLL_LINES=5 +# CONFIG_PCI_PNP is not set diff --git a/doc/board/intel/index.rst b/doc/board/intel/index.rst index f416801910..f545dee87a 100644 --- a/doc/board/intel/index.rst +++ b/doc/board/intel/index.rst @@ -13,3 +13,4 @@ Intel edison galileo minnowmax
- slimbootloader
diff --git a/doc/board/intel/slimbootloader.rst b/doc/board/intel/slimbootloader.rst new file mode 100644 index 0000000000..4b9c293c2d --- /dev/null +++ b/doc/board/intel/slimbootloader.rst @@ -0,0 +1,174 @@ +.. SPDX-License-Identifier: GPL-2.0+ +.. sectionauthor:: Aiden Park aiden.park@intel.com
+Slim Bootloader +===============
+Introduction +------------
+This target is to enable U-Boot_ as a payload of `Slim Bootloader`_ (a.k.a SBL) +boot firmware which currently supports QEMU, Apollolake, Whiskeylake, +Coffeelake-R 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`_ 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: Payload init with HOB, Load OS from media, Booting OS
+The Slim Bootloader stages(Stage1A/B, Stage2) focus on chipset, hardware and +platform specific initialization, and it provides useful information to a +payload in a HOB(Hand-Off Block) which has serial port, memory map, performance +data info and so on. This is Slim Bootloader architectural design to make a +payload light-weight, platform independent and more generic across different +boot solutions or payloads, and to minimize hardware re-initialization in a +payload.
+Build Instruction for U-Boot as a Slim Bootloader payload +---------------------------------------------------------
+Build U-Boot and obtain u-boot-dtb.bin::
- $ make distclean
- $ make slimbootloader_defconfig
- $ make all
+Prepare Slim Bootloader +-----------------------
+1. Setup Build Environment for Slim Bootloader.
- Refer to `Getting Started`_ page in `Slim Bootloader`_ document site.
+2. Get source code. Let's simply clone the repo::
+3. Copy u-boot-dtb.bin to Slim Bootloader.
- Slim Bootloader looks for a payload from the specific location.
- Copy the build u-boot-dtb.bin to the expected location::
- $ mkdir -p <Slim Bootloader Dir>/PayloadPkg/PayloadBins/
- $ cp <U-Boot Dir>/u-boot-dtb.bin <Slim Bootloader Dir>/PayloadPkg/PayloadBins/u-boot-dtb.bin
+Build Instruction for Slim Bootloader for QEMU target +-----------------------------------------------------
+Slim Bootloader supports multiple payloads, and a board of Slim Bootloader +detects its target payload by PayloadId in board configuration. +The PayloadId can be any 4 Bytes value.
+1. Update PayloadId. Let's use 'U-BT' as an example::
- $ vi Platform/QemuBoardPkg/CfgData/CfgDataExt_Brd1.dlt
- -GEN_CFG_DATA.PayloadId | 'AUTO'
- +GEN_CFG_DATA.PayloadId | 'U-BT'
+2. Update payload text base. PAYLOAD_EXE_BASE must be the same as U-Boot
- CONFIG_SYS_TEXT_BASE in board/intel/slimbootloader/Kconfig.
- PAYLOAD_LOAD_HIGH must be 0::
- $ vi Platform/QemuBoardPkg/BoardConfig.py
I was trying to test this. However with current slimbootloader head (commit #723672c5ca13263bf1428997338bdb03b3bc6609) this file does not exist.
So the documentation here is stale. My major concern regarding the slimbootloader build itself is: why are these manual steps needed? Shouldn't the slimbootloader ship a default configuration file for U-Boot payload, thus we don't need manually modify this file or that?
self.PAYLOAD_LOAD_HIGH = 0
self.PAYLOAD_EXE_BASE = 0x00100000
+3. Build QEMU target. Make sure u-boot-dtb.bin and U-BT PayloadId
- in build command. The output is Outputs/qemu/SlimBootloader.bin::
- $ python BuildLoader.py build qemu -p "OsLoader.efi:LLDR:Lz4;u-boot-dtb.bin:U-BT:Lzma"
+4. Launch Slim Bootloader on QEMU.
- You should reach at U-Boot serial console::
- $ qemu-system-x86_64 -machine q35 -nographic -serial mon:stdio -pflash Outputs/qemu/SlimBootloader.bin
+Build Instruction for Slim Bootloader for LeafHill(APL) target +--------------------------------------------------------------
+LeafHill is using PCI UART2 device as a serial port. +For MEM32 serial port, CONFIG_SYS_NS16550_MEM32 needs to be enabled in U-Boot.
+1. Enable CONFIG_SYS_NS16550_MEM32 in U-Boot::
- $ vi include/configs/slimbootloader.h
- +#define CONFIG_SYS_NS16550_MEM32
#ifdef CONFIG_SYS_NS16550_MEM3
+2. Build U-Boot::
- $ make disclean
- $ make slimbootloader_defconfig
- $ make all
+3. Copy u-boot-dtb.bin to Slim Bootloader.
- Slim Bootloader looks for a payload from the specific location.
- Copy the build u-boot-dtb.bin to the expected location::
- $ mkdir -p <Slim Bootloader Dir>/PayloadPkg/PayloadBins/
- $ cp <U-Boot Dir>/u-boot-dtb.bin <Slim Bootloader Dir>/PayloadPkg/PayloadBins/u-boot-dtb.bin
+4. Update PayloadId. Let's use 'U-BT' as an example::
- $ vi Platform/ApollolakeBoardPkg/CfgData/CfgData_Int_LeafHill.dlt
- -GEN_CFG_DATA.PayloadId | 'AUTO
- +GEN_CFG_DATA.PayloadId | 'U-BT'
+5. Update payload text base.
+* PAYLOAD_EXE_BASE must be the same as U-Boot CONFIG_SYS_TEXT_BASE
- in board/intel/slimbootloader/Kconfig.
+* PAYLOAD_LOAD_HIGH must be 0::
- $ vi Platform/ApollolakeBoardPkg/BoardConfig.py
self.PAYLOAD_LOAD_HIGH = 0
self.PAYLOAD_EXE_BASE = 0x00100000
+6. Build APL target. Make sure u-boot-dtb.bin and U-BT PayloadId
- in build command. The output is Outputs/apl/Stitch_Components.zip::
- $ python BuildLoader.py build apl -p "OsLoader.efi:LLDR:Lz4;u-boot-dtb.bin:U-BT:Lzma"
+7. Stitch IFWI.
- Refer to Apollolake_ page in Slim Bootloader document site::
- $ python Platform/ApollolakeBoardPkg/Script/StitchLoader.py -i <Existing IFWI> -s Outputs/apl/Stitch_Components.zip -o <Output IFWI>
+8. Flash IFWI.
- Use DediProg to flash IFWI. You should reach at U-Boot serial console.
+Build Instruction to use ELF U-Boot +-----------------------------------
+1. Enable CONFIG_OF_EMBED::
- $ vi configs/slimbootloader_defconfig
- +CONFIG_OF_EMBED=y
+2. Build U-Boot::
- $ make disclean
- $ make slimbootloader_defconfig
- $ make all
- $ strip u-boot (removing symbol for reduced size)
+3. Do same steps as above
+* Copy u-boot(ELF) to PayloadBins directory +* Update PayloadId 'U-BT' as above. +* No need to set PAYLOAD_LOAD_HIGH and PAYLOAD_EXE_BASE. +* Build Slim Bootloader. Use u-boot instead of u-boot-dtb.bin::
- $ python BuildLoader.py build <qemu or apl> -p "OsLoader.efi:LLDR:Lz4;u-boot:U-BT:Lzma"
+.. _U-Boot: https://gitlab.denx.de/ +.. _`Slim Bootloader`: https://github.com/slimbootloader/ +.. _`Intel FSP`: https://github.com/IntelFsp/ +.. _`Getting Started`: https://slimbootloader.github.io/getting-started/ +.. _Apollolake: https://slimbootloader.github.io/supported-hardware/apollo-lake-crb.html#sti... diff --git a/include/configs/slimbootloader.h b/include/configs/slimbootloader.h new file mode 100644 index 0000000000..e0011ed446 --- /dev/null
[snip]
Regards, Bin

Hi Bin,
-----Original Message----- From: Bin Meng [mailto:bmeng.cn@gmail.com] Sent: Thursday, August 1, 2019 2:17 PM To: Park, Aiden aiden.park@intel.com Cc: Andy Shevchenko andy.shevchenko@gmail.com; U-Boot Mailing List <u- boot@lists.denx.de>; Simon Glass sjg@chromium.org Subject: Re: [PATCH v7 8/9] board: intel: Add new slimbootloader board
Hi Aiden,
On Mon, Jul 29, 2019 at 12:36 PM Park, Aiden aiden.park@intel.com wrote:
Add slimbootloader board to run U-boot as a Slim Bootloader payload
- Add new board/intel/slimbootloader directory with minimum codes
- Add slimbootloader configuration files
- Add doc/board/intel/slimbootloader.rst
Signed-off-by: Aiden Park aiden.park@intel.com Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Andy Shevchenko andy.shevchenko@gmail.com
Changes in v7:
- Adding slimbootloader.rst in index.rst
Changes in v6:
- Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig
- Move USB_STORAGE and USB_KEYBOARD to board Kconfig
- Convert README to reST doc/board/intel/slimbootloader.rst
Changes in v5:
- Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig
Changes in v3:
- Remove VENDOR_SLIMBOOTLOADER
- Use VENDOR_INTEL
- Move slimbootloader under board/intel/
- Enable generic CONFIGs in slimbootloader_defconfig
- Add more description in board/intel/slimbootloader/README
board/intel/Kconfig | 14 ++ board/intel/slimbootloader/Kconfig | 28 ++++ board/intel/slimbootloader/Makefile | 5 + board/intel/slimbootloader/slimbootloader.c | 21 +++ board/intel/slimbootloader/start.S | 9 + configs/slimbootloader_defconfig | 22 +++ doc/board/intel/index.rst | 1 + doc/board/intel/slimbootloader.rst | 174 ++++++++++++++++++++ include/configs/slimbootloader.h | 62 +++++++ 9 files changed, 336 insertions(+) create mode 100644 board/intel/slimbootloader/Kconfig create mode 100644 board/intel/slimbootloader/Makefile create mode 100644 board/intel/slimbootloader/slimbootloader.c create mode 100644 board/intel/slimbootloader/start.S create mode 100644 configs/slimbootloader_defconfig create mode 100644 doc/board/intel/slimbootloader.rst create mode 100644 include/configs/slimbootloader.h
diff --git a/board/intel/Kconfig b/board/intel/Kconfig index 5131836cb0..10859b5f08 100644 --- a/board/intel/Kconfig +++ b/board/intel/Kconfig @@ -73,6 +73,19 @@ config TARGET_MINNOWMAX Note that PCIE_ECAM_BASE is set up by the FSP so the value used by U-Boot matches that value.
+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 consumes HOB
+data
nits: should have one space between HOB and (
Please fix this globally in this series. There are many places including .c file and the reST documentation.
I will do. Thanks.
which is generated by Slim Bootloader for its driver initialization.
Slim Bootloader consumes FSP and its HOB, but FSP HOB is cleared
Before launching a payload. Instead, Slim Bootloader generates its
HOB data such as memory info, serial port info and so on.
Refer to doc/board/intel/slimbootloader.rst for the details.
endchoice
source "board/intel/bayleybay/Kconfig" @@ -82,5 +95,6 @@ source "board/intel/crownbay/Kconfig" source "board/intel/edison/Kconfig" source "board/intel/galileo/Kconfig" source "board/intel/minnowmax/Kconfig" +source "board/intel/slimbootloader/Kconfig"
endif diff --git a/board/intel/slimbootloader/Kconfig b/board/intel/slimbootloader/Kconfig new file mode 100644 index 0000000000..8c7e22cc33 --- /dev/null +++ b/board/intel/slimbootloader/Kconfig @@ -0,0 +1,28 @@ +# 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 "intel"
+config SYS_SOC
default "slimbootloader"
+config SYS_CONFIG_NAME
default "slimbootloader"
+config SYS_TEXT_BASE
default 0x00100000
+config BOARD_SPECIFIC_OPTIONS
def_bool y
select SYS_SLIMBOOTLOADER
select USB_STORAGE
select USB_KEYBOARD
+endif diff --git a/board/intel/slimbootloader/Makefile b/board/intel/slimbootloader/Makefile new file mode 100644 index 0000000000..fd8fa98a8d --- /dev/null +++ b/board/intel/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/intel/slimbootloader/slimbootloader.c b/board/intel/slimbootloader/slimbootloader.c new file mode 100644 index 0000000000..f50eeb823f --- /dev/null +++ b/board/intel/slimbootloader/slimbootloader.c @@ -0,0 +1,21 @@ +// 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.
*
* Slim Bootloader has already done PCI bus enumeration before loading
* U-Boot, so U-Boot needs to preserve PCI configuration.
* Therefore, '# CONFIG_PCI_PNP is not set' is included in defconfig.
*/
pci_init();
return 0;
+} diff --git a/board/intel/slimbootloader/start.S b/board/intel/slimbootloader/start.S new file mode 100644 index 0000000000..5c3f3df09e --- /dev/null +++ b/board/intel/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..b16ed71469 --- /dev/null +++ b/configs/slimbootloader_defconfig @@ -0,0 +1,22 @@ +CONFIG_X86=y +CONFIG_VENDOR_INTEL=y +CONFIG_TARGET_SLIMBOOTLOADER=y +CONFIG_DEFAULT_DEVICE_TREE="slimbootloader" +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_BOOTSTAGE=y +CONFIG_BOOTSTAGE_REPORT=y +CONFIG_BOOTDELAY=10 +CONFIG_CONSOLE_SCROLL_LINES=5 +# CONFIG_PCI_PNP is not set diff --git a/doc/board/intel/index.rst b/doc/board/intel/index.rst index f416801910..f545dee87a 100644 --- a/doc/board/intel/index.rst +++ b/doc/board/intel/index.rst @@ -13,3 +13,4 @@ Intel edison galileo minnowmax
- slimbootloader
diff --git a/doc/board/intel/slimbootloader.rst b/doc/board/intel/slimbootloader.rst new file mode 100644 index 0000000000..4b9c293c2d --- /dev/null +++ b/doc/board/intel/slimbootloader.rst @@ -0,0 +1,174 @@ +.. SPDX-License-Identifier: GPL-2.0+ +.. sectionauthor:: Aiden Park aiden.park@intel.com
+Slim Bootloader +===============
+Introduction +------------
+This target is to enable U-Boot_ as a payload of `Slim Bootloader`_ +(a.k.a SBL) boot firmware which currently supports QEMU, Apollolake, +Whiskeylake, Coffeelake-R 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`_ 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: Payload init with HOB, Load OS from media, Booting OS
+The Slim Bootloader stages(Stage1A/B, Stage2) focus on chipset, +hardware and platform specific initialization, and it provides useful +information to a payload in a HOB(Hand-Off Block) which has serial +port, memory map, performance data info and so on. This is Slim +Bootloader architectural design to make a payload light-weight, +platform independent and more generic across different boot solutions +or payloads, and to minimize hardware re-initialization in a payload.
+Build Instruction for U-Boot as a Slim Bootloader payload +---------------------------------------------------------
+Build U-Boot and obtain u-boot-dtb.bin::
- $ make distclean
- $ make slimbootloader_defconfig
- $ make all
+Prepare Slim Bootloader +-----------------------
+1. Setup Build Environment for Slim Bootloader.
- Refer to `Getting Started`_ page in `Slim Bootloader`_ document site.
+2. Get source code. Let's simply clone the repo::
+3. Copy u-boot-dtb.bin to Slim Bootloader.
- Slim Bootloader looks for a payload from the specific location.
- Copy the build u-boot-dtb.bin to the expected location::
- $ mkdir -p <Slim Bootloader Dir>/PayloadPkg/PayloadBins/
- $ cp <U-Boot Dir>/u-boot-dtb.bin <Slim Bootloader
- Dir>/PayloadPkg/PayloadBins/u-boot-dtb.bin
+Build Instruction for Slim Bootloader for QEMU target +-----------------------------------------------------
+Slim Bootloader supports multiple payloads, and a board of Slim +Bootloader detects its target payload by PayloadId in board configuration. +The PayloadId can be any 4 Bytes value.
+1. Update PayloadId. Let's use 'U-BT' as an example::
- $ vi Platform/QemuBoardPkg/CfgData/CfgDataExt_Brd1.dlt
- -GEN_CFG_DATA.PayloadId | 'AUTO'
- +GEN_CFG_DATA.PayloadId | 'U-BT'
+2. Update payload text base. PAYLOAD_EXE_BASE must be the same as U-
Boot
- CONFIG_SYS_TEXT_BASE in board/intel/slimbootloader/Kconfig.
- PAYLOAD_LOAD_HIGH must be 0::
- $ vi Platform/QemuBoardPkg/BoardConfig.py
I was trying to test this. However with current slimbootloader head (commit #723672c5ca13263bf1428997338bdb03b3bc6609) this file does not exist.
I did double-check it, but all files are still there. Your commit head also has the one. Directory exists, but files are missing? Can you let me know the details?
So the documentation here is stale. My major concern regarding the slimbootloader build itself is: why are these manual steps needed? Shouldn't the slimbootloader ship a default configuration file for U-Boot payload, thus we don't need manually modify this file or that?
Basically, Slim Bootloader supports ELF, EFI FV and PE32 format. It can be loaded at any location and no additional change is required. At the same time, Slim Bootloader also supports RAW binary which has different TEXT_BASE and varies on binaries. We do not enforce to have fixed TEXT_BASE and allow users to make it configurable in its BoardConfig.py. In U-Boot case, 0x100000 is TEXT_BASE and Slim Bootloader will load U-Boot to the specific address. And then, U-Boot will be self-relocated to usable high memory under 4GB. We will also improve this as well, ex) TEXT_BASE in Config Blob , but this is simple way for RAW binary for now.
self.PAYLOAD_LOAD_HIGH = 0
self.PAYLOAD_EXE_BASE = 0x00100000
+3. Build QEMU target. Make sure u-boot-dtb.bin and U-BT PayloadId
- in build command. The output is Outputs/qemu/SlimBootloader.bin::
- $ python BuildLoader.py build qemu -p "OsLoader.efi:LLDR:Lz4;u-boot-
dtb.bin:U-BT:Lzma"
+4. Launch Slim Bootloader on QEMU.
- You should reach at U-Boot serial console::
- $ qemu-system-x86_64 -machine q35 -nographic -serial mon:stdio
- -pflash Outputs/qemu/SlimBootloader.bin
+Build Instruction for Slim Bootloader for LeafHill(APL) target +--------------------------------------------------------------
+LeafHill is using PCI UART2 device as a serial port. +For MEM32 serial port, CONFIG_SYS_NS16550_MEM32 needs to be enabled
in U-Boot.
+1. Enable CONFIG_SYS_NS16550_MEM32 in U-Boot::
- $ vi include/configs/slimbootloader.h
- +#define CONFIG_SYS_NS16550_MEM32
#ifdef CONFIG_SYS_NS16550_MEM3
+2. Build U-Boot::
- $ make disclean
- $ make slimbootloader_defconfig
- $ make all
+3. Copy u-boot-dtb.bin to Slim Bootloader.
- Slim Bootloader looks for a payload from the specific location.
- Copy the build u-boot-dtb.bin to the expected location::
- $ mkdir -p <Slim Bootloader Dir>/PayloadPkg/PayloadBins/
- $ cp <U-Boot Dir>/u-boot-dtb.bin <Slim Bootloader
- Dir>/PayloadPkg/PayloadBins/u-boot-dtb.bin
+4. Update PayloadId. Let's use 'U-BT' as an example::
- $ vi Platform/ApollolakeBoardPkg/CfgData/CfgData_Int_LeafHill.dlt
- -GEN_CFG_DATA.PayloadId | 'AUTO
- +GEN_CFG_DATA.PayloadId | 'U-BT'
+5. Update payload text base.
+* PAYLOAD_EXE_BASE must be the same as U-Boot CONFIG_SYS_TEXT_BASE
- in board/intel/slimbootloader/Kconfig.
+* PAYLOAD_LOAD_HIGH must be 0::
- $ vi Platform/ApollolakeBoardPkg/BoardConfig.py
self.PAYLOAD_LOAD_HIGH = 0
self.PAYLOAD_EXE_BASE = 0x00100000
+6. Build APL target. Make sure u-boot-dtb.bin and U-BT PayloadId
- in build command. The output is Outputs/apl/Stitch_Components.zip::
- $ python BuildLoader.py build apl -p "OsLoader.efi:LLDR:Lz4;u-boot-
dtb.bin:U-BT:Lzma"
+7. Stitch IFWI.
- Refer to Apollolake_ page in Slim Bootloader document site::
- $ python Platform/ApollolakeBoardPkg/Script/StitchLoader.py -i
- <Existing IFWI> -s Outputs/apl/Stitch_Components.zip -o <Output
- IFWI>
+8. Flash IFWI.
- Use DediProg to flash IFWI. You should reach at U-Boot serial console.
+Build Instruction to use ELF U-Boot +-----------------------------------
+1. Enable CONFIG_OF_EMBED::
- $ vi configs/slimbootloader_defconfig
- +CONFIG_OF_EMBED=y
+2. Build U-Boot::
- $ make disclean
- $ make slimbootloader_defconfig
- $ make all
- $ strip u-boot (removing symbol for reduced size)
+3. Do same steps as above
+* Copy u-boot(ELF) to PayloadBins directory +* Update PayloadId 'U-BT' as above. +* No need to set PAYLOAD_LOAD_HIGH and PAYLOAD_EXE_BASE. +* Build Slim Bootloader. Use u-boot instead of u-boot-dtb.bin::
- $ python BuildLoader.py build <qemu or apl> -p "OsLoader.efi:LLDR:Lz4;u-
boot:U-BT:Lzma"
+.. _U-Boot: https://gitlab.denx.de/ +.. _`Slim Bootloader`: https://github.com/slimbootloader/ +.. _`Intel FSP`: https://github.com/IntelFsp/ .. _`Getting Started`: +https://slimbootloader.github.io/getting-started/ +.. _Apollolake: +https://slimbootloader.github.io/supported-hardware/apollo-lake-crb.h +tml#stitching diff --git a/include/configs/slimbootloader.h b/include/configs/slimbootloader.h new file mode 100644 index 0000000000..e0011ed446 --- /dev/null
[snip]
Regards, Bin
Best Regards, Aiden
participants (2)
-
Bin Meng
-
Park, Aiden