From patchwork Tue Jun 25 23:21:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Park, Aiden" X-Patchwork-Id: 1122395 X-Patchwork-Delegate: bmeng.cn@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=intel.com Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 45YMcx029fz9s5c for ; Wed, 26 Jun 2019 09:22:08 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 91634C21C29; Tue, 25 Jun 2019 23:22:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 4C318C21C4A; Tue, 25 Jun 2019 23:22:01 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 2CBD0C21C4A; Tue, 25 Jun 2019 23:22:00 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lists.denx.de (Postfix) with ESMTPS id 5F1C8C21C29 for ; Tue, 25 Jun 2019 23:21:58 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jun 2019 16:21:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,417,1557212400"; d="scan'208";a="166843260" Received: from orsmsx109.amr.corp.intel.com ([10.22.240.7]) by orsmga006.jf.intel.com with ESMTP; 25 Jun 2019 16:21:56 -0700 Received: from orsmsx159.amr.corp.intel.com (10.22.240.24) by ORSMSX109.amr.corp.intel.com (10.22.240.7) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 25 Jun 2019 16:21:56 -0700 Received: from orsmsx116.amr.corp.intel.com ([169.254.7.97]) by ORSMSX159.amr.corp.intel.com ([169.254.11.185]) with mapi id 14.03.0439.000; Tue, 25 Jun 2019 16:21:56 -0700 From: "Park, Aiden" To: U-Boot Mailing List , Simon Glass , Bin Meng Thread-Topic: [PATCH v2 7/8] board: Add new slimbootloader board Thread-Index: AdUrrL5luGEpVTNtRvOObHzT5QZ79A== Date: Tue, 25 Jun 2019 23:21:55 +0000 Message-ID: Accept-Language: ko-KR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOWNhYTY3MTItZWNhMi00ZjUzLWE0MTEtODY4OTc5NjBkZTZjIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiSlwvamlUN0h6SE9UOVpLVUR6TmNFTmordktSbXA1TEF2R3ZSdmFFVlwvNXpKQ3k3QWpyR1RHOGE4Tkl4KzJmQTJLIn0= x-ctpclassification: CTP_NT x-originating-ip: [10.22.254.138] MIME-Version: 1.0 Subject: [U-Boot] [PATCH v2 7/8] board: Add new slimbootloader board X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" - Add new board/slimbootloader directory with minimum codes - Add slimbootloader configuration files - Add README in board/slimbootloader/slimbootloader/ Signed-off-by: Aiden Park --- 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" + 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 + +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 + +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 + +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 + +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 /PayloadPkg/PayloadBins/ + > cp /u-boot /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 + */ + +#include + +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 + */ + +/* 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 + */ + +#ifndef __SLIMBOOTLOADER_CONFIG_H__ +#define __SLIMBOOTLOADER_CONFIG_H__ + +#include + +#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__ */