[U-Boot,v2,7/8] board: Add new slimbootloader board
diff mbox series

Message ID A1484485FD99714DB2AB2C5EF81E7AC2AA713FB1@ORSMSX116.amr.corp.intel.com
State Superseded
Delegated to: Bin Meng
Headers show
Series
  • x86: Add basic Slim Bootloader payload support
Related show

Commit Message

Park, Aiden June 25, 2019, 11:21 p.m. UTC
- 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

Comments

Bin Meng July 2, 2019, 2:13 p.m. UTC | #1
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".

> +
>  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
Park, Aiden July 8, 2019, 4:48 p.m. UTC | #2
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.htm
> > +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.
> 
> > +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
Park, Aiden July 9, 2019, 12:02 a.m. UTC | #3
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:
> > > +  > 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
Bin Meng July 9, 2019, 5:03 a.m. UTC | #4
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:
> > > > +  > 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.

Does that mean Slim Bootloader only support ELF payload images?

Regards,
Bin
Park, Aiden July 9, 2019, 6:37 a.m. UTC | #5
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 -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.
> 
> 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

Patch
diff mbox series

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"
+
 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"
 
 # 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
+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
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
+ */
+/*#define CONFIG_SYS_NS16550_MEM32*/
+#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__ */