Fsp1.1 update.
authorYao, Jiewen <jiewen.yao@intel.com>
Thu, 12 Feb 2015 07:02:43 +0000 (07:02 +0000)
committerjyao1 <jyao1@Edk2>
Thu, 12 Feb 2015 07:02:43 +0000 (07:02 +0000)
Update ApiEntry.asm to use MACRO instead of direct XMM access.
Add sanity parameter check for FSP API.
Add sanity return code check for internal API.
Call LoadUcode before CarInit to meet silicon requirement.
Remove unnecessary VpdBase for PatchTable.
Add ASSERT for NULL check FSP1.1 entrypoint.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: "Yao, Jiewen" <jiewen.yao@intel.com>
Reviewed-by: "Rangarajan, Ravi P" <ravi.p.rangarajan@intel.com>
Reviewed-by: "Ma, Maurice" <maurice.ma@intel.com>
Reviewed-by: "Mudusuru, Giri P" <giri.p.mudusuru@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16834 6f19259b-4bc3-4df7-8a09-765794883524

IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm
IntelFspPkg/FspSecCore/Ia32/FspApiEntry.s
IntelFspPkg/Include/Guid/GuidHobFspEas.h
IntelFspPkg/Include/Private/FspGlobalData.h
IntelFspPkg/Include/Private/FspPatchTable.h
IntelFspPkg/IntelFspPkg.dec
IntelFspPkg/Library/BaseFspPlatformLib/BaseFspPlatformLib.inf
IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c
IntelFspPkg/Tools/GenCfgOpt.py
IntelFspWrapperPkg/FspInitPei/FspInitPei.c
IntelFspWrapperPkg/FspInitPei/FspInitPeiV2.c

index 6c33083..7c6e60f 100644 (file)
@@ -41,9 +41,8 @@ EXTERN   GetFspBaseAddress:PROC
 EXTERN   GetBootFirmwareVolumeOffset:PROC\r
 EXTERN   Pei2LoaderSwitchStack:PROC\r
 EXTERN   FspSelfCheck(FspSelfCheckDflt):PROC\r
-EXTERN   PlatformBasicInit(PlatformBasicInitDflt):PROC\r
 EXTERN   LoadUcode(LoadUcodeDflt):PROC\r
-EXTERN   SecPlatformInit:PROC\r
+EXTERN   SecPlatformInit(SecPlatformInitDflt):PROC\r
 EXTERN   SecCarInit:PROC\r
 \r
 ;\r
@@ -101,7 +100,7 @@ exit:
 FspSelfCheckDflt   ENDP\r
 \r
 ;------------------------------------------------------------------------------\r
-PlatformBasicInitDflt PROC NEAR PUBLIC\r
+SecPlatformInitDflt PROC NEAR PUBLIC\r
    ; Inputs:\r
    ;   eax -> Return address\r
    ; Outputs:\r
@@ -116,7 +115,7 @@ PlatformBasicInitDflt PROC NEAR PUBLIC
    xor   eax, eax\r
 exit:\r
    jmp   ebp\r
-PlatformBasicInitDflt   ENDP\r
+SecPlatformInitDflt   ENDP\r
 \r
 ;------------------------------------------------------------------------------\r
 LoadUcodeDflt   PROC  NEAR PUBLIC\r
@@ -304,7 +303,6 @@ exit:
 LoadUcodeDflt   ENDP\r
 \r
 EstablishStackFsp    PROC    NEAR    PRIVATE\r
-  ; Following is the code copied from BYTFSP, need to figure out what it is doing..\r
   ;\r
   ; Save parameter pointer in edx  \r
   ;\r
@@ -336,9 +334,9 @@ InvalidMicrocodeRegion:
   ;\r
   push      DATA_LEN_OF_PER0     ; Size of the data region \r
   push      30524550h            ; Signature of the  data region 'PER0'\r
-  movd      eax, xmm4\r
-  push      eax\r
-  movd      eax, xmm5\r
+  LOAD_EDX\r
+  push      edx\r
+  LOAD_EAX\r
   push      eax\r
   rdtsc\r
   push      edx\r
@@ -387,9 +385,17 @@ TempRamInitApi   PROC    NEAR    PUBLIC
   ; Save timestamp into XMM4 & XMM5\r
   ;\r
   rdtsc\r
-  movd      xmm4, edx\r
-  movd      xmm5, eax\r
-  \r
+  SAVE_EAX\r
+  SAVE_EDX\r
+\r
+  ;\r
+  ; Check Parameter\r
+  ;\r
+  mov       eax, dword ptr [esp + 4]\r
+  cmp       eax, 0\r
+  mov       eax, 80000002h\r
+  jz        NemInitExit\r
+\r
   ;\r
   ; CPUID/DeviceID check\r
   ;\r
@@ -400,16 +406,22 @@ TempRamInitApi   PROC    NEAR    PUBLIC
   jnz       NemInitExit\r
 \r
   CALL_MMX  SecPlatformInit\r
-\r
-  ; Call Sec CAR Init\r
-  CALL_MMX  SecCarInit\r
+  cmp       eax, 0\r
+  jnz       NemInitExit\r
   \r
-  ; @todo: ESP has been modified, we need to restore here.\r
-  LOAD_REGS\r
-  SAVE_REGS\r
   ; Load microcode\r
+  LOAD_ESP\r
   CALL_MMX  LoadUcode\r
+  cmp       eax, 0\r
+  jnz       NemInitExit\r
+\r
+  ; Call Sec CAR Init\r
+  LOAD_ESP\r
+  CALL_MMX  SecCarInit\r
+  cmp       eax, 0\r
+  jnz       NemInitExit\r
 \r
+  LOAD_ESP\r
   CALL_MMX  EstablishStackFsp\r
 \r
 NemInitExit:\r
index 203efd9..995aef6 100644 (file)
@@ -205,7 +205,7 @@ FspSelfCheckDfltExit:
 \r
 \r
 #------------------------------------------------------------------------------\r
-# PlatformBasicInitDflt\r
+# SecPlatformInitDflt\r
 # Inputs:\r
 #   eax -> Return address\r
 # Outputs:\r
@@ -214,15 +214,15 @@ FspSelfCheckDfltExit:
 #   eax is cleared and ebp is used for return address.\r
 #   All others reserved.\r
 #------------------------------------------------------------------------------\r
-ASM_GLOBAL ASM_PFX(PlatformBasicInitDflt)\r
-ASM_PFX(PlatformBasicInitDflt):\r
+ASM_GLOBAL ASM_PFX(SecPlatformInitDflt)\r
+ASM_PFX(SecPlatformInitDflt):\r
    #\r
    # Save return address to EBP\r
    #\r
    movl   %eax, %ebp\r
    xorl   %eax, %eax\r
 \r
-PlatformBasicInitDfltExit:\r
+SecPlatformInitDfltExit:\r
    jmp   *%ebp\r
 \r
 \r
@@ -244,7 +244,7 @@ ASM_PFX(LoadUcode):
    #\r
    # Save return address to EBP\r
    #\r
-   movd   %xmm7, %ebp\r
+   movd   %mm7, %ebp\r
 \r
    cmpl   $0x00, %esp\r
    jz     ParamError\r
@@ -451,8 +451,6 @@ LoadUcodeExit:
 #----------------------------------------------------------------------------\r
 # EstablishStackFsp\r
 #\r
-# Following is the code copied from BYTFSP, need to figure out what it is doing..\r
-#\r
 #----------------------------------------------------------------------------\r
 ASM_GLOBAL ASM_PFX(EstablishStackFsp)\r
 ASM_PFX(EstablishStackFsp):\r
@@ -487,9 +485,9 @@ EstablishStackFspExit:
   #\r
   pushl   $DATA_LEN_OF_PER0                  # Size of the data region\r
   pushl   $0x30524550                        # Signature of the  data region 'PER0'\r
-  movd    %xmm4, %eax\r
-  pushl   %eax\r
-  movd    %xmm5, %eax\r
+  LOAD_EDX\r
+  pushl   %edx\r
+  LOAD_EAX\r
   pushl   %eax\r
   rdtsc\r
   pushl   %edx\r
@@ -537,8 +535,16 @@ ASM_PFX(TempRamInitApi):
   # Save timestamp into XMM4 & XMM5\r
   #\r
   rdtsc\r
-  movd    %edx, %xmm4\r
-  movd    %eax, %xmm5\r
+  SAVE_EAX\r
+  SAVE_EDX\r
+\r
+  #\r
+  # Check Parameter\r
+  #\r
+  movl    4(%esp), %eax\r
+  cmpl    $0x00, %eax\r
+  movl    $0x80000002, %eax\r
+  jz      NemInitExit\r
 \r
   #\r
   # CPUID/DeviceID check\r
@@ -556,31 +562,35 @@ TempRamInitApiL0:
   movd    %mm7, %esi\r
   jmp     ASM_PFX(SecPlatformInit)\r
 TempRamInitApiL1:\r
+  cmpl    $0x00, %eax\r
+  jnz     NemInitExit\r
 \r
   #\r
-  # Call Sec CAR Init\r
+  # Load microcode\r
   #\r
-  movl    $TempRamInitApiL2, %esi            #CALL_MMX  SecCarInit\r
+  LOAD_ESP\r
+  movl    $TempRamInitApiL2, %esi            #CALL_MMX  LoadUcode\r
   movd    %mm7, %esi\r
-  jmp     ASM_PFX(SecCarInit)\r
+  jmp     ASM_PFX(LoadUcode)\r
 TempRamInitApiL2:\r
-\r
-  # @todo: ESP has been modified, we need to restore here.\r
-\r
-  LOAD_REGS\r
-  SAVE_REGS\r
+  cmpl    $0x00, %eax\r
+  jnz     NemInitExit\r
 \r
   #\r
-  # Load microcode\r
+  # Call Sec CAR Init\r
   #\r
-  movl    $TempRamInitApiL3, %esi            #CALL_MMX  LoadUcode\r
+  LOAD_ESP\r
+  movl    $TempRamInitApiL3, %esi            #CALL_MMX  SecCarInit\r
   movd    %mm7, %esi\r
-  jmp     ASM_PFX(LoadUcode)\r
+  jmp     ASM_PFX(SecCarInit)\r
 TempRamInitApiL3:\r
+  cmpl    $0x00, %eax\r
+  jnz     NemInitExit\r
 \r
   #\r
   # EstablishStackFsp\r
   #\r
+  LOAD_ESP\r
   movl    $TempRamInitApiL4, %esi            #CALL_MMX  EstablishStackFsp\r
   movd    %mm7, %esi\r
   jmp     ASM_PFX(EstablishStackFsp)\r
index d29def3..45a6e25 100644 (file)
@@ -16,8 +16,7 @@
 #ifndef __GUID_HOB_FSP_EAS_GUID__\r
 #define __GUID_HOB_FSP_EAS_GUID__\r
 \r
-extern EFI_GUID gFspBootLoaderTempMemoryGuid;\r
-extern EFI_GUID gFspBootLoaderTemporaryMemoryGuid; // Same as gFspBootLoaderTempMemoryGuid\r
+extern EFI_GUID gFspBootLoaderTemporaryMemoryGuid;\r
 \r
 extern EFI_GUID gFspReservedMemoryResourceHobGuid;\r
 extern EFI_GUID gFspNonVolatileStorageHobGuid;\r
index efbb942..436891a 100644 (file)
@@ -38,7 +38,6 @@ typedef struct  {
    UINT8              Reserved[3];\r
    UINT32             PerfIdx;\r
    UINT64             PerfData[32];\r
-//   UINT64             PerfData[FixedPcdGet32(PcdFspMaxPerfEntry)];\r
 } FSP_GLOBAL_DATA;\r
 \r
 #pragma pack()\r
index d16a1b7..7f672c6 100644 (file)
@@ -25,7 +25,6 @@ typedef struct  {
   UINT8   Reserved;\r
   UINT32  PatchEntryNum;\r
   UINT32  PatchData[FixedPcdGet32(PcdFspMaxPatchEntry)];\r
-  UINT32  VpdBase;\r
 } FSP_PATCH_TABLE;\r
 \r
 #pragma pack()\r
index ab934f9..1f286c1 100644 (file)
@@ -49,7 +49,6 @@
 \r
   # Guid define in FSP EAS\r
   gFspHeaderFileGuid                    = { 0x912740BE, 0x2284, 0x4734, { 0xB9, 0x71, 0x84, 0xB0, 0x27, 0x35, 0x3F, 0x0C } }\r
-  gFspBootLoaderTempMemoryGuid          = { 0xbbcff46c, 0xc8d3, 0x4113, { 0x89, 0x85, 0xb9, 0xd4, 0xf3, 0xb3, 0xf6, 0x4e } }\r
   gFspBootLoaderTemporaryMemoryGuid     = { 0xbbcff46c, 0xc8d3, 0x4113, { 0x89, 0x85, 0xb9, 0xd4, 0xf3, 0xb3, 0xf6, 0x4e } }\r
   gFspReservedMemoryResourceHobGuid     = { 0x69a79759, 0x1373, 0x4367, { 0xa6, 0xc4, 0xc7, 0xf5, 0x9e, 0xfd, 0x98, 0x6e } }\r
   gFspNonVolatileStorageHobGuid         = { 0x721acf02, 0x4d77, 0x4c2a, { 0xb3, 0xdc, 0x27, 0x0b, 0x7b, 0xa9, 0xe4, 0xb0 } }\r
index 4e528d0..1ec6e4e 100644 (file)
@@ -39,7 +39,7 @@
   gIntelFspPkgTokenSpaceGuid.PcdFspTemporaryRamSize         ## CONSUMES\r
 \r
 [Guids]\r
-  gFspBootLoaderTempMemoryGuid                              ## PRODUCES ## HOB\r
+  gFspBootLoaderTemporaryMemoryGuid                         ## PRODUCES ## HOB\r
 \r
 [FixedPcd]\r
   gIntelFspPkgTokenSpaceGuid.PcdFspMaxPatchEntry        ## CONSUMES\r
index 6fb4dca..241cd28 100644 (file)
@@ -103,10 +103,11 @@ FspMigrateTemporaryMemory (
   // Build a Boot Loader Temporary Memory GUID HOB\r
   //\r
   if (ApiMode == 0) {\r
-    BootLoaderTempRamHob = BuildGuidHob (&gFspBootLoaderTempMemoryGuid, BootLoaderTempRamSize);\r
+    BootLoaderTempRamHob = BuildGuidHob (&gFspBootLoaderTemporaryMemoryGuid, BootLoaderTempRamSize);\r
   } else {\r
-       BootLoaderTempRamHob = (VOID *)AllocatePool (BootLoaderTempRamSize);\r
+    BootLoaderTempRamHob = (VOID *)AllocatePool (BootLoaderTempRamSize);\r
   }\r
+  ASSERT(BootLoaderTempRamHob != NULL);\r
 \r
   CopyMem (BootLoaderTempRamHob, (VOID *)BootLoaderTempRamStart, BootLoaderTempRamSize);\r
   OffsetGap = (UINT32)BootLoaderTempRamHob - BootLoaderTempRamStart;\r
index 06e426a..7e59801 100644 (file)
@@ -254,10 +254,10 @@ EndList
                                     ElifStack[-1] = ElifStack[-1] + 1\r
                             else:\r
                                 if len(DscLine) > 0 and DscLine[0] == '!':\r
-                                                                   #\r
-                                                                   # Current it can only handle build switch.\r
-                                                                       # It does not support INF file in included dsc.\r
-                                                                       #\r
+                                    #\r
+                                    # Current it can only handle build switch.\r
+                                    # It does not support INF file in included dsc.\r
+                                    #\r
                                 else:\r
                                     if reduce(lambda x,y: x and y, IfStack):\r
                                         Handle = True\r
@@ -619,8 +619,8 @@ EndList
                 ImageRev = struct.unpack('<I', BinFd.read(0x04))\r
                 BinFd.close()\r
 \r
-                HeaderFd.write("#define VPD_IMAGE_ID    0x%016X        /* '%s' */\n" % (ImageId[0], IdStr))\r
-                HeaderFd.write("#define VPD_IMAGE_REV   0x%08X \n\n" % ImageRev[0])\r
+                HeaderFd.write("#define FSP_IMAGE_ID    0x%016X        /* '%s' */\n" % (ImageId[0], IdStr))\r
+                HeaderFd.write("#define FSP_IMAGE_REV   0x%08X \n\n" % ImageRev[0])\r
 \r
             HeaderFd.write("typedef struct _" + Region[0]  + "PD_DATA_REGION {\n")\r
             NextOffset  = 0\r
index 17a6468..48a0307 100644 (file)
@@ -42,17 +42,21 @@ FspPeiEntryPoint (
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
+  ASSERT (FspHeader->TempRamInitEntryOffset != 0);\r
+  ASSERT (FspHeader->FspInitEntryOffset != 0);\r
+  ASSERT (FspHeader->NotifyPhaseEntryOffset != 0);\r
+\r
   if ((PcdGet8 (PcdFspApiVersion) >= 2) &&\r
       (FspHeader->HeaderRevision >= FSP_HEADER_REVISION_2) &&\r
-      (FspHeader->ApiEntryNum >= 6) &&\r
-      (FspHeader->FspMemoryInitEntryOffset != 0) &&\r
-      (FspHeader->TempRamExitEntryOffset != 0) &&\r
-      (FspHeader->FspSiliconInitEntryOffset != 0) ) {\r
-    PcdFspApiVersion = FSP_HEADER_REVISION_2;\r
+      (FspHeader->ApiEntryNum >= 6) ) {\r
+    ASSERT (FspHeader->FspMemoryInitEntryOffset != 0);\r
+    ASSERT (FspHeader->TempRamExitEntryOffset != 0);\r
+    ASSERT (FspHeader->FspSiliconInitEntryOffset != 0);\r
+    PcdFspApiVersion = PcdGet8 (PcdFspApiVersion);\r
   }\r
   DEBUG ((DEBUG_INFO, "PcdFspApiVersion - 0x%x\n", PcdFspApiVersion));\r
 \r
-  if (PcdFspApiVersion == FSP_HEADER_REVISION_1) {\r
+  if (PcdFspApiVersion == 1) {\r
     PeiFspInitV1 (FspHeader);\r
   } else {\r
     PeiFspInitV2 (FspHeader);\r
index 6ddbf7f..7cad84e 100644 (file)
@@ -169,6 +169,7 @@ PeiFspMemoryInit (
   FspMemoryInitParams.NvsBufferPtr = GetNvsBuffer ();\r
   DEBUG ((DEBUG_INFO, "NvsBufferPtr - 0x%x\n", FspMemoryInitParams.NvsBufferPtr));\r
   FspMemoryInitParams.RtBufferPtr  = (VOID *)&FspRtBuffer;\r
+  FspHobList = NULL;\r
   FspMemoryInitParams.HobListPtr   = &FspHobList;\r
 \r
   DEBUG ((DEBUG_INFO, "FspMemoryInitParams - 0x%x\n", &FspMemoryInitParams));\r
@@ -184,6 +185,7 @@ PeiFspMemoryInit (
   ASSERT_EFI_ERROR (Status);\r
 \r
   DEBUG ((DEBUG_INFO, "  HobListPtr (returned) - 0x%x\n", FspHobList));\r
+  ASSERT (FspHobList != NULL);\r
 \r
   FspHobProcessForMemoryResource (FspHobList);\r
 \r