[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