Hi Bin, > -----Original Message----- > From: Park, Aiden > Sent: Monday, July 8, 2019 9:48 AM > To: Bin Meng <bmeng...@gmail.com> > Cc: U-Boot Mailing List <u-boot@lists.denx.de>; Simon Glass > <s...@chromium.org> > Subject: RE: [PATCH v2 7/8] board: Add new slimbootloader board > > Hi Bin, > > > -----Original Message----- > > From: Bin Meng [mailto:bmeng...@gmail.com] > > Sent: Tuesday, July 2, 2019 7:14 AM > > To: Park, Aiden <aiden.p...@intel.com> > > Cc: U-Boot Mailing List <u-boot@lists.denx.de>; Simon Glass > > <s...@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.p...@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.p...@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: > > > + > 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. > 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. > > > > > +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. > Only necessary option to be disabled is CONFIG_PCI_PNP. Other options > were to reduce binary size. Let me recover all other configs. > > > > > 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. > Sure. I will do. > > > > > +/*#define CONFIG_SYS_NS16550_MEM32*/ > > > > nits: remove this line. > Okay. Thanks. > > > > > +#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 > > Best Regards, > Aiden
Best Regards, Aiden _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot