Hi Aiden, On Wed, Jun 26, 2019 at 7:21 AM Park, Aiden <[email protected]> wrote: > > - Add new board/slimbootloader directory with minimum codes > - Add slimbootloader configuration files > - Add README in board/slimbootloader/slimbootloader/ > > Signed-off-by: Aiden Park <[email protected]> > --- > 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". > + > 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. > > # 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.html > + > +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 -serial mon: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. > +CONFIG_BOOTSTAGE=y > +CONFIG_BOOTSTAGE_REPORT=y > +CONFIG_BOOTDELAY=10 > +CONFIG_CONSOLE_SCROLL_LINES=5 > +# CONFIG_PCI_PNP is not set > +# CONFIG_I8259_PIC is not set > +# CONFIG_APIC is not set > +# CONFIG_CMD_EXT4_WRITE is not set > +# CONFIG_CMD_FS_GENERIC is not set > +# CONFIG_CMD_PART is not set > +# CONFIG_CMD_TIME is not set > +# CONFIG_CMD_BOOTSTAGE is not set > +# CONFIG_CMD_DM is not set > +# CONFIG_CMD_FLASH is not set > +# CONFIG_CMD_LOADB is not set > +# CONFIG_CMD_LOADS is not set > +# CONFIG_CMD_SF_TEST is not set > +# CONFIG_CMD_ECHO is not set > +# CONFIG_CMD_ITEST is not set > +# CONFIG_CMD_SETEXPR is not set > +# CONFIG_CMD_NET is not set > +# CONFIG_CMD_BOOTP is not set > +# CONFIG_CMD_BLOCK_CACHE is not set > +# CONFIG_CMD_DATE is not set > +# CONFIG_CMD_GETTIME is not set > +# CONFIG_CMD_MISC is not set > +# CONFIG_CMD_IRQ is not set > +# CONFIG_CMD_ELF is not set > +# CONFIG_CMD_IMI is not set > +# CONFIG_CMD_XIMG is not set > +# CONFIG_CMD_EXPORTENV is not set > +# CONFIG_CMD_IMPORTENV is not set > +# CONFIG_CMD_FDT is not set > +# CONFIG_CMD_GO is not set > +# CONFIG_CMD_SAVEENV is not set > +# CONFIG_CMD_SOURCE is not set > +# CONFIG_DM_KEYBOARD is not set > +# CONFIG_DM_VIDEO is not set > +# CONFIG_DM_GPIO is not set > +# CONFIG_MMC_VERBOSE is not set > +# CONFIG_GZIP is not set > +# CONFIG_HEXDUMP is not set > +# CONFIG_EFI_LOADER is not set > +# CONFIG_GENERATE_SMBIOS_TABLE is not set > +# CONFIG_IMAGE_FORMAT_LEGACY is not set > +# CONFIG_FIT is not set So many config options are turned off. Can we just turn off absolutely necessary options that do not make sense for slim bootloader? eg: CONFIG_PCI_PNP as we don't want U-Boot to redo the resource allocation. > diff --git a/include/configs/slimbootloader.h > b/include/configs/slimbootloader.h > new file mode 100644 > index 0000000000..bfd188de2c > --- /dev/null > +++ b/include/configs/slimbootloader.h > @@ -0,0 +1,54 @@ > +/* 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> > + > +#undef CONFIG_NFSBOOTCOMMAND > +#undef CONFIG_RAMBOOTCOMMAND > +#undef CONFIG_EXTRA_ENV_SETTINGS > +#undef CONFIG_BOOTCOMMAND > + > +/*----------------------------------------------------------------------- > + * For MEM32 uart > + */ nits: this needs to be better commented. And the multi-line comment block format is wrong. > +/*#define CONFIG_SYS_NS16550_MEM32*/ nits: remove this line. > +#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" > + > +#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" > + > +#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__ */ > -- Regards, Bin _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

