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

Park, Aiden aiden.park at intel.com
Mon Jul 8 16:48:18 UTC 2019


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.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


More information about the U-Boot mailing list