From b23441875c34bd15badb76e8d0b001ebd5d7010d Mon Sep 17 00:00:00 2001 From: "Yao, Jiewen" Date: Sun, 2 Aug 2015 04:02:37 +0000 Subject: [PATCH] Add Dual-FSP support (MemoryInitUpd/SiliconInitUpd) Add FspUpdSignatureCheck() API in FspSecPlatformLib, so that FspSecCore can check if UPD data is valid in FSP API. Add Set/GetFspMemoryInitUpdDataPointer() and Set/GetFspSiliconInitUpdDataPointer() API in FspCommonLib, so that core can set this UdpDataPointer and platform code may get UpdDataPointer easily. Add UpdateMemSiUpdInitOffsetValue function in GenCfgOpt.py tool, so that the MemoryInitUpdOffset and SiUpdInitOffset is recorded. Add missing EMBED comment in GenCfgOptUserManual.docx Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: "Yao, Jiewen" Reviewed-by: "Mudusuru, Giri P" git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18123 6f19259b-4bc3-4df7-8a09-765794883524 --- IntelFspPkg/FspSecCore/SecFsp.c | 6 +- IntelFspPkg/FspSecCore/SecFsp.h | 4 +- IntelFspPkg/Include/Library/FspCommonLib.h | 44 +++++++++ .../Include/Library/FspSecPlatformLib.h | 14 +++ IntelFspPkg/Include/Private/FspGlobalData.h | 2 + .../Library/BaseFspCommonLib/FspCommonLib.c | 85 ++++++++++++++++++ .../BaseFspPlatformLib/FspPlatformMemory.c | 23 +++-- .../PlatformSecLibNull.c | 17 ++++ IntelFspPkg/Tools/GenCfgOpt.py | 60 +++++++++++++ .../UserManuals/GenCfgOptUserManual.docx | Bin 22177 -> 24424 bytes 10 files changed, 246 insertions(+), 9 deletions(-) diff --git a/IntelFspPkg/FspSecCore/SecFsp.c b/IntelFspPkg/FspSecCore/SecFsp.c index a9aba7108e..07aed1c1c0 100644 --- a/IntelFspPkg/FspSecCore/SecFsp.c +++ b/IntelFspPkg/FspSecCore/SecFsp.c @@ -265,7 +265,7 @@ FspApiCallingCheck ( // if ((UINT32)FspData != 0xFFFFFFFF) { Status = EFI_UNSUPPORTED; - } else if ((FspRtBuffer == NULL) || ((FspRtBuffer->BootLoaderTolumSize % EFI_PAGE_SIZE) != 0)) { + } else if ((FspRtBuffer == NULL) || ((FspRtBuffer->BootLoaderTolumSize % EFI_PAGE_SIZE) != 0) || (EFI_ERROR(FspUpdSignatureCheck(ApiIdx, ApiParam)))) { Status = EFI_INVALID_PARAMETER; } } else if (ApiIdx == 2) { @@ -285,7 +285,7 @@ FspApiCallingCheck ( // if ((UINT32)FspData != 0xFFFFFFFF) { Status = EFI_UNSUPPORTED; - } else if ((FspRtBuffer == NULL) || ((FspRtBuffer->BootLoaderTolumSize % EFI_PAGE_SIZE) != 0)) { + } else if ((FspRtBuffer == NULL) || ((FspRtBuffer->BootLoaderTolumSize % EFI_PAGE_SIZE) != 0) || (EFI_ERROR(FspUpdSignatureCheck(ApiIdx, ApiParam)))) { Status = EFI_INVALID_PARAMETER; } } else if (ApiIdx == 4) { @@ -308,6 +308,8 @@ FspApiCallingCheck ( } else { if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) { Status = EFI_UNSUPPORTED; + } else if (EFI_ERROR(FspUpdSignatureCheck(ApiIdx, ApiParam))) { + Status = EFI_INVALID_PARAMETER; } } } else { diff --git a/IntelFspPkg/FspSecCore/SecFsp.h b/IntelFspPkg/FspSecCore/SecFsp.h index 3e4e2a4b5c..4dceebc31b 100644 --- a/IntelFspPkg/FspSecCore/SecFsp.h +++ b/IntelFspPkg/FspSecCore/SecFsp.h @@ -15,14 +15,14 @@ #define _SEC_FSPE_H_ #include +#include #include #include #include #include #include #include - -#include +#include #define FSP_MCUD_SIGNATURE SIGNATURE_32 ('M', 'C', 'U', 'D') #define FSP_PER0_SIGNATURE SIGNATURE_32 ('P', 'E', 'R', '0') diff --git a/IntelFspPkg/Include/Library/FspCommonLib.h b/IntelFspPkg/Include/Library/FspCommonLib.h index eddebba1ea..fa2f81c088 100644 --- a/IntelFspPkg/Include/Library/FspCommonLib.h +++ b/IntelFspPkg/Include/Library/FspCommonLib.h @@ -157,6 +157,50 @@ GetFspUpdDataPointer ( VOID ); +/** + This function sets the memory init UPD data pointer. + + @param[in] MemoryInitUpdPtr memory init UPD data pointer. +**/ +VOID +EFIAPI +SetFspMemoryInitUpdDataPointer ( + IN VOID *MemoryInitUpdPtr + ); + +/** + This function gets the memory init UPD data pointer. + + @return memory init UPD data pointer. +**/ +VOID * +EFIAPI +GetFspMemoryInitUpdDataPointer ( + VOID + ); + +/** + This function sets the silicon init UPD data pointer. + + @param[in] SiliconInitUpdPtr silicon init UPD data pointer. +**/ +VOID +EFIAPI +SetFspSiliconInitUpdDataPointer ( + IN VOID *SiliconInitUpdPtr + ); + +/** + This function gets the silicon init UPD data pointer. + + @return silicon init UPD data pointer. +**/ +VOID * +EFIAPI +GetFspSiliconInitUpdDataPointer ( + VOID + ); + /** Set FSP measurement point timestamp. diff --git a/IntelFspPkg/Include/Library/FspSecPlatformLib.h b/IntelFspPkg/Include/Library/FspSecPlatformLib.h index c6ed43001d..d5c7e77930 100644 --- a/IntelFspPkg/Include/Library/FspSecPlatformLib.h +++ b/IntelFspPkg/Include/Library/FspSecPlatformLib.h @@ -71,4 +71,18 @@ SecCarInit ( IN FSP_TEMP_RAM_INIT_PARAMS *TempRamInitParamPtr ); +/** + This function check the signture of UPD. + + @param[in] ApiIdx Internal index of the FSP API. + @param[in] ApiParam Parameter of the FSP API. + +**/ +EFI_STATUS +EFIAPI +FspUpdSignatureCheck ( + IN UINT32 ApiIdx, + IN VOID *ApiParam + ); + #endif diff --git a/IntelFspPkg/Include/Private/FspGlobalData.h b/IntelFspPkg/Include/Private/FspGlobalData.h index f50255fa7f..be33e89c17 100644 --- a/IntelFspPkg/Include/Private/FspGlobalData.h +++ b/IntelFspPkg/Include/Private/FspGlobalData.h @@ -34,6 +34,8 @@ typedef struct { FSP_PLAT_DATA PlatformData; FSP_INFO_HEADER *FspInfoHeader; VOID *UpdDataRgnPtr; + VOID *MemoryInitUpdPtr; + VOID *SiliconInitUpdPtr; UINT8 ApiMode; UINT8 Reserved[3]; UINT32 PerfIdx; diff --git a/IntelFspPkg/Library/BaseFspCommonLib/FspCommonLib.c b/IntelFspPkg/Library/BaseFspCommonLib/FspCommonLib.c index 7de84a0a7e..a31d16bb70 100644 --- a/IntelFspPkg/Library/BaseFspCommonLib/FspCommonLib.c +++ b/IntelFspPkg/Library/BaseFspCommonLib/FspCommonLib.c @@ -289,6 +289,91 @@ GetFspUpdDataPointer ( return FspData->UpdDataRgnPtr; } + +/** + This function sets the memory init UPD data pointer. + + @param[in] MemoryInitUpdPtr memory init UPD data pointer. +**/ +VOID +EFIAPI +SetFspMemoryInitUpdDataPointer ( + IN VOID *MemoryInitUpdPtr + ) +{ + FSP_GLOBAL_DATA *FspData; + + // + // Get the Fsp Global Data Pointer + // + FspData = GetFspGlobalDataPointer (); + + // + // Set the memory init UPD pointer. + // + FspData->MemoryInitUpdPtr = MemoryInitUpdPtr; +} + +/** + This function gets the memory init UPD data pointer. + + @return memory init UPD data pointer. +**/ +VOID * +EFIAPI +GetFspMemoryInitUpdDataPointer ( + VOID + ) +{ + FSP_GLOBAL_DATA *FspData; + + FspData = GetFspGlobalDataPointer (); + return FspData->MemoryInitUpdPtr; +} + + +/** + This function sets the silicon init UPD data pointer. + + @param[in] SiliconInitUpdPtr silicon init UPD data pointer. +**/ +VOID +EFIAPI +SetFspSiliconInitUpdDataPointer ( + IN VOID *SiliconInitUpdPtr + ) +{ + FSP_GLOBAL_DATA *FspData; + + // + // Get the Fsp Global Data Pointer + // + FspData = GetFspGlobalDataPointer (); + + // + // Set the silicon init UPD data pointer. + // + FspData->SiliconInitUpdPtr = SiliconInitUpdPtr; +} + +/** + This function gets the silicon init UPD data pointer. + + @return silicon init UPD data pointer. +**/ +VOID * +EFIAPI +GetFspSiliconInitUpdDataPointer ( + VOID + ) +{ + FSP_GLOBAL_DATA *FspData; + + FspData = GetFspGlobalDataPointer (); + return FspData->SiliconInitUpdPtr; +} + + /** Set FSP measurement point timestamp. diff --git a/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c b/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c index 97cae9ad9d..ed5db933f1 100644 --- a/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c +++ b/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c @@ -86,7 +86,9 @@ FspMigrateTemporaryMemory ( FSP_INIT_PARAMS *FspInitParams; UINT32 *NewStackTop; VOID *BootLoaderTempRamHob; - VOID *UpdDataRgnPtr; + UINT32 UpdDataRgnPtr; + UINT32 MemoryInitUpdPtr; + UINT32 SiliconInitUpdPtr; VOID *PlatformDataPtr; UINT8 ApiMode; @@ -105,7 +107,7 @@ FspMigrateTemporaryMemory ( if (ApiMode == 0) { BootLoaderTempRamHob = BuildGuidHob (&gFspBootLoaderTemporaryMemoryGuid, BootLoaderTempRamSize); } else { - BootLoaderTempRamHob = (VOID *)AllocatePool (BootLoaderTempRamSize); + BootLoaderTempRamHob = (VOID *)AllocatePages (EFI_SIZE_TO_PAGES (BootLoaderTempRamSize)); } ASSERT(BootLoaderTempRamHob != NULL); @@ -150,9 +152,20 @@ FspMigrateTemporaryMemory ( // // Update UPD pointer in FSP Global Data // - UpdDataRgnPtr = ((FSP_INIT_RT_COMMON_BUFFER *)FspInitParams->RtBufferPtr)->UpdDataRgnPtr; - if (UpdDataRgnPtr != NULL) { - SetFspUpdDataPointer (UpdDataRgnPtr); + if (ApiMode == 0) { + UpdDataRgnPtr = (UINT32)((UINT32 *)GetFspUpdDataPointer ()); + if (UpdDataRgnPtr >= BootLoaderTempRamStart && UpdDataRgnPtr < BootLoaderTempRamEnd) { + MemoryInitUpdPtr = (UINT32)((UINT32 *)GetFspMemoryInitUpdDataPointer ()); + SiliconInitUpdPtr = (UINT32)((UINT32 *)GetFspSiliconInitUpdDataPointer ()); + SetFspUpdDataPointer ((VOID *)(UpdDataRgnPtr + OffsetGap)); + SetFspMemoryInitUpdDataPointer ((VOID *)(MemoryInitUpdPtr + OffsetGap)); + SetFspSiliconInitUpdDataPointer ((VOID *)(SiliconInitUpdPtr + OffsetGap)); + } + } else { + MemoryInitUpdPtr = (UINT32)((UINT32 *)GetFspMemoryInitUpdDataPointer ()); + if (MemoryInitUpdPtr >= BootLoaderTempRamStart && MemoryInitUpdPtr < BootLoaderTempRamEnd) { + SetFspMemoryInitUpdDataPointer ((VOID *)(MemoryInitUpdPtr + OffsetGap)); + } } // diff --git a/IntelFspPkg/Library/SecFspSecPlatformLibNull/PlatformSecLibNull.c b/IntelFspPkg/Library/SecFspSecPlatformLibNull/PlatformSecLibNull.c index 4de2a1d755..d72d05f2e2 100644 --- a/IntelFspPkg/Library/SecFspSecPlatformLibNull/PlatformSecLibNull.c +++ b/IntelFspPkg/Library/SecFspSecPlatformLibNull/PlatformSecLibNull.c @@ -14,4 +14,21 @@ #include +/** + This function check the signture of UPD. + + @param[in] ApiIdx Internal index of the FSP API. + @param[in] ApiParam Parameter of the FSP API. + +**/ +EFI_STATUS +EFIAPI +FspUpdSignatureCheck ( + IN UINT32 ApiIdx, + IN VOID *ApiParam + ) +{ + return EFI_SUCCESS; +} + diff --git a/IntelFspPkg/Tools/GenCfgOpt.py b/IntelFspPkg/Tools/GenCfgOpt.py index 77eaf6481f..a38da70212 100644 --- a/IntelFspPkg/Tools/GenCfgOpt.py +++ b/IntelFspPkg/Tools/GenCfgOpt.py @@ -88,6 +88,48 @@ are permitted provided that the following conditions are met: **/ """ +def UpdateMemSiUpdInitOffsetValue (DscFile): + DscFd = open(DscFile, "r") + DscLines = DscFd.readlines() + DscFd.close() + + DscContent = [] + MemUpdInitOffset = 0 + SiUpdInitOffset = 0 + MemUpdInitOffsetValue = 0 + SiUpdInitOffsetValue = 0 + + while len(DscLines): + DscLine = DscLines.pop(0) + DscContent.append(DscLine) + DscLine = DscLine.strip() + Match = re.match("^([_a-zA-Z0-9]+).(MemoryInitUpdOffset)\s*\|\s*(0x[0-9A-F]+)\s*\|\s*(\d+|0x[0-9a-fA-F]+)\s*\|\s*(.+)",DscLine) + if Match: + MemUpdInitOffsetValue = int(Match.group(5), 0) + Match = re.match("^\s*([_a-zA-Z0-9]+).(SiliconInitUpdOffset)\s*\|\s*(0x[0-9A-F]+)\s*\|\s*(\d+|0x[0-9a-fA-F]+)\s*\|\s*(.+)",DscLine) + if Match: + SiUpdInitOffsetValue = int(Match.group(5), 0) + Match = re.match("^([_a-zA-Z0-9]+).([_a-zA-Z0-9]+)\s*\|\s*(0x[0-9A-F]+)\s*\|\s*(\d+|0x[0-9a-fA-F]+)\s*\|\s*(0x244450554D454D24)",DscLine) + if Match: + MemUpdInitOffset = int(Match.group(3), 0) + Match = re.match("^([_a-zA-Z0-9]+).([_a-zA-Z0-9]+)\s*\|\s*(0x[0-9A-F]+)\s*\|\s*(\d+|0x[0-9a-fA-F]+)\s*\|\s*(0x244450555F495324)",DscLine) + if Match: + SiUpdInitOffset = int(Match.group(3), 0) + + if MemUpdInitOffsetValue != MemUpdInitOffset or SiUpdInitOffsetValue != SiUpdInitOffset: + MemUpdInitOffsetStr = "0x%08X" % MemUpdInitOffset + SiUpdInitOffsetStr = "0x%08X" % SiUpdInitOffset + DscFd = open(DscFile,"w") + for DscLine in DscContent: + Match = re.match("^\s*([_a-zA-Z0-9]+).(MemoryInitUpdOffset)\s*\|\s*(0x[0-9A-F]+)\s*\|\s*(\d+|0x[0-9a-fA-F]+)\s*\|\s*(.+)",DscLine) + if Match: + DscLine = re.sub(r'(?:[^\s]+\s*$)', MemUpdInitOffsetStr + '\n', DscLine) + Match = re.match("^\s*([_a-zA-Z0-9]+).(SiliconInitUpdOffset)\s*\|\s*(0x[0-9A-F]+)\s*\|\s*(\d+|0x[0-9a-fA-F]+)\s*\|\s*(.+)",DscLine) + if Match: + DscLine = re.sub(r'(?:[^\s]+\s*$)', SiUpdInitOffsetStr + '\n', line) + DscFd.writelines(DscLine) + DscFd.close() + class CLogicalExpression: def __init__(self): self.index = 0 @@ -889,6 +931,22 @@ EndList return 256 TxtBody = [] + for Item in self._CfgItemList: + if str(Item['cname']) == 'Signature' and Item['length'] == 8: + Value = int(Item['value'], 16) + Chars = [] + while Value != 0x0: + Chars.append(chr(Value & 0xFF)) + Value = Value >> 8 + SignatureStr = ''.join(Chars) + if int(Item['offset']) == 0: + TxtBody.append("#define FSP_UPD_SIGNATURE %s /* '%s' */\n" % (Item['value'], SignatureStr)) + elif 'MEM' in SignatureStr: + TxtBody.append("#define FSP_MEMORY_INIT_UPD_SIGNATURE %s /* '%s' */\n" % (Item['value'], SignatureStr)) + else: + TxtBody.append("#define FSP_SILICON_INIT_UPD_SIGNATURE %s /* '%s' */\n" % (Item['value'], SignatureStr)) + TxtBody.append("\n") + for Region in ['UPD', 'VPD']: # Write PcdVpdRegionSign and PcdImageRevision @@ -1176,6 +1234,8 @@ def Main(): print "ERROR: Cannot open DSC file '%s' !" % DscFile return 2 + UpdateMemSiUpdInitOffsetValue(DscFile) + OutFile = '' if argc > 4: if sys.argv[4][0] == '-': diff --git a/IntelFspPkg/Tools/UserManuals/GenCfgOptUserManual.docx b/IntelFspPkg/Tools/UserManuals/GenCfgOptUserManual.docx index e4da8e057b763ddce5c4429b4a27bb7bf66f20a2..1cbc459eba96d17de31188f409bea2a40be2f2a2 100644 GIT binary patch delta 18802 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 Lz(Tq#8pHztu=aOS delta 16919 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�ZwF*;r4ssdX6gZGX>x>Gwcb3#_GffjAsgcH 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