diff mbox series

[U-Boot,v9,8/9] board: intel: Add new slimbootloader board

Message ID A1484485FD99714DB2AB2C5EF81E7AC2AA766B6C@ORSMSX116.amr.corp.intel.com
State Accepted
Delegated to: Bin Meng
Headers show
Series x86: Add basic Slim Bootloader payload support | expand

Commit Message

Park, Aiden Aug. 3, 2019, 8:31 a.m. UTC
Add slimbootloader board to run U-boot as a Slim Bootloader payload
- Add new board/intel/slimbootloader directory with minimum codes
- Add slimbootloader configuration files
- Add doc/board/intel/slimbootloader.rst

Signed-off-by: Aiden Park <aiden.park@intel.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
---
Changes in v8:
  * Add a space between acronym and (definition)

Changes in v7:
  * Adding slimbootloader.rst in index.rst

Changes in v6:
  * Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig
  * Move USB_STORAGE and USB_KEYBOARD to board Kconfig
  * Convert README to reST doc/board/intel/slimbootloader.rst

Changes in v5:
  * Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig

Changes in v3:
  * Remove VENDOR_SLIMBOOTLOADER
  * Use VENDOR_INTEL
  * Move slimbootloader under board/intel/
  * Enable generic CONFIGs in slimbootloader_defconfig
  * Add more description in board/intel/slimbootloader/README

 board/intel/Kconfig                         |  14 ++
 board/intel/slimbootloader/Kconfig          |  28 ++++
 board/intel/slimbootloader/Makefile         |   5 +
 board/intel/slimbootloader/slimbootloader.c |  21 +++
 board/intel/slimbootloader/start.S          |   9 +
 configs/slimbootloader_defconfig            |  22 +++
 doc/board/intel/index.rst                   |   1 +
 doc/board/intel/slimbootloader.rst          | 174 ++++++++++++++++++++
 include/configs/slimbootloader.h            |  62 +++++++
 9 files changed, 336 insertions(+)
 create mode 100644 board/intel/slimbootloader/Kconfig
 create mode 100644 board/intel/slimbootloader/Makefile
 create mode 100644 board/intel/slimbootloader/slimbootloader.c
 create mode 100644 board/intel/slimbootloader/start.S
 create mode 100644 configs/slimbootloader_defconfig
 create mode 100644 doc/board/intel/slimbootloader.rst
 create mode 100644 include/configs/slimbootloader.h

Comments

Bin Meng Aug. 8, 2019, 2:35 p.m. UTC | #1
On Sat, Aug 3, 2019 at 4:31 PM Park, Aiden <aiden.park@intel.com> wrote:
>
> Add slimbootloader board to run U-boot as a Slim Bootloader payload
> - Add new board/intel/slimbootloader directory with minimum codes
> - Add slimbootloader configuration files
> - Add doc/board/intel/slimbootloader.rst
>
> Signed-off-by: Aiden Park <aiden.park@intel.com>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> ---
> Changes in v8:
>   * Add a space between acronym and (definition)
>
> Changes in v7:
>   * Adding slimbootloader.rst in index.rst
>
> Changes in v6:
>   * Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig
>   * Move USB_STORAGE and USB_KEYBOARD to board Kconfig
>   * Convert README to reST doc/board/intel/slimbootloader.rst
>
> Changes in v5:
>   * Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig
>
> Changes in v3:
>   * Remove VENDOR_SLIMBOOTLOADER
>   * Use VENDOR_INTEL
>   * Move slimbootloader under board/intel/
>   * Enable generic CONFIGs in slimbootloader_defconfig
>   * Add more description in board/intel/slimbootloader/README
>
>  board/intel/Kconfig                         |  14 ++
>  board/intel/slimbootloader/Kconfig          |  28 ++++
>  board/intel/slimbootloader/Makefile         |   5 +
>  board/intel/slimbootloader/slimbootloader.c |  21 +++
>  board/intel/slimbootloader/start.S          |   9 +
>  configs/slimbootloader_defconfig            |  22 +++
>  doc/board/intel/index.rst                   |   1 +
>  doc/board/intel/slimbootloader.rst          | 174 ++++++++++++++++++++
>  include/configs/slimbootloader.h            |  62 +++++++
>  9 files changed, 336 insertions(+)
>  create mode 100644 board/intel/slimbootloader/Kconfig
>  create mode 100644 board/intel/slimbootloader/Makefile
>  create mode 100644 board/intel/slimbootloader/slimbootloader.c
>  create mode 100644 board/intel/slimbootloader/start.S
>  create mode 100644 configs/slimbootloader_defconfig
>  create mode 100644 doc/board/intel/slimbootloader.rst
>  create mode 100644 include/configs/slimbootloader.h
>

Tested-by: Bin Meng <bmeng.cn@gmail.com>
Bin Meng Aug. 8, 2019, 2:42 p.m. UTC | #2
Hi Aiden,

On Thu, Aug 8, 2019 at 10:35 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Sat, Aug 3, 2019 at 4:31 PM Park, Aiden <aiden.park@intel.com> wrote:
> >
> > Add slimbootloader board to run U-boot as a Slim Bootloader payload
> > - Add new board/intel/slimbootloader directory with minimum codes
> > - Add slimbootloader configuration files
> > - Add doc/board/intel/slimbootloader.rst
> >
> > Signed-off-by: Aiden Park <aiden.park@intel.com>
> > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> > Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> > ---
> > Changes in v8:
> >   * Add a space between acronym and (definition)
> >
> > Changes in v7:
> >   * Adding slimbootloader.rst in index.rst
> >
> > Changes in v6:
> >   * Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig
> >   * Move USB_STORAGE and USB_KEYBOARD to board Kconfig
> >   * Convert README to reST doc/board/intel/slimbootloader.rst
> >
> > Changes in v5:
> >   * Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig
> >
> > Changes in v3:
> >   * Remove VENDOR_SLIMBOOTLOADER
> >   * Use VENDOR_INTEL
> >   * Move slimbootloader under board/intel/
> >   * Enable generic CONFIGs in slimbootloader_defconfig
> >   * Add more description in board/intel/slimbootloader/README
> >
> >  board/intel/Kconfig                         |  14 ++
> >  board/intel/slimbootloader/Kconfig          |  28 ++++
> >  board/intel/slimbootloader/Makefile         |   5 +
> >  board/intel/slimbootloader/slimbootloader.c |  21 +++
> >  board/intel/slimbootloader/start.S          |   9 +
> >  configs/slimbootloader_defconfig            |  22 +++
> >  doc/board/intel/index.rst                   |   1 +
> >  doc/board/intel/slimbootloader.rst          | 174 ++++++++++++++++++++
> >  include/configs/slimbootloader.h            |  62 +++++++
> >  9 files changed, 336 insertions(+)
> >  create mode 100644 board/intel/slimbootloader/Kconfig
> >  create mode 100644 board/intel/slimbootloader/Makefile
> >  create mode 100644 board/intel/slimbootloader/slimbootloader.c
> >  create mode 100644 board/intel/slimbootloader/start.S
> >  create mode 100644 configs/slimbootloader_defconfig
> >  create mode 100644 doc/board/intel/slimbootloader.rst
> >  create mode 100644 include/configs/slimbootloader.h
> >
>
> Tested-by: Bin Meng <bmeng.cn@gmail.com>

This time I successfully built the slimbootloader payload by following
the instructions in the documentation and it succeeded to boot. Thanks
for the efforts!

However when testing zboot from U-Boot, I got:

Error: Invalid Boot Flag (found 0x5aa5, expected 0xaa55)
## Kernel loading failed ...
zboot - Boot bzImage

The same kernel bzImage boots fine with "qemu-x86_defconfig" target.
Did you see such issue?

This is not a show-stopper. I will apply this series soon.

Regards,
Bin
Bin Meng Aug. 8, 2019, 2:54 p.m. UTC | #3
On Thu, Aug 8, 2019 at 10:35 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Sat, Aug 3, 2019 at 4:31 PM Park, Aiden <aiden.park@intel.com> wrote:
> >
> > Add slimbootloader board to run U-boot as a Slim Bootloader payload
> > - Add new board/intel/slimbootloader directory with minimum codes
> > - Add slimbootloader configuration files
> > - Add doc/board/intel/slimbootloader.rst
> >
> > Signed-off-by: Aiden Park <aiden.park@intel.com>
> > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> > Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> > ---
> > Changes in v8:
> >   * Add a space between acronym and (definition)
> >
> > Changes in v7:
> >   * Adding slimbootloader.rst in index.rst
> >
> > Changes in v6:
> >   * Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig
> >   * Move USB_STORAGE and USB_KEYBOARD to board Kconfig
> >   * Convert README to reST doc/board/intel/slimbootloader.rst
> >
> > Changes in v5:
> >   * Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig
> >
> > Changes in v3:
> >   * Remove VENDOR_SLIMBOOTLOADER
> >   * Use VENDOR_INTEL
> >   * Move slimbootloader under board/intel/
> >   * Enable generic CONFIGs in slimbootloader_defconfig
> >   * Add more description in board/intel/slimbootloader/README
> >
> >  board/intel/Kconfig                         |  14 ++
> >  board/intel/slimbootloader/Kconfig          |  28 ++++
> >  board/intel/slimbootloader/Makefile         |   5 +
> >  board/intel/slimbootloader/slimbootloader.c |  21 +++
> >  board/intel/slimbootloader/start.S          |   9 +
> >  configs/slimbootloader_defconfig            |  22 +++
> >  doc/board/intel/index.rst                   |   1 +
> >  doc/board/intel/slimbootloader.rst          | 174 ++++++++++++++++++++
> >  include/configs/slimbootloader.h            |  62 +++++++
> >  9 files changed, 336 insertions(+)
> >  create mode 100644 board/intel/slimbootloader/Kconfig
> >  create mode 100644 board/intel/slimbootloader/Makefile
> >  create mode 100644 board/intel/slimbootloader/slimbootloader.c
> >  create mode 100644 board/intel/slimbootloader/start.S
> >  create mode 100644 configs/slimbootloader_defconfig
> >  create mode 100644 doc/board/intel/slimbootloader.rst
> >  create mode 100644 include/configs/slimbootloader.h
> >
>
> Tested-by: Bin Meng <bmeng.cn@gmail.com>

applied to u-boot-x86, thanks!
Bin Meng Aug. 9, 2019, 1:38 a.m. UTC | #4
On Thu, Aug 8, 2019 at 10:54 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Thu, Aug 8, 2019 at 10:35 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> >
> > On Sat, Aug 3, 2019 at 4:31 PM Park, Aiden <aiden.park@intel.com> wrote:
> > >
> > > Add slimbootloader board to run U-boot as a Slim Bootloader payload
> > > - Add new board/intel/slimbootloader directory with minimum codes
> > > - Add slimbootloader configuration files
> > > - Add doc/board/intel/slimbootloader.rst
> > >
> > > Signed-off-by: Aiden Park <aiden.park@intel.com>
> > > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> > > Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> > > ---
> > > Changes in v8:
> > >   * Add a space between acronym and (definition)
> > >
> > > Changes in v7:
> > >   * Adding slimbootloader.rst in index.rst
> > >
> > > Changes in v6:
> > >   * Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig
> > >   * Move USB_STORAGE and USB_KEYBOARD to board Kconfig
> > >   * Convert README to reST doc/board/intel/slimbootloader.rst
> > >
> > > Changes in v5:
> > >   * Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig
> > >
> > > Changes in v3:
> > >   * Remove VENDOR_SLIMBOOTLOADER
> > >   * Use VENDOR_INTEL
> > >   * Move slimbootloader under board/intel/
> > >   * Enable generic CONFIGs in slimbootloader_defconfig
> > >   * Add more description in board/intel/slimbootloader/README
> > >
> > >  board/intel/Kconfig                         |  14 ++
> > >  board/intel/slimbootloader/Kconfig          |  28 ++++
> > >  board/intel/slimbootloader/Makefile         |   5 +
> > >  board/intel/slimbootloader/slimbootloader.c |  21 +++
> > >  board/intel/slimbootloader/start.S          |   9 +
> > >  configs/slimbootloader_defconfig            |  22 +++
> > >  doc/board/intel/index.rst                   |   1 +
> > >  doc/board/intel/slimbootloader.rst          | 174 ++++++++++++++++++++
> > >  include/configs/slimbootloader.h            |  62 +++++++
> > >  9 files changed, 336 insertions(+)
> > >  create mode 100644 board/intel/slimbootloader/Kconfig
> > >  create mode 100644 board/intel/slimbootloader/Makefile
> > >  create mode 100644 board/intel/slimbootloader/slimbootloader.c
> > >  create mode 100644 board/intel/slimbootloader/start.S
> > >  create mode 100644 configs/slimbootloader_defconfig
> > >  create mode 100644 doc/board/intel/slimbootloader.rst
> > >  create mode 100644 include/configs/slimbootloader.h
> > >
> >
> > Tested-by: Bin Meng <bmeng.cn@gmail.com>
>
> applied to u-boot-x86, thanks!

The patch missed slimbootloader board MAINTAINERS file that caused
gitlab CI failure. I have added the MAINTAINERS to this commit.

Regards,
Bin
Bin Meng Aug. 13, 2019, 12:03 p.m. UTC | #5
Hi Aiden,

On Thu, Aug 8, 2019 at 10:42 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> Hi Aiden,
>
> On Thu, Aug 8, 2019 at 10:35 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> >
> > On Sat, Aug 3, 2019 at 4:31 PM Park, Aiden <aiden.park@intel.com> wrote:
> > >
> > > Add slimbootloader board to run U-boot as a Slim Bootloader payload
> > > - Add new board/intel/slimbootloader directory with minimum codes
> > > - Add slimbootloader configuration files
> > > - Add doc/board/intel/slimbootloader.rst
> > >
> > > Signed-off-by: Aiden Park <aiden.park@intel.com>
> > > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> > > Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> > > ---
> > > Changes in v8:
> > >   * Add a space between acronym and (definition)
> > >
> > > Changes in v7:
> > >   * Adding slimbootloader.rst in index.rst
> > >
> > > Changes in v6:
> > >   * Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig
> > >   * Move USB_STORAGE and USB_KEYBOARD to board Kconfig
> > >   * Convert README to reST doc/board/intel/slimbootloader.rst
> > >
> > > Changes in v5:
> > >   * Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig
> > >
> > > Changes in v3:
> > >   * Remove VENDOR_SLIMBOOTLOADER
> > >   * Use VENDOR_INTEL
> > >   * Move slimbootloader under board/intel/
> > >   * Enable generic CONFIGs in slimbootloader_defconfig
> > >   * Add more description in board/intel/slimbootloader/README
> > >
> > >  board/intel/Kconfig                         |  14 ++
> > >  board/intel/slimbootloader/Kconfig          |  28 ++++
> > >  board/intel/slimbootloader/Makefile         |   5 +
> > >  board/intel/slimbootloader/slimbootloader.c |  21 +++
> > >  board/intel/slimbootloader/start.S          |   9 +
> > >  configs/slimbootloader_defconfig            |  22 +++
> > >  doc/board/intel/index.rst                   |   1 +
> > >  doc/board/intel/slimbootloader.rst          | 174 ++++++++++++++++++++
> > >  include/configs/slimbootloader.h            |  62 +++++++
> > >  9 files changed, 336 insertions(+)
> > >  create mode 100644 board/intel/slimbootloader/Kconfig
> > >  create mode 100644 board/intel/slimbootloader/Makefile
> > >  create mode 100644 board/intel/slimbootloader/slimbootloader.c
> > >  create mode 100644 board/intel/slimbootloader/start.S
> > >  create mode 100644 configs/slimbootloader_defconfig
> > >  create mode 100644 doc/board/intel/slimbootloader.rst
> > >  create mode 100644 include/configs/slimbootloader.h
> > >
> >
> > Tested-by: Bin Meng <bmeng.cn@gmail.com>
>
> This time I successfully built the slimbootloader payload by following
> the instructions in the documentation and it succeeded to boot. Thanks
> for the efforts!
>
> However when testing zboot from U-Boot, I got:
>
> Error: Invalid Boot Flag (found 0x5aa5, expected 0xaa55)
> ## Kernel loading failed ...
> zboot - Boot bzImage
>
> The same kernel bzImage boots fine with "qemu-x86_defconfig" target.
> Did you see such issue?
>

Any comments on this error?

> This is not a show-stopper. I will apply this series soon.

Regards,
Bin
Park, Aiden Aug. 13, 2019, 2:02 p.m. UTC | #6
Hi Bin,

> On Aug 13, 2019, at 9:03 PM, Bin Meng <bmeng.cn@gmail.com> wrote:
> 
> Hi Aiden,
> 
>> On Thu, Aug 8, 2019 at 10:42 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>> 
>> Hi Aiden,
>> 
>>> On Thu, Aug 8, 2019 at 10:35 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>>> 
>>>> On Sat, Aug 3, 2019 at 4:31 PM Park, Aiden <aiden.park@intel.com> wrote:
>>>> 
>>>> Add slimbootloader board to run U-boot as a Slim Bootloader payload
>>>> - Add new board/intel/slimbootloader directory with minimum codes
>>>> - Add slimbootloader configuration files
>>>> - Add doc/board/intel/slimbootloader.rst
>>>> 
>>>> Signed-off-by: Aiden Park <aiden.park@intel.com>
>>>> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
>>>> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
>>>> ---
>>>> Changes in v8:
>>>>  * Add a space between acronym and (definition)
>>>> 
>>>> Changes in v7:
>>>>  * Adding slimbootloader.rst in index.rst
>>>> 
>>>> Changes in v6:
>>>>  * Select CONFIG_SYS_SLIMBOOTLOADER in board Kconfig
>>>>  * Move USB_STORAGE and USB_KEYBOARD to board Kconfig
>>>>  * Convert README to reST doc/board/intel/slimbootloader.rst
>>>> 
>>>> Changes in v5:
>>>>  * Remove X86_LOAD_FROM_32_BIT from slimbootloader_defconfig
>>>> 
>>>> Changes in v3:
>>>>  * Remove VENDOR_SLIMBOOTLOADER
>>>>  * Use VENDOR_INTEL
>>>>  * Move slimbootloader under board/intel/
>>>>  * Enable generic CONFIGs in slimbootloader_defconfig
>>>>  * Add more description in board/intel/slimbootloader/README
>>>> 
>>>> board/intel/Kconfig                         |  14 ++
>>>> board/intel/slimbootloader/Kconfig          |  28 ++++
>>>> board/intel/slimbootloader/Makefile         |   5 +
>>>> board/intel/slimbootloader/slimbootloader.c |  21 +++
>>>> board/intel/slimbootloader/start.S          |   9 +
>>>> configs/slimbootloader_defconfig            |  22 +++
>>>> doc/board/intel/index.rst                   |   1 +
>>>> doc/board/intel/slimbootloader.rst          | 174 ++++++++++++++++++++
>>>> include/configs/slimbootloader.h            |  62 +++++++
>>>> 9 files changed, 336 insertions(+)
>>>> create mode 100644 board/intel/slimbootloader/Kconfig
>>>> create mode 100644 board/intel/slimbootloader/Makefile
>>>> create mode 100644 board/intel/slimbootloader/slimbootloader.c
>>>> create mode 100644 board/intel/slimbootloader/start.S
>>>> create mode 100644 configs/slimbootloader_defconfig
>>>> create mode 100644 doc/board/intel/slimbootloader.rst
>>>> create mode 100644 include/configs/slimbootloader.h
>>>> 
>>> 
>>> Tested-by: Bin Meng <bmeng.cn@gmail.com>
>> 
>> This time I successfully built the slimbootloader payload by following
>> the instructions in the documentation and it succeeded to boot. Thanks
>> for the efforts!
>> 
>> However when testing zboot from U-Boot, I got:
>> 
>> Error: Invalid Boot Flag (found 0x5aa5, expected 0xaa55)
>> ## Kernel loading failed ...
>> zboot - Boot bzImage
>> 
>> The same kernel bzImage boots fine with "qemu-x86_defconfig" target.
>> Did you see such issue?
>> 
> 
> Any comments on this error?
> 
Sorry for late response. I am still on international trip and not not able to connect network except for cellphone. I have verified Yocto Linux image, but will try to replicate the issue with your steps next week once you provides reproduce steps and test image. Thanks for your understanding in advance.

>> This is not a show-stopper. I will apply this series soon.
> 
> Regards,
> Bin

Best Regards,
Aiden
diff mbox series

Patch

diff --git a/board/intel/Kconfig b/board/intel/Kconfig
index 5131836cb0..7b16ec4dc1 100644
--- a/board/intel/Kconfig
+++ b/board/intel/Kconfig
@@ -73,6 +73,19 @@  config TARGET_MINNOWMAX
 	  Note that PCIE_ECAM_BASE is set up by the FSP so the value used
 	  by U-Boot matches that value.
 
+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 consumes HOB data
+	  which is generated by Slim Bootloader for its driver initialization.
+	  Slim Bootloader consumes FSP and its HOB, but FSP HOB is cleared
+	  Before launching a payload. Instead, Slim Bootloader generates its
+	  HOB data such as memory info, serial port info and so on.
+	  Refer to doc/board/intel/slimbootloader.rst for the details.
+
 endchoice
 
 source "board/intel/bayleybay/Kconfig"
@@ -82,5 +95,6 @@  source "board/intel/crownbay/Kconfig"
 source "board/intel/edison/Kconfig"
 source "board/intel/galileo/Kconfig"
 source "board/intel/minnowmax/Kconfig"
+source "board/intel/slimbootloader/Kconfig"
 
 endif
diff --git a/board/intel/slimbootloader/Kconfig b/board/intel/slimbootloader/Kconfig
new file mode 100644
index 0000000000..8c7e22cc33
--- /dev/null
+++ b/board/intel/slimbootloader/Kconfig
@@ -0,0 +1,28 @@ 
+# 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 "intel"
+
+config SYS_SOC
+	default "slimbootloader"
+
+config SYS_CONFIG_NAME
+	default "slimbootloader"
+
+config SYS_TEXT_BASE
+	default 0x00100000
+
+config BOARD_SPECIFIC_OPTIONS
+	def_bool y
+	select SYS_SLIMBOOTLOADER
+	select USB_STORAGE
+	select USB_KEYBOARD
+
+endif
diff --git a/board/intel/slimbootloader/Makefile b/board/intel/slimbootloader/Makefile
new file mode 100644
index 0000000000..fd8fa98a8d
--- /dev/null
+++ b/board/intel/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/intel/slimbootloader/slimbootloader.c b/board/intel/slimbootloader/slimbootloader.c
new file mode 100644
index 0000000000..f50eeb823f
--- /dev/null
+++ b/board/intel/slimbootloader/slimbootloader.c
@@ -0,0 +1,21 @@ 
+// 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.
+	 *
+	 * Slim Bootloader has already done PCI bus enumeration before loading
+	 * U-Boot, so U-Boot needs to preserve PCI configuration.
+	 * Therefore, '# CONFIG_PCI_PNP is not set' is included in defconfig.
+	 */
+	pci_init();
+
+	return 0;
+}
diff --git a/board/intel/slimbootloader/start.S b/board/intel/slimbootloader/start.S
new file mode 100644
index 0000000000..5c3f3df09e
--- /dev/null
+++ b/board/intel/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..b16ed71469
--- /dev/null
+++ b/configs/slimbootloader_defconfig
@@ -0,0 +1,22 @@ 
+CONFIG_X86=y
+CONFIG_VENDOR_INTEL=y
+CONFIG_TARGET_SLIMBOOTLOADER=y
+CONFIG_DEFAULT_DEVICE_TREE="slimbootloader"
+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_BOOTSTAGE=y
+CONFIG_BOOTSTAGE_REPORT=y
+CONFIG_BOOTDELAY=10
+CONFIG_CONSOLE_SCROLL_LINES=5
+# CONFIG_PCI_PNP is not set
diff --git a/doc/board/intel/index.rst b/doc/board/intel/index.rst
index f416801910..f545dee87a 100644
--- a/doc/board/intel/index.rst
+++ b/doc/board/intel/index.rst
@@ -13,3 +13,4 @@  Intel
    edison
    galileo
    minnowmax
+   slimbootloader
diff --git a/doc/board/intel/slimbootloader.rst b/doc/board/intel/slimbootloader.rst
new file mode 100644
index 0000000000..4a46fed069
--- /dev/null
+++ b/doc/board/intel/slimbootloader.rst
@@ -0,0 +1,174 @@ 
+.. SPDX-License-Identifier: GPL-2.0+
+.. sectionauthor:: Aiden Park <aiden.park@intel.com>
+
+Slim Bootloader
+===============
+
+Introduction
+------------
+
+This target is to enable U-Boot_ as a payload of `Slim Bootloader`_ (a.k.a SBL)
+boot firmware which currently supports QEMU, Apollolake, Whiskeylake,
+Coffeelake-R 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`_ 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: Payload init with HOB, Load OS from media, Booting OS
+
+The Slim Bootloader stages (Stage1A/B, Stage2) focus on chipset, hardware and
+platform specific initialization, and it provides useful information to a
+payload in a HOB (Hand-Off Block) which has serial port, memory map, performance
+data info and so on. This is Slim Bootloader architectural design to make a
+payload light-weight, platform independent and more generic across different
+boot solutions or payloads, and to minimize hardware re-initialization in a
+payload.
+
+Build Instruction for U-Boot as a Slim Bootloader payload
+---------------------------------------------------------
+
+Build U-Boot and obtain u-boot-dtb.bin::
+
+   $ make distclean
+   $ make slimbootloader_defconfig
+   $ make all
+
+Prepare Slim Bootloader
+-----------------------
+
+1. Setup Build Environment for Slim Bootloader.
+
+   Refer to `Getting Started`_ page in `Slim Bootloader`_ document site.
+
+2. Get source code. Let's simply clone the repo::
+
+   $ git clone https://github.com/slimbootloader/slimbootloader.git
+
+3. Copy u-boot-dtb.bin to Slim Bootloader.
+   Slim Bootloader looks for a payload from the specific location.
+   Copy the build u-boot-dtb.bin to the expected location::
+
+   $ mkdir -p <Slim Bootloader Dir>/PayloadPkg/PayloadBins/
+   $ cp <U-Boot Dir>/u-boot-dtb.bin <Slim Bootloader Dir>/PayloadPkg/PayloadBins/u-boot-dtb.bin
+
+Build Instruction for Slim Bootloader for QEMU target
+-----------------------------------------------------
+
+Slim Bootloader supports multiple payloads, and a board of Slim Bootloader
+detects its target payload by PayloadId in board configuration.
+The PayloadId can be any 4 Bytes value.
+
+1. Update PayloadId. Let's use 'U-BT' as an example::
+
+    $ vi Platform/QemuBoardPkg/CfgData/CfgDataExt_Brd1.dlt
+    -GEN_CFG_DATA.PayloadId                     | 'AUTO'
+    +GEN_CFG_DATA.PayloadId                     | 'U-BT'
+
+2. Update payload text base. PAYLOAD_EXE_BASE must be the same as U-Boot
+   CONFIG_SYS_TEXT_BASE in board/intel/slimbootloader/Kconfig.
+   PAYLOAD_LOAD_HIGH must be 0::
+
+    $ vi Platform/QemuBoardPkg/BoardConfig.py
+    +               self.PAYLOAD_LOAD_HIGH    = 0
+    +               self.PAYLOAD_EXE_BASE     = 0x00100000
+
+3. Build QEMU target. Make sure u-boot-dtb.bin and U-BT PayloadId
+   in build command. The output is Outputs/qemu/SlimBootloader.bin::
+
+   $ python BuildLoader.py build qemu -p "OsLoader.efi:LLDR:Lz4;u-boot-dtb.bin:U-BT:Lzma"
+
+4. Launch Slim Bootloader on QEMU.
+   You should reach at U-Boot serial console::
+
+   $ qemu-system-x86_64 -machine q35 -nographic -serial mon:stdio -pflash Outputs/qemu/SlimBootloader.bin
+
+Build Instruction for Slim Bootloader for LeafHill (APL) target
+--------------------------------------------------------------
+
+LeafHill is using PCI UART2 device as a serial port.
+For MEM32 serial port, CONFIG_SYS_NS16550_MEM32 needs to be enabled in U-Boot.
+
+1. Enable CONFIG_SYS_NS16550_MEM32 in U-Boot::
+
+    $ vi include/configs/slimbootloader.h
+    +#define CONFIG_SYS_NS16550_MEM32
+     #ifdef CONFIG_SYS_NS16550_MEM3
+
+2. Build U-Boot::
+
+   $ make disclean
+   $ make slimbootloader_defconfig
+   $ make all
+
+3. Copy u-boot-dtb.bin to Slim Bootloader.
+   Slim Bootloader looks for a payload from the specific location.
+   Copy the build u-boot-dtb.bin to the expected location::
+
+   $ mkdir -p <Slim Bootloader Dir>/PayloadPkg/PayloadBins/
+   $ cp <U-Boot Dir>/u-boot-dtb.bin <Slim Bootloader Dir>/PayloadPkg/PayloadBins/u-boot-dtb.bin
+
+4. Update PayloadId. Let's use 'U-BT' as an example::
+
+    $ vi Platform/ApollolakeBoardPkg/CfgData/CfgData_Int_LeafHill.dlt
+    -GEN_CFG_DATA.PayloadId                     | 'AUTO
+    +GEN_CFG_DATA.PayloadId                     | 'U-BT'
+
+5. Update payload text base.
+
+* PAYLOAD_EXE_BASE must be the same as U-Boot CONFIG_SYS_TEXT_BASE
+  in board/intel/slimbootloader/Kconfig.
+* PAYLOAD_LOAD_HIGH must be 0::
+
+    $ vi Platform/ApollolakeBoardPkg/BoardConfig.py
+    +               self.PAYLOAD_LOAD_HIGH    = 0
+    +               self.PAYLOAD_EXE_BASE     = 0x00100000
+
+6. Build APL target. Make sure u-boot-dtb.bin and U-BT PayloadId
+   in build command. The output is Outputs/apl/Stitch_Components.zip::
+
+   $ python BuildLoader.py build apl -p "OsLoader.efi:LLDR:Lz4;u-boot-dtb.bin:U-BT:Lzma"
+
+7. Stitch IFWI.
+
+   Refer to Apollolake_ page in Slim Bootloader document site::
+
+   $ python Platform/ApollolakeBoardPkg/Script/StitchLoader.py -i <Existing IFWI> -s Outputs/apl/Stitch_Components.zip -o <Output IFWI>
+
+8. Flash IFWI.
+
+   Use DediProg to flash IFWI. You should reach at U-Boot serial console.
+
+
+Build Instruction to use ELF U-Boot
+-----------------------------------
+
+1. Enable CONFIG_OF_EMBED::
+
+    $ vi configs/slimbootloader_defconfig
+    +CONFIG_OF_EMBED=y
+
+2. Build U-Boot::
+
+   $ make disclean
+   $ make slimbootloader_defconfig
+   $ make all
+   $ strip u-boot (removing symbol for reduced size)
+
+3. Do same steps as above
+
+* Copy u-boot (ELF) to PayloadBins directory
+* Update PayloadId 'U-BT' as above.
+* No need to set PAYLOAD_LOAD_HIGH and PAYLOAD_EXE_BASE.
+* Build Slim Bootloader. Use u-boot instead of u-boot-dtb.bin::
+
+   $ python BuildLoader.py build <qemu or apl> -p "OsLoader.efi:LLDR:Lz4;u-boot:U-BT:Lzma"
+
+.. _U-Boot: https://gitlab.denx.de/
+.. _`Slim Bootloader`: https://github.com/slimbootloader/
+.. _`Intel FSP`: https://github.com/IntelFsp/
+.. _`Getting Started`: https://slimbootloader.github.io/getting-started/
+.. _Apollolake: https://slimbootloader.github.io/supported-hardware/apollo-lake-crb.html#stitching
diff --git a/include/configs/slimbootloader.h b/include/configs/slimbootloader.h
new file mode 100644
index 0000000000..e0011ed446
--- /dev/null
+++ b/include/configs/slimbootloader.h
@@ -0,0 +1,62 @@ 
+/* 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>
+
+/*
+ * By default, CONFIG_SYS_NS16550_PORT_MAPPED is enabled for port io serial.
+ * To use mmio base serial, enable CONFIG_SYS_NS16550_MEM32 and disable
+ * CONFIG_SYS_NS16550_PORT_MAPPED until ns16550 driver supports serial port
+ * configuration in run-time.
+ *
+ * #define CONFIG_SYS_NS16550_MEM32
+ * #undef CONFIG_SYS_NS16550_PORT_MAPPED
+ */
+#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"
+
+/*
+ * Override CONFIG_EXTRA_ENV_SETTINGS in x86-common.h
+ */
+#undef CONFIG_EXTRA_ENV_SETTINGS
+#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"
+
+/*
+ * Override CONFIG_BOOTCOMMAND in x86-common.h
+ */
+#undef CONFIG_BOOTCOMMAND
+#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__ */