[U-Boot] [PATCH v2 7/8] board: Add new slimbootloader board

Bin Meng bmeng.cn at gmail.com
Tue Jul 9 05:03:33 UTC 2019


Hi Aiden,

On Tue, Jul 9, 2019 at 8:02 AM Park, Aiden <aiden.park at intel.com> wrote:
>
> Hi Bin,
>
> > -----Original Message-----
> > From: Park, Aiden
> > Sent: Monday, July 8, 2019 9:48 AM
> > To: Bin Meng <bmeng.cn at gmail.com>
> > Cc: U-Boot Mailing List <u-boot at lists.denx.de>; Simon Glass
> > <sjg at chromium.org>
> > Subject: RE: [PATCH v2 7/8] board: Add new slimbootloader board
> >
> > Hi Bin,
> >
> > > -----Original Message-----
> > > From: Bin Meng [mailto:bmeng.cn at gmail.com]
> > > Sent: Tuesday, July 2, 2019 7:14 AM
> > > To: Park, Aiden <aiden.park at intel.com>
> > > Cc: U-Boot Mailing List <u-boot at lists.denx.de>; Simon Glass
> > > <sjg at 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 at 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 at 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


More information about the U-Boot mailing list