blob: 87d71a55bdc8681041ae9c833df27a6dc9757b46 [file] [log] [blame]
Park, Aiden9835d6d2019-08-03 08:31:11 +00001.. SPDX-License-Identifier: GPL-2.0+
2.. sectionauthor:: Aiden Park <aiden.park@intel.com>
3
4Slim Bootloader
5===============
6
7Introduction
8------------
9
10This target is to enable U-Boot_ as a payload of `Slim Bootloader`_ (a.k.a SBL)
11boot firmware which currently supports QEMU, Apollolake, Whiskeylake,
12Coffeelake-R platforms.
13
14The `Slim Bootloader`_ is designed with multi-stages (Stage1A/B, Stage2, Payload)
15architecture to cover from reset vector to OS booting and it consumes
16`Intel FSP`_ for silicon initialization.
17
18* Stage1A: Reset vector, CAR init with FSP-T
19* Stage1B: Memory init with FSP-M, CAR teardown, Continue execution in memory
20* Stage2 : Rest of Silicon init with FSP-S, Create HOB, Hand-off to Payload
21* Payload: Payload init with HOB, Load OS from media, Booting OS
22
23The Slim Bootloader stages (Stage1A/B, Stage2) focus on chipset, hardware and
24platform specific initialization, and it provides useful information to a
25payload in a HOB (Hand-Off Block) which has serial port, memory map, performance
26data info and so on. This is Slim Bootloader architectural design to make a
27payload light-weight, platform independent and more generic across different
28boot solutions or payloads, and to minimize hardware re-initialization in a
29payload.
30
31Build Instruction for U-Boot as a Slim Bootloader payload
32---------------------------------------------------------
33
34Build U-Boot and obtain u-boot-dtb.bin::
35
36 $ make distclean
37 $ make slimbootloader_defconfig
38 $ make all
39
40Prepare Slim Bootloader
41-----------------------
42
431. Setup Build Environment for Slim Bootloader.
44
45 Refer to `Getting Started`_ page in `Slim Bootloader`_ document site.
46
472. Get source code. Let's simply clone the repo::
48
49 $ git clone https://github.com/slimbootloader/slimbootloader.git
50
513. Copy u-boot-dtb.bin to Slim Bootloader.
52 Slim Bootloader looks for a payload from the specific location.
53 Copy the build u-boot-dtb.bin to the expected location::
54
55 $ mkdir -p <Slim Bootloader Dir>/PayloadPkg/PayloadBins/
56 $ cp <U-Boot Dir>/u-boot-dtb.bin <Slim Bootloader Dir>/PayloadPkg/PayloadBins/u-boot-dtb.bin
57
58Build Instruction for Slim Bootloader for QEMU target
59-----------------------------------------------------
60
61Slim Bootloader supports multiple payloads, and a board of Slim Bootloader
62detects its target payload by PayloadId in board configuration.
63The PayloadId can be any 4 Bytes value.
64
651. Update PayloadId. Let's use 'U-BT' as an example::
66
67 $ vi Platform/QemuBoardPkg/CfgData/CfgDataExt_Brd1.dlt
68 -GEN_CFG_DATA.PayloadId | 'AUTO'
69 +GEN_CFG_DATA.PayloadId | 'U-BT'
70
712. Update payload text base. PAYLOAD_EXE_BASE must be the same as U-Boot
Simon Glass72cc5382022-10-20 18:22:39 -060072 CONFIG_TEXT_BASE in board/intel/slimbootloader/Kconfig.
Park, Aiden9835d6d2019-08-03 08:31:11 +000073 PAYLOAD_LOAD_HIGH must be 0::
74
75 $ vi Platform/QemuBoardPkg/BoardConfig.py
76 + self.PAYLOAD_LOAD_HIGH = 0
77 + self.PAYLOAD_EXE_BASE = 0x00100000
78
793. Build QEMU target. Make sure u-boot-dtb.bin and U-BT PayloadId
80 in build command. The output is Outputs/qemu/SlimBootloader.bin::
81
82 $ python BuildLoader.py build qemu -p "OsLoader.efi:LLDR:Lz4;u-boot-dtb.bin:U-BT:Lzma"
83
844. Launch Slim Bootloader on QEMU.
85 You should reach at U-Boot serial console::
86
87 $ qemu-system-x86_64 -machine q35 -nographic -serial mon:stdio -pflash Outputs/qemu/SlimBootloader.bin
88
Park, Aiden08df6ab2019-08-22 21:31:31 +000089Test Linux booting on QEMU target
90---------------------------------
91
92Let's use LeafHill (APL) Yocto image for testing.
93Download it from http://downloads.yoctoproject.org/releases/yocto/yocto-2.0/machines/leafhill/.
94
951. Prepare Yocto hard disk image::
96
97 $ wget http://downloads.yoctoproject.org/releases/yocto/yocto-2.0/machines/leafhill/leafhill-4.0-jethro-2.0.tar.bz2
98 $ tar -xvf leafhill-4.0-jethro-2.0.tar.bz2
99 $ ls -l leafhill-4.0-jethro-2.0/binary/core-image-sato-intel-corei7-64.hddimg
100
1012. Launch Slim Bootloader on QEMU with disk image::
102
103 $ qemu-system-x86_64 -machine q35 -nographic -serial mon:stdio -pflash Outputs/qemu/SlimBootloader.bin -drive id=mydrive,if=none,file=/path/to/core-image-sato-intel-corei7-64.hddimg,format=raw -device ide-hd,drive=mydrive
104
1053. Update boot environment values on shell::
106
107 => setenv bootfile vmlinuz
108 => setenv bootdev scsi
109 => boot
110
Park, Aiden9835d6d2019-08-03 08:31:11 +0000111Build Instruction for Slim Bootloader for LeafHill (APL) target
Heinrich Schuchardt0a761242019-08-15 21:02:30 +0200112---------------------------------------------------------------
Park, Aiden9835d6d2019-08-03 08:31:11 +0000113
Park, Aidena7349322019-12-18 05:56:29 +0000114Prepare U-Boot and Slim Bootloader as described at the beginning of this page.
115Also, the PayloadId needs to be set for APL board.
Park, Aiden9835d6d2019-08-03 08:31:11 +0000116
Park, Aidena7349322019-12-18 05:56:29 +00001171. Update PayloadId. Let's use 'U-BT' as an example::
Park, Aiden9835d6d2019-08-03 08:31:11 +0000118
119 $ vi Platform/ApollolakeBoardPkg/CfgData/CfgData_Int_LeafHill.dlt
120 -GEN_CFG_DATA.PayloadId | 'AUTO
121 +GEN_CFG_DATA.PayloadId | 'U-BT'
122
Park, Aidena7349322019-12-18 05:56:29 +00001232. Update payload text base.
Park, Aiden9835d6d2019-08-03 08:31:11 +0000124
Simon Glass72cc5382022-10-20 18:22:39 -0600125* PAYLOAD_EXE_BASE must be the same as U-Boot CONFIG_TEXT_BASE
Park, Aiden9835d6d2019-08-03 08:31:11 +0000126 in board/intel/slimbootloader/Kconfig.
127* PAYLOAD_LOAD_HIGH must be 0::
128
129 $ vi Platform/ApollolakeBoardPkg/BoardConfig.py
130 + self.PAYLOAD_LOAD_HIGH = 0
131 + self.PAYLOAD_EXE_BASE = 0x00100000
132
Park, Aidena7349322019-12-18 05:56:29 +00001333. Build APL target. Make sure u-boot-dtb.bin and U-BT PayloadId
Park, Aiden9835d6d2019-08-03 08:31:11 +0000134 in build command. The output is Outputs/apl/Stitch_Components.zip::
135
136 $ python BuildLoader.py build apl -p "OsLoader.efi:LLDR:Lz4;u-boot-dtb.bin:U-BT:Lzma"
137
Park, Aidena7349322019-12-18 05:56:29 +00001384. Stitch IFWI.
Park, Aiden9835d6d2019-08-03 08:31:11 +0000139
140 Refer to Apollolake_ page in Slim Bootloader document site::
141
142 $ python Platform/ApollolakeBoardPkg/Script/StitchLoader.py -i <Existing IFWI> -s Outputs/apl/Stitch_Components.zip -o <Output IFWI>
143
Park, Aidena7349322019-12-18 05:56:29 +00001445. Flash IFWI.
Park, Aiden9835d6d2019-08-03 08:31:11 +0000145
146 Use DediProg to flash IFWI. You should reach at U-Boot serial console.
147
148
149Build Instruction to use ELF U-Boot
150-----------------------------------
151
1521. Enable CONFIG_OF_EMBED::
153
154 $ vi configs/slimbootloader_defconfig
155 +CONFIG_OF_EMBED=y
156
1572. Build U-Boot::
158
Park, Aidena7349322019-12-18 05:56:29 +0000159 $ make distclean
Park, Aiden9835d6d2019-08-03 08:31:11 +0000160 $ make slimbootloader_defconfig
161 $ make all
162 $ strip u-boot (removing symbol for reduced size)
163
1643. Do same steps as above
165
166* Copy u-boot (ELF) to PayloadBins directory
167* Update PayloadId 'U-BT' as above.
168* No need to set PAYLOAD_LOAD_HIGH and PAYLOAD_EXE_BASE.
169* Build Slim Bootloader. Use u-boot instead of u-boot-dtb.bin::
170
171 $ python BuildLoader.py build <qemu or apl> -p "OsLoader.efi:LLDR:Lz4;u-boot:U-BT:Lzma"
172
Heinrich Schuchardt28b2b852021-02-24 13:19:04 +0100173.. _U-Boot: https://source.denx.de/
Park, Aiden9835d6d2019-08-03 08:31:11 +0000174.. _`Slim Bootloader`: https://github.com/slimbootloader/
175.. _`Intel FSP`: https://github.com/IntelFsp/
176.. _`Getting Started`: https://slimbootloader.github.io/getting-started/
177.. _Apollolake: https://slimbootloader.github.io/supported-hardware/apollo-lake-crb.html#stitching