Hi
I am new to EDK2 and Apollo lake Leaf Hill board.

Booting OS from USB is OK.

But Booting OS from SPI flash is not work.

I want to boot small OS from SPI flash.(MT25QU128ABA)

What am I have to do to booting OS from SPI flash?

==============Debug message=======================
[Bds]OsIndication: 0000000000000000
[Bds]=============Begin Load Options Dumping ...=============
  Driver Options:
  SysPrep Options:
  Boot Options:
    Boot0001: Internal UEFI Shell 2.0 0x0001
    Boot0000: BootManagerMenuApp 0x0109
    Boot0002: Enter Setup 0x0109
  PlatformRecovery Options:
    PlatformRecovery0000: Default PlatformRecovery 0x0001
[Bds]=============End Load Options Dumping=============
[Bds]BdsWait ...Zzzzzzzzzzzz...
[Bds]BdsWait(1)..Zzzz...
[Bds]Exit the waiting!
PROGRESS CODE: V3051007 I0
[Bds]Stop Hotkey Service!
[Bds]UnregisterKeyNotify: 0011/0000 Success
[Bds]UnregisterKeyNotify: 000C/0000 Success
[Bds]UnregisterKeyNotify: 0000/000D Success
OnReadyToBootCallBack
SetGOPVersionCallback
VbtAddress =0x7AB7CF0C 
VbtSize = 0x1600.
VBT data found
VbtFileBuffer->HeaderVbtSize = 0x1506 
Executing SMBIOS T14 callback.
BoardInitDxe: GetBoardName - Leaf Hill
B2 Stepping Detected
SmbiosAdd: Smbios type 1 with size 0x85 is added to 32-bit table
SmbiosAdd: Smbios type 1 with size 0x85 is added to 64-bit table
ReadyToBootFunction(#376) - Programming SD Card detect pin as GPI...
UART2 Device Not Found Or OsDbgEnable is Disabled  - DBG2 UART2 Base Address Not Updated
S3Ready!
Publish WDAT...
Installing WDAT...
Install WDAT Success
RTD3 SSDT Table found.Uninstalling it
DPTF OnReadyToBoot bDptfEnabled = 0x0 
DPTF SSDT Table found.Uninstalling it
SmmInstallProtocolInterface: 6E057ECF-FA99-4F39-95BC-59F9921D17E4 0
SeCReadyToBootEvent ++
BIOS Start Send HECI Message: EndOfPost
HECI SeCMode 0
GetSeCMode successful
GEN_END_OF_POST size is 4
HeciSendwAck () - Start
Start HeciSend 
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Wait for CSE ready, SecControlReg 80161609
CSE ready SecControlReg 80161609
Heci Message Header: 80040007
Message[0] = 00000CFF
Prepare Send Interrupt to CSE: 80848208
Send Interrupt to CSE: 80848209
No More Data Need be sent.End HeciSend 
Start HeciReceive
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Waiting for CSE notify, HostControlReg: 8084840B SecControlReg: 80191609
Waiting for CSE notify, HostControlReg: 8084840B
Get CSE notify, HostControlReg: 8084840B
Disable Interrupt, HostControlReg: 80848408
Check SecControlReg: 80191609
Get Message Header: 80080007
MessageBody[0] = 00008CFF
MessageBody[1] = 00000000
Enable Host to get CSE interrupt: 80848408
get CSE interrupt Enabled: 80848409
Not more data need be receive, end
End HeciReceive 
Group    =000000FF
Command  =0000000C
IsRespone=00000001
Result   =00000000
RequestedActions   =00000000
InstallProtocolInterface: 16B6109E-194C-440F-94F8-C7CCCCC32DEB 0
HeciSmmReady 
gEfiHeciProtocol Has Installed return
HeciSmmHandler SMM_HECI_MESSAGE_END_OF_POST
SmmInstallProtocolInterface: 16B6109E-194C-440F-94F8-C7CCCCC32DEB 0
Begin - End of Post HECI Event
HECI Protocol 0
End - End of Post HECI Event
LockConfig () - Start
HECI SeCStatus 80000255
SecFirmwareStatus.ul: 0x80000255
FATAL ERROR: Set boot script outside SMM after SmmReadyToLock!!!
SeCReadyToBootEvent --
ScOnReadyToBoot() Start
ScOnReadyToBoot() End
Failed to locate DxeCpuInfo Protocol
UpdatePlatformInformation(): calling GetBoardName()
BoardInitDxe: GetBoardName - Leaf Hill
Executing GetImageFwVersion().
BIOS Start Send HECI Message: HeciGetImageFwVerMsg
HECI SeCMode 0
GetSeCMode successful
FW_VER_CMD_REQ size is 0x4, FW_VERSION_CMD_RESP_DATA size is: 0x80
HeciSendwAck () - Start
Start HeciSend 
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Wait for CSE ready, SecControlReg 80191909
CSE ready SecControlReg 80191909
Heci Message Header: 80040007
Message[0] = 00001CFF
Prepare Send Interrupt to CSE: 80868408
Send Interrupt to CSE: 80868409
No More Data Need be sent.End HeciSend 
Start HeciReceive
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Waiting for CSE notify, HostControlReg: 8086860B SecControlReg: 80301909
Waiting for CSE notify, HostControlReg: 8086860B
Get CSE notify, HostControlReg: 8086860B
Disable Interrupt, HostControlReg: 80868608
Check SecControlReg: 80301909
Get Message Header: 80580007
MessageBody[0] = 00009CFF
MessageBody[1] = 00000004
MessageBody[2] = 52505446
MessageBody[3] = 6E616D2E
MessageBody[4] = 00000000
MessageBody[5] = 00010003
MessageBody[6] = 091E0046
MessageBody[7] = 50434D50
MessageBody[8] = 6E616D2E
MessageBody[9] = 00000000
MessageBody[A] = 00010000
MessageBody[B] = 00000000
MessageBody[C] = 50494D53
MessageBody[D] = 6E616D2E
MessageBody[E] = 00000000
MessageBody[F] = 00010003
MessageBody[10] = 08E8003C
MessageBody[11] = 504E5549
MessageBody[12] = 6E616D2E
MessageBody[13] = 00000000
MessageBody[14] = 00000000
MessageBody[15] = 00000000
Enable Host to get CSE interrupt: 80868608
get CSE interrupt Enabled: 80868609
Not more data need be receive, end
End HeciReceive 
DumpBuffer 0x7A1AD650
FF   
9C   
00   
00   
04   
00   
00   
00   
46   
54   
50   
52   
2E   
6D   
61   
6E   
00   
00   
00   
00   
03   
00   
01   
00   
46   
00   
1E   
09   
50   
4D   
43   
50   
2E   
6D   
61   
6E   
00   
00   
00   
00   
00   
00   
01   
00   
00   
00   
00   
00   
53   
4D   
49   
50   
2E   
6D   
61   
6E   
00   
00   
00   
00   
03   
00   
01   
00   
3C   
00   
E8   
08   
49   
55   
4E   
50   
2E   
6D   
61   
6E   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
00   
 
Group      =000000FF
Command    =0000001C
IsRespone  =00000001
Result     =00000000
NumModules =00000004
UpdateSeCInformation ++
HECI SeCMode 0
Start HeciSend 
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Wait for CSE ready, SecControlReg 80303009
CSE ready SecControlReg 80303009
Heci Message Header: 80080007
Message[0] = 00000203
Message[1] = 00000000
Prepare Send Interrupt to CSE: 80898608
Send Interrupt to CSE: 80898609
No More Data Need be sent.End HeciSend 
Start HeciReceive
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Waiting for CSE notify, HostControlReg: 8089890B SecControlReg: 80353009
Waiting for CSE notify, HostControlReg: 8089890B
Get CSE notify, HostControlReg: 8089890B
Disable Interrupt, HostControlReg: 80898908
Check SecControlReg: 80353009
Get Message Header: 800D0007
MessageBody[0] = 00008203
MessageBody[1] = 00000000
MessageBody[2] = 10104004
MessageBody[3] = 00000011
Enable Host to get CSE interrupt: 80898908
get CSE interrupt Enabled: 80898909
Not more data need be receive, end
End HeciReceive 
HeciGetFwFeatureStateMsg ++
HECI SeCMode 0
Start HeciSend 
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Wait for CSE ready, SecControlReg 80353509
CSE ready SecControlReg 80353509
Heci Message Header: 80080007
Message[0] = 00000203
Message[1] = 00000020
Prepare Send Interrupt to CSE: 808C8908
Send Interrupt to CSE: 808C8909
No More Data Need be sent.End HeciSend 
Start HeciReceive
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Waiting for CSE notify, HostControlReg: 808C8C0B SecControlReg: 803A3509
Waiting for CSE notify, HostControlReg: 808C8C0B
Get CSE notify, HostControlReg: 808C8C0B
Disable Interrupt, HostControlReg: 808C8C08
Check SecControlReg: 803A3509
Get Message Header: 800D0007
MessageBody[0] = 00008203
MessageBody[1] = 00000020
MessageBody[2] = 10104004
MessageBody[3] = 00000011
Enable Host to get CSE interrupt: 808C8C08
get CSE interrupt Enabled: 808C8C09
Not more data need be receive, end
End HeciReceive 
HeciGetFwFeatureStateMsg --
HECI SeCMode 0
Start HeciSend 
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Wait for CSE ready, SecControlReg 803A3A09
CSE ready SecControlReg 803A3A09
Heci Message Header: 80080007
Message[0] = 00000203
Message[1] = 0000002B
Prepare Send Interrupt to CSE: 808F8C08
Send Interrupt to CSE: 808F8C09
No More Data Need be sent.End HeciSend 
Start HeciReceive
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
CheckAndFixHeciForAccess Entry, For HECI Dev-0 
HECI Device's R_HECIMBAR0 = 0x9361D000, R_HECIMBAR1 = 0x0
CheckAndFixHeciForAccess Exit with MBAR
Waiting for CSE notify, HostControlReg: 808F8F0B SecControlReg: 803F3A09
Waiting for CSE notify, HostControlReg: 808F8F0B
Get CSE notify, HostControlReg: 808F8F0B
Disable Interrupt, HostControlReg: 808F8F08
Check SecControlReg: 803F3A09
Get Message Header: 800D0007
MessageBody[0] = 00008203
MessageBody[1] = 0000002B
MessageBody[2] = 00000004
MessageBody[3] = 00000000
Enable Host to get CSE interrupt: 808F8F08
get CSE interrupt Enabled: 808F8F09
Not more data need be receive, end
End HeciReceive 
UpdateSeCInformation --
SeCPolicyReadyToBootEvent ++
HECI SeCMode 0
HECI SeCStatus 80000255
SeCPolicyReadyToBootEvent --
FspFindFspHeader
FSP NotifyPhase ReadyToBoot failed, status: 0x80000003
gAddPerfRecordProtocolGuid - Locate protocol failed
POSTCODE=<AD>
POSTCODE=<000000AD>
PROGRESS CODE: V3051001 I0
00: <null string> - Healthy
Memory  Previous  Current    Next   
 Type    Pages     Pages     Pages  
======  ========  ========  ========
  09    00000040  00000023  00000040
  0A    00000060  0000002D  00000060
  00    00001A80  0000184B  00001A80
  05    000000F0  0000008A  000000F0
  06    00000240  000000F6  00000240
[Bds]Booting Internal UEFI Shell 2.0
[Bds] Expand Fv(5968B09B-6C7E-4356-8720-AC897E800270)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1) -> Fv(5968B09B-6C7E-4356-8720-AC897E800270)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)
PROGRESS CODE: V3058000 I0
InstallProtocolInterface: 5B1B31A1-9562-11D2-8E3F-00A0C969723B 77132040
Loading driver at 0x00076459000 EntryPoint=0x00076459280 
InstallProtocolInterface: BC62157E-3E33-4FEC-9920-2D3B36D750DF 768AA098
ProtectUefiImageCommon - 0x77132040
  - 0x0000000076459000 - 0x00000000000E85C0
PROGRESS CODE: V3058001 I0
InstallProtocolInterface: 387477C2-69C7-11D2-8E39-00A0C969723B 77108CA0
InstallProtocolInterface: 752F3136-4E16-4FDC-A22A-E5F46812F4CA 77108A18
InstallProtocolInterface: 6302D008-7F9B-4F30-87AC-60C9FEF5DA4E 764C1C70
UEFI Interactive Shell v2.2
EDK II
UEFI v2.70 (EDK II, 0x00010000)
Mapping table
map: No mapping found.
Press ESC in 5 seconds to skip startup.nsh or any other key to continue.Press ESC in 4 seconds to skip startup.nsh or any other key to continue.Press ESC in 3 seconds to skip startup.nsh or any other key to continue.Press ESC in 2 seconds to skip startup.nsh or any other key to continue.Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
Shell>