Apollo Lake CRB Boards¶
Note
Intel Atom® Processor E3900 is formally known as Apollo Lake platform.
Supported Boards¶
SBL supports Leaf Hill, Juniper Hill and Oxbow Hill board variations of Apollo Lake platform.
Building¶
To build SBL for Apollo Lake platform platform:
python BuildLoader.py build apl
The output images are generated under Outputs
directory.
Stitching¶
- Download Apollo Lake platform firmware image.
This image contains additional firmware ingredients that are required to boot on Apollo Lake platform.
Note
Unzip the firmware images that contains two Apollo Lake platform firmware images, one is Debug version and one is Release version, both of them can be used for stitch SBL IFWI.
Stitch SBL images into downloaded BIOS image:
python Platform/ApollolakeBoardPkg/Script/StitchLoader.py -i <BIOS_IMAGE_NAME> -s Outputs/apl/Stitch_Components.zip -o <SBL_IFWI_IMAGE_NAME> where -i = Input file, -o = Output file.
For example, stitching SBL IFWI image
sbl_lfh_ifwi.bin
from Apollo Lake platform firmware images downloaded:python Platform/ApollolakeBoardPkg/Script/StitchLoader.py -i LEAFHILD.X64.0070.R01.1805070352.bin -s Outputs/apl/Stitch_Components.zip -o sbl_lfh_ifwi.bin
Note
StitchLoader.py
script works only if Boot Guard in the base image is not enabled, and the silicon is not fused with Boot Guard enabled. If Boot Guard is enabled, please use StitchIfwi.py script instead.
For more details on stitch tool, see Stitch Tool on how to stitch the IFWI image with SBL.
Flashing¶
Flash the generated sbl_lfh_ifwi.bin
to the target board using DediProg SF100 or SF600 programmer.
Note
Please check the alignment/polarity when connecting Dediprog to the board. Please power off the board before connecting the Dediprog.
Note
The connector labelled SPI TPM - J5D1 on the target board is for DediProg.
Note
Please disconnect Deidprog before powering up the board again.
Slimbootloader binary for capsule image¶
Creating slimbootloader binary for capsule image requires the following steps:
Build SBL for Apollo Lake platform:
python BuildLoader.py build apl
Run stitching process as described above to create a SBL IFWI binary sbl_lfh_ifwi.bin
:
python Platform/ApollolakeBoardPkg/Script/StitchLoader.py -i <BIOS_IMAGE_NAME> -s Outputs/apl/Stitch_Components.zip -o sbl_lfh_ifwi.bin
Extract bios.bin
from SBL IFWI image:
python BootloaderCorePkg/Tools/IfwiUtility.py extract -i sbl_lfh_ifwi.bin -p IFWI/BIOS -o bios.bin
Generate capsule update image FwuImage.bin
:
python BootloaderCorePkg/Tools/GenCapsuleFirmware.py -p BIOS bios.bin -k KEY_ID_FIRMWAREUPDATE_RSA2048 -o FwuImage.bin
Triggering Firmware Update¶
Sample implementation of trigerring firmware update is explained below
SBL for Apollo Lake platform uses BIT16 of PMC I/O register (Scratchpad for sharing data between BIOS and PMC Firmware (BIOS_SCRATCHPAD) - Offset 1090h) to trigger firmware update. When BIT16 is set, SBL will set the boot mode to FLASH_UPDATE.
please refer to IsFirmwareUpdate() function called in Platform\ApollolakeBoardPkg\Library\Stage1BBoardInitLib\Stage1BBoardInitLib.c
to understand how SBL will detect firmware update mode.
Debug UART¶
For Apollo Lake platform, LPSS UART Port 2 is the debug UART configured in SBL.
The Apollo Lake platform have a FTDI chip for serial to USB connection. Please connect the micro USB connector next to the power button on the target board to a host and a terminal software to enable debug console from SBL.
Booting Yocto Linux¶
See Booting Yocto Linux from USB for more details.
You may need to change boot options to boot from USB. See Change Boot Options.
Board ID Assignments¶
Each Apollo Lake platform CRB board is assigned a unique platform ID by reading a set of GPIO pins (25, 26 and 30).
Board Platform ID Oxbow Hill 6 Leaf Hill 7 Juniper Hill 8
See Platform ID Detection using GPIOs for more details.
To customize board configurations in *.dlt
file, make sure to specify PlatformId
to the corresponding values for the board.
See Configuration Tools for more details.