From: "Steele, Kelly" <kelly.steele@intel.com>
To: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Wei, David" <david.wei@intel.com>, "Guo, Mang" <mang.guo@intel.com>
Subject: [PATCH] [edk2-platforms/devel-IntelAtomProcessorE3900] Connect EEPROM code in
Date: Wed, 3 Oct 2018 22:30:19 +0000 [thread overview]
Message-ID: <E6EF8131FBAF5A44BF17D9E2B45E20755FBF3A1F@ORSMSX114.amr.corp.intel.com> (raw)
>From affe36b5766578161cc39faaed40ad2366e2325c Mon Sep 17 00:00:00 2001
From: Kelly Steele <kelly.steele@intel.com>
Date: Wed, 3 Oct 2018 14:34:47 -0700
Subject: [PATCH] [edk2-platforms/devel-IntelAtomProcessorE3900] Connect EEPROM
code in
Connected the EEPROM code into the flow of the Minnowboard 3 Module code.
This required increasing the size of the IBBR & IBBM. This means that
new SpiChunks will need to be generated before you can use the simple
IFWI stitch method. The EEPROM code feature is currently turned off via
the defines.dsc define, EEPROM_CODE_ENABLE.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Kelly Steele <kelly.steele@intel.com>
---
.../BoardInitPostMem/BoardInit.c | 14 +
.../BoardInitPostMem/BoardInitPostMem.inf | 3 +
.../BoardInitPreMem/BoardInitMiscs.c | 278 ++--
.../BoardInitPreMem/BoardInitMiscs.h | 4 +-
.../BoardInitPreMem/BoardInitPreMem.inf | 5 +-
.../BoardInitPreMem/PlatformId.c | 7 +
.../Board/MinnowBoard3Module/Eeprom/EepromStruct.h | 1 -
.../MinnowBoard3Module/Eeprom/GenerateBinary.py | 19 +-
.../MinnowBoard3Module/Eeprom/Logo/Tianocore.bmp | Bin 0 -> 11958 bytes
.../Board/MinnowBoard3Module/Eeprom/MB3-Eeprom.bin | Bin 32688 -> 26880 bytes
.../Board/MinnowBoard3Module/Eeprom/MB3-Prj.cfg | 1663 +++++++++-----------
.../Eeprom/Memory/DramPolicyPpi.bin | Bin 0 -> 223 bytes
.../Eeprom/Memory/GenerateDramPolicyBinary.py | 64 +
.../{Vbt_bxt_t_TianmaMipi.bin => VbtBxtMipi.bin} | Bin 6656 -> 5632 bytes
.../Eeprom/VBT/Vbt_bxt_t_fab_b.bin | Bin 7168 -> 0 bytes
.../Eeprom/VBT/Vbt_bxt_t_fab_b_TrulyMipi_Cmd.bin | Bin 6656 -> 0 bytes
Platform/BroxtonPlatformPkg/BuildBxtBios.bat | 2 +-
Platform/BroxtonPlatformPkg/BuildIFWI.bat | 1 -
.../Common/Acpi/AcpiPlatformDxe/AcpiPlatform.c | 6 +
.../Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf | 3 +-
.../Common/Features/Eeprom/EepromApp/EepromApp.c | 20 +-
.../Common/Features/Eeprom/EepromApp/EepromApp.h | 394 ++---
.../Common/Features/Eeprom/EepromApp/EepromApp.inf | 1 +
.../Eeprom/EepromBinary/Docs/EepromLayout.txt | 23 +-
.../Common/Features/Eeprom/EepromBinary/ReadMe.txt | 5 +
.../EepromBinary/Utilities/ScrapDramPolicyPpi.py | 95 ++
.../EepromDataLib/EEPROM/EepromDataEepromLib.c | 140 +-
.../Eeprom/EepromDataLib/FV/EepromDataFvLib.c | 7 +-
.../Features/Eeprom/EepromDataLib/FV/GetImage.c | 19 +-
.../Common/Features/Eeprom/EepromLib/EepromLib.c | 476 ++++--
.../Common/Features/Eeprom/EepromLib/EepromLib.h | 32 +-
.../Common/Features/Eeprom/EepromLib/EepromLib.inf | 3 +
.../Features/Eeprom/EepromLib/EepromPeiLib.inf | 3 +
.../Features/Eeprom/EepromLib/Null/EepromNullLib.c | 16 +-
.../Eeprom/EepromLib/Pei/ValidateHashPei.c | 36 +-
.../Features/Eeprom/EepromLib/ValidateHash.c | 44 +-
.../{EepromAcpi.c => EepromPlatformDxeLib.c} | 72 +-
.../Eeprom/EepromPlatformLib/EepromPlatformLib.c | 318 ++--
.../Eeprom/EepromPlatformLib/EepromPlatformLib.inf | 7 +-
.../EepromPlatformLib/EepromPlatformNullLib.c | 95 --
.../EepromPlatformLib/EepromPlatformNullLib.inf | 13 +-
.../EepromPlatformLib/EepromPlatformPeiLib.inf | 3 +-
.../EepromPlatformLib/{ => Null}/EepromAcpiNull.c | 0
.../EepromPlatformLib/Null/EepromPlatformNullLib.c | 241 +++
.../EepromPlatformPeiLib.c} | 17 +
.../Features/Eeprom/Include/Library/EepromLib.h | 68 +-
.../Eeprom/Include/Library/EepromPlatformLib.h | 93 +-
.../Common/Features/Eeprom/ReadMe.txt | 7 +
.../PeiFspPolicyInitLib/PeiFspPolicyInitLib.inf | 1 +
.../PeiFspPolicyInitLib/PeiFspSaPolicyInitLib.c | 26 +-
.../PlatformPostMemPei/PlatformInit.c | 15 +-
.../PlatformPostMemPei/PlatformPostMemPei.inf | 1 +
.../PlatformPreMemPei/PlatformInitPreMem.c | 14 +-
.../Common/SaveMemoryConfigDxe/SaveMemoryConfig.c | 9 +-
.../SaveMemoryConfigDxe/SaveMemoryConfigDxe.inf | 3 +-
.../PlatformDsc/Components.IA32.dsc | 1 -
.../BroxtonPlatformPkg/PlatformDsc/Defines.dsc | 23 +-
.../PlatformDsc/LibraryClasses.IA32.PEI.dsc | 14 +-
.../PlatformDsc/LibraryClasses.dsc | 18 +-
.../PlatformDsc/PcdsFixedAtBuild.dsc | 2 +-
Platform/BroxtonPlatformPkg/PlatformPkg.dec | 11 +-
Platform/BroxtonPlatformPkg/PlatformPkg.fdf | 47 +-
Platform/BroxtonPlatformPkg/PlatformPkgIA32.dsc | 1 +
Platform/BroxtonPlatformPkg/PlatformPkgX64.dsc | 1 +
Platform/BroxtonPlatformPkg/PlatformPkgX64Gcc.dsc | 341 ++--
.../Cpu/ResetVector/Vtf0/Ia32/InitNEM.asm | 31 +-
66 files changed, 2883 insertions(+), 1994 deletions(-)
create mode 100644 Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Logo/Tianocore.bmp
create mode 100644 Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Memory/DramPolicyPpi.bin
create mode 100644 Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Memory/GenerateDramPolicyBinary.py
rename Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/{Vbt_bxt_t_TianmaMipi.bin => VbtBxtMipi.bin} (66%)
delete mode 100644 Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/Vbt_bxt_t_fab_b.bin
delete mode 100644 Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/Vbt_bxt_t_fab_b_TrulyMipi_Cmd.bin
create mode 100644 Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/Utilities/ScrapDramPolicyPpi.py
rename Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/{EepromAcpi.c => EepromPlatformDxeLib.c} (75%)
delete mode 100644 Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.c
rename Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/{ => Null}/EepromAcpiNull.c (100%)
create mode 100644 Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/Null/EepromPlatformNullLib.c
rename Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/{EepromAcpiPei.c => Pei/EepromPlatformPeiLib.c} (72%)
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPostMem/BoardInit.c b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPostMem/BoardInit.c
index 6d5817ab9d..b3e65bf1ce 100644
--- a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPostMem/BoardInit.c
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPostMem/BoardInit.c
@@ -18,6 +18,7 @@
#include <Library/PcdLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
+#include <Library/EepromPlatformLib.h>
#include <Guid/PlatformInfo_Aplk.h>
#include <Ppi/BoardInitSignalling.h>
#include "BoardInit.h"
@@ -56,6 +57,8 @@ MinnowBoard3ModulePostMemInitCallback (
VOID *Instance;
UINT8 BoardId;
UINT8 FabId;
+ UINT8 *HdaVerbTable;
+ UINT32 HdaVerbTableSize;
UINT8 ResetType;
UINTN BufferSize;
UINTN VariableSize;
@@ -132,6 +135,17 @@ MinnowBoard3ModulePostMemInitCallback (
PcdSetBool(PcdPciePort3Enable, SystemConfiguration.PcieRootPortEn[3]);
//
+ // HDA audio verb table
+ //
+ HdaVerbTable = NULL;
+ HdaVerbTableSize = 0;
+ Status = EepromGetHdaCodec (NULL, &HdaVerbTable, &HdaVerbTableSize);
+ if (! EFI_ERROR (Status) && (HdaVerbTableSize > 0)) {
+ PcdSet64 (PcdHdaVerbTablePtr, (UINT64) (UINTN) HdaVerbTable);
+ PcdSet8 (HdaVerbTableEntryNum, 1);
+ }
+
+ //
// Add init steps here
//
//
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPostMem/BoardInitPostMem.inf b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPostMem/BoardInitPostMem.inf
index d5b0604335..4d2b9df922 100644
--- a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPostMem/BoardInitPostMem.inf
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPostMem/BoardInitPostMem.inf
@@ -40,6 +40,7 @@
EepromPlatformLib
HeciMsgLib
HobLib
+ I2cLib
IoLib
SteppingLib
GpioLib
@@ -67,6 +68,8 @@
gPlatformModuleTokenSpaceGuid.PcdTianoCoreLogoFileGuid
gPlatformModuleTokenSpaceGuid.PcdeMMCHostMaxSpeed
gPlatformModuleTokenSpaceGuid.PcdPciePort3Enable
+ gPlatformModuleTokenSpaceGuid.PcdHdaVerbTablePtr
+ gPlatformModuleTokenSpaceGuid.HdaVerbTableEntryNum
[Guids]
gEfiPlatformInfoGuid
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitMiscs.c b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitMiscs.c
index 6cd4bdf18f..14780914e7 100644
--- a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitMiscs.c
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitMiscs.c
@@ -66,9 +66,28 @@ Mb3MUpdateFspmUpd (
SYSTEM_CONFIGURATION SystemConfiguration;
UINTN VariableSize;
EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariablePpi;
- UINT32 VidDid;
UINT32 HwconfStraps;
UINT8 MemoryType;
+ UINT8 *MemoryData;
+ UINT32 MemoryDataSize;
+ UINT16 SpdSlotFlag;
+
+ //
+ // Check for EEPROM memory data
+ //
+ MemoryData = NULL;
+ MemoryDataSize = 0;
+ SpdSlotFlag = 0;
+ Status = EepromGetMemoryData (NULL, &SpdSlotFlag, &MemoryData, &MemoryDataSize);
+ DEBUG ((DEBUG_INFO, "**** MB3 Module - EepromGetMemoryData() --> %r\n", Status));
+ if (EFI_ERROR (Status) || (MemoryDataSize < sizeof (DRAM_POLICY_PPI)) || (SpdSlotFlag != 0x000F)) {
+ //
+ // Didn't find valid memory data. Clear the pointers.
+ //
+ MemoryData = NULL;
+ MemoryDataSize = 0;
+ SpdSlotFlag = 0;
+ }
Status = (*PeiServices)->LocatePpi (
PeiServices,
@@ -77,8 +96,64 @@ Mb3MUpdateFspmUpd (
NULL,
(VOID **) &DramPolicy
);
-
if (EFI_ERROR (Status)) {
+ DramPolicy = NULL;
+ } else {
+ if (((VOID *) (UINT32) DramPolicy->MrcTrainingDataPtr != 0) &&
+ ((VOID *) (UINT32) DramPolicy->MrcBootDataPtr != 0)) {
+ DEBUG ((DEBUG_INFO, "%a() - NvsBufferPtr\n", __FUNCTION__));
+ MrcNvData = (MRC_PARAMS_SAVE_RESTORE *) AllocateZeroPool (sizeof (MRC_PARAMS_SAVE_RESTORE));
+ BootVariableNvData = (BOOT_VARIABLE_NV_DATA *) AllocateZeroPool (sizeof (BOOT_VARIABLE_NV_DATA));
+
+ MrcParamsHob = (MRC_PARAMS_SAVE_RESTORE *) ((UINT32) DramPolicy->MrcTrainingDataPtr);
+ BootVariableNvDataHob = (BOOT_VARIABLE_NV_DATA *) ((UINT32) DramPolicy->MrcBootDataPtr);
+
+ CopyMem (MrcNvData, MrcParamsHob, sizeof (MRC_PARAMS_SAVE_RESTORE));
+ CopyMem (BootVariableNvData, BootVariableNvDataHob, sizeof (BOOT_VARIABLE_NV_DATA));
+ FspUpdRgn->FspmArchUpd.NvsBufferPtr = (VOID *) (UINT32) MrcNvData;
+ FspUpdRgn->FspmConfig.VariableNvsBufferPtr = (VOID *) (UINT32) BootVariableNvData;
+ }
+ }
+
+ //
+ // Overrides for MinnowBoard3Module from Platfrom4 profile
+ //
+ // Description | DualRank | RankEnable | DeviceWidth | DramDenisty | SoC | Channel
+ // ================|==========|============|=============|=============|=======|=========
+ // MT53B256M32D1 | 0x01 | 0x01 | 0x01 x16 | 0x02 8Gb | E3930 | Ch0
+ // MT53B512M32D2 | 0x01 | 0x03 | 0x01 x16 | 0x02 8Gb | E3950 | Ch0&1
+ // MT53B1024M32D4 | 0x01 | 0x03 | 0x00 x8 | 0x04 16Gb | |
+ //
+
+ //
+ // Get HWCONF straps
+ //
+ HwconfStraps = Minnow3ModuleGetHwconfStraps ();
+ DEBUG ((DEBUG_INFO, "**** MB3 Module - HWCONF straps = 0x%08X\n", HwconfStraps));
+
+ //
+ // Translate into Memory Type
+ //
+ MemoryType = (UINT8) ((HwconfStraps & MB3M_HWCONF_MEMORY_MASK) >> MB3M_HWCONF_MEMORY);
+ if (MemoryType == 0) {
+ DEBUG ((DEBUG_INFO, "**** MB3 Module - SPD based memory init requested, but converted into Memory Profile type #4!\n"));
+ MemoryType = 4; // LPDDR4 16Gbit 4 channels
+ }
+ if (MemoryType == 5) {
+ if (MemoryData == NULL) {
+ DEBUG ((DEBUG_INFO, "**** MB3 Module - EEPROM based memory init requested, but converted into Memory Profile type #4!\n"));
+ MemoryType = 4; // LPDDR4 16Gbit 4 channels
+ } else {
+ DEBUG ((DEBUG_INFO, "**** MB3 Module - EEPROM based memory init requested and being used.\n"));
+ DramPolicy = (DRAM_POLICY_PPI *) MemoryData;
+ }
+ }
+ MemoryType--; // Zero base it for use as index into array
+
+ if (DramPolicy == NULL) {
+ //
+ // Status is still valid from LocatePpi(gDramPolicyPpiGuid)
+ //
DEBUG ((DEBUG_INFO, "%a() - LocatePpi(gDramPolicyPpiGuid) returned %r\n", __FUNCTION__, Status));
} else {
FspUpdRgn->FspmConfig.Package = DramPolicy->Package;
@@ -107,23 +182,8 @@ Mb3MUpdateFspmUpd (
FspUpdRgn->FspmConfig.MinRefRate2xEnable = DramPolicy->MinRefRate2xEnabled;
FspUpdRgn->FspmConfig.DualRankSupportEnable = DramPolicy->DualRankSupportEnabled;
- CopyMem (&(FspUpdRgn->FspmConfig.Ch0_RankEnable), &DramPolicy->ChDrp, sizeof(DramPolicy->ChDrp));
+ CopyMem (&(FspUpdRgn->FspmConfig.Ch0_RankEnable), &DramPolicy->ChDrp, sizeof (DramPolicy->ChDrp));
CopyMem (&(FspUpdRgn->FspmConfig.Ch0_Bit_swizzling), &DramPolicy->ChSwizzle, sizeof (DramPolicy->ChSwizzle));
-
- if (((VOID *)(UINT32)DramPolicy->MrcTrainingDataPtr != 0) &&
- ((VOID *)(UINT32)DramPolicy->MrcBootDataPtr != 0)) {
- DEBUG ((DEBUG_INFO, "%a() - NvsBufferPtr\n", __FUNCTION__));
- MrcNvData = (MRC_PARAMS_SAVE_RESTORE *) AllocateZeroPool (sizeof (MRC_PARAMS_SAVE_RESTORE));
- BootVariableNvData = (BOOT_VARIABLE_NV_DATA *) AllocateZeroPool (sizeof (BOOT_VARIABLE_NV_DATA));
-
- MrcParamsHob = (MRC_PARAMS_SAVE_RESTORE*)((UINT32)DramPolicy->MrcTrainingDataPtr);
- BootVariableNvDataHob = (BOOT_VARIABLE_NV_DATA*)((UINT32)DramPolicy->MrcBootDataPtr);
-
- CopyMem(MrcNvData, MrcParamsHob, sizeof (MRC_PARAMS_SAVE_RESTORE));
- CopyMem(BootVariableNvData, BootVariableNvDataHob, sizeof (BOOT_VARIABLE_NV_DATA));
- FspUpdRgn->FspmArchUpd.NvsBufferPtr = (VOID *)(UINT32)MrcNvData;
- FspUpdRgn->FspmConfig.VariableNvsBufferPtr = (VOID *)(UINT32)BootVariableNvData;
- }
}
DEBUG ((DEBUG_INFO, "%a() - gEfiPlatformInfoGuid\n", __FUNCTION__));
@@ -131,109 +191,100 @@ Mb3MUpdateFspmUpd (
ASSERT (Hob.Raw != NULL);
PlatformInfo = GET_GUID_HOB_DATA (Hob.Raw);
- //
- // Get IGD VID/DID
- //
- VidDid = MmioRead32 (MmPciBase (SA_IGD_BUS, SA_IGD_DEV, SA_IGD_FUN_0) + R_SA_IGD_VID);
- if (VidDid == 0x5A848086) {
+ if (MemoryType != 4) {
//
- // E3950 path
+ // Common items
//
- DEBUG ((DEBUG_INFO, "**** MB3 Module - E3950 detected!\n"));
- } else if (VidDid == 0x5A858086) {
+ FspUpdRgn->FspmConfig.Package = 0x01;
+ FspUpdRgn->FspmConfig.Profile = 0x09; // LPDDR4_1600_14_15_15
+ //FspUpdRgn->FspmConfig.Profile = 0x0B; // LPDDR4_2400_24_22_22
+ FspUpdRgn->FspmConfig.MemoryDown = 0x01;
+ FspUpdRgn->FspmConfig.DualRankSupportEnable = 0x01;
+
//
- // E3930 path
+ // Memory Type specific items
//
- DEBUG ((DEBUG_INFO, "**** MB3 Module - E3930 detected!\n"));
- }
-
- //
- // Overrides for MinnowBoard3Module from Platfrom4 profile
- //
- // Description | DualRank | RankEnable | DeviceWidth | DramDenisty | SoC | Channel
- // ================|==========|============|=============|=============|=======|=========
- // MT53B256M32D1 | 0x01 | 0x01 | 0x01 x16 | 0x02 8Gb | E3930 | Ch0
- // MT53B512M32D2 | 0x01 | 0x03 | 0x01 x16 | 0x02 8Gb | E3950 | Ch0&1
- // MT53B1024M32D4 | 0x01 | 0x03 | 0x00 x8 | 0x04 16Gb | |
- //
-
- //
- // Get HWCONF straps
- //
- HwconfStraps = Minnow3ModuleGetHwconfStraps ();
- DEBUG ((DEBUG_INFO, "**** MB3 Module - HWCONF straps = 0x%08X\n", HwconfStraps));
-
- //
- // Translate into Memory Type
- //
- MemoryType = (UINT8) ((HwconfStraps & MB3M_HWCONF_MEMORY_MASK) >> MB3M_HWCONF_MEMORY);
- if (MemoryType == 0) {
- DEBUG ((DEBUG_INFO, "**** MB3 Module - SPD based memory init requested, but converted into Memory Profile type #4!\n"));
- MemoryType = 4; // LPDDR4 16Gbit 4 channels
- }
- if (MemoryType == 5) {
- DEBUG ((DEBUG_INFO, "**** MB3 Module - EEPROM based memory init requested, but converted into Memory Profile type #4!\n"));
- MemoryType = 4; // LPDDR4 16Gbit 4 channels
- }
- MemoryType--; // Zero base it for use as index into array
-
- //
- // Common items
- //
- FspUpdRgn->FspmConfig.Package = 0x01;
- FspUpdRgn->FspmConfig.Profile = 0x09; // LPDDR4_1600_14_15_15
-// FspUpdRgn->FspmConfig.Profile = 0x0B; // LPDDR4_2400_24_22_22
- FspUpdRgn->FspmConfig.MemoryDown = 0x01;
- FspUpdRgn->FspmConfig.DualRankSupportEnable = 0x01;
+ if (MemoryType < (sizeof (gMB3MChannelInfo) / sizeof (gMB3MChannelInfo[0]))) {
+ DEBUG ((DEBUG_INFO, "**** MB3 Module - %a detected!\n", gMB3MChannelInfo[MemoryType].DescString));
+
+ // DDR0CH0
+ FspUpdRgn->FspmConfig.Ch0_RankEnable = gMB3MChannelInfo[MemoryType].RankEnable[0];
+ FspUpdRgn->FspmConfig.Ch0_DeviceWidth = gMB3MChannelInfo[MemoryType].DeviceWidth[0];
+ FspUpdRgn->FspmConfig.Ch0_DramDensity = gMB3MChannelInfo[MemoryType].DramDensity[0];
+ FspUpdRgn->FspmConfig.Ch0_Option = gMB3MChannelInfo[MemoryType].Option[0];
+
+ // DDR0CH1
+ FspUpdRgn->FspmConfig.Ch1_RankEnable = gMB3MChannelInfo[MemoryType].RankEnable[1];
+ FspUpdRgn->FspmConfig.Ch1_DeviceWidth = gMB3MChannelInfo[MemoryType].DeviceWidth[1];
+ FspUpdRgn->FspmConfig.Ch1_DramDensity = gMB3MChannelInfo[MemoryType].DramDensity[1];
+ FspUpdRgn->FspmConfig.Ch1_Option = gMB3MChannelInfo[MemoryType].Option[1];
+
+ // DDR1CH0
+ FspUpdRgn->FspmConfig.Ch2_RankEnable = gMB3MChannelInfo[MemoryType].RankEnable[2];
+ FspUpdRgn->FspmConfig.Ch2_DeviceWidth = gMB3MChannelInfo[MemoryType].DeviceWidth[2];
+ FspUpdRgn->FspmConfig.Ch2_DramDensity = gMB3MChannelInfo[MemoryType].DramDensity[2];
+ FspUpdRgn->FspmConfig.Ch2_Option = gMB3MChannelInfo[MemoryType].Option[2];
+
+ // DDR1CH1
+ FspUpdRgn->FspmConfig.Ch3_RankEnable = gMB3MChannelInfo[MemoryType].RankEnable[3];
+ FspUpdRgn->FspmConfig.Ch3_DeviceWidth = gMB3MChannelInfo[MemoryType].DeviceWidth[3];
+ FspUpdRgn->FspmConfig.Ch3_DramDensity = gMB3MChannelInfo[MemoryType].DramDensity[3];
+ FspUpdRgn->FspmConfig.Ch3_Option = gMB3MChannelInfo[MemoryType].Option[3];
+ } else {
+ DEBUG ((DEBUG_INFO, "**** MB3 Module - Memory Type 0x%02X is out of range!\n", MemoryType));
+ }
- //
- // Memory Type specific items
- //
- if (MemoryType < (sizeof (gMB3MChannelInfo) / sizeof (gMB3MChannelInfo[0]))) {
- DEBUG ((DEBUG_INFO, "**** MB3 Module - %a detected!\n", gMB3MChannelInfo[MemoryType].DescString));
-
- // DDR0CH0
- FspUpdRgn->FspmConfig.Ch0_RankEnable = gMB3MChannelInfo[MemoryType].RankEnable[0];
- FspUpdRgn->FspmConfig.Ch0_DeviceWidth = gMB3MChannelInfo[MemoryType].DeviceWidth[0];
- FspUpdRgn->FspmConfig.Ch0_DramDensity = gMB3MChannelInfo[MemoryType].DramDensity[0];
- FspUpdRgn->FspmConfig.Ch0_Option = gMB3MChannelInfo[MemoryType].Option[0];
-
- // DDR0CH1
- FspUpdRgn->FspmConfig.Ch1_RankEnable = gMB3MChannelInfo[MemoryType].RankEnable[1];
- FspUpdRgn->FspmConfig.Ch1_DeviceWidth = gMB3MChannelInfo[MemoryType].DeviceWidth[1];
- FspUpdRgn->FspmConfig.Ch1_DramDensity = gMB3MChannelInfo[MemoryType].DramDensity[1];
- FspUpdRgn->FspmConfig.Ch1_Option = gMB3MChannelInfo[MemoryType].Option[1];
-
- // DDR1CH0
- FspUpdRgn->FspmConfig.Ch2_RankEnable = gMB3MChannelInfo[MemoryType].RankEnable[2];
- FspUpdRgn->FspmConfig.Ch2_DeviceWidth = gMB3MChannelInfo[MemoryType].DeviceWidth[2];
- FspUpdRgn->FspmConfig.Ch2_DramDensity = gMB3MChannelInfo[MemoryType].DramDensity[2];
- FspUpdRgn->FspmConfig.Ch2_Option = gMB3MChannelInfo[MemoryType].Option[2];
-
- // DDR1CH1
- FspUpdRgn->FspmConfig.Ch3_RankEnable = gMB3MChannelInfo[MemoryType].RankEnable[3];
- FspUpdRgn->FspmConfig.Ch3_DeviceWidth = gMB3MChannelInfo[MemoryType].DeviceWidth[3];
- FspUpdRgn->FspmConfig.Ch3_DramDensity = gMB3MChannelInfo[MemoryType].DramDensity[3];
- FspUpdRgn->FspmConfig.Ch3_Option = gMB3MChannelInfo[MemoryType].Option[3];
- } else {
- DEBUG ((DEBUG_INFO, "**** MB3 Module - Memory Type 0x%02X is out of range!\n", MemoryType));
+ //
+ // Swizzling
+ //
+ if ((PcdGet8 (PcdFabId) == FAB_ID_A) && (ChSwizzle_MB3Ma != NULL)) {
+ CopyMem (&(FspUpdRgn->FspmConfig.Ch0_Bit_swizzling), ChSwizzle_MB3Ma[0], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
+ CopyMem (&(FspUpdRgn->FspmConfig.Ch1_Bit_swizzling), ChSwizzle_MB3Ma[1], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
+ CopyMem (&(FspUpdRgn->FspmConfig.Ch2_Bit_swizzling), ChSwizzle_MB3Ma[2], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
+ CopyMem (&(FspUpdRgn->FspmConfig.Ch3_Bit_swizzling), ChSwizzle_MB3Ma[3], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
+ }
+ if ((PcdGet8 (PcdFabId) == FAB_ID_C) && (ChSwizzle_MB3Mc != NULL)) {
+ CopyMem (&(FspUpdRgn->FspmConfig.Ch0_Bit_swizzling), ChSwizzle_MB3Mc[0], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
+ CopyMem (&(FspUpdRgn->FspmConfig.Ch1_Bit_swizzling), ChSwizzle_MB3Mc[1], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
+ CopyMem (&(FspUpdRgn->FspmConfig.Ch2_Bit_swizzling), ChSwizzle_MB3Mc[2], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
+ CopyMem (&(FspUpdRgn->FspmConfig.Ch3_Bit_swizzling), ChSwizzle_MB3Mc[3], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
+ }
}
//
- // Swizzling
+ // Update DramPolicy and then dump it so it can be copied into the EEPROM image
//
- if ((PcdGet8 (PcdFabId) == FAB_ID_A) && (ChSwizzle_MB3Ma != NULL)) {
- CopyMem (&(FspUpdRgn->FspmConfig.Ch0_Bit_swizzling), ChSwizzle_MB3Ma[0], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
- CopyMem (&(FspUpdRgn->FspmConfig.Ch1_Bit_swizzling), ChSwizzle_MB3Ma[1], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
- CopyMem (&(FspUpdRgn->FspmConfig.Ch2_Bit_swizzling), ChSwizzle_MB3Ma[2], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
- CopyMem (&(FspUpdRgn->FspmConfig.Ch3_Bit_swizzling), ChSwizzle_MB3Ma[3], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
- }
- if ((PcdGet8 (PcdFabId) == FAB_ID_C) && (ChSwizzle_MB3Mc != NULL)) {
- CopyMem (&(FspUpdRgn->FspmConfig.Ch0_Bit_swizzling), ChSwizzle_MB3Mc[0], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
- CopyMem (&(FspUpdRgn->FspmConfig.Ch1_Bit_swizzling), ChSwizzle_MB3Mc[1], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
- CopyMem (&(FspUpdRgn->FspmConfig.Ch2_Bit_swizzling), ChSwizzle_MB3Mc[2], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
- CopyMem (&(FspUpdRgn->FspmConfig.Ch3_Bit_swizzling), ChSwizzle_MB3Mc[3], DRAM_POLICY_NUMBER_BITS * sizeof (UINT8));
- }
+ DramPolicy->Package = FspUpdRgn->FspmConfig.Package;
+ DramPolicy->Profile = FspUpdRgn->FspmConfig.Profile;
+ DramPolicy->MemoryDown = FspUpdRgn->FspmConfig.MemoryDown;
+ DramPolicy->DDR3LPageSize = FspUpdRgn->FspmConfig.DDR3LPageSize;
+ DramPolicy->DDR3LASR = FspUpdRgn->FspmConfig.DDR3LASR;
+ DramPolicy->SystemMemorySizeLimit = FspUpdRgn->FspmConfig.MemorySizeLimit;
+ DramPolicy->SpdAddress[0] = FspUpdRgn->FspmConfig.DIMM0SPDAddress;
+ DramPolicy->SpdAddress[1] = FspUpdRgn->FspmConfig.DIMM1SPDAddress;
+ DramPolicy->DDR3LPageSize = FspUpdRgn->FspmConfig.DDR3LPageSize;
+ DramPolicy->DDR3LASR = FspUpdRgn->FspmConfig.DDR3LASR;
+ DramPolicy->HighMemMaxVal = FspUpdRgn->FspmConfig.HighMemoryMaxValue;
+ DramPolicy->LowMemMaxVal = FspUpdRgn->FspmConfig.LowMemoryMaxValue;
+ DramPolicy->DisableFastBoot = FspUpdRgn->FspmConfig.DisableFastBoot;
+ DramPolicy->RmtMode = FspUpdRgn->FspmConfig.RmtMode;
+ DramPolicy->RmtCheckRun = FspUpdRgn->FspmConfig.RmtCheckRun;
+ DramPolicy->RmtMarginCheckScaleHighThreshold = FspUpdRgn->FspmConfig.RmtMarginCheckScaleHighThreshold;
+ DramPolicy->MsgLevelMask = FspUpdRgn->FspmConfig.MsgLevelMask;
+ DramPolicy->ChannelHashMask = FspUpdRgn->FspmConfig.ChannelHashMask;
+ DramPolicy->SliceHashMask = FspUpdRgn->FspmConfig.SliceHashMask;
+ DramPolicy->ChannelsSlicesEnabled = FspUpdRgn->FspmConfig.ChannelsSlicesEnable;
+ DramPolicy->ScramblerSupport = FspUpdRgn->FspmConfig.ScramblerSupport;
+ DramPolicy->InterleavedMode = FspUpdRgn->FspmConfig.InterleavedMode;
+ DramPolicy->MinRefRate2xEnabled = FspUpdRgn->FspmConfig.MinRefRate2xEnable;
+ DramPolicy->DualRankSupportEnabled = FspUpdRgn->FspmConfig.DualRankSupportEnable;
+ CopyMem (&DramPolicy->ChDrp, &(FspUpdRgn->FspmConfig.Ch0_RankEnable), sizeof (DramPolicy->ChDrp));
+ CopyMem (&DramPolicy->ChSwizzle, &(FspUpdRgn->FspmConfig.Ch0_Bit_swizzling), sizeof (DramPolicy->ChSwizzle));
+ // Print header marker
+ DEBUG ((DEBUG_INFO, "\n\nDRAM_POLICY_PPI dump for EEPROM programming [0x%08x]:\n", sizeof (DRAM_POLICY_PPI)));
+ EepromDumpParagraph (DEBUG_INFO, DramPolicy, sizeof (DRAM_POLICY_PPI));
+ // Print footer marker
+ DEBUG ((DEBUG_INFO, "\n\n"));
//
// Disable NPK based on DciEn
@@ -330,8 +381,6 @@ Mb3MDramCreatePolicyDefaults (
DramPolicy->DualRankSupportEnabled = SystemConfiguration.DualRankSupportEnabled;
}
- DramConfig = &(DramConfigData->PlatformDram4);
-
DEBUG ((EFI_D_INFO, "Using smip platform override: %d\n", DramConfigData->Platform_override));
switch (DramConfigData->Platform_override) {
case 0:
@@ -354,6 +403,7 @@ Mb3MDramCreatePolicyDefaults (
// Do nothing if the override value does not exist. 0xFF is the
// default Platform_override value when no override is selected
//
+ DramConfig = &(DramConfigData->PlatformDram4);
break;
}
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitMiscs.h b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitMiscs.h
index 011e4a3e15..97736ec40c 100644
--- a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitMiscs.h
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitMiscs.h
@@ -20,10 +20,8 @@
#include "PlatformId.h"
#include <BoardFunctionsPei.h>
#include <Guid/SetupVariable.h>
-#include <Library/IoLib.h>
#include <Library/MemoryAllocationLib.h>
-#include <Library/PeiDxeSmmMmPciLib.h>
-#include <SaRegs.h>
+#include <Library/EepromPlatformLib.h>
#include "MmrcData.h"
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitPreMem.inf b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitPreMem.inf
index 73eb7e0e9e..c9924e1059 100644
--- a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitPreMem.inf
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/BoardInitPreMem.inf
@@ -28,11 +28,10 @@
BoardInitMiscs.c
[LibraryClasses]
- PeiServicesLib
+ EepromPlatformLib
PcdLib
PchSerialIoUartLib
- MmPciLib
- IoLib
+ PeiServicesLib
[Packages]
MdePkg/MdePkg.dec
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/PlatformId.c b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/PlatformId.c
index 558627cdbf..ea88ce23f9 100644
--- a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/PlatformId.c
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/BoardInitPreMem/PlatformId.c
@@ -17,6 +17,7 @@
#include <Library/BaseMemoryLib.h>
#include <Library/I2cLib.h>
#include <Library/GpioLib.h>
+#include <Library/EepromPlatformLib.h>
#include "PlatformId.h"
PAD_ID_INFO gMB3MRawBoardIdPadInfo[] = {
@@ -260,6 +261,9 @@ Minnow3ModuleGetEmbeddedBoardIdFabId (
OUT UINT8 *FabId
)
{
+ BOARD_INFO_TABLE *BoardInfo;
+ EFI_STATUS Status;
+
DEBUG ((DEBUG_INFO, "%a(#%3d) - Starting...\n", __FUNCTION__, __LINE__));
*BoardId = Minnow3ModuleGetCommonBoardId ();
@@ -271,6 +275,9 @@ Minnow3ModuleGetEmbeddedBoardIdFabId (
*FabId = UNKNOWN_FAB;
}
+ Status = EepromGetBoardInfo (NULL, &BoardInfo);
+ DEBUG ((DEBUG_INFO, "%a(#%3d) - EepromGetBoardInfo() -> %r\n", __FUNCTION__, __LINE__, Status));
+
return EFI_SUCCESS;
}
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/EepromStruct.h b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/EepromStruct.h
index 316f5b2261..a826681aec 100644
--- a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/EepromStruct.h
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/EepromStruct.h
@@ -166,4 +166,3 @@ typedef struct {
#pragma pack()
#endif
-
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/GenerateBinary.py b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/GenerateBinary.py
index 92b0cc9a3a..e1a29e1374 100644
--- a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/GenerateBinary.py
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/GenerateBinary.py
@@ -18,7 +18,7 @@ import subprocess
import sys
# Version defines
-__version__ = '0.1.0.2'
+__version__ = '0.1.0.3'
VerString = 'EEPROM binary generation tool, Version #{0}'.format(__version__)
PythonVersion = 'Python version = {0:X}'.format(sys.hexversion)
@@ -28,26 +28,27 @@ def Main():
try:
# Get paths
- ThisUtilityPath = os.path.dirname(os.path.abspath(sys.argv[0]))
- ParentUtilityPath = os.path.dirname(ThisUtilityPath)
- UtilityPath = ParentUtilityPath + '\\Utilities'
- ProjectName = 'MB3'
+ ThisUtilityPath = os.path.dirname(os.path.abspath(sys.argv[0]))
+ TempPath = ThisUtilityPath
+ while os.path.basename(TempPath) != 'BroxtonPlatformPkg':
+ TempPath = os.path.dirname(TempPath)
+ UtilityPath = TempPath + '\\Common\\Features\\Eeprom\\EepromBinary\\Utilities'
+ OpenSslPath = UtilityPath + '\\OpenSsl\\openssl.exe'
+ EepromBinaryUtility = UtilityPath + '\\eeprom.py'
+ EepromHashUtility = UtilityPath + '\\HashBinary.py'
# MinnowBoard 3 specific defines
- EepromBinaryUtility = UtilityPath + '\\eeprom.py'
- EepromHashUtility = UtilityPath + '\\HashBinary.py'
+ ProjectName = 'MB3'
EepromDefinitionFile = ThisUtilityPath + '\\' + ProjectName + '-Defs.cfg'
EepromProjectFile = ThisUtilityPath + '\\' + ProjectName + '-Prj.cfg'
EepromBinaryFile = ThisUtilityPath + '\\' + ProjectName + '-Eeprom.bin'
EepromHeaderFile = ThisUtilityPath + '\\EepromStruct.h'
EepromPrivatePemFile = ThisUtilityPath + '\\RSA-keys\\' + ProjectName + '-private.pem'
- OpenSslPath = UtilityPath + '\\OpenSsl\\openssl.exe'
# Debug prints
if False:
print('sys.argv[0] = {0}'.format(sys.argv[0]))
print('ThisUtilityPath = {0}'.format(ThisUtilityPath))
- print('ParentUtilityPath = {0}'.format(ParentUtilityPath))
print('UtilityPath = {0}'.format(UtilityPath))
print('EepromBinaryFile = {0}'.format(EepromBinaryFile))
print('EepromBinaryUtility = {0}'.format(EepromBinaryUtility))
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Logo/Tianocore.bmp b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Logo/Tianocore.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..dcf1c0be035f50b909a5efd0f77b10d03449305f
GIT binary patch
literal 11958
# Removed to conserve space
literal 0
# Removed to conserve space
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/MB3-Eeprom.bin b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/MB3-Eeprom.bin
index 752b62d19be3e5dce7cd5aae13083b024d44e09d..df817430dc2029e1e381cafa915607e384888912 100644
GIT binary patch
literal 26880
# Removed to conserve space
literal 32688
# Removed to conserve space
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/MB3-Prj.cfg b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/MB3-Prj.cfg
index 4712e2e903..af3b53e7c5 100644
--- a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/MB3-Prj.cfg
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/MB3-Prj.cfg
@@ -32,17 +32,28 @@ OutputFileName = MB3-Eeprom.bin
; Struct_n = Section
;
[Structures]
+;
+; The following three structures MUST be in this order!!!
+;
Struct_01 = Header ; $Eeprom$ structure
Struct_02 = M24M02EepromMap ; $EeprMap structure
Struct_03 = MyBoardInfo ; $BrdInfo structure
-Struct_04 = GpioData ; $GpioDat structure
-Struct_05 = DsdtInfo ; $AcpiTbl structure
-Struct_06 = VideoInfo ; $Video$ structure
-Struct_07 = LogoInfo ; $Logo$ structure
+;
+; These structures can be in any order.
+;
+Struct_10 = GpioData ; $GpioDat structure
+Struct_11 = LogoInfo ; $Logo$ structure
+;Struct_12 = SsdtInfo ; $AcpiTbl structure
+Struct_13 = VideoInfo ; $Video$ structure
+;
+; Optional structures
+;
+;Struct_20 = HdaInfo ; $HdCodec structure
+;Struct_21 = MemoryInfo ; $MemCnfg structure
;
; The SignatureInfo structure needs to be the last structure.
;
-Struct_99 = SignatureInfo
+Struct_99 = SignatureInfo ; $PromSig structure
;
; Platform Specific Structures:
@@ -109,33 +120,35 @@ StructureType = EepromMapRecord
Offset = 0x00030000
Address = 0x57 ; 7-bit address
-[DsdtInfo]
-StructureType = AcpiTable
-AcpiTbl = from_asl (../Utilities/IASL,EepromAsl/EepromSsdt0.asl)
-;
-; Relative or absolute path to the ASL compiler is the first parameter
-; Relative or absolute path to the ASL file to compile and include
-;
-
-; You need to also uncomment Struct_06 = VideoInfo above
-[VideoInfo]
-StructureType = VideoData
-VideoData = from_file (VBT/Vbt_bxt_t_fab_b_TrulyMipi_Cmd.bin)
-;
-; 1 | HDMI & Tianma | Vbt_bxt_t_TianmaMipi.bin
-; 2 | HDMI only | Vbt_bxt_t_fab_b.bin
-; 3 | HDMI & Truly | Vbt_bxt_t_fab_b_TrulyMipi_Cmd.bin
-;
+;[HdaInfo]
+;StructureType = HdaCodec
+;LogoData = from_file (HDA/HdaVerbTable.bin)
-; You need to also uncomment Struct_07 = LogoInfo above
[LogoInfo]
StructureType = LogoData
-LogoData = from_file (Logo/Intel.bmp)
+LogoData = from_file (Logo/Tianocore.bmp)
;
; BMP file is the only supported format.
; Recommend that the BMP file be less than 64KB in size.
; Use blank.bmp to remove the logo completely.
+;[MemoryInfo]
+;StructureType = MemoryData
+;SpdSlot = 0x000F
+;SpdData = from_file (Memory/DramPolicyPpi.bin)
+
+;[SsdtInfo]
+;StructureType = AcpiTable
+;AcpiTbl = from_asl (../../../Common/Features/Eeprom/EepromBinary/Utilities/IASL,EepromAsl/EepromSsdt0.asl)
+;;
+;; Relative or absolute path to the ASL compiler is the first parameter
+;; Relative or absolute path to the ASL file to compile and include
+;;
+
+[VideoInfo]
+StructureType = VideoData
+VideoData = from_file (VBT/VbtBxtMipi.bin)
+
; You need to also uncomment Struct_99 = SignatureInfo above
[SignatureInfo]
StructureType = SignatureData
@@ -159,1802 +172,1604 @@ StructureType = GpioDataHeader
GpioData = from_struct_list (GpioDataList)
[GpioData001]
-; SMB_ALERT_1V8 <--> SW_SMB_ALERTB
StructureType = GpioDataRecord
-GpioLabel = "SMARC P1 PAD0$"
-Offset = 0x00C005F8
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_2$"
+Offset = 0x00C50510
+AndData = 0x0801E0FE
+OrData = 0x04000100
DataSize = 0x04
DataType = 0x04
[GpioData002]
-; SMB_ALERT_1V8 <--> SW_SMB_ALERTB
StructureType = GpioDataRecord
-GpioLabel = "SMARC P1 PAD1$"
-Offset = 0x00C005FC
-AndData = 0x00000000
-OrData = 0x0003F000
+GpioLabel = "N_GPIO_2$"
+Offset = 0x00C50514
+AndData = 0x000000FF
+OrData = 0x0001F000
DataSize = 0x04
DataType = 0x04
[GpioData003]
-; SPI0_CS1 <--> NW_GPIO_98
StructureType = GpioDataRecord
-GpioLabel = "SMARC P31 PAD0$"
-Offset = 0x00C406B0
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_3$"
+Offset = 0x00C50518
+AndData = 0x0801E0FE
+OrData = 0x04000100
DataSize = 0x04
DataType = 0x04
[GpioData004]
-; SPI0_CS1 <--> NW_GPIO_98
StructureType = GpioDataRecord
-GpioLabel = "SMARC P31 PAD1$"
-Offset = 0x00C406B4
-AndData = 0x00000000
-OrData = 0x0003FC4A
+GpioLabel = "N_GPIO_3$"
+Offset = 0x00C5051C
+AndData = 0x000000FF
+OrData = 0x0001F000
DataSize = 0x04
DataType = 0x04
[GpioData005]
-; SDIO_WP <--> SW_GPIO_186
StructureType = GpioDataRecord
-GpioLabel = "SMARC P33 PAD0$"
-Offset = 0x00C005E0
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "N_GPIO_4$"
+Offset = 0x00C50520
+AndData = 0x0801E0FE
+OrData = 0x04000100
DataSize = 0x04
DataType = 0x04
[GpioData006]
-; SDIO_WP <--> SW_GPIO_186
StructureType = GpioDataRecord
-GpioLabel = "SMARC P33 PAD1$"
-Offset = 0x00C005E4
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "N_GPIO_4$"
+Offset = 0x00C50524
+AndData = 0x000000FF
+OrData = 0x0001F000
DataSize = 0x04
DataType = 0x04
[GpioData007]
-; SDIO_CMD <--> SW_GPIO_171
StructureType = GpioDataRecord
-GpioLabel = "SMARC P34 PAD0$"
-Offset = 0x00C00598
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_6$"
+Offset = 0x00C50530
+AndData = 0x0801E0FE
+OrData = 0x46080100
DataSize = 0x04
DataType = 0x04
[GpioData008]
-; SDIO_CMD <--> SW_GPIO_171
StructureType = GpioDataRecord
-GpioLabel = "SMARC P34 PAD1$"
-Offset = 0x00C0059C
-AndData = 0x00000000
-OrData = 0x00023000
+GpioLabel = "N_GPIO_6$"
+Offset = 0x00C50534
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData009]
-; SDIO_CMD <--> SW_GPIO_178
StructureType = GpioDataRecord
-GpioLabel = "SMARC P34 PAD0$"
-Offset = 0x00C005D0
-AndData = 0x00000000
-OrData = 0x42000102
+GpioLabel = "N_GPIO_7$"
+Offset = 0x00C50538
+AndData = 0x0801E0FE
+OrData = 0x42880100
DataSize = 0x04
DataType = 0x04
[GpioData010]
-; SDIO_CMD <--> SW_GPIO_178
StructureType = GpioDataRecord
-GpioLabel = "SMARC P34 PAD1$"
-Offset = 0x00C005D4
-AndData = 0x00000000
-OrData = 0x00027000
+GpioLabel = "N_GPIO_7$"
+Offset = 0x00C5053C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData011]
-; SDIO_CD <--> SW_GPIO_177
StructureType = GpioDataRecord
-GpioLabel = "SMARC P35 PAD0$"
-Offset = 0x00C005C8
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_13$"
+Offset = 0x00C50568
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData012]
-; SDIO_CD <--> SW_GPIO_177
StructureType = GpioDataRecord
-GpioLabel = "SMARC P35 PAD1$"
-Offset = 0x00C005CC
-AndData = 0x00000000
-OrData = 0x00023000
+GpioLabel = "N_GPIO_13$"
+Offset = 0x00C5056C
+AndData = 0x000000FF
+OrData = 0x0001F000
DataSize = 0x04
DataType = 0x04
[GpioData013]
-; SDIO_CK <--> SW_GPIO_166
StructureType = GpioDataRecord
-GpioLabel = "SMARC P36 PAD0$"
-Offset = 0x00C00570
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "N_GPIO_14$"
+Offset = 0x00C50570
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData014]
-; SDIO_CK <--> SW_GPIO_166
StructureType = GpioDataRecord
-GpioLabel = "SMARC P36 PAD1$"
-Offset = 0x00C00574
-AndData = 0x00000000
-OrData = 0x00005000
+GpioLabel = "N_GPIO_14$"
+Offset = 0x00C50574
+AndData = 0x000000FF
+OrData = 0x0001F000
DataSize = 0x04
DataType = 0x04
[GpioData015]
-; SDIO_CK <--> SW_GPIO_172
StructureType = GpioDataRecord
-GpioLabel = "SMARC P36 PAD0$"
-Offset = 0x00C005A0
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "N_GPIO_21$"
+Offset = 0x00C505A8
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData016]
-; SDIO_CK <--> SW_GPIO_172
StructureType = GpioDataRecord
-GpioLabel = "SMARC P36 PAD1$"
-Offset = 0x00C005A4
-AndData = 0x00000000
-OrData = 0x00021100
+GpioLabel = "N_GPIO_21$"
+Offset = 0x00C505AC
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData017]
-; SDIO_PWR_EN <--> SW_GPIO_183
StructureType = GpioDataRecord
-GpioLabel = "SMARC P37 PAD0$"
-Offset = 0x00C005F0
-AndData = 0x00000000
-OrData = 0x44000201
+GpioLabel = "N_GPIO_22$"
+Offset = 0x00C505B0
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData018]
-; SDIO_PWR_EN <--> SW_GPIO_183
StructureType = GpioDataRecord
-GpioLabel = "SMARC P37 PAD1$"
-Offset = 0x00C005F4
-AndData = 0x00000000
-OrData = 0x00001000
+GpioLabel = "N_GPIO_22$"
+Offset = 0x00C505B4
+AndData = 0x000000FF
+OrData = 0x0001F000
DataSize = 0x04
DataType = 0x04
[GpioData019]
-; SDIO_D0 <--> SW_GPIO_167
StructureType = GpioDataRecord
-GpioLabel = "SMARC P39 PAD0$"
-Offset = 0x00C00578
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_23$"
+Offset = 0x00C505B8
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData020]
-; SDIO_D0 <--> SW_GPIO_167
StructureType = GpioDataRecord
-GpioLabel = "SMARC P39 PAD1$"
-Offset = 0x00C0057C
-AndData = 0x00000000
-OrData = 0x00023000
+GpioLabel = "N_GPIO_23$"
+Offset = 0x00C505BC
+AndData = 0x000000FF
+OrData = 0x0001F000
DataSize = 0x04
DataType = 0x04
[GpioData021]
-; SDIO_D0 <--> SW_GPIO_173
StructureType = GpioDataRecord
-GpioLabel = "SMARC P39 PAD0$"
-Offset = 0x00C005A8
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "N_GPIO_24$"
+Offset = 0x00C505C0
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData022]
-; SDIO_D0 <--> SW_GPIO_173
StructureType = GpioDataRecord
-GpioLabel = "SMARC P39 PAD1$"
-Offset = 0x00C005AC
-AndData = 0x00000000
-OrData = 0x00001000
+GpioLabel = "N_GPIO_24$"
+Offset = 0x00C505C4
+AndData = 0x000000FF
+OrData = 0x0001F000
DataSize = 0x04
DataType = 0x04
[GpioData023]
-; SDIO_D1 <--> SW_GPIO_168
StructureType = GpioDataRecord
-GpioLabel = "SMARC P40 PAD0$"
-Offset = 0x00C00580
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_25$"
+Offset = 0x00C505C8
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData024]
-; SDIO_D1 <--> SW_GPIO_168
StructureType = GpioDataRecord
-GpioLabel = "SMARC P40 PAD1$"
-Offset = 0x00C00584
-AndData = 0x00000000
-OrData = 0x00023000
+GpioLabel = "N_GPIO_25$"
+Offset = 0x00C505CC
+AndData = 0x000000FF
+OrData = 0x0001F000
DataSize = 0x04
DataType = 0x04
[GpioData025]
-; SDIO_D1 <--> SW_GPIO_174
StructureType = GpioDataRecord
-GpioLabel = "SMARC P40 PAD0$"
-Offset = 0x00C005B0
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_26$"
+Offset = 0x00C505D0
+AndData = 0x0801E0FE
+OrData = 0x44001400
DataSize = 0x04
DataType = 0x04
[GpioData026]
-; SDIO_D1 <--> SW_GPIO_174
StructureType = GpioDataRecord
-GpioLabel = "SMARC P40 PAD1$"
-Offset = 0x00C005B4
-AndData = 0x00000000
-OrData = 0x00023100
+GpioLabel = "N_GPIO_26$"
+Offset = 0x00C505D4
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData027]
-; SDIO_D2 <--> SW_GPIO_169
StructureType = GpioDataRecord
-GpioLabel = "SMARC P41 PAD0$"
-Offset = 0x00C00588
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_38$"
+Offset = 0x00C50630
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData028]
-; SDIO_D2 <--> SW_GPIO_169
StructureType = GpioDataRecord
-GpioLabel = "SMARC P41 PAD1$"
-Offset = 0x00C0058C
-AndData = 0x00000000
-OrData = 0x00023000
+GpioLabel = "N_GPIO_38$"
+Offset = 0x00C50634
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData029]
-; SDIO_D2 <--> SW_GPIO_175
StructureType = GpioDataRecord
-GpioLabel = "SMARC P41 PAD0$"
-Offset = 0x00C005B8
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_39$"
+Offset = 0x00C50638
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData030]
-; SDIO_D2 <--> SW_GPIO_175
StructureType = GpioDataRecord
-GpioLabel = "SMARC P41 PAD1$"
-Offset = 0x00C005BC
-AndData = 0x00000000
-OrData = 0x00023000
+GpioLabel = "N_GPIO_39$"
+Offset = 0x00C5063C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData031]
-; SDIO_D3 <--> SW_GPIO_170
StructureType = GpioDataRecord
-GpioLabel = "SMARC P42 PAD0$"
-Offset = 0x00C00590
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_40$"
+Offset = 0x00C50640
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData032]
-; SDIO_D3 <--> SW_GPIO_170
StructureType = GpioDataRecord
-GpioLabel = "SMARC P42 PAD1$"
-Offset = 0x00C00594
-AndData = 0x00000000
-OrData = 0x00023000
+GpioLabel = "N_GPIO_40$"
+Offset = 0x00C50644
+AndData = 0x000000FF
+OrData = 0x00003100
DataSize = 0x04
DataType = 0x04
[GpioData033]
-; SDIO_D3 <--> SW_GPIO_176
StructureType = GpioDataRecord
-GpioLabel = "SMARC P42 PAD0$"
-Offset = 0x00C005C0
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_41$"
+Offset = 0x00C50648
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData034]
-; SDIO_D3 <--> SW_GPIO_176
StructureType = GpioDataRecord
-GpioLabel = "SMARC P42 PAD1$"
-Offset = 0x00C005C4
-AndData = 0x00000000
-OrData = 0x00023000
+GpioLabel = "N_GPIO_41$"
+Offset = 0x00C5064C
+AndData = 0x000000FF
+OrData = 0x00023100
DataSize = 0x04
DataType = 0x04
[GpioData035]
-; SPI0_CS0 <--> NW_GPIO_97
StructureType = GpioDataRecord
-GpioLabel = "SMARC P43 PAD0$"
-Offset = 0x00C406A8
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_42$"
+Offset = 0x00C50650
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData036]
-; SPI0_CS0 <--> NW_GPIO_97
StructureType = GpioDataRecord
-GpioLabel = "SMARC P43 PAD1$"
-Offset = 0x00C406AC
-AndData = 0x00000000
-OrData = 0x0003FC49
+GpioLabel = "N_GPIO_42$"
+Offset = 0x00C50654
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData037]
-; SPI0_CK <--> NW_GPIO_103
StructureType = GpioDataRecord
-GpioLabel = "SMARC P44 PAD0$"
-Offset = 0x00C406D8
-AndData = 0x00000000
+GpioLabel = "N_GPIO_43$"
+Offset = 0x00C50658
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData038]
-; SPI0_CK <--> NW_GPIO_103
StructureType = GpioDataRecord
-GpioLabel = "SMARC P44 PAD1$"
-Offset = 0x00C406DC
-AndData = 0x00000000
-OrData = 0x0003FC4F
+GpioLabel = "N_GPIO_43$"
+Offset = 0x00C5065C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData039]
-; SPI0_DIN <--> NW_GPIO_100
StructureType = GpioDataRecord
-GpioLabel = "SMARC P45 PAD0$"
-Offset = 0x00C406C0
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_46$"
+Offset = 0x00C50670
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData040]
-; SPI0_DIN <--> NW_GPIO_100
StructureType = GpioDataRecord
-GpioLabel = "SMARC P45 PAD1$"
-Offset = 0x00C406C4
-AndData = 0x00000000
-OrData = 0x0003FC4C
+GpioLabel = "N_GPIO_46$"
+Offset = 0x00C50674
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData041]
-; SPI0_DO <--> NW_GPIO_99
StructureType = GpioDataRecord
-GpioLabel = "SMARC P46 PAD0$"
-Offset = 0x00C406B8
-AndData = 0x00000000
+GpioLabel = "N_GPIO_47$"
+Offset = 0x00C50678
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData042]
-; SPI0_DO <--> NW_GPIO_99
StructureType = GpioDataRecord
-GpioLabel = "SMARC P46 PAD1$"
-Offset = 0x00C406BC
-AndData = 0x00000000
-OrData = 0x0003FC4B
+GpioLabel = "N_GPIO_47$"
+Offset = 0x00C5067C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData043]
-; ESPI_CS0 <--> NW_GPIO_105
StructureType = GpioDataRecord
-GpioLabel = "SMARC P54 PAD0$"
-Offset = 0x00C406F0
-AndData = 0x00000000
+GpioLabel = "N_GPIO_48$"
+Offset = 0x00C50680
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData044]
-; ESPI_CS0 <--> NW_GPIO_105
StructureType = GpioDataRecord
-GpioLabel = "SMARC P54 PAD1$"
-Offset = 0x00C406F4
-AndData = 0x00000000
-OrData = 0x00001051
+GpioLabel = "N_GPIO_48$"
+Offset = 0x00C50684
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData045]
-; ESPI_CS1 <--> NW_GPIO_106
StructureType = GpioDataRecord
-GpioLabel = "SMARC P55 PAD0$"
-Offset = 0x00C406F8
-AndData = 0x00000000
+GpioLabel = "N_GPIO_49$"
+Offset = 0x00C50688
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData046]
-; ESPI_CS1 <--> NW_GPIO_106
StructureType = GpioDataRecord
-GpioLabel = "SMARC P55 PAD1$"
-Offset = 0x00C406FC
-AndData = 0x00000000
-OrData = 0x00001052
+GpioLabel = "N_GPIO_49$"
+Offset = 0x00C5068C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData047]
-; ESPI_CK <--> NW_GPIO_104
StructureType = GpioDataRecord
-GpioLabel = "SMARC P56 PAD0$"
-Offset = 0x00C406E8
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "N_GPIO_64$"
+Offset = 0x00C506A0
+AndData = 0x0801E0FE
+OrData = 0x44000200
DataSize = 0x04
DataType = 0x04
[GpioData048]
-; ESPI_CK <--> NW_GPIO_104
StructureType = GpioDataRecord
-GpioLabel = "SMARC P56 PAD1$"
-Offset = 0x00C406EC
-AndData = 0x00000000
-OrData = 0x00001050
+GpioLabel = "N_GPIO_64$"
+Offset = 0x00C506A4
+AndData = 0x000000FF
+OrData = 0x0001D000
DataSize = 0x04
DataType = 0x04
[GpioData049]
-; ESPI_IO_0 <--> NW_GPIO_109
StructureType = GpioDataRecord
-GpioLabel = "SMARC P57 PAD0$"
-Offset = 0x00C40700
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "N_GPIO_65$"
+Offset = 0x00C506A8
+AndData = 0x0801E0FE
+OrData = 0x44000200
DataSize = 0x04
DataType = 0x04
[GpioData050]
-; ESPI_IO_0 <--> NW_GPIO_109
StructureType = GpioDataRecord
-GpioLabel = "SMARC P57 PAD1$"
-Offset = 0x00C40704
-AndData = 0x00000000
-OrData = 0x0001D054
+GpioLabel = "N_GPIO_65$"
+Offset = 0x00C506AC
+AndData = 0x000000FF
+OrData = 0x0001D000
DataSize = 0x04
DataType = 0x04
[GpioData051]
-; ESPI_IO_1 <--> NW_GPIO_110
StructureType = GpioDataRecord
-GpioLabel = "SMARC P58 PAD0$"
-Offset = 0x00C40708
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "N_GPIO_66$"
+Offset = 0x00C506B0
+AndData = 0x0801E0FE
+OrData = 0x44000200
DataSize = 0x04
DataType = 0x04
[GpioData052]
-; ESPI_IO_1 <--> NW_GPIO_110
StructureType = GpioDataRecord
-GpioLabel = "SMARC P58 PAD1$"
-Offset = 0x00C4070C
-AndData = 0x00000000
-OrData = 0x00001055
+GpioLabel = "N_GPIO_66$"
+Offset = 0x00C506B4
+AndData = 0x000000FF
+OrData = 0x0001D000
DataSize = 0x04
DataType = 0x04
[GpioData053]
-; USB0_EN_OC <--> NW_GPIO_203
StructureType = GpioDataRecord
-GpioLabel = "SMARC P62 PAD0$"
-Offset = 0x00C40580
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "N_GPIO_67$"
+Offset = 0x00C506B8
+AndData = 0x0801E0FE
+OrData = 0x44000200
DataSize = 0x04
DataType = 0x04
[GpioData054]
-; USB0_EN_OC <--> NW_GPIO_203
StructureType = GpioDataRecord
-GpioLabel = "SMARC P62 PAD1$"
-Offset = 0x00C40584
-AndData = 0x00000000
-OrData = 0x0003F000
+GpioLabel = "N_GPIO_67$"
+Offset = 0x00C506BC
+AndData = 0x000000FF
+OrData = 0x0001D000
DataSize = 0x04
DataType = 0x04
[GpioData055]
-; USB1_EN_OC <--> NW_GPIO_204
StructureType = GpioDataRecord
-GpioLabel = "SMARC P67 PAD0$"
-Offset = 0x00C40588
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "NW_GPIO_193$"
+Offset = 0x00C40530
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData056]
-; USB1_EN_OC <--> NW_GPIO_204
StructureType = GpioDataRecord
-GpioLabel = "SMARC P67 PAD1$"
-Offset = 0x00C4058C
-AndData = 0x00000000
-OrData = 0x0003F000
+GpioLabel = "NW_GPIO_193$"
+Offset = 0x00C40534
+AndData = 0x000000FF
+OrData = 0x00005000
DataSize = 0x04
DataType = 0x04
[GpioData057]
-; PCIE_A_RST <--> W_PMU_PLTRST_B
StructureType = GpioDataRecord
-GpioLabel = "SMARC P75 PAD0$"
-Offset = 0x00C70628
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "NW_GPIO_196$"
+Offset = 0x00C40548
+AndData = 0x0801E0FE
+OrData = 0x44000200
DataSize = 0x04
DataType = 0x04
[GpioData058]
-; PCIE_A_RST <--> W_PMU_PLTRST_B
StructureType = GpioDataRecord
-GpioLabel = "SMARC P75 PAD1$"
-Offset = 0x00C7062C
-AndData = 0x00000000
-OrData = 0x0003C000
+GpioLabel = "NW_GPIO_196$"
+Offset = 0x00C4054C
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData059]
-; HDMI_HPD/DP1_HPD <--> NW_GPIO_199
StructureType = GpioDataRecord
-GpioLabel = "SMARC P104 PAD0$"
-Offset = 0x00C40560
-AndData = 0x00000000
-OrData = 0x44000800
+GpioLabel = "NW_GPIO_197$"
+Offset = 0x00C40550
+AndData = 0x0801E0FE
+OrData = 0x44000200
DataSize = 0x04
DataType = 0x04
[GpioData060]
-; HDMI_HPD/DP1_HPD <--> NW_GPIO_199
StructureType = GpioDataRecord
-GpioLabel = "SMARC P104 PAD1$"
-Offset = 0x00C40564
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "NW_GPIO_197$"
+Offset = 0x00C40554
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData061]
-; GPIO0/CAM0_PWR <--> N_GPIO_66
StructureType = GpioDataRecord
-GpioLabel = "SMARC P108 PAD0$"
-Offset = 0x00C506B0
-AndData = 0x00000000
-OrData = 0x44000200
+GpioLabel = "NW_GPIO_198$"
+Offset = 0x00C40558
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData062]
-; GPIO0/CAM0_PWR <--> N_GPIO_66
StructureType = GpioDataRecord
-GpioLabel = "SMARC P108 PAD1$"
-Offset = 0x00C506B4
-AndData = 0x00000000
-OrData = 0x0001D05F
+GpioLabel = "NW_GPIO_198$"
+Offset = 0x00C4055C
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData063]
-; GPIO1/CAM1_PWR <--> N_GPIO_67
StructureType = GpioDataRecord
-GpioLabel = "SMARC P109 PAD0$"
-Offset = 0x00C506B8
-AndData = 0x00000000
-OrData = 0x44000200
+GpioLabel = "NW_GPIO_199$"
+Offset = 0x00C40560
+AndData = 0x0801E0FE
+OrData = 0x44000800
DataSize = 0x04
DataType = 0x04
[GpioData064]
-; GPIO1/CAM1_PWR <--> N_GPIO_67
StructureType = GpioDataRecord
-GpioLabel = "SMARC P109 PAD1$"
-Offset = 0x00C506BC
-AndData = 0x00000000
-OrData = 0x0001D060
+GpioLabel = "NW_GPIO_199$"
+Offset = 0x00C40564
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData065]
-; GPIO2/CAM0_RST <--> N_GPIO_64
StructureType = GpioDataRecord
-GpioLabel = "SMARC P110 PAD0$"
-Offset = 0x00C506A0
-AndData = 0x00000000
-OrData = 0x44000200
+GpioLabel = "NW_GPIO_200$"
+Offset = 0x00C40568
+AndData = 0x0801E0FE
+OrData = 0x44000800
DataSize = 0x04
DataType = 0x04
[GpioData066]
-; GPIO2/CAM0_RST <--> N_GPIO_64
StructureType = GpioDataRecord
-GpioLabel = "SMARC P110 PAD1$"
-Offset = 0x00C506A4
-AndData = 0x00000000
-OrData = 0x0001D05D
+GpioLabel = "NW_GPIO_200$"
+Offset = 0x00C4056C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData067]
-; GPIO3/CAM1_RST <--> N_GPIO_65
StructureType = GpioDataRecord
-GpioLabel = "SMARC P111 PAD0$"
-Offset = 0x00C506A8
-AndData = 0x00000000
-OrData = 0x44000200
+GpioLabel = "NW_GPIO_203$"
+Offset = 0x00C40580
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData068]
-; GPIO3/CAM1_RST <--> N_GPIO_65
StructureType = GpioDataRecord
-GpioLabel = "SMARC P111 PAD1$"
-Offset = 0x00C506AC
-AndData = 0x00000000
-OrData = 0x0001D05E
+GpioLabel = "NW_GPIO_203$"
+Offset = 0x00C40584
+AndData = 0x000000FF
+OrData = 0x0003F000
DataSize = 0x04
DataType = 0x04
[GpioData069]
-; GPIO4/HDA_RST <--> NW_GPIO_84
StructureType = GpioDataRecord
-GpioLabel = "SMARC P112 PAD0$"
-Offset = 0x00C40660
-AndData = 0x00000000
-OrData = 0x44000800
+GpioLabel = "NW_GPIO_204$"
+Offset = 0x00C40588
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData070]
-; GPIO4/HDA_RST <--> NW_GPIO_84
StructureType = GpioDataRecord
-GpioLabel = "SMARC P112 PAD1$"
-Offset = 0x00C40664
-AndData = 0x00000000
-OrData = 0x0000103D
+GpioLabel = "NW_GPIO_204$"
+Offset = 0x00C4058C
+AndData = 0x000000FF
+OrData = 0x0003F000
DataSize = 0x04
DataType = 0x04
[GpioData071]
-; GPIO7 <--> N_GPIO_13
StructureType = GpioDataRecord
-GpioLabel = "SMARC P115 PAD0$"
-Offset = 0x00C50568
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "NW_PMC_SPI_FS1$"
+Offset = 0x00C40598
+AndData = 0x0801E0FE
+OrData = 0x44000800
DataSize = 0x04
DataType = 0x04
[GpioData072]
-; GPIO7 <--> N_GPIO_13
StructureType = GpioDataRecord
-GpioLabel = "SMARC P115 PAD1$"
-Offset = 0x00C5056C
-AndData = 0x00000000
-OrData = 0x0001F070
+GpioLabel = "NW_PMC_SPI_FS1$"
+Offset = 0x00C4059C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData073]
-; GPIO8 <--> N_GPIO_14
StructureType = GpioDataRecord
-GpioLabel = "SMARC P116 PAD0$"
-Offset = 0x00C50570
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "NW_GPIO_84$"
+Offset = 0x00C40660
+AndData = 0x0801E0FE
+OrData = 0x44000800
DataSize = 0x04
DataType = 0x04
[GpioData074]
-; GPIO8 <--> N_GPIO_14
StructureType = GpioDataRecord
-GpioLabel = "SMARC P116 PAD1$"
-Offset = 0x00C50574
-AndData = 0x00000000
-OrData = 0x0001F071
+GpioLabel = "NW_GPIO_84$"
+Offset = 0x00C40664
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData075]
-; GPIO9 <--> N_GPIO_2
StructureType = GpioDataRecord
-GpioLabel = "SMARC P117 PAD0$"
-Offset = 0x00C50510
-AndData = 0x00000000
-OrData = 0x04000102
+GpioLabel = "NW_GPIO_85$"
+Offset = 0x00C40668
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData076]
-; GPIO9 <--> N_GPIO_2
StructureType = GpioDataRecord
-GpioLabel = "SMARC P117 PAD1$"
-Offset = 0x00C50514
-AndData = 0x00000000
-OrData = 0x0001F065
+GpioLabel = "NW_GPIO_85$"
+Offset = 0x00C4066C
+AndData = 0x000000FF
+OrData = 0x0003D000
DataSize = 0x04
DataType = 0x04
[GpioData077]
-; GPIO10 <--> N_GPIO_3
StructureType = GpioDataRecord
-GpioLabel = "SMARC P118 PAD0$"
-Offset = 0x00C50518
-AndData = 0x00000000
-OrData = 0x04000102
+GpioLabel = "NW_GPIO_86$"
+Offset = 0x00C40670
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData078]
-; GPIO10 <--> N_GPIO_3
StructureType = GpioDataRecord
-GpioLabel = "SMARC P118 PAD1$"
-Offset = 0x00C5051C
-AndData = 0x00000000
-OrData = 0x0001F066
-DataSize = 0x04
+GpioLabel = "NW_GPIO_86$"
+Offset = 0x00C40674
+AndData = 0x000000FF
+OrData = 0x0003D000
+DataSize = 0x04
DataType = 0x04
[GpioData079]
-; GPIO11 <--> N_GPIO_4
StructureType = GpioDataRecord
-GpioLabel = "SMARC P119 PAD0$"
-Offset = 0x00C50520
-AndData = 0x00000000
-OrData = 0x04000102
+GpioLabel = "NW_GPIO_87$"
+Offset = 0x00C40678
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData080]
-; GPIO11 <--> N_GPIO_4
StructureType = GpioDataRecord
-GpioLabel = "SMARC P119 PAD1$"
-Offset = 0x00C50524
-AndData = 0x00000000
-OrData = 0x0001F067
+GpioLabel = "NW_GPIO_87$"
+Offset = 0x00C4067C
+AndData = 0x000000FF
+OrData = 0x00025200
DataSize = 0x04
DataType = 0x04
[GpioData081]
-; I2C_PM_CK <--> W_GPIO_139
StructureType = GpioDataRecord
-GpioLabel = "SMARC P121 PAD0$"
-Offset = 0x00C70578
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "NW_GPIO_88$"
+Offset = 0x00C40680
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData082]
-; I2C_PM_CK <--> W_GPIO_139
StructureType = GpioDataRecord
-GpioLabel = "SMARC P121 PAD1$"
-Offset = 0x00C7057C
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "NW_GPIO_88$"
+Offset = 0x00C40684
+AndData = 0x000000FF
+OrData = 0x0003D000
DataSize = 0x04
DataType = 0x04
[GpioData083]
-; I2C_PM_DAT <--> W_GPIO_138
StructureType = GpioDataRecord
-GpioLabel = "SMARC P122 PAD0$"
-Offset = 0x00C70570
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "NW_GPIO_97$"
+Offset = 0x00C406A8
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData084]
-; I2C_PM_DAT <--> W_GPIO_138
StructureType = GpioDataRecord
-GpioLabel = "SMARC P122 PAD1$"
-Offset = 0x00C70574
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "NW_GPIO_97$"
+Offset = 0x00C406AC
+AndData = 0x000000FF
+OrData = 0x0003FC00
DataSize = 0x04
DataType = 0x04
[GpioData085]
-; BOOT_SEL0 <--> N_GPIO_24
StructureType = GpioDataRecord
-GpioLabel = "SMARC P123 PAD0$"
-Offset = 0x00C505C0
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "NW_GPIO_98$"
+Offset = 0x00C406B0
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData086]
-; BOOT_SEL0 <--> N_GPIO_24
StructureType = GpioDataRecord
-GpioLabel = "SMARC P123 PAD1$"
-Offset = 0x00C505C4
-AndData = 0x00000000
-OrData = 0x0001F035
+GpioLabel = "NW_GPIO_98$"
+Offset = 0x00C406B4
+AndData = 0x000000FF
+OrData = 0x0003FC00
DataSize = 0x04
DataType = 0x04
[GpioData087]
-; BOOT_SEL1 <--> N_GPIO_23
StructureType = GpioDataRecord
-GpioLabel = "SMARC P124 PAD0$"
-Offset = 0x00C505B8
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "NW_GPIO_99$"
+Offset = 0x00C406B8
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData088]
-; BOOT_SEL1 <--> N_GPIO_23
StructureType = GpioDataRecord
-GpioLabel = "SMARC P124 PAD1$"
-Offset = 0x00C505BC
-AndData = 0x00000000
-OrData = 0x0001F034
+GpioLabel = "NW_GPIO_99$"
+Offset = 0x00C406BC
+AndData = 0x000000FF
+OrData = 0x0003FC00
DataSize = 0x04
DataType = 0x04
[GpioData089]
-; BOOT_SEL2 <--> N_GPIO_22
StructureType = GpioDataRecord
-GpioLabel = "SMARC P125 PAD0$"
-Offset = 0x00C505B0
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "NW_GPIO_100$"
+Offset = 0x00C406C0
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData090]
-; BOOT_SEL2 <--> N_GPIO_22
StructureType = GpioDataRecord
-GpioLabel = "SMARC P125 PAD1$"
-Offset = 0x00C505B4
-AndData = 0x00000000
-OrData = 0x0001F033
+GpioLabel = "NW_GPIO_100$"
+Offset = 0x00C406C4
+AndData = 0x000000FF
+OrData = 0x0003FC00
DataSize = 0x04
DataType = 0x04
[GpioData091]
-; SER0_TX <--> N_GPIO_39
StructureType = GpioDataRecord
-GpioLabel = "SMARC P129 PAD0$"
-Offset = 0x00C50638
-AndData = 0x00000000
+GpioLabel = "NW_GPIO_103$"
+Offset = 0x00C406D8
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData092]
-; SER0_TX <--> N_GPIO_39
StructureType = GpioDataRecord
-GpioLabel = "SMARC P129 PAD1$"
-Offset = 0x00C5063C
-AndData = 0x00000000
-OrData = 0x00003044
+GpioLabel = "NW_GPIO_103$"
+Offset = 0x00C406DC
+AndData = 0x000000FF
+OrData = 0x0003FC00
DataSize = 0x04
DataType = 0x04
[GpioData093]
-; SER0_RX <--> N_GPIO_38
StructureType = GpioDataRecord
-GpioLabel = "SMARC P130 PAD0$"
-Offset = 0x00C50630
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "NW_GPIO_104$"
+Offset = 0x00C406E8
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData094]
-; SER0_RX <--> N_GPIO_38
StructureType = GpioDataRecord
-GpioLabel = "SMARC P130 PAD1$"
-Offset = 0x00C50634
-AndData = 0x00000000
-OrData = 0x00003043
+GpioLabel = "NW_GPIO_104$"
+Offset = 0x00C406EC
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData095]
-; SER0_RTS <--> N_GPIO_40
StructureType = GpioDataRecord
-GpioLabel = "SMARC P131 PAD0$"
-Offset = 0x00C50640
-AndData = 0x00000000
+GpioLabel = "NW_GPIO_105$"
+Offset = 0x00C406F0
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData096]
-; SER0_RTS <--> N_GPIO_40
StructureType = GpioDataRecord
-GpioLabel = "SMARC P131 PAD1$"
-Offset = 0x00C50644
-AndData = 0x00000000
-OrData = 0x00003145
+GpioLabel = "NW_GPIO_105$"
+Offset = 0x00C406F4
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData097]
-; SER0_CTS <--> N_GPIO_41
StructureType = GpioDataRecord
-GpioLabel = "SMARC P132 PAD0$"
-Offset = 0x00C50648
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "NW_GPIO_106$"
+Offset = 0x00C406F8
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData098]
-; SER0_CTS <--> N_GPIO_41
StructureType = GpioDataRecord
-GpioLabel = "SMARC P132 PAD1$"
-Offset = 0x00C5064C
-AndData = 0x00000000
-OrData = 0x00023146
+GpioLabel = "NW_GPIO_106$"
+Offset = 0x00C406FC
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData099]
-; SER1_TX <--> N_GPIO_43
StructureType = GpioDataRecord
-GpioLabel = "SMARC P134 PAD0$"
-Offset = 0x00C50658
-AndData = 0x00000000
+GpioLabel = "NW_GPIO_109$"
+Offset = 0x00C40700
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData100]
-; SER1_TX <--> N_GPIO_43
StructureType = GpioDataRecord
-GpioLabel = "SMARC P134 PAD1$"
-Offset = 0x00C5065C
-AndData = 0x00000000
-OrData = 0x00003048
+GpioLabel = "NW_GPIO_109$"
+Offset = 0x00C40704
+AndData = 0x000000FF
+OrData = 0x0001D000
DataSize = 0x04
DataType = 0x04
[GpioData101]
-; SER1_RX <--> N_GPIO_42
StructureType = GpioDataRecord
-GpioLabel = "SMARC P135 PAD0$"
-Offset = 0x00C50650
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "NW_GPIO_110$"
+Offset = 0x00C40708
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData102]
-; SER1_RX <--> N_GPIO_42
StructureType = GpioDataRecord
-GpioLabel = "SMARC P135 PAD1$"
-Offset = 0x00C50654
-AndData = 0x00000000
-OrData = 0x00003047
+GpioLabel = "NW_GPIO_110$"
+Offset = 0x00C4070C
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData103]
-; SER2_TX <--> N_GPIO_47
StructureType = GpioDataRecord
-GpioLabel = "SMARC P136 PAD0$"
-Offset = 0x00C50678
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "NW_GPIO_112$"
+Offset = 0x00C40718
+AndData = 0x0801E0FE
+OrData = 0x44000800
DataSize = 0x04
DataType = 0x04
[GpioData104]
-; SER2_TX <--> N_GPIO_47
StructureType = GpioDataRecord
-GpioLabel = "SMARC P136 PAD1$"
-Offset = 0x00C5067C
-AndData = 0x00000000
-OrData = 0x0000304C
+GpioLabel = "NW_GPIO_112$"
+Offset = 0x00C4071C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData105]
-; SER2_RX <--> N_GPIO_46
StructureType = GpioDataRecord
-GpioLabel = "SMARC P137 PAD0$"
-Offset = 0x00C50670
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "NW_GPIO_113$"
+Offset = 0x00C40720
+AndData = 0x0801E0FE
+OrData = 0x44000800
DataSize = 0x04
DataType = 0x04
[GpioData106]
-; SER2_RX <--> N_GPIO_46
StructureType = GpioDataRecord
-GpioLabel = "SMARC P137 PAD1$"
-Offset = 0x00C50674
-AndData = 0x00000000
-OrData = 0x0000304B
+GpioLabel = "NW_GPIO_113$"
+Offset = 0x00C40724
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData107]
-; SER2_RTS <--> N_GPIO_48
StructureType = GpioDataRecord
-GpioLabel = "SMARC P138 PAD0$"
-Offset = 0x00C50680
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "W_GPIO_126$"
+Offset = 0x00C70510
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData108]
-; SER2_RTS <--> N_GPIO_48
StructureType = GpioDataRecord
-GpioLabel = "SMARC P138 PAD1$"
-Offset = 0x00C50684
-AndData = 0x00000000
-OrData = 0x0000304D
+GpioLabel = "W_GPIO_126$"
+Offset = 0x00C70514
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData109]
-; SER2_CTS <--> N_GPIO_49
StructureType = GpioDataRecord
-GpioLabel = "SMARC P139 PAD0$"
-Offset = 0x00C50688
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "W_GPIO_127$"
+Offset = 0x00C70518
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData110]
-; SER2_CTS <--> N_GPIO_49
StructureType = GpioDataRecord
-GpioLabel = "SMARC P139 PAD1$"
-Offset = 0x00C5068C
-AndData = 0x00000000
-OrData = 0x0000304E
+GpioLabel = "W_GPIO_127$"
+Offset = 0x00C7051C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData111]
-; SER3_TX <--> NW_GPIO_113
StructureType = GpioDataRecord
-GpioLabel = "SMARC P140 PAD0$"
-Offset = 0x00C40720
-AndData = 0x00000000
-OrData = 0x44000800
+GpioLabel = "W_GPIO_132$"
+Offset = 0x00C70540
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData112]
-; SER3_TX <--> NW_GPIO_113
StructureType = GpioDataRecord
-GpioLabel = "SMARC P140 PAD1$"
-Offset = 0x00C40724
-AndData = 0x00000000
-OrData = 0x00003058
+GpioLabel = "W_GPIO_132$"
+Offset = 0x00C70544
+AndData = 0x000000FF
+OrData = 0x00012700
DataSize = 0x04
DataType = 0x04
[GpioData113]
-; SER3_RX <--> NW_GPIO_112
StructureType = GpioDataRecord
-GpioLabel = "SMARC P141 PAD0$"
-Offset = 0x00C40718
-AndData = 0x00000000
-OrData = 0x44000800
+GpioLabel = "W_GPIO_133$"
+Offset = 0x00C70548
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData114]
-; SER3_RX <--> NW_GPIO_112
StructureType = GpioDataRecord
-GpioLabel = "SMARC P141 PAD1$"
-Offset = 0x00C4071C
-AndData = 0x00000000
-OrData = 0x00003057
+GpioLabel = "W_GPIO_133$"
+Offset = 0x00C7054C
+AndData = 0x000000FF
+OrData = 0x00012700
DataSize = 0x04
DataType = 0x04
[GpioData115]
-; CSI1_TX+/I2C_CAM1_CK <--> W_GPIO_135
StructureType = GpioDataRecord
-GpioLabel = "SMARC S1 PAD0$"
-Offset = 0x00C70558
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "W_GPIO_134$"
+Offset = 0x00C70550
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData116]
-; CSI1_TX+/I2C_CAM1_CK <--> W_GPIO_135
StructureType = GpioDataRecord
-GpioLabel = "SMARC S1 PAD1$"
-Offset = 0x00C7055C
-AndData = 0x00000000
+GpioLabel = "W_GPIO_134$"
+Offset = 0x00C70554
+AndData = 0x000000FF
OrData = 0x00006700
DataSize = 0x04
DataType = 0x04
[GpioData117]
-; CSI1_TX-/I2C_CAM1_DAT <--> W_GPIO_134
StructureType = GpioDataRecord
-GpioLabel = "SMARC S2 PAD0$"
-Offset = 0x00C70550
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "W_GPIO_135$"
+Offset = 0x00C70558
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData118]
-; CSI1_TX-/I2C_CAM1_DAT <--> W_GPIO_134
StructureType = GpioDataRecord
-GpioLabel = "SMARC S2 PAD1$"
-Offset = 0x00C70554
-AndData = 0x00000000
+GpioLabel = "W_GPIO_135$"
+Offset = 0x00C7055C
+AndData = 0x000000FF
OrData = 0x00006700
DataSize = 0x04
DataType = 0x04
[GpioData119]
-; CSI0_TX+/I2C_CAM0_CK <--> W_GPIO_133
StructureType = GpioDataRecord
-GpioLabel = "SMARC S5 PAD0$"
-Offset = 0x00C70548
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "W_GPIO_136$"
+Offset = 0x00C70560
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData120]
-; CSI0_TX+/I2C_CAM0_CK <--> W_GPIO_133
StructureType = GpioDataRecord
-GpioLabel = "SMARC S5 PAD1$"
-Offset = 0x00C7054C
-AndData = 0x00000000
-OrData = 0x00012700
+GpioLabel = "W_GPIO_136$"
+Offset = 0x00C70564
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData121]
-; CAM_MCK <--> W_OSC_CLK_OUT_0
StructureType = GpioDataRecord
-GpioLabel = "SMARC S6 PAD0$"
-Offset = 0x00C705F0
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "W_GPIO_137$"
+Offset = 0x00C70568
+AndData = 0x0801E0FE
+OrData = 0x44000100
DataSize = 0x04
DataType = 0x04
[GpioData122]
-; CAM_MCK <--> W_OSC_CLK_OUT_0
StructureType = GpioDataRecord
-GpioLabel = "SMARC S6 PAD1$"
-Offset = 0x00C705F4
-AndData = 0x00000000
-OrData = 0x00001000
+GpioLabel = "W_GPIO_137$"
+Offset = 0x00C7056C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData123]
-; CSI0_TX-/I2C_CAM0_DAT <--> W_GPIO_132
StructureType = GpioDataRecord
-GpioLabel = "SMARC S7 PAD0$"
-Offset = 0x00C70540
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "W_GPIO_146$"
+Offset = 0x00C70580
+AndData = 0x0801E0FE
+OrData = 0x44000C00
DataSize = 0x04
DataType = 0x04
[GpioData124]
-; CSI0_TX-/I2C_CAM0_DAT <--> W_GPIO_132
StructureType = GpioDataRecord
-GpioLabel = "SMARC S7 PAD1$"
-Offset = 0x00C70544
-AndData = 0x00000000
-OrData = 0x00012700
+GpioLabel = "W_GPIO_146$"
+Offset = 0x00C70584
+AndData = 0x000000FF
+OrData = 0x0003D000
DataSize = 0x04
DataType = 0x04
[GpioData125]
-; AUDIO_MCK <--> NW_GPIO_84
StructureType = GpioDataRecord
-GpioLabel = "SMARC S38 PAD0$"
-Offset = 0x00C40660
-AndData = 0x00000000
-OrData = 0x44000800
+GpioLabel = "W_GPIO_147$"
+Offset = 0x00C70588
+AndData = 0x0801E0FE
+OrData = 0x44000C00
DataSize = 0x04
DataType = 0x04
[GpioData126]
-; AUDIO_MCK <--> NW_GPIO_84
StructureType = GpioDataRecord
-GpioLabel = "SMARC S38 PAD1$"
-Offset = 0x00C40664
-AndData = 0x00000000
-OrData = 0x0000103D
+GpioLabel = "W_GPIO_147$"
+Offset = 0x00C7058C
+AndData = 0x000000FF
+OrData = 0x0003D000
DataSize = 0x04
DataType = 0x04
[GpioData127]
-; I2S0_LRCK <--> NW_GPIO_86
StructureType = GpioDataRecord
-GpioLabel = "SMARC S39 PAD0$"
-Offset = 0x00C40670
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "W_GPIO_148$"
+Offset = 0x00C70590
+AndData = 0x0801E0FE
+OrData = 0x44000C00
DataSize = 0x04
DataType = 0x04
[GpioData128]
-; I2S0_LRCK <--> NW_GPIO_86
StructureType = GpioDataRecord
-GpioLabel = "SMARC S39 PAD1$"
-Offset = 0x00C40674
-AndData = 0x00000000
-OrData = 0x0003D03F
+GpioLabel = "W_GPIO_148$"
+Offset = 0x00C70594
+AndData = 0x000000FF
+OrData = 0x0003C000
DataSize = 0x04
DataType = 0x04
[GpioData129]
-; I2S0_SDOUT <--> NW_GPIO_88
StructureType = GpioDataRecord
-GpioLabel = "SMARC S40 PAD0$"
-Offset = 0x00C40680
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "W_GPIO_149$"
+Offset = 0x00C70598
+AndData = 0x0801E0FE
+OrData = 0x44000C00
DataSize = 0x04
DataType = 0x04
[GpioData130]
-; I2S0_SDOUT <--> NW_GPIO_88
StructureType = GpioDataRecord
-GpioLabel = "SMARC S40 PAD1$"
-Offset = 0x00C40684
-AndData = 0x00000000
-OrData = 0x0003D041
+GpioLabel = "W_GPIO_149$"
+Offset = 0x00C7059C
+AndData = 0x000000FF
+OrData = 0x0003D000
DataSize = 0x04
DataType = 0x04
[GpioData131]
-; I2S0_SDIN <--> NW_GPIO_87
StructureType = GpioDataRecord
-GpioLabel = "SMARC S41 PAD0$"
-Offset = 0x00C40678
-AndData = 0x00000000
+GpioLabel = "W_OSC_CLK_OUT_0$"
+Offset = 0x00C705F0
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData132]
-; I2S0_SDIN <--> NW_GPIO_87
StructureType = GpioDataRecord
-GpioLabel = "SMARC S41 PAD1$"
-Offset = 0x00C4067C
-AndData = 0x00000000
-OrData = 0x00025240
+GpioLabel = "W_OSC_CLK_OUT_0$"
+Offset = 0x00C705F4
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData133]
-; I2S0_CK <--> NW_GPIO_85
StructureType = GpioDataRecord
-GpioLabel = "SMARC S42 PAD0$"
-Offset = 0x00C40668
-AndData = 0x00000000
-OrData = 0x44000400
+GpioLabel = "W_PMU_AC_PRESENT"
+Offset = 0x00C70618
+AndData = 0x0801E0FE
+OrData = 0x44000201
DataSize = 0x04
DataType = 0x04
[GpioData134]
-; I2S0_CK <--> NW_GPIO_85
StructureType = GpioDataRecord
-GpioLabel = "SMARC S42 PAD1$"
-Offset = 0x00C4066C
-AndData = 0x00000000
-OrData = 0x0003D03E
+GpioLabel = "W_PMU_AC_PRESENT"
+Offset = 0x00C7061C
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData135]
-; I2C_GP_CK <--> W_GPIO_137
StructureType = GpioDataRecord
-GpioLabel = "SMARC S48 PAD0$"
-Offset = 0x00C70568
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "W_PMU_BATLOW_B$"
+Offset = 0x00C70620
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData136]
-; I2C_GP_CK <--> W_GPIO_137
StructureType = GpioDataRecord
-GpioLabel = "SMARC S48 PAD1$"
-Offset = 0x00C7056C
-AndData = 0x00000000
-OrData = 0x00013300
+GpioLabel = "W_PMU_BATLOW_B$"
+Offset = 0x00C70624
+AndData = 0x000000FF
+OrData = 0x0003F000
DataSize = 0x04
DataType = 0x04
[GpioData137]
-; I2C_GP_DAT <--> W_GPIO_136
StructureType = GpioDataRecord
-GpioLabel = "SMARC S49 PAD0$"
-Offset = 0x00C70560
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "W_PMU_PLTRST_B$"
+Offset = 0x00C70628
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData138]
-; I2C_GP_DAT <--> W_GPIO_136
StructureType = GpioDataRecord
-GpioLabel = "SMARC S49 PAD1$"
-Offset = 0x00C70564
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "W_PMU_PLTRST_B$"
+Offset = 0x00C7062C
+AndData = 0x000000FF
+OrData = 0x0003C000
DataSize = 0x04
DataType = 0x04
[GpioData139]
-; HDA_SYNC/I2S2_LRCK <--> W_GPIO_147
StructureType = GpioDataRecord
-GpioLabel = "SMARC S50 PAD0$"
-Offset = 0x00C70588
-AndData = 0x00000000
-OrData = 0x44000C00
+GpioLabel = "W_PMU_SLP_S3_B$"
+Offset = 0x00C70648
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData140]
-; HDA_SYNC/I2S2_LRCK <--> W_GPIO_147
StructureType = GpioDataRecord
-GpioLabel = "SMARC S50 PAD1$"
-Offset = 0x00C7058C
-AndData = 0x00000000
-OrData = 0x0003D000
+GpioLabel = "W_PMU_SLP_S3_B$"
+Offset = 0x00C7064C
+AndData = 0x000000FF
+OrData = 0x0003C000
DataSize = 0x04
DataType = 0x04
[GpioData141]
-; HDA_SDO/I2S2_SDOUT <--> W_GPIO_149
StructureType = GpioDataRecord
-GpioLabel = "SMARC S51 PAD0$"
-Offset = 0x00C70598
-AndData = 0x00000000
-OrData = 0x44000C00
+GpioLabel = "SW_GPIO_206$"
+Offset = 0x00C00508
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData142]
-; HDA_SDO/I2S2_SDOUT <--> W_GPIO_149
StructureType = GpioDataRecord
-GpioLabel = "SMARC S51 PAD1$"
-Offset = 0x00C7059C
-AndData = 0x00000000
-OrData = 0x0003D000
+GpioLabel = "SW_GPIO_206$"
+Offset = 0x00C0050C
+AndData = 0x000000FF
+OrData = 0x0003F000
DataSize = 0x04
DataType = 0x04
[GpioData143]
-; HDA_SDI/I2S2_SDIN <--> W_GPIO_148
StructureType = GpioDataRecord
-GpioLabel = "SMARC S52 PAD0$"
-Offset = 0x00C70590
-AndData = 0x00000000
-OrData = 0x44000C00
+GpioLabel = "SW_GPIO_166$"
+Offset = 0x00C00570
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData144]
-; HDA_SDI/I2S2_SDIN <--> W_GPIO_148
StructureType = GpioDataRecord
-GpioLabel = "SMARC S52 PAD1$"
-Offset = 0x00C70594
-AndData = 0x00000000
-OrData = 0x0003C000
+GpioLabel = "SW_GPIO_166$"
+Offset = 0x00C00574
+AndData = 0x000000FF
+OrData = 0x00005000
DataSize = 0x04
DataType = 0x04
[GpioData145]
-; HDA_CK/I2S2_CK <--> W_GPIO_146
StructureType = GpioDataRecord
-GpioLabel = "SMARC S53 PAD0$"
-Offset = 0x00C70580
-AndData = 0x00000000
-OrData = 0x44000C00
+GpioLabel = "SW_GPIO_167$"
+Offset = 0x00C00578
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData146]
-; HDA_CK/I2S2_CK <--> W_GPIO_146
StructureType = GpioDataRecord
-GpioLabel = "SMARC S53 PAD1$"
-Offset = 0x00C70584
-AndData = 0x00000000
-OrData = 0x0003D000
+GpioLabel = "SW_GPIO_167$"
+Offset = 0x00C0057C
+AndData = 0x000000FF
+OrData = 0x00023000
DataSize = 0x04
DataType = 0x04
[GpioData147]
-; SATA_ACT <--> N_GPIO_26
StructureType = GpioDataRecord
-GpioLabel = "SMARC S54 PAD0$"
-Offset = 0x00C505D0
-AndData = 0x00000000
-OrData = 0x44001400
+GpioLabel = "SW_GPIO_168$"
+Offset = 0x00C00580
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData148]
-; SATA_ACT <--> N_GPIO_26
StructureType = GpioDataRecord
-GpioLabel = "SMARC S54 PAD1$"
-Offset = 0x00C505D4
-AndData = 0x00000000
-OrData = 0x00001037
+GpioLabel = "SW_GPIO_168$"
+Offset = 0x00C00584
+AndData = 0x000000FF
+OrData = 0x00023000
DataSize = 0x04
DataType = 0x04
[GpioData149]
-; DP0_HPD <--> NW_GPIO_200
StructureType = GpioDataRecord
-GpioLabel = "SMARC S98 PAD0$"
-Offset = 0x00C40568
-AndData = 0x00000000
-OrData = 0x44000802
+GpioLabel = "SW_GPIO_169$"
+Offset = 0x00C00588
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData150]
-; DP0_HPD <--> NW_GPIO_200
StructureType = GpioDataRecord
-GpioLabel = "SMARC S98 PAD1$"
-Offset = 0x00C4056C
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "SW_GPIO_169$"
+Offset = 0x00C0058C
+AndData = 0x000000FF
+OrData = 0x00023000
DataSize = 0x04
DataType = 0x04
[GpioData151]
-; LCD1_BKLT_EN <--> NW_GPIO_197
StructureType = GpioDataRecord
-GpioLabel = "SMARC S107 PAD0$"
-Offset = 0x00C40550
-AndData = 0x00000000
-OrData = 0x44000200
+GpioLabel = "SW_GPIO_170$"
+Offset = 0x00C00590
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData152]
-; LCD1_BKLT_EN <--> NW_GPIO_197
StructureType = GpioDataRecord
-GpioLabel = "SMARC S107 PAD1$"
-Offset = 0x00C40554
-AndData = 0x00000000
-OrData = 0x00001000
+GpioLabel = "SW_GPIO_170$"
+Offset = 0x00C00594
+AndData = 0x000000FF
+OrData = 0x00023000
DataSize = 0x04
DataType = 0x04
[GpioData153]
-; LCD1_VDD_EN <--> NW_GPIO_196
StructureType = GpioDataRecord
-GpioLabel = "SMARC S116 PAD0$"
-Offset = 0x00C40548
-AndData = 0x00000000
-OrData = 0x44000200
+GpioLabel = "SW_GPIO_171$"
+Offset = 0x00C00598
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData154]
-; LCD1_VDD_EN <--> NW_GPIO_196
StructureType = GpioDataRecord
-GpioLabel = "SMARC S116 PAD1$"
-Offset = 0x00C4054C
-AndData = 0x00000000
-OrData = 0x00001000
+GpioLabel = "SW_GPIO_171$"
+Offset = 0x00C0059C
+AndData = 0x000000FF
+OrData = 0x00023000
DataSize = 0x04
DataType = 0x04
[GpioData155]
-; LCD1_BKLT_PWM <--> NW_GPIO_198
StructureType = GpioDataRecord
-GpioLabel = "SMARC S122 PAD0$"
-Offset = 0x00C40558
-AndData = 0x00000000
+GpioLabel = "SW_GPIO_172$"
+Offset = 0x00C005A0
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData156]
-; LCD1_BKLT_PWM <--> NW_GPIO_198
StructureType = GpioDataRecord
-GpioLabel = "SMARC S122 PAD1$"
-Offset = 0x00C4055C
-AndData = 0x00000000
-OrData = 0x00001000
+GpioLabel = "SW_GPIO_172$"
+Offset = 0x00C005A4
+AndData = 0x000000FF
+OrData = 0x00021100
DataSize = 0x04
DataType = 0x04
[GpioData157]
-; LCD0_VDD_EN <--> NW_GPIO_193
StructureType = GpioDataRecord
-GpioLabel = "SMARC S133 PAD0$"
-Offset = 0x00C40530
-AndData = 0x00000000
+GpioLabel = "SW_GPIO_173$"
+Offset = 0x00C005A8
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData158]
-; LCD0_VDD_EN <--> NW_GPIO_193
StructureType = GpioDataRecord
-GpioLabel = "SMARC S133 PAD1$"
-Offset = 0x00C40534
-AndData = 0x00000000
-OrData = 0x00005000
+GpioLabel = "SW_GPIO_173$"
+Offset = 0x00C005AC
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData159]
-; I2C_LCD_CK <--> W_GPIO_127
StructureType = GpioDataRecord
-GpioLabel = "SMARC S139 PAD0$"
-Offset = 0x00C70518
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "SW_GPIO_174$"
+Offset = 0x00C005B0
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData160]
-; I2C_LCD_CK <--> W_GPIO_127
StructureType = GpioDataRecord
-GpioLabel = "SMARC S139 PAD1$"
-Offset = 0x00C7051C
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "SW_GPIO_174$"
+Offset = 0x00C005B4
+AndData = 0x000000FF
+OrData = 0x00023100
DataSize = 0x04
DataType = 0x04
[GpioData161]
-; I2C_LCD_DAT <--> W_GPIO_126
StructureType = GpioDataRecord
-GpioLabel = "SMARC S140 PAD0$"
-Offset = 0x00C70510
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "SW_GPIO_175$"
+Offset = 0x00C005B8
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData162]
-; I2C_LCD_DAT <--> W_GPIO_126
StructureType = GpioDataRecord
-GpioLabel = "SMARC S140 PAD1$"
-Offset = 0x00C70514
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "SW_GPIO_175$"
+Offset = 0x00C005BC
+AndData = 0x000000FF
+OrData = 0x00023000
DataSize = 0x04
DataType = 0x04
[GpioData163]
-; eDP0_HPD <--> NW_PMC_SPI_FS1
StructureType = GpioDataRecord
-GpioLabel = "SMARC S144 PAD0$"
-Offset = 0x00C40598
-AndData = 0x00000000
-OrData = 0x44000800
+GpioLabel = "SW_GPIO_176$"
+Offset = 0x00C005C0
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData164]
-; eDP0_HPD <--> NW_PMC_SPI_FS1
StructureType = GpioDataRecord
-GpioLabel = "SMARC S144 PAD1$"
-Offset = 0x00C4059C
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "SW_GPIO_176$"
+Offset = 0x00C005C4
+AndData = 0x000000FF
+OrData = 0x00023000
DataSize = 0x04
DataType = 0x04
[GpioData165]
-; PCIE_WAKE <--> SW_GPIO_206
StructureType = GpioDataRecord
-GpioLabel = "SMARC S146 PAD0$"
-Offset = 0x00C00508
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "SW_GPIO_177$"
+Offset = 0x00C005C8
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData166]
-; PCIE_WAKE <--> SW_GPIO_206
StructureType = GpioDataRecord
-GpioLabel = "SMARC S146 PAD1$"
-Offset = 0x00C0050C
-AndData = 0x00000000
-OrData = 0x0003F000
+GpioLabel = "SW_GPIO_177$"
+Offset = 0x00C005CC
+AndData = 0x000000FF
+OrData = 0x00023000
DataSize = 0x04
DataType = 0x04
[GpioData167]
-; LID <--> N_GPIO_6
StructureType = GpioDataRecord
-GpioLabel = "SMARC S148 PAD0$"
-Offset = 0x00C50530
-AndData = 0x00000000
-OrData = 0x46080102
+GpioLabel = "SW_GPIO_178$"
+Offset = 0x00C005D0
+AndData = 0x0801E0FE
+OrData = 0x42000100
DataSize = 0x04
DataType = 0x04
[GpioData168]
-; LID <--> N_GPIO_6
StructureType = GpioDataRecord
-GpioLabel = "SMARC S148 PAD1$"
-Offset = 0x00C50534
-AndData = 0x00000000
-OrData = 0x00003069
+GpioLabel = "SW_GPIO_178$"
+Offset = 0x00C005D4
+AndData = 0x000000FF
+OrData = 0x00027000
DataSize = 0x04
DataType = 0x04
[GpioData169]
-; SLEEP <--> N_GPIO_7
StructureType = GpioDataRecord
-GpioLabel = "SMARC S149 PAD0$"
-Offset = 0x00C50538
-AndData = 0x00000000
-OrData = 0x42880102
+GpioLabel = "SW_GPIO_186$"
+Offset = 0x00C005E0
+AndData = 0x0801E0FE
+OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData170]
-; SLEEP <--> N_GPIO_7
StructureType = GpioDataRecord
-GpioLabel = "SMARC S149 PAD1$"
-Offset = 0x00C5053C
-AndData = 0x00000000
-OrData = 0x0000306A
+GpioLabel = "SW_GPIO_186$"
+Offset = 0x00C005E4
+AndData = 0x000000FF
+OrData = 0x00003000
DataSize = 0x04
DataType = 0x04
[GpioData171]
-; CHARGER_PRSNT <--> W_PMU_AC_PRESENT
StructureType = GpioDataRecord
-GpioLabel = "SMARC S152 PAD0$"
-Offset = 0x00C70618
-AndData = 0x00000000
+GpioLabel = "SW_GPIO_183$"
+Offset = 0x00C005F0
+AndData = 0x0801E0FE
OrData = 0x44000201
DataSize = 0x04
DataType = 0x04
[GpioData172]
-; CHARGER_PRSNT <--> W_PMU_AC_PRESENT
StructureType = GpioDataRecord
-GpioLabel = "SMARC S152 PAD1$"
-Offset = 0x00C7061C
-AndData = 0x00000000
-OrData = 0x00003000
+GpioLabel = "SW_GPIO_183$"
+Offset = 0x00C005F4
+AndData = 0x000000FF
+OrData = 0x00001000
DataSize = 0x04
DataType = 0x04
[GpioData173]
-; CARRIER_STBY <--> W_PMU_SLP_S3_B
StructureType = GpioDataRecord
-GpioLabel = "SMARC S153 PAD0$"
-Offset = 0x00C70648
-AndData = 0x00000000
+GpioLabel = "SW_SMB_ALERTB$"
+Offset = 0x00C005F8
+AndData = 0x0801E0FE
OrData = 0x44000400
DataSize = 0x04
DataType = 0x04
[GpioData174]
-; CARRIER_STBY <--> W_PMU_SLP_S3_B
StructureType = GpioDataRecord
-GpioLabel = "SMARC S153 PAD1$"
-Offset = 0x00C7064C
-AndData = 0x00000000
-OrData = 0x0003C000
+GpioLabel = "SW_SMB_ALERTB$"
+Offset = 0x00C005FC
+AndData = 0x000000FF
+OrData = 0x0003F000
DataSize = 0x04
DataType = 0x04
[GpioData175]
-; FORCE_RECOV <--> N_GPIO_21
StructureType = GpioDataRecord
-GpioLabel = "SMARC S155 PAD0$"
-Offset = 0x00C505A8
-AndData = 0x00000000
-OrData = 0x44000102
+GpioLabel = "SW_SMB_CLK$"
+Offset = 0x00C00600
+AndData = 0x0801E0FE
+OrData = 0x44000800
DataSize = 0x04
DataType = 0x04
[GpioData176]
-; FORCE_RECOV <--> N_GPIO_21
StructureType = GpioDataRecord
-GpioLabel = "SMARC S155 PAD1$"
-Offset = 0x00C505AC
-AndData = 0x00000000
-OrData = 0x00003032
+GpioLabel = "SW_SMB_CLK$"
+Offset = 0x00C00604
+AndData = 0x000000FF
+OrData = 0x00013300
DataSize = 0x04
DataType = 0x04
[GpioData177]
-; BATLOW <--> W_PMU_BATLOW_B
StructureType = GpioDataRecord
-GpioLabel = "SMARC S156 PAD0$"
-Offset = 0x00C70620
-AndData = 0x00000000
-OrData = 0x44000402
+GpioLabel = "SW_SMB_DATA$"
+Offset = 0x00C00608
+AndData = 0x0801E0FE
+OrData = 0x44000800
DataSize = 0x04
DataType = 0x04
[GpioData178]
-; BATLOW <--> W_PMU_BATLOW_B
-StructureType = GpioDataRecord
-GpioLabel = "SMARC S156 PAD1$"
-Offset = 0x00C70624
-AndData = 0x00000000
-OrData = 0x0003F000
-DataSize = 0x04
-DataType = 0x04
-
-[GpioData179]
-; TEST <--> N_GPIO_25
-StructureType = GpioDataRecord
-GpioLabel = "SMARC S157 PAD0$"
-Offset = 0x00C505C8
-AndData = 0x00000000
-OrData = 0x44000102
-DataSize = 0x04
-DataType = 0x04
-
-[GpioData180]
-; TEST <--> N_GPIO_25
StructureType = GpioDataRecord
-GpioLabel = "SMARC S157 PAD1$"
-Offset = 0x00C505CC
-AndData = 0x00000000
-OrData = 0x0001F036
+GpioLabel = "SW_SMB_DATA$"
+Offset = 0x00C0060C
+AndData = 0x000000FF
+OrData = 0x00013300
DataSize = 0x04
DataType = 0x04
@@ -2001,8 +1816,8 @@ DataType = 0x04
; P117 | GPIO9 | N_GPIO_2 | C39 | ICM--65 | 0x00C50510
; P118 | GPIO10 | N_GPIO_3 | B39 | ICM--66 | 0x00C50518
; P119 | GPIO11 | N_GPIO_4 | B35 | ICM--67 | 0x00C50520
-; P121 | I2C_PM_CK | W_GPIO_139 | T62 | -CM---- | 0x00C70578
-; P122 | I2C_PM_DAT | W_GPIO_138 | T61 | -CM---- | 0x00C70570
+; P121 | I2C_PM_CK | SW_SMB_CLK | T62 | -C----- | 0x00C00600
+; P122 | I2C_PM_DAT | SW_SMB_DATA | T61 | -C----- | 0x00C00608
; P123 | BOOT_SEL0 | N_GPIO_24 | C25 | ICM--35 | 0x00C505C0
; P124 | BOOT_SEL1 | N_GPIO_23 | B25 | ICM--34 | 0x00C505B8
; P125 | BOOT_SEL2 | N_GPIO_22 | A26 | ICM--33 | 0x00C505B0
@@ -2248,5 +2063,3 @@ Struct_175 = GpioData175
Struct_176 = GpioData176
Struct_177 = GpioData177
Struct_178 = GpioData178
-Struct_179 = GpioData179
-Struct_180 = GpioData180
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Memory/DramPolicyPpi.bin b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Memory/DramPolicyPpi.bin
new file mode 100644
index 0000000000000000000000000000000000000000..69dcc21ff589c404e987d973be52d09882b49cd7
GIT binary patch
literal 223
# Removed to conserve space
literal 0
# Removed to conserve space
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Memory/GenerateDramPolicyBinary.py b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Memory/GenerateDramPolicyBinary.py
new file mode 100644
index 0000000000..cc5fddebac
--- /dev/null
+++ b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/Memory/GenerateDramPolicyBinary.py
@@ -0,0 +1,64 @@
+# @file
+# Script file to generate the EEPROM binary
+#
+# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+#
+# This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php.
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+
+import glob
+import os
+import subprocess
+import sys
+
+# Version defines
+__version__ = '0.1.0.0'
+VerString = 'EEPROM DramPolicyPpi binary generation tool, Version #{0}'.format(__version__)
+PythonVersion = 'Python version = {0:X}'.format(sys.hexversion)
+
+def Main():
+ # Set return code to error
+ ReturnCode = 1
+
+ try:
+ # Get paths
+ ThisUtilityPath = os.path.dirname(os.path.abspath(sys.argv[0]))
+ # Backup until we get to BroxtonPlatformPkg
+ TempPath = ThisUtilityPath
+ while os.path.basename(TempPath) != 'BroxtonPlatformPkg':
+ TempPath = os.path.dirname(TempPath)
+ UtilityPath = TempPath + '\\Common\\Features\\Eeprom\\EepromBinary\\Utilities'
+ ScrapDramPolicyPath = UtilityPath + '\\ScrapDramPolicyPpi.py'
+ OutputFilePath = ThisUtilityPath + '\\DramPolicyPpi.bin'
+ if len(sys.argv) > 1:
+ LogFilePath = sys.argv[1]
+
+ # Debug prints
+ if False:
+ print('sys.argv[0] = {0}'.format(sys.argv[0]))
+ print('ThisUtilityPath = {0}'.format(ThisUtilityPath))
+ print('UtilityPath = {0}'.format(UtilityPath))
+ print('ScrapDramPolicyPath = {0}'.format(ScrapDramPolicyPath))
+ print('LogFilePath = {0}'.format(LogFilePath))
+
+ # Generate DramPolicyPpi binary
+ # ScrapDramPolicyPpi.py LogFilePath OutputFilePath
+ subprocess.call(['python.exe', ScrapDramPolicyPath, LogFilePath, OutputFilePath])
+
+ # Clear error code
+ ReturnCode = 0
+
+ finally:
+ return ReturnCode
+
+if __name__ == "__main__":
+ print('')
+ print(VerString)
+ print(PythonVersion)
+ sys.exit(Main())
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/Vbt_bxt_t_TianmaMipi.bin b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/VbtBxtMipi.bin
similarity index 66%
rename from Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/Vbt_bxt_t_TianmaMipi.bin
rename to Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/VbtBxtMipi.bin
index 32c872a7e321d5ddc2c419734b410f2ba165090d..48565f431e281bb50910479d03ab6caa6aa7980c 100644
GIT binary patch
delta 282
# Removed to conserve space
delta 621
# Removed to conserve space
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/Vbt_bxt_t_fab_b.bin b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/Vbt_bxt_t_fab_b.bin
deleted file mode 100644
index a29afe5f1abcf394a0d0ffed3b0338f0f2ef3fd7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
# Removed to conserve space
literal 7168
# Removed to conserve space
diff --git a/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/Vbt_bxt_t_fab_b_TrulyMipi_Cmd.bin b/Platform/BroxtonPlatformPkg/Board/MinnowBoard3Module/Eeprom/VBT/Vbt_bxt_t_fab_b_TrulyMipi_Cmd.bin
deleted file mode 100644
index 26f691d4f55b0ed791ac0d2b8ab0d68747e4405a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
# Removed to conserve space
literal 6656
# Removed to conserve space
diff --git a/Platform/BroxtonPlatformPkg/BuildBxtBios.bat b/Platform/BroxtonPlatformPkg/BuildBxtBios.bat
index cdf666a7a4..9bd71198e5 100644
--- a/Platform/BroxtonPlatformPkg/BuildBxtBios.bat
+++ b/Platform/BroxtonPlatformPkg/BuildBxtBios.bat
@@ -91,6 +91,7 @@ if /i "%~1"=="/l" (
shift
goto OptLoop
)
+
if /i "%~1"=="/ia32" (
set Arch=IA32
shift
@@ -742,6 +743,5 @@ echo See EDK2.log for more details
echo %date% %time%
(
EndLocal
- set BiosVersion=%BiosVersion%
exit /b %ExitCode%
)
diff --git a/Platform/BroxtonPlatformPkg/BuildIFWI.bat b/Platform/BroxtonPlatformPkg/BuildIFWI.bat
index 78cdac5111..5566e211ee 100644
--- a/Platform/BroxtonPlatformPkg/BuildIFWI.bat
+++ b/Platform/BroxtonPlatformPkg/BuildIFWI.bat
@@ -244,6 +244,5 @@ set exitCode=1
:Exit
(
EndLocal
- set Arch=%Arch%
exit /b %exitCode%
)
diff --git a/Platform/BroxtonPlatformPkg/Common/Acpi/AcpiPlatformDxe/AcpiPlatform.c b/Platform/BroxtonPlatformPkg/Common/Acpi/AcpiPlatformDxe/AcpiPlatform.c
index 4cc1e1fc39..fd366da373 100644
--- a/Platform/BroxtonPlatformPkg/Common/Acpi/AcpiPlatformDxe/AcpiPlatform.c
+++ b/Platform/BroxtonPlatformPkg/Common/Acpi/AcpiPlatformDxe/AcpiPlatform.c
@@ -43,6 +43,7 @@
#include <Library/DxeVtdLib.h>
#include <Library/SideBandLib.h>
#include <Library/SteppingLib.h>
+#include <Library/EepromPlatformLib.h>
#include <Private/CpuInitDataHob.h>
#include "PlatformBaseAddresses.h"
@@ -1084,6 +1085,11 @@ OnReadyToBoot (
// UpdateDmarOnReadyToBoot (SetupVarBuffer.VTdEnable);
//
+ // Add EEPROM SSDT tables if they exist
+ //
+ Status = EepromProgramAcpi ();
+
+ //
// Publish ACPI 1.0 or 2.0 Tables
//
Status = AcpiSupport->PublishTables (
diff --git a/Platform/BroxtonPlatformPkg/Common/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf b/Platform/BroxtonPlatformPkg/Common/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
index 21ce938229..118681fa3a 100644
--- a/Platform/BroxtonPlatformPkg/Common/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
+++ b/Platform/BroxtonPlatformPkg/Common/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
@@ -1,7 +1,7 @@
## @file
# ACPI Platform Driver.
#
-# Copyright (c) 1999 - 2017, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@@ -46,6 +46,7 @@
SteppingLib
SeCLib
PcdLib
+ EepromPlatformLib
[Guids]
gACPIOSFRMfgStringVariableGuid
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.c
index 3b1b48baee..b586cd1993 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.c
@@ -62,9 +62,16 @@ ShellAppMain (
ParseParameters (Argc, Argv, &ProgramInfo);
// Print App version
- Print (L"EepromApp - Version #%s\n", APP_VERSION);
+ Print (L"EepromApp for BXT/APL - Version #%s\n", APP_VERSION);
Print (L"Copyright (c) %s Intel Corporation. All rights reserved.\n\n", APP_COPYRIGHT);
+ // Make sure we support this SoC
+ if (! IsApolloLake ()) {
+ Print (L"ERROR: This is not a Broxton or Apollo Lake SoC!\n");
+ Status = SHELL_INVALID_PARAMETER;
+ goto Exit;
+ }
+
// Help requested?
if (ProgramInfo.HelpFlag) {
PrintHelp ();
@@ -85,7 +92,7 @@ ShellAppMain (
//
// Skip this if we are doing a scan.
//
- Print (L"- GetValidEepromLibrary() = %a\n", mEepromLibraryString[GetValidEepromLibrary (TRUE)]);
+ Print (L"- GetValidEepromLibrary() = %a\n", mEepromLibraryString[GetValidEepromLibrary (FALSE)]);
} else {
// Scanning
Status = ScanOption (&ProgramInfo);
@@ -1244,6 +1251,15 @@ GetHexOrDecFromString (
}
}
+BOOLEAN
+IsApolloLake (VOID)
+{
+ if (GetBxtSeries () == BxtSeriesMax) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
VOID
ParseParameters (
IN UINTN Argc,
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.h b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.h
index 7babb6555e..9470843775 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.h
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.h
@@ -1,196 +1,200 @@
-/** @file
-
- This application will read/write/verify/dump the EERPOM data.
-
- Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
-
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License which accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
-**/
-
-#ifndef _EEPROM_APP_H_
-#define _EEPROM_APP_H_
-
-#include <Uefi.h>
-
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/EepromDataLib.h>
-#include <Library/EepromLib.h>
-#include <Library/FileHandleLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/PcdLib.h>
-#include <Library/PrintLib.h>
-#include <Library/ShellCEntryLib.h>
-#include <Library/ShellLib.h>
-#include <Library/TimerLib.h>
-#include <Library/UefiLib.h>
-
-// Defines
-#define APP_VERSION L"1.00.00"
-#define APP_COPYRIGHT L"2017 - 2018"
-#define DIVIDING_LINE L"+----------------------------------------------------+------------------+\n"
-
-#define MD5DigestSize 0x10
-#define SHA1DigestSize 0x14
-#define SHA256DigestSize 0x20
-#define SHA384DigestSize 0x30
-#define SHA512DigestSize 0x40
-
-// Structures
-typedef struct {
- BOOLEAN HelpFlag;
- BOOLEAN AddressFlag;
- UINT8 AddressValue;
- BOOLEAN BusFlag;
- UINT8 BusValue;
- BOOLEAN CheckFlag;
- UINT8 CheckLibraryIndex;
- UINT8 *CheckFile;
- CHAR16 *CheckFileName;
- UINT32 CheckFileSize;
- BOOLEAN DumpHumanFlag;
- UINT8 DumpHumanLibraryIndex;
- UINT8 *DumpHumanFile;
- CHAR16 *DumpHumanFileName;
- UINT32 DumpHumanFileSize;
- BOOLEAN DumpRawFlag;
- UINT8 DumpRawLibraryIndex;
- UINT8 *DumpRawFile;
- CHAR16 *DumpRawFileName;
- UINT32 DumpRawFileSize;
- BOOLEAN EraseFlag;
- UINT8 EraseLibraryIndex;
- BOOLEAN ReadFlag;
- UINT8 ReadLibraryIndex;
- UINT8 *ReadFile;
- CHAR16 *ReadFileName;
- UINT32 ReadFileSize;
- BOOLEAN ScanFlag;
- BOOLEAN VerboseFlag;
- BOOLEAN VerifyFlag;
- UINT8 VerifyLibraryIndex;
- UINT8 *VerifyFile;
- CHAR16 *VerifyFileName;
- UINT32 VerifyFileSize;
- BOOLEAN WriteFlag;
- UINT8 WriteLibraryIndex;
- UINT8 *WriteFile;
- CHAR16 *WriteFileName;
- UINT32 WriteFileSize;
-} PROGRAM_INFO;
-
-// Headers
-SHELL_STATUS
-BufferToMemory (
- IN UINT8 *Buffer,
- IN UINT32 BufferSize,
- OUT UINT8 **MemoryBuffer,
- OUT UINT32 *MemoryBufferSize
- );
-
-SHELL_STATUS
-CheckForInvalidOptions (
- IN PROGRAM_INFO *ProgramInfo
- );
-
-SHELL_STATUS
-CheckOption (
- IN PROGRAM_INFO *ProgramInfo
- );
-
-SHELL_STATUS
-DumpHumanOption (
- IN PROGRAM_INFO *ProgramInfo
- );
-
-VOID
-DumpParagraph (
- IN VOID *Ptr,
- IN UINTN Count
- );
-
-VOID
-DumpProgramInfo (
- IN PROGRAM_INFO *ProgramInfo
- );
-
-SHELL_STATUS
-DumpRawOption (
- IN PROGRAM_INFO *ProgramInfo
- );
-
-SHELL_STATUS
-EraseOption (
- IN PROGRAM_INFO *ProgramInfo
- );
-
-UINTN
-GetHexOrDecFromString (
- CHAR16 *Arg
- );
-
-VOID
-ParseParameters (
- IN UINTN Argc,
- IN CHAR16 **Argv,
- IN PROGRAM_INFO *ProgramInfo
- );
-
-VOID
-PrintChar (
- IN UINT8 Count,
- IN CHAR16 *Char
-);
-
-VOID
-PrintHelp (VOID);
-
-EFI_STATUS
-ReadFileData (
- IN CHAR16 *FileName,
- OUT UINT8 **Buffer,
- OUT UINT32 *BufferSize
- );
-
-SHELL_STATUS
-ReadOption (
- IN PROGRAM_INFO *ProgramInfo
- );
-
-SHELL_STATUS
-ScanOption (
- IN PROGRAM_INFO *ProgramInfo
- );
-
-CHAR16 *
-ToLower (
- IN OUT CHAR16 *Str
- );
-
-SHELL_STATUS
-VerifyOption (
- IN PROGRAM_INFO *ProgramInfo
- );
-
-EFI_STATUS
-WriteFileData (
- IN CHAR16 *FileName,
- IN UINT8 *Buffer,
- IN UINTN BufferSize
- );
-
-SHELL_STATUS
-WriteOption (
- IN PROGRAM_INFO *ProgramInfo
- );
-
+/** @file
+
+ This application will read/write/verify/dump the EERPOM data.
+
+ Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License which accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+**/
+
+#ifndef _EEPROM_APP_H_
+#define _EEPROM_APP_H_
+
+#include <Uefi.h>
+
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/EepromDataLib.h>
+#include <Library/EepromLib.h>
+#include <Library/FileHandleLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PcdLib.h>
+#include <Library/PrintLib.h>
+#include <Library/ShellCEntryLib.h>
+#include <Library/ShellLib.h>
+#include <Library/SteppingLib.h>
+#include <Library/TimerLib.h>
+#include <Library/UefiLib.h>
+
+// Defines
+#define APP_VERSION L"1.00.01"
+#define APP_COPYRIGHT L"2017 - 2018"
+#define DIVIDING_LINE L"+----------------------------------------------------+------------------+\n"
+
+#define MD5DigestSize 0x10
+#define SHA1DigestSize 0x14
+#define SHA256DigestSize 0x20
+#define SHA384DigestSize 0x30
+#define SHA512DigestSize 0x40
+
+// Structures
+typedef struct {
+ BOOLEAN HelpFlag;
+ BOOLEAN AddressFlag;
+ UINT8 AddressValue;
+ BOOLEAN BusFlag;
+ UINT8 BusValue;
+ BOOLEAN CheckFlag;
+ UINT8 CheckLibraryIndex;
+ UINT8 *CheckFile;
+ CHAR16 *CheckFileName;
+ UINT32 CheckFileSize;
+ BOOLEAN DumpHumanFlag;
+ UINT8 DumpHumanLibraryIndex;
+ UINT8 *DumpHumanFile;
+ CHAR16 *DumpHumanFileName;
+ UINT32 DumpHumanFileSize;
+ BOOLEAN DumpRawFlag;
+ UINT8 DumpRawLibraryIndex;
+ UINT8 *DumpRawFile;
+ CHAR16 *DumpRawFileName;
+ UINT32 DumpRawFileSize;
+ BOOLEAN EraseFlag;
+ UINT8 EraseLibraryIndex;
+ BOOLEAN ReadFlag;
+ UINT8 ReadLibraryIndex;
+ UINT8 *ReadFile;
+ CHAR16 *ReadFileName;
+ UINT32 ReadFileSize;
+ BOOLEAN ScanFlag;
+ BOOLEAN VerboseFlag;
+ BOOLEAN VerifyFlag;
+ UINT8 VerifyLibraryIndex;
+ UINT8 *VerifyFile;
+ CHAR16 *VerifyFileName;
+ UINT32 VerifyFileSize;
+ BOOLEAN WriteFlag;
+ UINT8 WriteLibraryIndex;
+ UINT8 *WriteFile;
+ CHAR16 *WriteFileName;
+ UINT32 WriteFileSize;
+} PROGRAM_INFO;
+
+// Headers
+SHELL_STATUS
+BufferToMemory (
+ IN UINT8 *Buffer,
+ IN UINT32 BufferSize,
+ OUT UINT8 **MemoryBuffer,
+ OUT UINT32 *MemoryBufferSize
+ );
+
+SHELL_STATUS
+CheckForInvalidOptions (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+SHELL_STATUS
+CheckOption (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+SHELL_STATUS
+DumpHumanOption (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+VOID
+DumpParagraph (
+ IN VOID *Ptr,
+ IN UINTN Count
+ );
+
+VOID
+DumpProgramInfo (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+SHELL_STATUS
+DumpRawOption (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+SHELL_STATUS
+EraseOption (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+UINTN
+GetHexOrDecFromString (
+ CHAR16 *Arg
+ );
+
+BOOLEAN
+IsApolloLake (VOID);
+
+VOID
+ParseParameters (
+ IN UINTN Argc,
+ IN CHAR16 **Argv,
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+VOID
+PrintChar (
+ IN UINT8 Count,
+ IN CHAR16 *Char
+);
+
+VOID
+PrintHelp (VOID);
+
+EFI_STATUS
+ReadFileData (
+ IN CHAR16 *FileName,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
+ );
+
+SHELL_STATUS
+ReadOption (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+SHELL_STATUS
+ScanOption (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+CHAR16 *
+ToLower (
+ IN OUT CHAR16 *Str
+ );
+
+SHELL_STATUS
+VerifyOption (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
+EFI_STATUS
+WriteFileData (
+ IN CHAR16 *FileName,
+ IN UINT8 *Buffer,
+ IN UINTN BufferSize
+ );
+
+SHELL_STATUS
+WriteOption (
+ IN PROGRAM_INFO *ProgramInfo
+ );
+
#endif // _EEPROM_APP_H_
\ No newline at end of file
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.inf b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.inf
index a13974891b..738404edd1 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.inf
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromApp/EepromApp.inf
@@ -50,6 +50,7 @@
PrintLib
ShellCEntryLib
ShellLib
+ SteppingLib
TimerLib
UefiApplicationEntryPoint
UefiLib
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/Docs/EepromLayout.txt b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/Docs/EepromLayout.txt
index 7a4f004ecd..037303081d 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/Docs/EepromLayout.txt
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/Docs/EepromLayout.txt
@@ -13,8 +13,8 @@
#
##
-Version: 1.10
-Dated: 07-31-2018
+Version: 1.11
+Dated: 09-11-2018
- The first 4KB of the EEPROM data MUST be accessible from I2C bus
gPlatformModuleTokenSpaceGuid.PcdEepromBus, address
@@ -80,25 +80,14 @@ Dated: 07-31-2018
- If characters in a Signature[8] or a Label[16] don't fill the entire allocated length,
append string with $ as a sentinel value. IE - Signature[8] : "$uCode" shall be "$uCode$"
-- If there is a valid binary in both the FV and EEPROM, BIOS will use the following rules to determine
- which one to load into memory and use:
- - It is assumed that the FV and EEPROM binaries have both passed sanity checks.
- - CRC32 passes
- - Hash and signed hash passes if present
- - If the following fields are not equal, then the FV is assumed to have priority:
- - $BrdInfo.ManuName
- - $BrdInfo.BrdName
- - $BrdInfo.BoardId
- - $BrdInfo.FabId
- - $BrdInfo.EcId
- - $BrdInfo.BoardType
- - If the $BrdInfo test passes, then priority is given to the image with the greater $Eeprom$.Version.
- - If the $BrdInfo test passes and $Eeprom$.Version are equal, then use the FV due to speed concerns.
+- If there is a valid binary in both the FV and EEPROM, BIOS will use the image with the greater
+ $Eeeprom$.Version.
- Due to the size of OpenSSL, it is unavailable in PEI for verifying the hash and/or signature in
$PromSig. As such, the $PromSig data, if present, is stored in a NvStorage variable for use in PEI.
It will be checked and if needed, updated each boot in DXE. If it changes, then BIOS will reboot to
- ensure that the PEI integrity check passes.
+ ensure that the PEI integrity check passes. Please note that on some systems, this variable is
+ unavailable until after memory has been initialized.
Generic header structure
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/ReadMe.txt b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/ReadMe.txt
index d161e4d51d..916e61bef5 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/ReadMe.txt
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/ReadMe.txt
@@ -184,6 +184,8 @@ EepromApp.efi
gPlatformModuleTokenSpaceGuid.PcdEepromInMemoryFlag|0|BOOLEAN|0xEEEE0006
## Flag to tell if EEPROM Map is in HOB
gPlatformModuleTokenSpaceGuid.PcdEepromMapHobValid|0|BOOLEAN|0xEEEE0007
+ ## Flag to tell if EEPROM image require DXE verification or not
+ gPlatformModuleTokenSpaceGuid.PcdEepromDxeVerificationRequired|0|BOOLEAN|0xEEEE0008
[PcdsFixedAtBuild]
## I2C bus the master EEPROM is hanging on
@@ -200,6 +202,9 @@ EepromApp.efi
gPlatformModuleTokenSpaceGuid.PcdEepromFvImageFile|{0xAC, 0x3D, 0xBD, 0xBF, 0xEB, 0x01, 0xEB, 0x4F, 0xA9, 0xDE, 0xBC, 0xC9, 0xD1, 0xBA, 0x55, 0x31}|VOID*|0xEEEE2004
## GPIO PAD whitelist | END OF ARRAY |
gPlatformModuleTokenSpaceGuid.PcdGpioWhiteList|{0xFF, 0xFF, 0xFF, 0xFF}|VOID*|0xEEEE2005
+ ## EEPROM security violation policy action
+ ## 0x00 - CPU dead loop
+ gPlatformModuleTokenSpaceGuid.PcdEepromSecurityViolationPolicy|0x00|UINT8|0xEEEE2006
===========================================================================================
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/Utilities/ScrapDramPolicyPpi.py b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/Utilities/ScrapDramPolicyPpi.py
new file mode 100644
index 0000000000..13e28ec681
--- /dev/null
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromBinary/Utilities/ScrapDramPolicyPpi.py
@@ -0,0 +1,95 @@
+# @file
+# Scraps the debug log to generate the DRAM_POLICY_PPI data file for the EEPROM image.
+#
+# Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
+#
+# This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php.
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+
+import sys
+
+# Version defines
+__version__ = '0.1.0.0'
+VerString = 'Scrap the debug log for the DRAM_POLICY_PPI data, Version #{0}'.format(__version__)
+
+# Global defines
+DebugFlag = False
+StartingMarker = 'DRAM_POLICY_PPI dump'
+
+def Main():
+ # Assume failure
+ ReturnCode = 1
+
+ if DebugFlag:
+ index = 1
+ while len(sys.argv) > index - 1:
+ print('sys.argv[{0}] = {1}'.format(index - 1, sys.argv[index - 1]))
+ index += 1
+
+ if len(sys.argv) < 3:
+ print('Useage: ScrapDramPolicyPpi DebugLog OutputFile')
+ return 1
+
+ DebugLogPath = sys.argv[1]
+ OutputFilePath = sys.argv[2]
+ if DebugFlag:
+ print('DebugLogPath = {0}'.format(DebugLogPath))
+ print('OutputFilePath = {0}'.format(OutputFilePath))
+
+ # Assume failure
+ LogFile = None
+ OutputFile = None
+
+ try:
+ # Open the files
+ LogFile = open(DebugLogPath, "r")
+ OutputFile = open(OutputFilePath, "wb")
+
+ # Search the Log file for the marker and then scrap the data
+ ByteCount = 0
+ MarkerFoundFlag = False
+ for LogLine in LogFile:
+ if StartingMarker in LogLine:
+ # Beginning of data found
+ MarkerFoundFlag = True
+ if len(LogLine) == 1:
+ # End of data found
+ MarkerFoundFlag = False
+ if MarkerFoundFlag:
+ # Parse data to write out to the binary file
+ if LogLine.startswith(' | '):
+ # This is valid data line. Parse it.
+ LogLine = LogLine.split(' ')
+ PipeCount = 0
+ for element in LogLine:
+ if element == '|':
+ PipeCount += 1
+ elif (PipeCount == 2) and (len(element) > 0):
+ # Print out what we are writing to the file
+ print('0x{0:02X} - 0x{1}'.format(ByteCount, element))
+ # Write it to the file
+ OutputFile.write(str(chr(int(element, 16))))
+ # Increment the byte counter
+ ByteCount += 1
+
+ # Clear the return flag
+ ReturnCode = 0
+
+ finally:
+ # Close files
+ if LogFile is not None:
+ LogFile.close()
+ if OutputFile is not None:
+ OutputFile.close()
+ return ReturnCode
+
+if __name__ == "__main__":
+ print ''
+ print(VerString)
+ sys.exit (Main())
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/EEPROM/EepromDataEepromLib.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/EEPROM/EepromDataEepromLib.c
index 09171fd861..5c97036e81 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/EEPROM/EepromDataEepromLib.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/EEPROM/EepromDataEepromLib.c
@@ -90,9 +90,11 @@ CreateBlockList (
//
// Dump this block of info
//
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Address = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Address));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Offset));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Size = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Size));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Address = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Address));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Offset));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Size = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Size));
+ }
//
// New address range, create new PageList.
//
@@ -125,9 +127,11 @@ CreateBlockList (
//
// Dump this block of info
//
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Address = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Address));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Offset));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Size = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Size));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Address = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Address));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Offset));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Size = 0x%08x\n", __FUNCTION__, __LINE__, BlockList->Size));
+ }
//
// Insert last record
//
@@ -189,33 +193,39 @@ DumpEepromMap (VOID)
LIST_ENTRY *MapNode;
LIST_ENTRY *PartNode;
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting\n", __FUNCTION__, __LINE__));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - gEepromPartsHeadLink = 0x%08x\n", __FUNCTION__, __LINE__, gEepromPartsHeadLink));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - HeadLink->ForwardLink = 0x%08x\n", __FUNCTION__, __LINE__, gEepromPartsHeadLink->ForwardLink));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - HeadLink->BackLink = 0x%08x\n", __FUNCTION__, __LINE__, gEepromPartsHeadLink->BackLink));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - gEepromParts = 0x%08x\n", __FUNCTION__, __LINE__, gEepromParts));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting\n", __FUNCTION__, __LINE__));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - gEepromPartsHeadLink = 0x%08x\n", __FUNCTION__, __LINE__, gEepromPartsHeadLink));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - HeadLink->ForwardLink = 0x%08x\n", __FUNCTION__, __LINE__, gEepromPartsHeadLink->ForwardLink));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - HeadLink->BackLink = 0x%08x\n", __FUNCTION__, __LINE__, gEepromPartsHeadLink->BackLink));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - gEepromParts = 0x%08x\n", __FUNCTION__, __LINE__, gEepromParts));
+ }
if ((gEepromParts != NULL) && (gEepromPartsHeadLink != NULL)) {
PartNode = GetFirstNode (gEepromPartsHeadLink);
do {
CurrentEepromParts = EEPROM_PART_INFO_FROM_THIS (PartNode);
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - PartNode = %08x HeadLink = %08x\n", __FUNCTION__, __LINE__, PartNode, gEepromPartsHeadLink));
- DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM bus number = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->BusNumber));
- DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM address = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->Address));
- DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM speed = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PartSpeed));
- DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM part size = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PartSize));
- DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM block length = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->BlockLength));
- DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM page size = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PageSize));
- DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM master map = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->Master));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - PartNode = %08x HeadLink = %08x\n", __FUNCTION__, __LINE__, PartNode, gEepromPartsHeadLink));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM bus number = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->BusNumber));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM address = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->Address));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM speed = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PartSpeed));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM part size = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PartSize));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM block length = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->BlockLength));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM page size = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PageSize));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM master map = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->Master));
+ }
//
// Dump map records
//
MapNode = GetFirstNode (&CurrentEepromParts->MapHeadLink);
do {
CurrentEepromMap = EEPROM_MAP_INFO_FROM_THIS (MapNode);
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - MapNode = %08x HeadLink = %08x\n", __FUNCTION__, __LINE__, MapNode, &CurrentEepromParts->MapHeadLink));
- DEBUG ((DEBUG_INFO, "%a (#%4d) - Address = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromMap->Address));
- DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromMap->Offset));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - MapNode = %08x HeadLink = %08x\n", __FUNCTION__, __LINE__, MapNode, &CurrentEepromParts->MapHeadLink));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Address = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromMap->Address));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromMap->Offset));
+ }
//
// Get next record
//
@@ -227,7 +237,7 @@ DumpEepromMap (VOID)
PartNode = GetNextNode (gEepromPartsHeadLink, PartNode);
} while (!IsNull (gEepromPartsHeadLink, PartNode));
} else {
- DEBUG ((DEBUG_INFO, "%a (#%4d) - WARNING: gEepromParts or gEepromPartsHeadLink is bad!\n", __FUNCTION__, __LINE__));
+ DEBUG ((DEBUG_ERROR, "%a (#%4d) - WARNING: gEepromParts or gEepromPartsHeadLink is bad!\n", __FUNCTION__, __LINE__));
}
}
@@ -441,12 +451,14 @@ FillEepromMap (
CurrentEepromParts->BlockLength = EepromHeader->blklength;
CurrentEepromParts->PageSize = EepromHeader->pagesize;
CurrentEepromParts->Master = EepromHeader->master;
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM bus number = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->BusNumber));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM address = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->Address));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM speed = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PartSpeed));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM part size = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PartSize));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM block length = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->BlockLength));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM master map = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->Master));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM bus number = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->BusNumber));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM address = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->Address));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM speed = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PartSpeed));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM part size = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->PartSize));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM block length = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->BlockLength));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM master map = 0x%08x\n", __FUNCTION__, __LINE__, CurrentEepromParts->Master));
+ }
Status = EFI_SUCCESS;
break;
}
@@ -499,9 +511,11 @@ FillEepromMap (
CurrentEepromMap->Signature = EEPROM_MAP_INFO_SIGNATURE;
CurrentEepromMap->Address = MapRecord->address;
CurrentEepromMap->Offset = MapRecord->offset;
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Map[%04x] = %08x\n", __FUNCTION__, __LINE__, index, CurrentEepromMap));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Address[%04x] = %08x\n", __FUNCTION__, __LINE__, index, CurrentEepromMap->Address));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset[%04x] = %08x\n", __FUNCTION__, __LINE__, index, CurrentEepromMap->Offset));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Map[%04x] = %08x\n", __FUNCTION__, __LINE__, index, CurrentEepromMap));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Address[%04x] = %08x\n", __FUNCTION__, __LINE__, index, CurrentEepromMap->Address));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset[%04x] = %08x\n", __FUNCTION__, __LINE__, index, CurrentEepromMap->Offset));
+ }
//
// Insert record
//
@@ -640,10 +654,12 @@ I2cReadPages (
PageSize = EepromPartInfo->PageSize;
PartSpeed = EepromPartInfo->PartSpeed;
}
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Bus = %02x Address = %02x\n", __FUNCTION__, __LINE__, Bus, Address));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = %08x Size = %08x\n", __FUNCTION__, __LINE__, Offset, Size));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - PageSize = %02x PartSpeed = %02x\n", __FUNCTION__, __LINE__, PageSize, PartSpeed));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Buffer = %08x\n", __FUNCTION__, __LINE__, Buffer));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Bus = %02x Address = %02x\n", __FUNCTION__, __LINE__, Bus, Address));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = %08x Size = %08x\n", __FUNCTION__, __LINE__, Offset, Size));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - PageSize = %02x PartSpeed = %02x\n", __FUNCTION__, __LINE__, PageSize, PartSpeed));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Buffer = %08x\n", __FUNCTION__, __LINE__, Buffer));
+ }
//
// Init I2C controller
//
@@ -676,10 +692,12 @@ I2cReadPages (
//
ReadCount = PageSize - (CurrentOffset % PageSize);
}
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Size = %08x\n", __FUNCTION__, __LINE__, Size));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - CurrentCount = %08x\n", __FUNCTION__, __LINE__, CurrentCount));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - PageSize = %08x\n", __FUNCTION__, __LINE__, PageSize));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - ReadCount = %08x\n", __FUNCTION__, __LINE__, ReadCount));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Size = %08x\n", __FUNCTION__, __LINE__, Size));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - CurrentCount = %08x\n", __FUNCTION__, __LINE__, CurrentCount));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - PageSize = %08x\n", __FUNCTION__, __LINE__, PageSize));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - ReadCount = %08x\n", __FUNCTION__, __LINE__, ReadCount));
+ }
//
// Set offset
//
@@ -808,10 +826,12 @@ I2cWritePages (
PageSize = EepromPartInfo->PageSize;
PartSpeed = EepromPartInfo->PartSpeed;
}
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Bus = %02x Address = %02x\n", __FUNCTION__, __LINE__, Bus, Address));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = %08x Size = %08x\n", __FUNCTION__, __LINE__, Offset, Size));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - PageSize = %02x PartSpeed = %02x\n", __FUNCTION__, __LINE__, PageSize, PartSpeed));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Buffer = %08x\n", __FUNCTION__, __LINE__, Buffer));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Bus = %02x Address = %02x\n", __FUNCTION__, __LINE__, Bus, Address));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Offset = %08x Size = %08x\n", __FUNCTION__, __LINE__, Offset, Size));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - PageSize = %02x PartSpeed = %02x\n", __FUNCTION__, __LINE__, PageSize, PartSpeed));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Buffer = %08x\n", __FUNCTION__, __LINE__, Buffer));
+ }
//
// Init I2C controller
//
@@ -848,10 +868,12 @@ I2cWritePages (
//
WriteCount = PageSize - (CurrentOffset % PageSize);
}
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Size = %08x\n", __FUNCTION__, __LINE__, Size));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - CurrentCount = %08x\n", __FUNCTION__, __LINE__, CurrentCount));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - PageSize = %08x\n", __FUNCTION__, __LINE__, PageSize));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - WriteCount = %08x\n", __FUNCTION__, __LINE__, WriteCount));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Size = %08x\n", __FUNCTION__, __LINE__, Size));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - CurrentCount = %08x\n", __FUNCTION__, __LINE__, CurrentCount));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - PageSize = %08x\n", __FUNCTION__, __LINE__, PageSize));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - WriteCount = %08x\n", __FUNCTION__, __LINE__, WriteCount));
+ }
//
// Set offset
//
@@ -985,11 +1007,13 @@ ReadEepromBlockList (
// Read in a block
//
CurrentBlockList = BLOCK_LIST_FROM_THIS (Node);
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - buffer @ %08x\n", __FUNCTION__, __LINE__, Buffer));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - bus = %08x\n", __FUNCTION__, __LINE__, EepromInfo->Bus));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - address = %08x\n", __FUNCTION__, __LINE__, CurrentBlockList->Address));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - offset = %08x\n", __FUNCTION__, __LINE__, CurrentBlockList->Offset));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - ptr @ %08x\n", __FUNCTION__, __LINE__, Ptr));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - buffer @ %08x\n", __FUNCTION__, __LINE__, Buffer));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - bus = %08x\n", __FUNCTION__, __LINE__, EepromInfo->Bus));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - address = %08x\n", __FUNCTION__, __LINE__, CurrentBlockList->Address));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - offset = %08x\n", __FUNCTION__, __LINE__, CurrentBlockList->Offset));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - ptr @ %08x\n", __FUNCTION__, __LINE__, Ptr));
+ }
Status = I2cReadPages (EepromInfo->Bus, CurrentBlockList->Address, CurrentBlockList->Offset, CurrentBlockList->Size, Ptr);
if (EFI_ERROR (Status)) {
goto Exit;
@@ -1361,9 +1385,11 @@ SearchEepromPartList (
EEPROM_PART_INFO *EepromPartInfo;
LIST_ENTRY *Node;
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting\n", __FUNCTION__, __LINE__));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - gEepromParts = %08x\n", __FUNCTION__, __LINE__, gEepromParts));
- if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - gEepromPartsHeadLink = %08x\n", __FUNCTION__, __LINE__, gEepromPartsHeadLink));
+ if (mEepromDataLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting\n", __FUNCTION__, __LINE__));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - gEepromParts = %08x\n", __FUNCTION__, __LINE__, gEepromParts));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - gEepromPartsHeadLink = %08x\n", __FUNCTION__, __LINE__, gEepromPartsHeadLink));
+ }
//
// Sanity checks
@@ -1451,7 +1477,7 @@ WriteEepromBlockList (
//
// Write data from buffer
//
- DEBUG ((DEBUG_INFO, "%a (#%4d) - Writing to EEPROM...\n", __FUNCTION__, __LINE__));
+ if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Writing to EEPROM...\n", __FUNCTION__, __LINE__));
Node = GetFirstNode (&BlockListHead->Link);
do {
//
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/FV/EepromDataFvLib.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/FV/EepromDataFvLib.c
index c503a83720..1060fc2aa8 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/FV/EepromDataFvLib.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/FV/EepromDataFvLib.c
@@ -74,6 +74,7 @@ ReadEepromFv (
&Address,
&FvSize
);
+ if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - GetImage(%g) --> %r\n", __FUNCTION__, __LINE__, FvSectionGuid, Status));
if (!EFI_ERROR (Status)) {
//
@@ -81,14 +82,14 @@ ReadEepromFv (
//
if (Address != NULL) {
Ptr = Address;
- DEBUG ((DEBUG_INFO, "%a (#%4d) - Found EEPROM image @ 0x%08x.\n", __FUNCTION__, __LINE__, Address));
+ if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Found EEPROM image @ 0x%08x.\n", __FUNCTION__, __LINE__, Address));
if (*Size == 0) {
//
// Nothing to copy, return FV EEPROM size.
//
*Size = (UINT32) FvSize;
Status = EFI_BUFFER_TOO_SMALL;
- DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM size = 0x%08x\n", __FUNCTION__, __LINE__, *Size));
+ if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - EEPROM size = 0x%08x\n", __FUNCTION__, __LINE__, *Size));
} else {
//
// Figure out the correct buffer size.
@@ -115,7 +116,7 @@ ReadEepromFv (
}
}
}
- DEBUG ((DEBUG_INFO, "%a (#%4d) - Copying 0x%08x bytes of data starting at offset 0x%08x...\n", __FUNCTION__, __LINE__, *Size, Offset));
+ if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Copying 0x%08x bytes of data starting at offset 0x%08x...\n", __FUNCTION__, __LINE__, *Size, Offset));
if (*Size > 0) {
//
// Asking to copy something
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/FV/GetImage.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/FV/GetImage.c
index 434d9d9496..0384f7789b 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/FV/GetImage.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromDataLib/FV/GetImage.c
@@ -1,5 +1,5 @@
/** @file
- FV EEPROM raw data library instance.
+ DXE GetImage code for FV EEPROM raw data library instance.
Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
@@ -32,12 +32,12 @@ GetImage (
EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
EFI_HANDLE *HandleBuffer;
UINTN HandleCount;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *ImageFv;
UINTN Index;
EFI_STATUS Status;
+ if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+
Status = EFI_NOT_FOUND;
- ImageFv = NULL;
Status = gBS->LocateHandleBuffer (
ByProtocol,
@@ -46,6 +46,7 @@ GetImage (
&HandleCount,
&HandleBuffer
);
+ if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - LocateHandleBuffer(gEfiFirmwareVolume2ProtocolGuid)[%d] --> %r\n", __FUNCTION__, __LINE__, HandleCount, Status));
if (EFI_ERROR (Status)) {
//
// Couldn't find the FV2 protocol. Bail.
@@ -62,12 +63,10 @@ GetImage (
&gEfiFirmwareVolume2ProtocolGuid,
(VOID **) &Fv
);
+ if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - HandleProtocol(gEfiFirmwareVolume2ProtocolGuid) --> %r\n", __FUNCTION__, __LINE__, Status));
if (EFI_ERROR (Status)) {
goto Exit;
}
- if ((ImageFv != NULL) && (Fv == ImageFv)) {
- continue;
- }
//
// Found an FV, try to find file.
@@ -83,6 +82,7 @@ GetImage (
Size,
&AuthenticationStatus
);
+ if (mEepromDataLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Fv->ReadSection() --> %r\n", __FUNCTION__, __LINE__, Status));
if (!EFI_ERROR (Status)) {
//
// Found the file. Bail.
@@ -98,7 +98,7 @@ GetImage (
//
// Nope. Clear buffer and size, then bail.
//
- *Buffer = NULL;
+ *Buffer = EepromFreePool (*Buffer);
*Size = 0;
Status = EFI_NOT_FOUND;
} else {
@@ -106,9 +106,6 @@ GetImage (
}
Exit:
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- HandleBuffer = NULL;
- }
+ EepromFreePool (HandleBuffer);
return Status;
}
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.c
index adf5df63aa..d469d5c803 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.c
@@ -15,10 +15,9 @@
#include "EepromLib.h"
-BOOLEAN *gImageValidFlag;
UINT32 mCrcTableEeprom[256];
BOOLEAN mCrcInitFlag = FALSE;
-BOOLEAN mEepromLibDebugFlag = TRUE;
+BOOLEAN mEepromLibDebugFlag = FALSE;
/**
This internal function reverses bits for 32bit data.
@@ -159,10 +158,140 @@ EepromCalculateCrc32 (
return EFI_SUCCESS;
}
+VOID
+EepromPrintChar (
+ IN UINTN DebugMask,
+ IN UINTN Count,
+ IN CHAR16 *Char
+)
+{
+ UINTN Index;
+
+ for (Index = 0; Index < Count; Index++) {
+ DEBUG ((DebugMask, "%s", Char));
+ }
+}
+
+#define DIVIDING_LINE "+----------------------------------------------------+------------------+\n"
+
+VOID
+EepromDumpParagraph (
+ IN UINTN DebugMask,
+ IN VOID *Ptr,
+ IN UINTN Count
+ )
+{
+ CHAR8 AsciiBuffer[17];
+ UINT8 *Data;
+ UINTN Index;
+ UINTN Paragraphs;
+ UINTN PlaceHolder;
+ UINTN PlaceHolders;
+
+ //
+ // Use a different pointer so that the one passed in doesn't change
+ //
+ Data = (UINT8 *) Ptr;
+ //
+ // Calcualte the number of paragraphs
+ //
+ Paragraphs = Count / 16;
+ if ((Paragraphs * 16) < Count) {
+ Paragraphs++;
+ }
+ //
+ // Calculate the number of columns
+ //
+ PlaceHolder = Paragraphs;
+ PlaceHolders = 0;
+ while (PlaceHolder > 0) {
+ PlaceHolders++;
+ PlaceHolder >>= 4;
+ }
+
+ //
+ // Dump the buffer
+ //
+ if (Count > 0 ) {
+ //
+ // Print header
+ //
+ EepromPrintChar (DebugMask, PlaceHolders + 5, L" ");
+ DEBUG ((DebugMask, DIVIDING_LINE));
+ EepromPrintChar (DebugMask, PlaceHolders + 5, L" ");
+ DEBUG ((DebugMask, "| x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF | String |\n"));
+ DEBUG ((DebugMask, " +"));
+ EepromPrintChar (DebugMask, PlaceHolders + 3, L"-");
+ DEBUG ((DebugMask, DIVIDING_LINE));
+ //
+ // Print data
+ //
+ for (Index = 0; Index < (Paragraphs * 16); Index++) {
+ //
+ // Print divider
+ //
+ if (Index % 0x10 == 0x00) {
+ if ((Index > 0) && ((Index / 0x10) % 0x04 == 0x00) && (Paragraphs > 6)) {
+ DEBUG ((DebugMask, " +"));
+ EepromPrintChar (DebugMask, PlaceHolders + 3, L"-");
+ DEBUG ((DebugMask, DIVIDING_LINE));
+ }
+ DEBUG ((DebugMask, " | %0*xx | ", PlaceHolders, (Index / 0x10)));
+ }
+ //
+ // Print the data or a filler
+ //
+ if (Index < Count) {
+ DEBUG ((DebugMask, "%02x ", Data[Index]));
+ if ((Data[Index] < 32) || (Data[Index] > 126)) {
+ //
+ // Not printable
+ //
+ AsciiBuffer[(Index % 0x10)] = '.';
+ } else {
+ //
+ // Printable
+ //
+ AsciiBuffer[(Index % 0x10)] = Data[Index];
+ }
+ } else {
+ DEBUG ((DebugMask, " "));
+ AsciiBuffer[(Index % 0x10)] = ' ';
+ }
+ //
+ // Print break or line end if needed
+ //
+ if (Index % 0x10 == 0x0F) {
+ AsciiBuffer[16] = 0x00;
+ DEBUG ((DebugMask, "| %a |\n", AsciiBuffer));
+ } else if (Index % 0x04 == 0x03) {
+ DEBUG ((DebugMask, " "));
+ }
+ }
+ //
+ // Print footer
+ //
+ DEBUG ((DebugMask, " +"));
+ EepromPrintChar (DebugMask, PlaceHolders + 3, L"-");
+ DEBUG ((DebugMask, DIVIDING_LINE));
+ }
+}
+
+//
+// Desc: Registers the raw data libraries
+// Variables: None
+// Return: EFI_SUCCESS, anything else will cause an ASSERT
+//
EFI_STATUS
EFIAPI
-EepromLibNemToMemory (VOID)
+EepromInitConstructor (VOID)
{
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ //
+ // Initiliaze CRC32 tables
+ //
+ if (!mCrcInitFlag) InitializeCrc32Table ();
+
return EFI_SUCCESS;
}
@@ -174,6 +303,8 @@ EraseEeprom (
{
UINT8 *Buffer;
EEPROM_FUNCTION_INFO EepromInfo;
+ BOOLEAN *ImageValidFlags;
+ UINTN PcdPtrSize;
UINT32 Size;
EFI_STATUS Status;
@@ -188,6 +319,8 @@ EraseEeprom (
EepromInfo.LibraryIndex = EEPROM_EEPROM;
Size = sizeof (GENERIC_HEADER);
Buffer = EepromAllocatePool (Size);
+ ImageValidFlags = (BOOLEAN *) PcdGetPtr (PcdEepromLibraryValid);
+ PcdPtrSize = PcdGetSize (PcdEepromLibraryValid);
//
// Sanity checks
@@ -217,7 +350,7 @@ EraseEeprom (
//
// Clear the valid status for this image.
//
- gImageValidFlag[LibraryIndex] = FALSE;
+ ImageValidFlags[LibraryIndex] = FALSE;
Exit:
//
@@ -227,14 +360,30 @@ Exit:
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a (#%4d) - Ending with %r\n", __FUNCTION__, __LINE__, Status));
}
+ PcdSetPtr (PcdEepromLibraryValid, &PcdPtrSize, ImageValidFlags);
return Status;
}
+/**
+ Returns the EEPROM structure data
+
+ @param[in] LibraryIndex Which library to use to get the structure
+ @param[in] Signature Signature of the structure we are looking for
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the structure data
+ NOTE: Caller is responsible for freeing this memory.
+ @param[out] Size Size of the StructureData buffer
+
+ @retval EFI_SUCCESS Structure data found
+ @retval EFI_NOT_FOUND Structure data not found
+ @retval EFI_INVALID_PARAMETER Invalid parameter passed in
+**/
EFI_STATUS
EFIAPI
GetEepromStructure (
IN UINT8 LibraryIndex,
IN OUT CHAR8 Signature[EEPROM_SIGNATURE_SIZE],
+ IN OUT UINT32 *StructureIndex,
IN OUT UINT8 **Buffer,
IN OUT UINT32 *Size
)
@@ -278,7 +427,11 @@ GetEepromStructure (
//
// Start at the beginning structure and loop thru the image looking for the requested structure
//
- Index = 0;
+ if (StructureIndex == NULL) {
+ Index = 0;
+ } else {
+ Index = *StructureIndex;
+ }
while (!EFI_ERROR (Status)) {
//
// Make sure buffer is empty
@@ -294,6 +447,7 @@ GetEepromStructure (
//
// This is our structure. Bail.
//
+ if (StructureIndex != NULL) *StructureIndex = Index;
goto Exit;
}
}
@@ -315,6 +469,102 @@ Exit:
return Status;
}
+/**
+ Returns the EEPROM structure data
+
+ @param[in] LibraryIndex Which library to use to get the structure
+ @param[in] Signature Signature of the structure we are looking for
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[in] HeaderSize Size of the structure header
+ @param[out] StructureHeader Header of the structure we're looking for
+ NOTE: Caller is responsible for freeing this memory.
+ @param[out] StructureData Buffer containing the structure data
+ @param[out] DataSize Size of the StructureData buffer
+
+ @retval EFI_SUCCESS Structure data found
+ @retval EFI_NOT_FOUND Structure data not found
+ @retval EFI_INVALID_PARAMETER Invalid parameter passed in
+**/
+EFI_STATUS
+EFIAPI
+GetEepromStructureData (
+ IN UINT8 *LibraryIndex,
+ IN CHAR8 Signature[EEPROM_SIGNATURE_SIZE],
+ IN OUT UINT32 *StructureIndex,
+ IN UINT32 HeaderSize,
+ OUT UINT8 **StructureHeader,
+ OUT UINT8 **StructureData,
+ OUT UINT32 *DataSize
+ )
+{
+ CHAR8 AsciiData[32];
+ UINT8 EepromLibrary;
+ GENERIC_HEADER *Header;
+ UINT32 Index;
+ UINT32 Size;
+ EFI_STATUS Status;
+
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+
+ //
+ // Return the structure data
+ // 1. Get valid EEPROM library index
+ // 2. Find structure
+ // 3. Return structure data
+ //
+ if (StructureIndex == NULL) {
+ Index = 0;
+ } else {
+ Index = *StructureIndex;
+ }
+ if (LibraryIndex == NULL) {
+ EepromLibrary = GetValidEepromLibrary (FALSE);
+ } else {
+ EepromLibrary = *LibraryIndex;
+ }
+ if (EepromLibrary == EEPROM_NULL) {
+ DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find a valid EEPROM binary!\n", __FUNCTION__, __LINE__));
+ Status = EFI_NOT_FOUND;
+ } else {
+ Header = NULL;
+ Size = 0;
+ Status = GetEepromStructure (EepromLibrary, Signature, &Index, (UINT8 **) &Header, &Size);
+ if (EFI_ERROR (Status) || (Size == 0)) {
+ DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find the %a structure in the EERPOM binary!\n", __FUNCTION__, __LINE__, Signature));
+ Status = EFI_NOT_FOUND;
+ } else {
+ Size = Header->length - HeaderSize;
+ if (StructureHeader != NULL) *StructureHeader = (UINT8 *) Header;
+ if (StructureData != NULL) {
+ if (Size == 0) {
+ *StructureData = NULL;
+ } else {
+ *StructureData = (UINT8 *) Header + HeaderSize;
+ }
+ }
+ if (DataSize != NULL) *DataSize = Size;
+ if (StructureIndex != NULL) *StructureIndex = Index;
+ if (mEepromLibDebugFlag) {
+ ZeroMem (AsciiData, 32);
+ CopyMem (AsciiData, Header->signature, 8);
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Signature = %a\n", __FUNCTION__, __LINE__, AsciiData));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Version = %04x:%04x\n", __FUNCTION__, __LINE__, Header->vermajor, Header->verminor));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Length = 0x%08x\n", __FUNCTION__, __LINE__, Header->length));
+ }
+ Status = EFI_SUCCESS;
+ }
+ }
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Returning %r...\n", __FUNCTION__, __LINE__, Status));
+ return Status;
+}
+
+/**
+ Returns the EEPROM image size
+
+ @param[in] LibraryIndex Which library to use to get the structure
+
+ @retval UINT32 Size of that image
+**/
UINT32
EFIAPI
GetImageSize (
@@ -365,6 +615,7 @@ GetImageSize (
//
// Didn't find size.
//
+ Size = 0;
Status = EFI_NOT_FOUND;
goto Exit;
}
@@ -537,28 +788,36 @@ GetValidEepromLibrary (
IN BOOLEAN CopyToMemory
)
{
+ BOOLEAN DxeEepromSecurityFlag;
UINT8 *EepromAutoList;
EEPROM_FUNCTION_INFO EepromInfo;
+ UINT8 FirstPassImage;
UINT8 FirstValidImage;
UINT8 *ImageBuffer;
UINT32 ImageSize;
+ BOOLEAN *ImageValidFlags;
UINT8 index;
UINT8 Library;
+ UINTN PcdPtrSize;
UINT32 Size;
EFI_STATUS Status;
- if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting[%d]...\n", __FUNCTION__, __LINE__, PcdGetBool (PcdEepromDxeVerificationRequired)));
//
// Initialize variables
//
ZeroMem (&EepromInfo, sizeof (EEPROM_FUNCTION_INFO));
+ DxeEepromSecurityFlag = PcdGetBool (PcdEepromDxeVerificationRequired);
EepromAutoList = (UINT8 *) PcdGetPtr (PcdEepromAutoPriority);
EepromInfo.Bus = PcdGet8 (PcdEepromBus);
EepromInfo.Address = PcdGet8 (PcdEepromAddress);
EepromInfo.LibraryIndex = EEPROM_EEPROM;
+ FirstPassImage = EEPROM_NULL;
FirstValidImage = EEPROM_NULL;
ImageBuffer = NULL;
+ ImageValidFlags = (BOOLEAN *) PcdGetPtr (PcdEepromLibraryValid);
+ PcdPtrSize = PcdGetSize (PcdEepromLibraryValid);
//
// Sanity checks
@@ -570,6 +829,10 @@ GetValidEepromLibrary (
}
//
+ // Display current stack pointer
+ //
+ if (mEepromLibDebugFlag) DisplayStackPointer (__FUNCTION__, __LINE__);
+ //
// Loop thru PcdEepromAutoPriority looking for a previously validated image.
//
index = 0;
@@ -583,7 +846,14 @@ GetValidEepromLibrary (
Library = EEPROM_NULL;
goto Exit;
}
- if (gImageValidFlag[Library]) {
+ if (!InPeiPhase () && DxeEepromSecurityFlag) {
+ //
+ // DXE security verifiation required. Clear all the valid flags.
+ //
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Clearing validation flags.\n", __FUNCTION__, __LINE__));
+ ImageValidFlags[Library] = FALSE;
+ }
+ if (ImageValidFlags[Library]) {
//
// This library is valid, bail.
//
@@ -595,8 +865,13 @@ GetValidEepromLibrary (
//
index++;
}
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - FirstValidImage = %a\n", __FUNCTION__, __LINE__, mEepromLibraryString[FirstValidImage]));
//
+ // Display current stack pointer
+ //
+ if (mEepromLibDebugFlag) DisplayStackPointer (__FUNCTION__, __LINE__);
+ //
// If nothing is valid, try validating them all
//
if (FirstValidImage == EEPROM_NULL) {
@@ -609,13 +884,14 @@ GetValidEepromLibrary (
if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Trying to validate library %a...\n", __FUNCTION__, __LINE__, mEepromLibraryString[Library]));
Status = ValidateEeprom (Library);
if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Validating %a -> %r\n", __FUNCTION__, __LINE__, mEepromLibraryString[Library], Status));
- if (!EFI_ERROR (Status) || (Status == EFI_MEDIA_CHANGED)) {
+ if (!EFI_ERROR (Status) && (FirstValidImage == EEPROM_NULL)) {
//
// This one is valid. Bail.
//
- if (FirstValidImage == EEPROM_NULL) {
- FirstValidImage = Library;
- }
+ FirstValidImage = Library;
+ }
+ if ((Status == EFI_MEDIA_CHANGED) && (FirstPassImage == EEPROM_NULL)) {
+ FirstPassImage = Library;
}
//
// Point to next library
@@ -624,88 +900,107 @@ GetValidEepromLibrary (
}
}
+ if (FirstValidImage == EEPROM_NULL) {
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - No validated images found.\n", __FUNCTION__, __LINE__));
+ if (InPeiPhase ()) {
+ //
+ // We're in PEI and no valid images found. Set flag for DXE security action.
+ //
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Set flag for DXE security action.\n", __FUNCTION__, __LINE__));
+ PcdSetBool (PcdEepromDxeVerificationRequired, TRUE);
+ } else {
+ if (DxeEepromSecurityFlag) {
+ //
+ // We didn't find a valid image, we're in DXE, and security action is required. Inform user and perform policy action.
+ //
+ DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: No valid images found!\n", __FUNCTION__, __LINE__));
+ switch (PcdGet8 (PcdEepromSecurityViolationPolicy)) {
+ case EEPROM_DEADLOOP:
+ default:
+ CpuDeadLoop ();
+ break;
+ }
+ }
+ }
+ if (FirstPassImage == EEPROM_NULL) {
+ //
+ // We got nothing, so bail
+ //
+ Library = EEPROM_NULL;
+ goto Exit;
+ } else {
+ Library = FirstPassImage;
+ goto Exit;
+ }
+ }
+
+ //
+ // Something got validated.
+ //
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Validated EEPROM library. Clear flag.\n", __FUNCTION__, __LINE__));
+ PcdSetBool (PcdEepromDxeVerificationRequired, FALSE);
+ if (!InPeiPhase () && DxeEepromSecurityFlag) {
+ //
+ // We verified at least one image. Reset the system.
+ //
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - We're in DXE and verification security flag was set, so do a system reset.\n", __FUNCTION__, __LINE__));
+ EepromResetSystem (EfiResetWarm);
+ //
+ // We shouldn't get here, but have the deadloop to catch it if it does
+ //
+ CpuDeadLoop ();
+ }
+
+ //
+ // Display current stack pointer
+ //
+ if (mEepromLibDebugFlag) DisplayStackPointer (__FUNCTION__, __LINE__);
//
// Determine which image to copy to memory
//
- if (gImageValidFlag[EEPROM_MEMORY]) {
+ if (ImageValidFlags[EEPROM_MEMORY]) {
//
// Yep. Bail.
//
Library = EEPROM_MEMORY;
goto Exit;
}
- if (gImageValidFlag[EEPROM_EEPROM]) {
+ if (ImageValidFlags[EEPROM_EEPROM]) {
Library = EEPROM_EEPROM;
}
- if (gImageValidFlag[EEPROM_FV]) {
+ if (ImageValidFlags[EEPROM_FV]) {
Library = EEPROM_FV;
}
- if (gImageValidFlag[EEPROM_EEPROM] && gImageValidFlag[EEPROM_FV]) {
- BOARD_INFO_TABLE *EepromBoardInfo;
- BOARD_INFO_TABLE *FvBoardInfo;
+ if (ImageValidFlags[EEPROM_EEPROM] && ImageValidFlags[EEPROM_FV]) {
EEPROM_HEADER *EepromEepromHeader;
EEPROM_HEADER *FvEepromHeader;
//
// Initialize variables
//
- EepromBoardInfo = NULL;
EepromEepromHeader = NULL;
- FvBoardInfo = NULL;
FvEepromHeader = NULL;
Library = EEPROM_NULL;
//
- // Get BoardInfo records
+ // Get EepromHeader records
//
Size = 0;
- Status = GetEepromStructure (EEPROM_EEPROM, EEPROM_BOARD_INFO_SIGNATURE, (UINT8 **) &EepromBoardInfo, &Size);
- if (EFI_ERROR (Status) || (Size == 0) || (EepromBoardInfo == NULL)) {
- DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to get EEPROM Board Info structure! (%r)\n", __FUNCTION__, __LINE__, Status));
+ Status = GetEepromStructure (EEPROM_EEPROM, EEPROM_HEADER_SIGNATURE, NULL, (UINT8 **) &EepromEepromHeader, &Size);
+ if (EFI_ERROR (Status) || (Size == 0) || (EepromEepromHeader == NULL)) {
+ DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to get EEPROM header structure! (%r)\n", __FUNCTION__, __LINE__, Status));
Library = EEPROM_FV;
} else {
Size = 0;
- Status = GetEepromStructure (EEPROM_FV, EEPROM_BOARD_INFO_SIGNATURE, (UINT8 **) &FvBoardInfo, &Size);
- if (EFI_ERROR (Status) || (Size == 0) || (FvBoardInfo == NULL)) {
- DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to get FV Board Info structure! (%r)\n", __FUNCTION__, __LINE__, Status));
+ Status = GetEepromStructure (EEPROM_FV, EEPROM_HEADER_SIGNATURE, NULL, (UINT8 **) &FvEepromHeader, &Size);
+ if (EFI_ERROR (Status) || (Size == 0) || (FvEepromHeader == NULL)) {
+ DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to get FV header structure! (%r)\n", __FUNCTION__, __LINE__, Status));
Library = EEPROM_EEPROM;
} else {
//
- // Compare BoardInfo records
+ // Compare image versions
//
- if ((CompareMem (EepromBoardInfo->manuname, FvBoardInfo->manuname, 16) == 0) &&
- (CompareMem (EepromBoardInfo->brdname, FvBoardInfo->brdname, 16) == 0) &&
- (EepromBoardInfo->boardid == FvBoardInfo->boardid) &&
- (EepromBoardInfo->fabid == FvBoardInfo->fabid) &&
- (EepromBoardInfo->ecid == FvBoardInfo->ecid) &&
- (EepromBoardInfo->boardtype == FvBoardInfo->boardtype)) {
- //
- // Get EepromHeader records
- //
- Size = 0;
- Status = GetEepromStructure (EEPROM_EEPROM, EEPROM_HEADER_SIGNATURE, (UINT8 **) &EepromEepromHeader, &Size);
- if (EFI_ERROR (Status) || (Size == 0) || (EepromEepromHeader == NULL)) {
- DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to get EEPROM header structure! (%r)\n", __FUNCTION__, __LINE__, Status));
- Library = EEPROM_FV;
- } else {
- Size = 0;
- Status = GetEepromStructure (EEPROM_FV, EEPROM_HEADER_SIGNATURE, (UINT8 **) &FvEepromHeader, &Size);
- if (EFI_ERROR (Status) || (Size == 0) || (FvEepromHeader == NULL)) {
- DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to get FV header structure! (%r)\n", __FUNCTION__, __LINE__, Status));
- Library = EEPROM_EEPROM;
- } else {
- //
- // Compare image versions
- //
- if (EepromEepromHeader->version > FvEepromHeader->version) {
- Library = EEPROM_EEPROM;
- } else {
- Library = EEPROM_FV;
- }
- }
- }
+ if (EepromEepromHeader->version > FvEepromHeader->version) {
+ Library = EEPROM_EEPROM;
} else {
- //
- // FV gets priority since BoardInfo data doesn't match
- //
Library = EEPROM_FV;
}
}
@@ -713,11 +1008,13 @@ GetValidEepromLibrary (
//
// Free resources
//
- EepromBoardInfo = EepromFreePool (EepromBoardInfo);
EepromEepromHeader = EepromFreePool (EepromEepromHeader);
- FvBoardInfo = EepromFreePool (FvBoardInfo);
FvEepromHeader = EepromFreePool (FvEepromHeader);
}
+ //
+ // Display current stack pointer
+ //
+ if (mEepromLibDebugFlag) DisplayStackPointer (__FUNCTION__, __LINE__);
//
// Check to see if we need to copy into memory and not in PEI
@@ -781,15 +1078,20 @@ Exit:
// Free resources
//
ImageBuffer = EepromFreePool (ImageBuffer);
- if (FirstValidImage == EEPROM_NULL) {
+ if ((FirstValidImage == EEPROM_NULL) && (Library == EEPROM_NULL)) {
//
// Nothing is valid. Return default NULL.
//
DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to find a valid image in list PcdEepromAutoPriority!\n", __FUNCTION__, __LINE__));
- Library = EEPROM_NULL;
}
+ //
+ // Display current stack pointer
+ //
+ if (mEepromLibDebugFlag) DisplayStackPointer (__FUNCTION__, __LINE__);
+
if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Returning library %a\n", __FUNCTION__, __LINE__, mEepromLibraryString[Library]));
+ PcdSetPtr (PcdEepromLibraryValid, &PcdPtrSize, ImageValidFlags);
return Library;
}
@@ -808,8 +1110,10 @@ ValidateEeprom (
UINT32 HashSize;
UINT8 *ImageBuffer;
UINT32 ImageSize;
+ BOOLEAN *ImageValidFlags;
UINT32 Offset;
UINT32 OriginalCrc32;
+ UINTN PcdPtrSize;
UINT32 Size;
EFI_STATUS Status;
GENERIC_HEADER *Structure;
@@ -829,6 +1133,8 @@ ValidateEeprom (
ImageBuffer = NULL;
Status = EFI_SUCCESS;
Structure = NULL;
+ ImageValidFlags = (BOOLEAN *) PcdGetPtr (PcdEepromLibraryValid);
+ PcdPtrSize = PcdGetSize (PcdEepromLibraryValid);
//
// Sanity checks
@@ -919,7 +1225,7 @@ ValidateEeprom (
// Get $Eeprom$ structure
//
Size = 0;
- Status = GetEepromStructure (LibraryIndex, EEPROM_HEADER_SIGNATURE, (UINT8 **) &EepromHeader, &Size);
+ Status = GetEepromStructure (LibraryIndex, EEPROM_HEADER_SIGNATURE, NULL, (UINT8 **) &EepromHeader, &Size);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Image is corrupted!\n", __FUNCTION__, __LINE__));
Status = EFI_VOLUME_CORRUPTED;
@@ -934,6 +1240,7 @@ ValidateEeprom (
Crc32 = StartCrc32 ();
Crc32 = AddToCrc32 (EepromHeader, Size, Crc32);
Offset = Size;
+ EepromHeader = EepromFreePool (EepromHeader);
//
// Add the rest of the binary
//
@@ -958,6 +1265,7 @@ ValidateEeprom (
Crc32 = AddToCrc32 (ImageBuffer, Size, Crc32);
}
}
+ ImageBuffer = EepromFreePool (ImageBuffer);
Crc32 = FinishCrc32 (Crc32);
if (OriginalCrc32 != Crc32) {
//
@@ -967,7 +1275,6 @@ ValidateEeprom (
Status = EFI_SECURITY_VIOLATION;
goto Exit;
}
- EepromHeader = EepromFreePool (EepromHeader);
//
// Verify hash
@@ -989,42 +1296,17 @@ Exit:
//
EepromHeader = EepromFreePool (EepromHeader);
ImageBuffer = EepromFreePool (ImageBuffer);
- if (EFI_ERROR (Status) && (Status != EFI_MEDIA_CHANGED)) {
- gImageValidFlag[LibraryIndex] = FALSE;
- DEBUG ((DEBUG_ERROR, "%a (#%4d) - Ending with %r\n", __FUNCTION__, __LINE__, Status));
+ if (EFI_ERROR (Status)) {
+ ImageValidFlags[LibraryIndex] = FALSE;
+ if (Status != EFI_MEDIA_CHANGED) DEBUG ((DEBUG_ERROR, "%a (#%4d) - Ending with %r\n", __FUNCTION__, __LINE__, Status));
} else {
//
// Might need to go to a bit flag here to indicate CRC32, hash, and signed hash pass. First round in PEI will only be
// able to get CRC32 pass since hash is supported by OpenSSL library and it is HUGE.
//
- gImageValidFlag[LibraryIndex] = TRUE;
+ ImageValidFlags[LibraryIndex] = TRUE;
}
+ PcdSetPtr (PcdEepromLibraryValid, &PcdPtrSize, ImageValidFlags);
return Status;
}
-//
-// Desc: Registers the raw data libraries
-// Variables: None
-// Return: EFI_SUCCESS, anything else will cause an ASSERT
-//
-EFI_STATUS
-EFIAPI
-EepromInitConstructor (VOID)
-{
- if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting...\n", __FUNCTION__, __LINE__));
- //
- // Initiliaze CRC32 tables
- //
- if (!mCrcInitFlag) InitializeCrc32Table ();
-
- //
- // Initiliaze Library valid flags pointer from PCD. This uses the fact that the PCD library currently just passes out
- // a pointer to it's internal DB. There is no need to update the PCD, since the pointer already points to the internal
- // PCD copy. If the PCD library changes to include a CRC check of it's data, then we'll have to start using the PcdSetPtr()
- // function to set the internal PCD value.
- //
- gImageValidFlag = PcdGetPtr (PcdEepromLibraryValid);
-
- return EFI_SUCCESS;
-}
-
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.h b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.h
index 047b5592d7..a1cc4885c8 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.h
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.h
@@ -37,6 +37,21 @@
#define MAX_HASH_TYPE 5
#define MAX_DIGEST_SIZE SHA512_DIGEST_SIZE
#define EFI_CERT_TYPE_RSA2048_SIZE 256
+#define EEPROM_DEADLOOP 0x00
+
+///
+/// FSP Reset Status code
+/// These are defined in FSP EAS v2.0 section 11.2.2 - OEM Status Code
+/// @{ came from FspApi.h
+#define FSP_STATUS_RESET_REQUIRED_COLD 0x40000001
+#define FSP_STATUS_RESET_REQUIRED_WARM 0x40000002
+#define FSP_STATUS_RESET_REQUIRED_3 0x40000003
+#define FSP_STATUS_RESET_REQUIRED_4 0x40000004
+#define FSP_STATUS_RESET_REQUIRED_5 0x40000005
+#define FSP_STATUS_RESET_REQUIRED_6 0x40000006
+#define FSP_STATUS_RESET_REQUIRED_7 0x40000007
+#define FSP_STATUS_RESET_REQUIRED_8 0x40000008
+/// @}
////
//// TypeDefs
@@ -49,6 +64,19 @@
////
//// Functions
////
+/**
+ Perform platform related reset in FSP wrapper.
+
+ This function will reset the system with requested ResetType.
+
+ @param[in] FspStatusResetType The type of reset the platform has to perform.
+**/
+VOID
+EFIAPI
+CallFspWrapperResetSystem (
+ IN UINT32 FspStatusResetType
+ );
+
EFI_STATUS
EFIAPI
EepromCalculateCrc32 (
@@ -59,10 +87,6 @@ EepromCalculateCrc32 (
EFI_STATUS
EFIAPI
-EepromLibNemToMemory (VOID);
-
-EFI_STATUS
-EFIAPI
SignedHashCheck (
IN UINT8 LibraryIndex
);
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.inf b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.inf
index b7ccb920aa..35c3cdbdb6 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.inf
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromLib.inf
@@ -34,6 +34,7 @@
BaseMemoryLib
DebugLib
EepromDataLib
+ FspWrapperPlatformResetLib
MemoryAllocationLib
PcdLib
PrintLib
@@ -55,6 +56,8 @@
gPlatformModuleTokenSpaceGuid.PcdEepromMemoryPointer
gPlatformModuleTokenSpaceGuid.PcdEepromMemorySize
gPlatformModuleTokenSpaceGuid.PcdEepromPublicKeyFile
+ gPlatformModuleTokenSpaceGuid.PcdEepromDxeVerificationRequired
+ gPlatformModuleTokenSpaceGuid.PcdEepromSecurityViolationPolicy
[Sources]
EepromLib.c
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromPeiLib.inf b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromPeiLib.inf
index 0f619fd2f5..60b9169503 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromPeiLib.inf
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/EepromPeiLib.inf
@@ -33,6 +33,7 @@
BaseMemoryLib
DebugLib
EepromDataLib
+ FspWrapperPlatformResetLib
MemoryAllocationLib
PcdLib
PeiServicesLib
@@ -52,6 +53,8 @@
gPlatformModuleTokenSpaceGuid.PcdEepromLibraryValid
gPlatformModuleTokenSpaceGuid.PcdEepromMemoryPointer
gPlatformModuleTokenSpaceGuid.PcdEepromMemorySize
+ gPlatformModuleTokenSpaceGuid.PcdEepromDxeVerificationRequired
+ gPlatformModuleTokenSpaceGuid.PcdEepromSecurityViolationPolicy
[Ppis]
gEfiPeiReadOnlyVariable2PpiGuid ## SOMETIMES_CONSUMES
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/Null/EepromNullLib.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/Null/EepromNullLib.c
index a235d8acf1..d7cc4ef6a6 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/Null/EepromNullLib.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/Null/EepromNullLib.c
@@ -15,6 +15,16 @@
#include "EepromNullLib.h"
+VOID
+EepromDumpParagraph (
+ IN UINTN DebugMask,
+ IN VOID *Ptr,
+ IN UINTN Count
+ )
+{
+ return;
+}
+
EFI_STATUS
EFIAPI
EraseEeprom (
@@ -29,6 +39,7 @@ EFIAPI
GetEepromStructure (
IN UINT8 LibraryIndex,
IN OUT CHAR8 Signature[EEPROM_SIGNATURE_SIZE],
+ IN OUT UINT32 *StructureIndex,
IN OUT UINT8 **Buffer,
IN OUT UINT32 *Size
)
@@ -66,11 +77,6 @@ GetValidEepromLibrary (
return EEPROM_NULL;
}
-VOID
-InitializeEepromPcds (VOID)
-{
-}
-
EFI_STATUS
EFIAPI
ValidateEeprom (
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/Pei/ValidateHashPei.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/Pei/ValidateHashPei.c
index a0f7b6b7d8..7db3f9da29 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/Pei/ValidateHashPei.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/Pei/ValidateHashPei.c
@@ -35,6 +35,8 @@ GetEepromVariable (
EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariableServices;
UINTN VariableSize;
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+
//
// Initialize variables
//
@@ -116,6 +118,7 @@ GetEepromVariable (
&VariableSize, // Data size
Data // Data
);
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - GetVariable(%s) --> %r\n", __FUNCTION__, __LINE__, VariableName, Status));
if (EFI_ERROR (Status)) {
//
// Failed to get data
@@ -131,6 +134,7 @@ Exit:
if (EFI_ERROR (Status)) {
Data = EepromFreePool (Data);
}
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Returning --> %r\n", __FUNCTION__, __LINE__, Status));
return Status;
}
@@ -147,6 +151,7 @@ SignedHashCheck (
IN UINT8 LibraryIndex
)
{
+ INTN CmpMemReturn;
UINT8 *Hash;
UINT32 HashSize;
SIGNATURE_DATA *Signature;
@@ -155,6 +160,8 @@ SignedHashCheck (
UINT8 *Variable;
UINT32 VariableSize;
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting [%a]...\n", __FUNCTION__, __LINE__, mEepromLibraryString[LibraryIndex]));
+
//
// Sanity checks
//
@@ -167,22 +174,23 @@ SignedHashCheck (
//
// Get $PromSig structure
//
- Size = 0;
- Status = GetEepromStructure (LibraryIndex, EEPROM_SIGNATURE_SIGNATURE, (UINT8 **) &Signature, &Size);
+ Signature = NULL;
+ Size = 0;
+ Status = GetEepromStructureData (&LibraryIndex, EEPROM_SIGNATURE_SIGNATURE, NULL, sizeof (SIGNATURE_DATA), (UINT8**) &Signature, &Hash, &HashSize);
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - GetEepromStructureData(EEPROM_SIGNATURE_SIGNATURE) [%a] --> %r\n", __FUNCTION__, __LINE__, mEepromLibraryString[LibraryIndex], Status));
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Image is corrupted!\n", __FUNCTION__, __LINE__));
Status = EFI_VOLUME_CORRUPTED;
goto Exit;
}
- Hash = ((UINT8 *) Signature) + sizeof (SIGNATURE_DATA);
- HashSize = Signature->length - sizeof (SIGNATURE_DATA);
//
// Get stored hash
//
Variable = NULL;
VariableSize = 0;
- Status = GetEepromVariable (LibraryIndex, &Variable, &VariableSize);
+ Status = GetEepromVariable (LibraryIndex, &Variable, &VariableSize);
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - GetEepromVariable(%a) 0x%08x --> %r\n", __FUNCTION__, __LINE__, mEepromLibraryString[LibraryIndex], VariableSize, Status));
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to get variable! [%r]\n", __FUNCTION__, __LINE__, Status));
goto Exit;
@@ -196,6 +204,7 @@ SignedHashCheck (
// Nothing stored for this library. Bail.
//
Status = EFI_MEDIA_CHANGED;
+ DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Stored size returned 0! [%r]\n", __FUNCTION__, __LINE__, Status));
goto Exit;
}
if (VariableSize != HashSize) {
@@ -207,11 +216,25 @@ SignedHashCheck (
//
// Compare stored to real
//
- if (CompareMem (Variable, Hash, HashSize) != 0) {
+ CmpMemReturn = CompareMem (Variable, Hash, HashSize);
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - CompareMem(Variable, Hash) --> %d\n", __FUNCTION__, __LINE__, CmpMemReturn));
+ if (CmpMemReturn != 0) {
//
// Failed security match
//
Status = EFI_SECURITY_VIOLATION;
+ if (mEepromLibDebugFlag) {
+ DEBUG ((DEBUG_INFO, "\n\n================================================================================\n"));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Hash from variable...\n", __FUNCTION__, __LINE__));
+ DEBUG ((DEBUG_INFO, "--------------------------------------------------------------------------------\n"));
+ EepromDumpParagraph (DEBUG_INFO, Variable, VariableSize);
+ DEBUG ((DEBUG_INFO, "================================================================================\n"));
+ DEBUG ((DEBUG_INFO, "\n\n================================================================================\n"));
+ DEBUG ((DEBUG_INFO, "%a (#%4d) - Hash from %a...\n", __FUNCTION__, __LINE__, mEepromLibraryString[LibraryIndex]));
+ DEBUG ((DEBUG_INFO, "--------------------------------------------------------------------------------\n"));
+ EepromDumpParagraph (DEBUG_INFO, Hash, HashSize);
+ DEBUG ((DEBUG_INFO, "================================================================================\n\n"));
+ }
} else {
Status = EFI_SUCCESS;
}
@@ -222,6 +245,7 @@ Exit:
//
Signature = EepromFreePool (Signature);
Variable = EepromFreePool (Variable);
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Returning [%a] --> %r\n", __FUNCTION__, __LINE__, mEepromLibraryString[LibraryIndex], Status));
return Status;
}
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/ValidateHash.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/ValidateHash.c
index 7d670c529a..09f7f4e34c 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/ValidateHash.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromLib/ValidateHash.c
@@ -47,10 +47,12 @@ SetEepromVariable (
EFI_STATUS Status;
CHAR16 VariableName[32];
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+
//
// Initialize variables
//
- Attributes = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS;
+ Attributes = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS;
Status = EFI_SUCCESS;
UnicodeSPrint (VariableName, 32, L"PromSig-%d", LibraryIndex);
@@ -62,6 +64,11 @@ SetEepromVariable (
Status = EFI_INVALID_PARAMETER;
goto Exit;
}
+ if ((LibraryIndex == EEPROM_MEMORY) || (LibraryIndex == EEPROM_NULL)) {
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - WARNING: There is no need to save the %a hash to a variable!\n", __FUNCTION__, __LINE__, mEepromLibraryString[LibraryIndex]));
+ Status = EFI_SUCCESS;
+ goto Exit;
+ }
if ((Buffer == NULL) && (BufferSize > 0)) {
Status = EFI_INVALID_PARAMETER;
goto Exit;
@@ -70,6 +77,7 @@ SetEepromVariable (
//
// Set variable
//
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - SetVariable(%s) Size = 0x%08x\n", __FUNCTION__, __LINE__, VariableName, BufferSize));
Status = gRT->SetVariable (
VariableName, // Variable name in UniCode
&gEepromVariableGuid, // Variable GUID
@@ -77,8 +85,10 @@ SetEepromVariable (
BufferSize, // Data size
Buffer // Data
);
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - SetVariable(%s) --> %r\n", __FUNCTION__, __LINE__, VariableName, Status));
Exit:
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Returning --> %r\n", __FUNCTION__, __LINE__, Status));
return Status;
}
@@ -110,6 +120,8 @@ SignedHashCheck (
UINT32 Size;
EFI_STATUS Status;
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Starting [%a]...\n", __FUNCTION__, __LINE__, mEepromLibraryString[LibraryIndex]));
+
//
// Initialize variables
//
@@ -151,8 +163,9 @@ SignedHashCheck (
//
// Get $Eeprom$ structure
//
- Size = 0;
- Status = GetEepromStructure (LibraryIndex, EEPROM_HEADER_SIGNATURE, (UINT8 **) &EepromHeader, &Size);
+ EepromHeader = NULL;
+ Size = 0;
+ Status = GetEepromStructure (LibraryIndex, EEPROM_HEADER_SIGNATURE, NULL, (UINT8 **) &EepromHeader, &Size);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Image is corrupted!\n", __FUNCTION__, __LINE__));
Status = EFI_VOLUME_CORRUPTED;
@@ -168,20 +181,21 @@ SignedHashCheck (
//
// Get $PromSig structure
//
- Size = 0;
- Status = GetEepromStructure (LibraryIndex, EEPROM_SIGNATURE_SIGNATURE, (UINT8 **) &Signature, &Size);
+ Signature = NULL;
+ Size = 0;
+ Status = GetEepromStructureData (&LibraryIndex, EEPROM_SIGNATURE_SIGNATURE, NULL, sizeof (SIGNATURE_DATA), (UINT8**) &Signature, &Hash, &HashSize);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Image is corrupted!\n", __FUNCTION__, __LINE__));
Status = EFI_VOLUME_CORRUPTED;
goto Exit;
}
- Hash = ((UINT8 *) Signature) + sizeof (SIGNATURE_DATA);
HashType = Signature->hashtype;
HashSize = mHashSizeLookup[HashType & HASH_TYPE_MASK];
if (HashType & EEPROM_SIGNATURE_TYPE_SIGNED) {
SignedHash = ((UINT8 *) Signature) + sizeof (SIGNATURE_DATA) + HashSize;
SignedHashSize = Signature->length - sizeof (SIGNATURE_DATA) - HashSize;
}
+
if (HashType == 0) {
//
// Nothing to do. Bail.
@@ -411,6 +425,7 @@ SignedHashCheck (
goto Exit;
}
+ //KES: If we decide to mis-match the hash and the signed hash, this will need to be updated
RsaStatus = RsaPkcs1Verify (Rsa, Hash, HashSize, SignedHash, SignedHashSize);
if (!RsaStatus) {
DEBUG ((DEBUG_ERROR, "%a (#%4d) - RsaPkcs1Verify() failed!\n", __FUNCTION__, __LINE__));
@@ -419,13 +434,6 @@ SignedHashCheck (
}
Exit:
- if (Rsa != NULL) {
- RsaFree (Rsa);
- }
- EepromHeader = EepromFreePool (EepromHeader);
- ImageBuffer = EepromFreePool (ImageBuffer);
- PublicKey = EepromFreePool (PublicKey);
- Signature = EepromFreePool (Signature);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a (#%4d) - Ending with %r\n", __FUNCTION__, __LINE__, Status));
} else if (HashType != 0) {
@@ -434,9 +442,17 @@ Exit:
//
Status = SetEepromVariable (LibraryIndex, Hash, (HashSize + SignedHashSize));
if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to delete variable PromSig-%d! [%r]\n", __FUNCTION__, __LINE__, LibraryIndex, Status));
+ DEBUG ((DEBUG_ERROR, "%a (#%4d) - ERROR: Failed to set variable PromSig-%d! [%r]\n", __FUNCTION__, __LINE__, LibraryIndex, Status));
}
}
+ if (Rsa != NULL) {
+ RsaFree (Rsa);
+ }
+ EepromHeader = EepromFreePool (EepromHeader);
+ ImageBuffer = EepromFreePool (ImageBuffer);
+ PublicKey = EepromFreePool (PublicKey);
+ Signature = EepromFreePool (Signature);
+ if (mEepromLibDebugFlag) DEBUG ((DEBUG_INFO, "%a (#%4d) - Returning [%a] --> %r\n", __FUNCTION__, __LINE__, mEepromLibraryString[LibraryIndex], Status));
return Status;
}
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromAcpi.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformDxeLib.c
similarity index 75%
rename from Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromAcpi.c
rename to Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformDxeLib.c
index 7381c82f24..4eeba54ceb 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromAcpi.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformDxeLib.c
@@ -44,7 +44,8 @@ EFI_OUT_OF_RESOURCES - There are not enough resources to find the protocol.
--*/
EFI_STATUS
-LocateSupportProtocol(
+EFIAPI
+EepromLocateSupportProtocol (
IN EFI_GUID *Protocol,
OUT VOID **Instance,
IN UINT32 Type
@@ -63,14 +64,14 @@ IN UINT32 Type
//
// Locate protocol.
//
- Status = gBS->LocateHandleBuffer(
+ Status = gBS->LocateHandleBuffer (
ByProtocol,
Protocol,
NULL,
&NumberOfHandles,
&HandleBuffer
);
- if (EFI_ERROR(Status)) {
+ if (EFI_ERROR (Status)) {
//
// Defined errors at this time are not found and out of resources.
//
@@ -85,12 +86,12 @@ IN UINT32 Type
// Get the protocol on this handle
// This should not fail because of LocateHandleBuffer
//
- Status = gBS->HandleProtocol(
+ Status = gBS->HandleProtocol (
HandleBuffer[Index],
Protocol,
Instance
);
- ASSERT(!EFI_ERROR(Status));
+ ASSERT(!EFI_ERROR (Status));
if (!Type) {
//
@@ -104,7 +105,7 @@ IN UINT32 Type
//
// See if it has the ACPI storage file
//
- Status = ((EFI_FIRMWARE_VOLUME2_PROTOCOL*)(*Instance))->ReadFile(
+ Status = ((EFI_FIRMWARE_VOLUME2_PROTOCOL*) (*Instance))->ReadFile(
*Instance,
&gEfiAcpiTableStorageGuid,
NULL,
@@ -116,7 +117,7 @@ IN UINT32 Type
//
// If we found it, then we are done
//
- if (!EFI_ERROR(Status)) {
+ if (!EFI_ERROR (Status)) {
break;
}
}
@@ -127,7 +128,7 @@ IN UINT32 Type
//
// Free any allocated buffers
//
- gBS->FreePool(HandleBuffer);
+ gBS->FreePool (HandleBuffer);
return Status;
}
@@ -142,23 +143,26 @@ IN UINT32 Type
@retval EFI_NOT_READY $AcpiTbl data not ready to be programmed
**/
EFI_STATUS
+EFIAPI
EepromProgramAcpi (VOID)
{
- UINT8 EepromLibrary;
UINT8 *AcpiData;
+ BOOLEAN AcpiStructureFound;
UINT32 AcpiSize;
ACPI_TABLE *AcpiStructure;
EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
- UINT32 Size;
+ UINT32 Index;
EFI_STATUS Status;
UINTN TableHandle;
if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ AcpiStructureFound = FALSE;
+
//
// Find the AcpiSupport protocol
//
- Status = LocateSupportProtocol (&gEfiAcpiSupportProtocolGuid, (VOID **) &AcpiSupport, 0);
+ Status = EepromLocateSupportProtocol (&gEfiAcpiSupportProtocolGuid, (VOID **) &AcpiSupport, 0);
if (EFI_ERROR (Status)) {
Status = EFI_NOT_READY;
goto Exit;
@@ -166,28 +170,18 @@ EepromProgramAcpi (VOID)
//
// Program the $AcpiTbl data
- // 1. Get valid EEPROM library index
- // 2. Find $AcpiTbl structure
- // 3. Program the $AcpiTbl data
//
- EepromLibrary = GetValidEepromLibrary (TRUE);
- if (EepromLibrary == EEPROM_NULL) {
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find a valid EEPROM binary!\n", __FUNCTION__, __LINE__));
- Status = EFI_NOT_FOUND;
- } else {
- Size = 0;
- Status = GetEepromStructure (EepromLibrary, EEPROM_ACPI_TABLE_SIGNATURE, (UINT8 **) &AcpiStructure, &Size);
- if (EFI_ERROR (Status) || (Size == 0)) {
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find the $AcpiTbl structure in the EERPOM binary!\n", __FUNCTION__, __LINE__));
+ Index = 0;
+ while (!EFI_ERROR (Status)) {
+ Status = GetEepromStructureData (NULL, EEPROM_ACPI_TABLE_SIGNATURE, &Index, sizeof (ACPI_TABLE), (UINT8**) &AcpiStructure, &AcpiData, &AcpiSize);
+ if (EFI_ERROR (Status)) {
+ if (!AcpiStructureFound) DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find the $AcpiTbl structure in the EERPOM binary!\n", __FUNCTION__, __LINE__));
Status = EFI_NOT_FOUND;
} else {
- AcpiSize = AcpiStructure->length - sizeof (ACPI_TABLE);
if (AcpiSize == 0) {
- EepromFreePool (AcpiStructure);
DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find the $AcpiTbl structure data in the EERPOM binary!\n", __FUNCTION__, __LINE__));
Status = EFI_NOT_FOUND;
} else {
- AcpiData = (UINT8 *) AcpiStructure + sizeof (ACPI_TABLE);
//
// publish the AcpiTable
//
@@ -199,13 +193,31 @@ EepromProgramAcpi (VOID)
EFI_ACPI_TABLE_VERSION_2_0,
&TableHandle
);
- //
- // re-init variables
- //
- AcpiStructure = EepromFreePool (AcpiStructure);
+ AcpiStructureFound = TRUE;
}
+ AcpiStructure = EepromFreePool (AcpiStructure);
}
}
+
+ if (AcpiStructureFound) Status = EFI_SUCCESS;
+
Exit:
return Status;
}
+
+/**
+ Reset the system using the platform desired reset method.
+
+ @param[in] ResetType The reset type to perform
+
+ @retval None
+**/
+VOID
+EFIAPI
+EepromResetSystem (
+ IN EFI_RESET_TYPE ResetType
+ )
+{
+ gRT->ResetSystem (ResetType, EFI_SUCCESS, 0, NULL);
+}
+
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.c
index 4ef7879459..c36ba2f0e9 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.c
@@ -15,11 +15,12 @@
#include "EepromPlatformLib.h"
-BOOLEAN mEepromPlatformLibDebugFlag = TRUE;
+BOOLEAN mEepromPlatformLibDebugFlag = FALSE;
/**
Returns the $BrdInfo structure
+ @param[out] StructureIndex Index of where to start looking for the next structure
@param[out] BoardInfo Buffer containing the BOARD_INFO_TABLE structure
- Up to the caller to free the buffer
@@ -28,56 +29,94 @@ BOOLEAN mEepromPlatformLibDebugFlag = TRUE;
@retval EFI_NOT_READY $BrdInfo structure not ready yet
**/
EFI_STATUS
+EFIAPI
EepromGetBoardInfo (
- OUT BOARD_INFO_TABLE **BoardInfo
+ IN OUT UINT32 *StructureIndex,
+ OUT BOARD_INFO_TABLE **BoardInfo
)
{
CHAR8 AsciiData[32];
- UINT8 EepromLibrary;
- UINT32 Size;
EFI_STATUS Status;
if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
- //
- // Return the $BrdInfo structure
- // 1. Get valid EEPROM library index
- // 2. Find $BrdInfo structure
- //
- EepromLibrary = GetValidEepromLibrary (TRUE);
- if (EepromLibrary == EEPROM_NULL) {
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find a valid EEPROM binary!\n", __FUNCTION__, __LINE__));
- Status = EFI_NOT_FOUND;
+ if (BoardInfo == NULL) {
+ Status = EFI_INVALID_PARAMETER;
} else {
- Size = 0;
- Status = GetEepromStructure (EepromLibrary, EEPROM_BOARD_INFO_SIGNATURE, (UINT8 **) BoardInfo, &Size);
- if (EFI_ERROR (Status) || (Size == 0)) {
+ //
+ // Return the $BrdInfo structure
+ //
+ Status = GetEepromStructureData (NULL, EEPROM_BOARD_INFO_SIGNATURE, StructureIndex, sizeof (BOARD_INFO_TABLE), (UINT8**) BoardInfo, NULL, NULL);
+ if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find the $BrdInfo structure in the EERPOM binary!\n", __FUNCTION__, __LINE__));
Status = EFI_NOT_FOUND;
} else {
if (mEepromPlatformLibDebugFlag) {
ZeroMem (AsciiData, 32);
- CopyMem (AsciiData, (*BoardInfo)->signature, 8);
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Signature = %a\n", __FUNCTION__, __LINE__, AsciiData));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Version = %04x:%04x\n", __FUNCTION__, __LINE__, (*BoardInfo)->vermajor, (*BoardInfo)->verminor));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Length = 0x%08x\n", __FUNCTION__, __LINE__, (*BoardInfo)->length));
- ZeroMem (AsciiData, 32);
CopyMem (AsciiData, (*BoardInfo)->manuname, 16);
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Manufacturer = %a\n", __FUNCTION__, __LINE__, AsciiData));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Manufacturer = %a\n", __FUNCTION__, __LINE__, AsciiData));
ZeroMem (AsciiData, 32);
CopyMem (AsciiData, (*BoardInfo)->brdname, 16);
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Board name = %a\n", __FUNCTION__, __LINE__, AsciiData));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Board name = %a\n", __FUNCTION__, __LINE__, AsciiData));
ZeroMem (AsciiData, 32);
CopyMem (AsciiData, (*BoardInfo)->brdserial, 16);
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Serial # = %a\n", __FUNCTION__, __LINE__, AsciiData));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Board ID = 0x%08x\n", __FUNCTION__, __LINE__, (*BoardInfo)->boardid));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Fab ID = 0x%08x\n", __FUNCTION__, __LINE__, (*BoardInfo)->fabid));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - EC ID = 0x%08x\n", __FUNCTION__, __LINE__, (*BoardInfo)->ecid));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Board type = %a\n", __FUNCTION__, __LINE__, (*BoardInfo)->boardtype ? "Main board (RedBox)" : "Plug-in board"));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Serial # = %a\n", __FUNCTION__, __LINE__, AsciiData));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Board ID = 0x%08x\n", __FUNCTION__, __LINE__, (*BoardInfo)->boardid));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Fab ID = 0x%08x\n", __FUNCTION__, __LINE__, (*BoardInfo)->fabid));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - EC ID = 0x%08x\n", __FUNCTION__, __LINE__, (*BoardInfo)->ecid));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Board type = %a\n", __FUNCTION__, __LINE__, (*BoardInfo)->boardtype ? "Main board (RedBox)" : "Plug-in board"));
+ }
+ }
+ }
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Returning %r...\n", __FUNCTION__, __LINE__, Status));
+ return Status;
+}
+
+/**
+ Returns the $HdCodec data
+
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the $HdCodec data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the HdaData buffer
+
+ @retval EFI_SUCCESS $HdCodec data found
+ @retval EFI_NOT_FOUND $HdCodec data not found
+ @retval EFI_NOT_READY $HdCodec data not ready yet
+**/
+EFI_STATUS
+EFIAPI
+EepromGetHdaCodec (
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
+ )
+{
+ HDA_CODEC *HdaStructure;
+ UINT8 *HdaData;
+ UINT32 HdaSize;
+ EFI_STATUS Status;
+
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+
+ if ((Buffer == NULL) || (BufferSize == NULL)) {
+ Status = EFI_INVALID_PARAMETER;
+ } else {
+ Status = GetEepromStructureData (NULL, EEPROM_HDA_CODEC_SIGNATURE, StructureIndex, sizeof (HDA_CODEC), (UINT8**) &HdaStructure, &HdaData, &HdaSize);
+ if (!EFI_ERROR (Status)) {
+ if (HdaSize != 0) {
+ *Buffer = AllocatePool (HdaSize);
+ if (*Buffer == NULL) {
+ HdaSize = 0;
+ } else {
+ CopyMem (*Buffer, HdaData, HdaSize);
+ EepromFreePool (HdaStructure);
+ }
}
- Status = EFI_SUCCESS;
+ *BufferSize = HdaSize;
}
}
+
if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Returning %r...\n", __FUNCTION__, __LINE__, Status));
return Status;
}
@@ -85,62 +124,101 @@ EepromGetBoardInfo (
/**
Returns the $Logo$ data
- @param[out] LogoData Buffer containing the $Logo$ data
- @param[out] LogoSize Size of the LogoData buffer
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the $Logo$ data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the LogoData buffer
@retval EFI_SUCCESS $Logo$ data found
@retval EFI_NOT_FOUND $Logo$ data not found
@retval EFI_NOT_READY $Logo$ data not ready yet
**/
EFI_STATUS
+EFIAPI
EepromGetLogo (
- OUT UINT8 **LogoData,
- OUT UINT32 *LogoSize
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
)
{
- CHAR8 AsciiData[32];
- UINT8 EepromLibrary;
+ UINT8 *LogoData;
+ UINT32 LogoSize;
LOGO_DATA *LogoStructure;
- UINT32 Size;
EFI_STATUS Status;
if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
- //
- // Return the $Logo$ data
- // 1. Get valid EEPROM library index
- // 2. Find $Logo$ structure
- // 3. Return $Logo$ data
- //
- EepromLibrary = GetValidEepromLibrary (TRUE);
- if (EepromLibrary == EEPROM_NULL) {
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find a valid EEPROM binary!\n", __FUNCTION__, __LINE__));
- Status = EFI_NOT_FOUND;
+ if ((Buffer == NULL) || (BufferSize == NULL)) {
+ Status = EFI_INVALID_PARAMETER;
} else {
- Size = 0;
- Status = GetEepromStructure (EepromLibrary, EEPROM_LOGO_DATA_SIGNATURE, (UINT8 **) &LogoStructure, &Size);
- if (EFI_ERROR (Status) || (Size == 0)) {
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find the $Logo$ structure in the EERPOM binary!\n", __FUNCTION__, __LINE__));
- Status = EFI_NOT_FOUND;
- } else {
- *LogoSize = LogoStructure->length - sizeof (LOGO_DATA);
- if (*LogoSize == 0) {
- *LogoData = EepromFreePool (LogoStructure);
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find the $Logo$ structure data in the EERPOM binary!\n", __FUNCTION__, __LINE__));
- Status = EFI_NOT_FOUND;
- } else {
- *LogoData = (UINT8 *) LogoStructure + sizeof (LOGO_DATA);
- if (mEepromPlatformLibDebugFlag) {
- ZeroMem (AsciiData, 32);
- CopyMem (AsciiData, LogoStructure->signature, 8);
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Signature = %a\n", __FUNCTION__, __LINE__, AsciiData));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Version = %04x:%04x\n", __FUNCTION__, __LINE__, LogoStructure->vermajor, LogoStructure->verminor));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Length = 0x%08x\n", __FUNCTION__, __LINE__, LogoStructure->length));
+ Status = GetEepromStructureData (NULL, EEPROM_LOGO_DATA_SIGNATURE, StructureIndex, sizeof (LOGO_DATA), (UINT8**) &LogoStructure, &LogoData, &LogoSize);
+ if (!EFI_ERROR (Status)) {
+ if (LogoSize != 0) {
+ *Buffer = AllocatePool (LogoSize);
+ if (*Buffer == NULL) {
+ LogoSize = 0;
+ } else {
+ CopyMem (*Buffer, LogoData, LogoSize);
+ EepromFreePool (LogoStructure);
}
- Status = EFI_SUCCESS;
}
+ *BufferSize = LogoSize;
}
}
+
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Returning %r...\n", __FUNCTION__, __LINE__, Status));
+ return Status;
+}
+
+/**
+ Returns the $MemCnfg data
+
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] SpdSlotFlag Flags of which SPD this data is valid for
+ @param[out] Buffer Buffer containing the $MemCnfg data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the MemoryData buffer
+
+ @retval EFI_SUCCESS $MemCnfg data found
+ @retval EFI_NOT_FOUND $MemCnfg data not found
+ @retval EFI_NOT_READY $MemCnfg data not ready yet
+**/
+EFI_STATUS
+EFIAPI
+EepromGetMemoryData (
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT16 *SpdSlotFlag,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
+ )
+{
+ UINT8 *MemoryData;
+ UINT32 MemorySize;
+ MEMORY_DATA *MemoryStructure;
+ EFI_STATUS Status;
+
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+
+ if ((SpdSlotFlag == NULL) || (Buffer == NULL) || (BufferSize == NULL)) {
+ Status = EFI_INVALID_PARAMETER;
+ } else {
+ Status = GetEepromStructureData (NULL, EEPROM_MEMORY_DATA_SIGNATURE, StructureIndex, sizeof (MEMORY_DATA), (UINT8**) &MemoryStructure, &MemoryData, &MemorySize);
+ if (!EFI_ERROR (Status)) {
+ *SpdSlotFlag = MemoryStructure->spdslot;
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - SpdSlots = %04x\n", __FUNCTION__, __LINE__, MemoryStructure->spdslot));
+ if (MemorySize != 0) {
+ *Buffer = AllocatePool (MemorySize);
+ if (*Buffer == NULL) {
+ MemorySize = 0;
+ } else {
+ CopyMem (*Buffer, MemoryData, MemorySize);
+ EepromFreePool (MemoryStructure);
+ }
+ }
+ *BufferSize = MemorySize;
+ }
+ }
+
if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Returning %r...\n", __FUNCTION__, __LINE__, Status));
return Status;
}
@@ -148,63 +226,48 @@ EepromGetLogo (
/**
Returns the $Video$ data
- @param[out] VideoData Buffer containing the $Video$ data
- @param[out] VideoSize Size of the VideoData buffer
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the $Video$ data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the VideoData buffer
@retval EFI_SUCCESS $Video$ data found
@retval EFI_NOT_FOUND $Video$ data not found
@retval EFI_NOT_READY $Video$ data not ready yet
**/
-
EFI_STATUS
+EFIAPI
EepromGetVbt (
- OUT UINT8 **VideoData,
- OUT UINT32 *VideoSize
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
)
{
- CHAR8 AsciiData[32];
- UINT8 EepromLibrary;
- VIDEO_DATA *VideoStructure;
- UINT32 Size;
EFI_STATUS Status;
+ UINT8 *VideoData;
+ UINT32 VideoSize;
+ VIDEO_DATA *VideoStructure;
if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
- //
- // Return the $Video$ data
- // 1. Get valid EEPROM library index
- // 2. Find $Video$ structure
- // 3. Return $Video$ data
- //
- EepromLibrary = GetValidEepromLibrary (TRUE);
- if (EepromLibrary == EEPROM_NULL) {
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find a valid EEPROM binary!\n", __FUNCTION__, __LINE__));
- Status = EFI_NOT_FOUND;
+ if ((Buffer == NULL) || (BufferSize == NULL)) {
+ Status = EFI_INVALID_PARAMETER;
} else {
- Size = 0;
- Status = GetEepromStructure (EepromLibrary, EEPROM_VIDEO_DATA_SIGNATURE, (UINT8 **) &VideoStructure, &Size);
- if (EFI_ERROR (Status) || (Size == 0)) {
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find the $Video$ structure in the EERPOM binary!\n", __FUNCTION__, __LINE__));
- Status = EFI_NOT_FOUND;
- } else {
- *VideoSize = VideoStructure->length - sizeof (VIDEO_DATA);
- if (*VideoSize == 0) {
- *VideoData = EepromFreePool (VideoStructure);
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find the $Video$ structure data in the EERPOM binary!\n", __FUNCTION__, __LINE__));
- Status = EFI_NOT_FOUND;
- } else {
- *VideoData = (UINT8 *) VideoStructure + sizeof (VIDEO_DATA);
- if (mEepromPlatformLibDebugFlag) {
- ZeroMem (AsciiData, 32);
- CopyMem (AsciiData, VideoStructure->signature, 8);
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Signature = %a\n", __FUNCTION__, __LINE__, AsciiData));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Version = %04x:%04x\n", __FUNCTION__, __LINE__, VideoStructure->vermajor, VideoStructure->verminor));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Length = 0x%08x\n", __FUNCTION__, __LINE__, VideoStructure->length));
+ Status = GetEepromStructureData (NULL, EEPROM_VIDEO_DATA_SIGNATURE, StructureIndex, sizeof (VIDEO_DATA), (UINT8**) &VideoStructure, &VideoData, &VideoSize);
+ if (!EFI_ERROR (Status)) {
+ if (VideoSize != 0) {
+ *Buffer = AllocatePool (VideoSize);
+ if (*Buffer == NULL) {
+ VideoSize = 0;
+ } else {
+ CopyMem (*Buffer, VideoData, VideoSize);
+ EepromFreePool (VideoStructure);
}
- Status = EFI_SUCCESS;
}
+ *BufferSize = VideoSize;
}
}
+
if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Returning %r...\n", __FUNCTION__, __LINE__, Status));
return Status;
}
@@ -218,6 +281,7 @@ EepromGetVbt (
@retval FALSE PAD offset is not in the whitelist
**/
BOOLEAN
+EFIAPI
EepromPadCheck (
IN UINT32 PadOffset
)
@@ -289,13 +353,15 @@ Exit:
@retval EFI_NOT_READY GPIO data not ready yet
**/
EFI_STATUS
+EFIAPI
EepromProgramGpioPads (VOID)
{
CHAR8 AsciiData[32];
GPIO_DATA_RECORD *EepromGpioData;
GPIO_DATA_HEADER *EepromGpioHeader;
- UINT8 EepromLibrary;
+ BOOLEAN GpioDataFound;
UINT32 GpioPadData;
+ UINT32 Index;
UINT32 OldGpioPadData;
UINT32 Size;
EFI_STATUS Status;
@@ -304,29 +370,18 @@ EepromProgramGpioPads (VOID)
//
// Program any EEPROM defined GPIOs
- // 1. Get valid EEPROM library index
- // 2. Find GPIO data in EEPROM binary
- // 3. Loop thru GPIO data and program PADs if PAD is in whitelist
+ // 1. Find GPIO data in EEPROM binary
+ // 2. Loop thru GPIO data and program PADs if PAD is in whitelist
//
- EepromLibrary = GetValidEepromLibrary (TRUE);
- if (EepromLibrary == EEPROM_NULL) {
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find a valid EEPROM binary!\n", __FUNCTION__, __LINE__));
- Status = EFI_NOT_FOUND;
- } else {
- Size = 0;
- Status = GetEepromStructure (EepromLibrary, EEPROM_GPIO_SIGNATURE, (UINT8 **) &EepromGpioHeader, &Size);
+ GpioDataFound = FALSE;
+ Index = 0;
+ Status = EFI_SUCCESS;
+ while (!EFI_ERROR (Status)) {
+ Status = GetEepromStructureData (NULL, EEPROM_GPIO_SIGNATURE, &Index, sizeof (GPIO_DATA_HEADER), (UINT8**) &EepromGpioHeader, (UINT8**) &EepromGpioData, &Size);
if (EFI_ERROR (Status) || (Size == 0)) {
- DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find any GPIO data in the EERPOM binary!\n", __FUNCTION__, __LINE__));
+ if (!GpioDataFound) DEBUG ((DEBUG_ERROR, "%a(#%4d) - ERROR: Didn't find any GPIO data in the EERPOM binary!\n", __FUNCTION__, __LINE__));
Status = EFI_NOT_FOUND;
} else {
- EepromGpioData = (GPIO_DATA_RECORD *) ((UINT8 *) EepromGpioHeader + sizeof (GPIO_DATA_HEADER));
- if (mEepromPlatformLibDebugFlag) {
- ZeroMem (AsciiData, 32);
- CopyMem (AsciiData, EepromGpioHeader->signature, 8);
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Signature = %a\n", __FUNCTION__, __LINE__, AsciiData));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Version = %04x:%04x\n", __FUNCTION__, __LINE__, EepromGpioHeader->vermajor, EepromGpioHeader->verminor));
- DEBUG ((DEBUG_INFO, "%a(#%4d) - Length = 0x%08x\n", __FUNCTION__, __LINE__, EepromGpioHeader->length));
- }
//
// Loop thru GPIO records. We currently only allow 32-bit PAD offset data records that are in the white-list.
//
@@ -346,13 +401,24 @@ EepromProgramGpioPads (VOID)
}
if (OldGpioPadData != GpioPadRead (EepromGpioData->offset)) {
DEBUG ((DEBUG_INFO, "%a(#%4d) - WARNING: PAD programming changing due to EEPROM binary!\n", __FUNCTION__, __LINE__));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Label = %a\n", __FUNCTION__, __LINE__, AsciiData));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - Offset = 0x%08x\n", __FUNCTION__, __LINE__, EepromGpioData->offset));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - DataType = 0x%08x\n", __FUNCTION__, __LINE__, EepromGpioData->datatype));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - DataSize = 0x%08x\n", __FUNCTION__, __LINE__, EepromGpioData->datasize));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - AndData = 0x%08x\n", __FUNCTION__, __LINE__, EepromGpioData->anddata));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - OrData = 0x%08x\n", __FUNCTION__, __LINE__, EepromGpioData->ordata));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - OldData = 0x%08x\n", __FUNCTION__, __LINE__, OldGpioPadData));
+ DEBUG ((DEBUG_INFO, "%a(#%4d) - NewData = 0x%08x\n", __FUNCTION__, __LINE__, GpioPadRead (EepromGpioData->offset)));
+ DEBUG ((DEBUG_INFO, "\n"));
}
EepromGpioData++;
}
+ GpioDataFound = TRUE;
}
EepromFreePool (EepromGpioHeader);
- Status = EFI_SUCCESS;
}
+ if (GpioDataFound) Status = EFI_SUCCESS;
+
if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Returning %r...\n", __FUNCTION__, __LINE__, Status));
return Status;
}
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.inf b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.inf
index d7cf14d251..5da60ea2d5 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.inf
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.inf
@@ -26,6 +26,7 @@
[Guids]
gEepromVariableGuid
+ gEfiAcpiTableStorageGuid
[LibraryClasses]
BaseLib
@@ -34,7 +35,6 @@
EepromDataLib
EepromLib
GpioLib
- I2cLib
MemoryAllocationLib
PcdLib
UefiBootServicesTableLib
@@ -53,7 +53,10 @@
gPlatformModuleTokenSpaceGuid.PcdEepromBus
gPlatformModuleTokenSpaceGuid.PcdGpioWhiteList
+[Protocols]
+ gEfiAcpiSupportProtocolGuid
+
[Sources]
- EepromAcpi.c
+ EepromPlatformDxeLib.c
EepromPlatformLib.c
EepromPlatformLib.h
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.c
deleted file mode 100644
index 55a78328e7..0000000000
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/** @file
- Common EEPROM library instance.
-
- Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
-
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "EepromPlatformLib.h"
-
-BOOLEAN mEepromPlatformLibDebugFlag = FALSE;
-
-/**
- Returns the $BrdInfo structure
-
- @param[out] BoardInfo Buffer containing the BOARD_INFO_TABLE structure
- - Up to the caller to free the buffer
-
- @retval EFI_SUCCESS $BrdInfo structure found
- @retval EFI_NOT_FOUND $BrdInfo structure not found
- @retval EFI_NOT_READY $BrdInfo structure not ready yet
-**/
-EFI_STATUS
-EepromGetBoardInfo (
- OUT BOARD_INFO_TABLE **BoardInfo
- )
-{
- if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
- return EFI_NOT_READY;
-}
-
-/**
- Returns the $Logo$ data
-
- @param[out] LogoData Buffer containing the $Logo$ data
- @param[out] LogoSize Size of the LogoData buffer
-
- @retval EFI_SUCCESS $Logo$ data found
- @retval EFI_NOT_FOUND $Logo$ data not found
- @retval EFI_NOT_READY $Logo$ data not ready yet
-**/
-EFI_STATUS
-EepromGetLogo (
- OUT UINT8 **LogoData,
- OUT UINT32 *LogoSize
- )
-{
- if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
- return EFI_NOT_READY;
-}
-
-/**
- Returns the $Video$ data
-
- @param[out] VideoData Buffer containing the $Video$ data
- @param[out] VideoSize Size of the VideoData buffer
-
- @retval EFI_SUCCESS $Video$ data found
- @retval EFI_NOT_FOUND $Video$ data not found
- @retval EFI_NOT_READY $Video$ data not ready yet
-**/
-
-EFI_STATUS
-EepromGetVbt (
- OUT UINT8 **VideoData,
- OUT UINT32 *VideoSize
- )
-{
- if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
- return EFI_NOT_READY;
-}
-
-/**
- Program GPIOs per binary and whitelist. The $GpioDat structure could be used to program things other than
- GPIOs, but that is all it is used for at this point.
-
- @param[in] VOID
-
- @retval EFI_SUCCESS GPIOs programmed successfully
- @retval EFI_NOT_FOUND GPIO data not found
- @retval EFI_NOT_READY GPIO data not ready yet
-**/
-EFI_STATUS
-EepromProgramGpioPads (VOID)
-{
- if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
- return EFI_NOT_READY;
-}
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.inf b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.inf
index ee0ea1905c..a68a837a2f 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.inf
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.inf
@@ -28,14 +28,9 @@
gEepromVariableGuid
[LibraryClasses]
- BaseLib
- BaseMemoryLib
DebugLib
EepromDataLib
EepromLib
- GpioLib
- I2cLib
- MemoryAllocationLib
PcdLib
[Packages]
@@ -45,13 +40,9 @@
BroxtonSiPkg/BroxtonSiPkg.dec
[Pcd]
- gEfiBxtTokenSpaceGuid.PcdPmcGcrBaseAddress ## SOMETIMES_CONSUMES
- gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress ## SOMETIMES_CONSUMES
- gPlatformModuleTokenSpaceGuid.PcdEepromAddress
- gPlatformModuleTokenSpaceGuid.PcdEepromBus
gPlatformModuleTokenSpaceGuid.PcdGpioWhiteList
[Sources]
- EepromAcpiNull.c
- EepromPlatformNullLib.c
EepromPlatformLib.h
+ Null/EepromAcpiNull.c
+ Null/EepromPlatformNullLib.c
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformPeiLib.inf b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformPeiLib.inf
index 99011637d6..c088ac79eb 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformPeiLib.inf
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromPlatformPeiLib.inf
@@ -34,7 +34,6 @@
EepromDataLib
EepromLib
GpioLib
- I2cLib
MemoryAllocationLib
PcdLib
@@ -52,6 +51,6 @@
gPlatformModuleTokenSpaceGuid.PcdGpioWhiteList
[Sources]
- EepromAcpiPei.c
EepromPlatformLib.c
EepromPlatformLib.h
+ Pei/EepromPlatformPeiLib.c
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromAcpiNull.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/Null/EepromAcpiNull.c
similarity index 100%
rename from Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromAcpiNull.c
rename to Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/Null/EepromAcpiNull.c
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/Null/EepromPlatformNullLib.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/Null/EepromPlatformNullLib.c
new file mode 100644
index 0000000000..34ca9f546f
--- /dev/null
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/Null/EepromPlatformNullLib.c
@@ -0,0 +1,241 @@
+/** @file
+ Common EEPROM library instance.
+
+ Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include "EepromPlatformLib.h"
+
+BOOLEAN mEepromPlatformLibDebugFlag = FALSE;
+
+/**
+ Returns the $BrdInfo structure
+
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] BoardInfo Buffer containing the BOARD_INFO_TABLE structure
+ - Up to the caller to free the buffer
+
+ @retval EFI_SUCCESS $BrdInfo structure found
+ @retval EFI_NOT_FOUND $BrdInfo structure not found
+ @retval EFI_NOT_READY $BrdInfo structure not ready yet
+**/
+EFI_STATUS
+EepromGetBoardInfo (
+ IN OUT UINT32 *StructureIndex,
+ OUT BOARD_INFO_TABLE **BoardInfo
+ )
+{
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ return EFI_NOT_READY;
+}
+
+/**
+ Returns the $HdCodec data
+
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the $HdCodec data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the HdaData buffer
+
+ @retval EFI_SUCCESS $HdCodec data found
+ @retval EFI_NOT_FOUND $HdCodec data not found
+ @retval EFI_NOT_READY $HdCodec data not ready yet
+**/
+EFI_STATUS
+EFIAPI
+EepromGetHdaCodec (
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
+ )
+{
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ return EFI_NOT_READY;
+}
+
+/**
+ Returns the $Logo$ data
+
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the $Logo$ data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the LogoData buffer
+
+ @retval EFI_SUCCESS $Logo$ data found
+ @retval EFI_NOT_FOUND $Logo$ data not found
+ @retval EFI_NOT_READY $Logo$ data not ready yet
+**/
+EFI_STATUS
+EFIAPI
+EepromGetLogo (
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
+ )
+{
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ return EFI_NOT_READY;
+}
+
+/**
+ Returns the $MemCnfg data
+
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] SpdSlotFlag Flags of which SPD this data is valid for
+ @param[out] Buffer Buffer containing the $MemCnfg data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the MemoryData buffer
+
+ @retval EFI_SUCCESS $MemCnfg data found
+ @retval EFI_NOT_FOUND $MemCnfg data not found
+ @retval EFI_NOT_READY $MemCnfg data not ready yet
+**/
+EFI_STATUS
+EFIAPI
+EepromGetMemoryData (
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT16 *SpdSlotFlag,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
+ )
+{
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ return EFI_NOT_READY;
+}
+
+/**
+ Returns the $Video$ data
+
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the $Video$ data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the VideoData buffer
+
+ @retval EFI_SUCCESS $Video$ data found
+ @retval EFI_NOT_FOUND $Video$ data not found
+ @retval EFI_NOT_READY $Video$ data not ready yet
+**/
+EFI_STATUS
+EFIAPI
+EepromGetVbt (
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
+ )
+{
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ return EFI_NOT_READY;
+}
+
+/**
+ Checks whether the PadOffset is in the platform GPIO whitelist.
+
+ @param[in] PadOffset The PAD offset to check against the platform whitelist
+
+ @retval TRUE PAD offset is in the whitelist
+ @retval FALSE PAD offset is not in the whitelist
+**/
+BOOLEAN
+EepromPadCheck (
+ IN UINT32 PadOffset
+ )
+{
+ UINT32 AlignedPadOffset;
+ UINTN GpioCount;
+ UINT32 *GpioWhiteListPtr;
+ UINTN GpioWhiteListLength;
+ BOOLEAN ReturnValue;
+
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+
+ //
+ // Initialize variables
+ //
+ GpioCount = 0;
+ GpioWhiteListPtr = (UINT32 *) PcdGetPtr (PcdGpioWhiteList);
+ GpioWhiteListLength = (UINTN) PcdGetSize (PcdGpioWhiteList) / sizeof (UINT32);
+ ReturnValue = FALSE;
+
+ //
+ // Force to PAD offset so the whitelist only needs to account for the DW0 value and not both DW0 and DW1
+ //
+ AlignedPadOffset = PadOffset - (PadOffset % 0x08);
+
+ //
+ // Sanity checks
+ //
+ if (GpioWhiteListPtr == NULL) {
+ DEBUG ((DEBUG_ERROR, "%a() - ERROR: GpioWhiteListPtr == NULL\n", __FUNCTION__));
+ goto Exit;
+ }
+ if (GpioWhiteListLength == 0) {
+ DEBUG ((DEBUG_ERROR, "%a() - ERROR: GpioWhiteListLength == 0\n", __FUNCTION__));
+ goto Exit;
+ }
+ if (AlignedPadOffset == 0) {
+ DEBUG ((DEBUG_ERROR, "%a() - ERROR: AlignedPadOffset == 0\n", __FUNCTION__));
+ goto Exit;
+ }
+
+ //
+ // Verify PAD offset is in white list
+ //
+ while ((GpioWhiteListPtr[GpioCount] != END_OF_GPIO_ARRAY) && (GpioCount < GpioWhiteListLength)) {
+ if (GpioWhiteListPtr[GpioCount] == AlignedPadOffset) {
+ ReturnValue = TRUE;
+ break;
+ }
+ GpioCount++;
+ }
+
+ if (ReturnValue == FALSE) {
+ DEBUG ((DEBUG_INFO, "%a() - WARNING: 0x%08x [0x%08x] was not found in the whitelist.\n", __FUNCTION__, AlignedPadOffset, PadOffset));
+ }
+
+Exit:
+ return ReturnValue;
+}
+
+/**
+ Program GPIOs per binary and whitelist. The $GpioDat structure could be used to program things other than
+ GPIOs, but that is all it is used for at this point.
+
+ @param[in] VOID
+
+ @retval EFI_SUCCESS GPIOs programmed successfully
+ @retval EFI_NOT_FOUND GPIO data not found
+ @retval EFI_NOT_READY GPIO data not ready yet
+**/
+EFI_STATUS
+EepromProgramGpioPads (VOID)
+{
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ return EFI_NOT_READY;
+}
+
+/**
+ Reset the system using the platform desired reset method.
+
+ @param[in] ResetType The reset type to perform
+
+ @retval None
+**/
+VOID
+EFIAPI
+EepromResetSystem (
+ IN EFI_RESET_TYPE ResetType
+ )
+{
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ return;
+}
+
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromAcpiPei.c b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/Pei/EepromPlatformPeiLib.c
similarity index 72%
rename from Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromAcpiPei.c
rename to Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/Pei/EepromPlatformPeiLib.c
index 0ce136affe..56f61ec9da 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/EepromAcpiPei.c
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/EepromPlatformLib/Pei/EepromPlatformPeiLib.c
@@ -30,3 +30,20 @@ EepromProgramAcpi (VOID)
if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
return EFI_NOT_READY;
}
+
+/**
+ Reset the system using the platform desired reset method.
+
+ @param[in] ResetType The reset type to perform
+
+ @retval None
+**/
+VOID
+EFIAPI
+EepromResetSystem (
+ IN EFI_RESET_TYPE ResetType
+ )
+{
+ if (mEepromPlatformLibDebugFlag) DEBUG ((DEBUG_INFO, "%a(#%4d) - Starting...\n", __FUNCTION__, __LINE__));
+ return;
+}
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/Include/Library/EepromLib.h b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/Include/Library/EepromLib.h
index f9bcdb60c3..4836b2577e 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/Include/Library/EepromLib.h
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/Include/Library/EepromLib.h
@@ -20,6 +20,7 @@
#include <EepromStruct.h>
#include <Library/EepromDataLib.h>
+#include <Library/EepromPlatformLib.h>
////
@@ -29,8 +30,30 @@
////
+//// Externs
+////
+extern BOOLEAN mEepromLibDebugFlag;
+
+
+////
//// Functions
////
+VOID
+EepromDumpParagraph (
+ IN UINTN DebugMask,
+ IN VOID *Ptr,
+ IN UINTN Count
+ );
+
+//
+// Desc: Registers the raw data libraries
+// Variables: None
+// Return: EFI_SUCCESS
+//
+EFI_STATUS
+EFIAPI
+EepromInitConstructor (VOID);
+
EFI_STATUS
EFIAPI
EraseEeprom (
@@ -42,10 +65,46 @@ EFIAPI
GetEepromStructure (
IN UINT8 LibraryIndex,
IN OUT CHAR8 Signature[EEPROM_SIGNATURE_SIZE],
+ IN OUT UINT32 *StructureIndex,
IN OUT UINT8 **Buffer,
IN OUT UINT32 *Size
);
+/**
+ Returns the EEPROM structure data
+
+ @param[in] LibraryIndex Which library to use to get the structure
+ @param[in] Signature Signature of the structure we are looking for
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[in] HeaderSize Size of the structure header
+ @param[out] StructureHeader Header of the structure we're looking for
+ NOTE: Caller is responsible for freeing this memory.
+ @param[out] StructureData Buffer containing the structure data
+ @param[out] DataSize Size of the StructureData buffer
+
+ @retval EFI_SUCCESS Structure data found
+ @retval EFI_NOT_FOUND Structure data not found
+ @retval EFI_NOT_READY Structure data not ready yet
+**/
+EFI_STATUS
+EFIAPI
+GetEepromStructureData (
+ IN UINT8 *LibraryIndex,
+ IN CHAR8 Signature[EEPROM_SIGNATURE_SIZE],
+ IN OUT UINT32 *StructureIndex,
+ IN UINT32 HeaderSize,
+ OUT UINT8 **StructureHeader,
+ OUT UINT8 **StructureData,
+ OUT UINT32 *DataSize
+ );
+
+/**
+ Returns the EEPROM image size
+
+ @param[in] LibraryIndex Which library to use to get the structure
+
+ @retval UINT32 Size of that image
+**/
UINT32
EFIAPI
GetImageSize (
@@ -77,14 +136,5 @@ ValidateEeprom (
IN UINT8 LibraryIndex
);
-//
-// Desc: Registers the raw data libraries
-// Variables: None
-// Return: EFI_SUCCESS
-//
-EFI_STATUS
-EFIAPI
-EepromInitConstructor (VOID);
-
#endif // _EEPROM_LIB_
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/Include/Library/EepromPlatformLib.h b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/Include/Library/EepromPlatformLib.h
index b585327c4f..4ad8a78061 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/Include/Library/EepromPlatformLib.h
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/Include/Library/EepromPlatformLib.h
@@ -35,6 +35,7 @@
/**
Returns the $BrdInfo structure
+ @param[out] StructureIndex Index of where to start looking for the next structure
@param[out] BoardInfo Buffer containing the BOARD_INFO_TABLE structure
- Up to the caller to free the buffer
@@ -42,39 +43,91 @@
@retval EFI_NOT_FOUND $BrdInfo structure not found
**/
EFI_STATUS
+EFIAPI
EepromGetBoardInfo (
- OUT BOARD_INFO_TABLE **BoardInfo
+ IN OUT UINT32 *StructureIndex,
+ OUT BOARD_INFO_TABLE **BoardInfo
+ );
+
+/**
+ Returns the $HdCodec data
+
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the $HdCodec data
+ @param[out] BufferSize Size of the HdaData buffer
+
+ @retval EFI_SUCCESS $HdCodec data found
+ @retval EFI_NOT_FOUND $HdCodec data not found
+ @retval EFI_NOT_READY $HdCodec data not ready yet
+**/
+EFI_STATUS
+EFIAPI
+EepromGetHdaCodec (
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
);
/**
Returns the $Logo$ data
- @param[out] LogoData Buffer containing the $Logo$ data
- @param[out] LogoSize Size of the LogoData buffer
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the $Logo$ data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the LogoData buffer
@retval EFI_SUCCESS $Logo$ data found
@retval EFI_NOT_FOUND $Logo$ data not found
+ @retval EFI_NOT_READY $Logo$ data not ready yet
**/
EFI_STATUS
+EFIAPI
EepromGetLogo (
- OUT UINT8 **LogoData,
- OUT UINT32 *LogoSize
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
);
/**
- Returns the $Video$ data
+ Returns the $MemCnfg data
- @param[out] VideoData Buffer containing the $Video$ data
- @param[out] VideoSize Size of the VideoData buffer
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] SpdSlotFlag Flags of which SPD this data is valid for
+ @param[out] Buffer Buffer containing the $MemCnfg data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the MemoryData buffer
- @retval EFI_SUCCESS $Logo$ data found
- @retval EFI_NOT_FOUND $Logo$ data not found
+ @retval EFI_SUCCESS $MemCnfg data found
+ @retval EFI_NOT_FOUND $MemCnfg data not found
+ @retval EFI_NOT_READY $MemCnfg data not ready yet
**/
+EFI_STATUS
+EFIAPI
+EepromGetMemoryData (
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT16 *SpdSlotFlag,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
+ );
+
+/**
+ Returns the $Video$ data
+ @param[out] StructureIndex Index of where to start looking for the next structure
+ @param[out] Buffer Buffer containing the $Video$ data
+ - Up to the caller to free the buffer
+ @param[out] BufferSize Size of the VideoData buffer
+
+ @retval EFI_SUCCESS $Video$ data found
+ @retval EFI_NOT_FOUND $Video$ data not found
+ @retval EFI_NOT_READY $Video$ data not ready yet
+**/
EFI_STATUS
+EFIAPI
EepromGetVbt (
- OUT UINT8 **VideoData,
- OUT UINT32 *VideoSize
+ IN OUT UINT32 *StructureIndex,
+ OUT UINT8 **Buffer,
+ OUT UINT32 *BufferSize
);
/**
@@ -86,6 +139,7 @@ EepromGetVbt (
@retval FALSE PAD offset is not in the whitelist
**/
BOOLEAN
+EFIAPI
EepromPadCheck (
IN UINT32 PadOffset
);
@@ -100,6 +154,7 @@ EepromPadCheck (
@retval EFI_NOT_READY $AcpiTbl data not ready to be programmed
**/
EFI_STATUS
+EFIAPI
EepromProgramAcpi (VOID);
/**
@@ -111,7 +166,21 @@ EepromProgramAcpi (VOID);
@retval EFI_NOT_FOUND GPIO data not found.
**/
EFI_STATUS
+EFIAPI
EepromProgramGpioPads (VOID);
+/**
+ Reset the system using the platform desired reset method.
+
+ @param[in] ResetType The reset type to perform
+
+ @retval None
+**/
+VOID
+EFIAPI
+EepromResetSystem (
+ IN EFI_RESET_TYPE ResetType
+ );
+
#endif // _EEPROM_PLATFORM_LIB_
diff --git a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/ReadMe.txt b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/ReadMe.txt
index 5179b97e3d..5cb9ba2b03 100644
--- a/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/ReadMe.txt
+++ b/Platform/BroxtonPlatformPkg/Common/Features/Eeprom/ReadMe.txt
@@ -27,6 +27,11 @@
gPlatformModuleTokenSpaceGuid.PcdEepromPublicKeyFile|{0xA3, 0x38, 0x8A, 0x5D, 0xBD, 0xFB, 0x77, 0x40, 0x81, 0x05, 0x11, 0x17, 0x0C, 0x2A, 0xF5, 0x4D}|VOID*|0xEEEE2003
## FV EEPROM Image file GUID - BFBD3DAC-01EB-4FEB-A9DE-BCC9D1BA5531
gPlatformModuleTokenSpaceGuid.PcdEepromFvImageFile|{0xAC, 0x3D, 0xBD, 0xBF, 0xEB, 0x01, 0xEB, 0x4F, 0xA9, 0xDE, 0xBC, 0xC9, 0xD1, 0xBA, 0x55, 0x31}|VOID*|0xEEEE2004
+ ## GPIO PAD whitelist | END OF ARRAY |
+ gPlatformModuleTokenSpaceGuid.PcdGpioWhiteList|{0xFF, 0xFF, 0xFF, 0xFF}|VOID*|0xEEEE2005
+ ## EEPROM security violation policy action
+ ## 0x00 - CPU dead loop
+ gPlatformModuleTokenSpaceGuid.PcdEepromSecurityViolationPolicy|0x00|UINT8|0xEEEE2006
[PcdsDynamic, PcdsDynamicEx]
## Used to store the EEPROM memory buffer pointer
@@ -45,6 +50,8 @@
gPlatformModuleTokenSpaceGuid.PcdEepromInMemoryFlag|0|BOOLEAN|0xEEEE0006
## Flag to tell if EEPROM Map is in HOB
gPlatformModuleTokenSpaceGuid.PcdEepromMapHobValid|0|BOOLEAN|0xEEEE0007
+ ## Flag to tell if EEPROM image require DXE verification or not
+ gPlatformModuleTokenSpaceGuid.PcdEepromDxeVerificationRequired|0|BOOLEAN|0xEEEE0008
==========================================================================================
diff --git a/Platform/BroxtonPlatformPkg/Common/Library/PeiFspPolicyInitLib/PeiFspPolicyInitLib.inf b/Platform/BroxtonPlatformPkg/Common/Library/PeiFspPolicyInitLib/PeiFspPolicyInitLib.inf
index 630408580b..5eef2aa88f 100644
--- a/Platform/BroxtonPlatformPkg/Common/Library/PeiFspPolicyInitLib/PeiFspPolicyInitLib.inf
+++ b/Platform/BroxtonPlatformPkg/Common/Library/PeiFspPolicyInitLib/PeiFspPolicyInitLib.inf
@@ -71,6 +71,7 @@
PeiPolicyInitLib
ScPlatformLib
PcdLib
+ EepromPlatformLib
[Pcd]
diff --git a/Platform/BroxtonPlatformPkg/Common/Library/PeiFspPolicyInitLib/PeiFspSaPolicyInitLib.c b/Platform/BroxtonPlatformPkg/Common/Library/PeiFspPolicyInitLib/PeiFspSaPolicyInitLib.c
index 4d08061208..2fb3bd9d3e 100644
--- a/Platform/BroxtonPlatformPkg/Common/Library/PeiFspPolicyInitLib/PeiFspSaPolicyInitLib.c
+++ b/Platform/BroxtonPlatformPkg/Common/Library/PeiFspPolicyInitLib/PeiFspSaPolicyInitLib.c
@@ -22,6 +22,7 @@
#include <Library/SmbusLib.h>
#include <Library/MmPciLib.h>
#include <Library/ConfigBlockLib.h>
+#include <Library/EepromPlatformLib.h>
#include <IndustryStandard/Pci.h>
#include <Ppi/DramPolicyPpi.h>
#include <ScAccess.h>
@@ -243,13 +244,15 @@ PeiFspSaPolicyInit (
//
// Update VbtGuid.
//
- CopyMem (&PeiVbtGuid, PcdGetPtr (PcdBoardVbtFileGuid), sizeof (EFI_GUID));
- CopyMem (&PeiLogoGuid, PcdGetPtr (PcdOemLogoFileGuid), sizeof (EFI_GUID));
-
- //
- // Update UPD:LogoPtr
- //
- PeiGetSectionFromFv (PeiVbtGuid, &Buffer, &Size);
+ Status = EepromGetVbt (NULL, (UINT8**) &Buffer, &Size);
+ if (EFI_ERROR (Status)) {
+ CopyMem (&PeiVbtGuid, PcdGetPtr (PcdBoardVbtFileGuid), sizeof (EFI_GUID));
+
+ //
+ // Update VbtPtr
+ //
+ PeiGetSectionFromFv (PeiVbtGuid, &Buffer, &Size);
+ }
if (Buffer == NULL) {
DEBUG ((DEBUG_ERROR, "Could not locate VBT"));
}
@@ -262,7 +265,14 @@ PeiFspSaPolicyInit (
DEBUG ((DEBUG_INFO, "VbtPtr from PeiGetSectionFromFv is 0x%x\n", FspsUpd->FspsConfig.GraphicsConfigPtr));
DEBUG ((DEBUG_INFO, "VbtSize from PeiGetSectionFromFv is 0x%x\n", Size));
- PeiGetSectionFromFv (PeiLogoGuid, &Buffer, &Size);
+ //
+ // Get Logo
+ //
+ Status = EepromGetLogo (NULL, (UINT8**) &Buffer, &Size);
+ if (EFI_ERROR (Status)) {
+ CopyMem (&PeiLogoGuid, PcdGetPtr (PcdOemLogoFileGuid), sizeof (EFI_GUID));
+ PeiGetSectionFromFv (PeiLogoGuid, &Buffer, &Size);
+ }
if (Buffer == NULL) {
DEBUG ((DEBUG_ERROR, "Could not locate Logo"));
}
diff --git a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPostMemPei/PlatformInit.c b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPostMemPei/PlatformInit.c
index eceecdf730..5ff92d7e2e 100644
--- a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPostMemPei/PlatformInit.c
+++ b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPostMemPei/PlatformInit.c
@@ -20,6 +20,7 @@
#include <Ppi/Smbus2.h>
#include <Library/PcdLib.h>
#include <Library/HeciMsgLib.h>
+#include <Library/EepromPlatformlib.h>
#include <Ppi/SeCUma.h>
#ifdef __GNUC__
@@ -273,12 +274,16 @@ BXTPolicyInit (
EFI_GUID PeiLogoGuid = { 0x7BB28B99, 0x61BB, 0x11D5, {0x9A, 0x5D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} };
EFI_GUID VbtGuid;
VBT_INFO VbtInfo;
+ EFI_STATUS Status;
DEBUG ((DEBUG_INFO, " BXTPolicyInit: SystemAgent PEI Platform Policy Initialization begin \n"));
- PeiGetSectionFromFv (PeiLogoGuid, &Buffer, &Size);
+ Status = EepromGetLogo (NULL, (UINT8**) &Buffer, &Size);
+ if (EFI_ERROR (Status)) {
+ PeiGetSectionFromFv (PeiLogoGuid, &Buffer, &Size);
+ }
if (Buffer == NULL) {
DEBUG ((DEBUG_ERROR, "Could not locate PeiLogo"));
}
@@ -286,9 +291,11 @@ BXTPolicyInit (
//
// May need a different VBT depending on PanelSel
//
- CopyMem (&VbtGuid, PcdGetPtr (PcdBoardVbtFileGuid), sizeof (EFI_GUID));
- PeiGetSectionFromFv (VbtGuid, &Buffer, &Size);
-
+ Status = EepromGetVbt (NULL, (UINT8**) &Buffer, &Size);
+ if (EFI_ERROR (Status)) {
+ CopyMem (&VbtGuid, PcdGetPtr (PcdBoardVbtFileGuid), sizeof (EFI_GUID));
+ PeiGetSectionFromFv (VbtGuid, &Buffer, &Size);
+ }
if (Buffer == NULL) {
DEBUG ((DEBUG_ERROR, "Could not locate VBT"));
}
diff --git a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPostMemPei/PlatformPostMemPei.inf b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPostMemPei/PlatformPostMemPei.inf
index 4a50131764..d27f3aea45 100644
--- a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPostMemPei/PlatformPostMemPei.inf
+++ b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPostMemPei/PlatformPostMemPei.inf
@@ -56,6 +56,7 @@
TimerLib
ScPlatformLib
SeCUmaLib
+ EepromPlatformLib
[Ppis]
gEfiPeiStallPpiGuid
diff --git a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/PlatformInitPreMem.c b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/PlatformInitPreMem.c
index a0c5e82e5c..270e6baa57 100644
--- a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/PlatformInitPreMem.c
+++ b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/PlatformInitPreMem.c
@@ -228,7 +228,7 @@ CopyMemSse4 (
{
#ifdef __GNUC__
- CopyMem (Dst, Src, SizeInBytes);
+ CopyMem (Dst, Src, SizeInBytes);
#else
_asm {
//
@@ -1086,7 +1086,7 @@ PlatformInitPreMemEntryPoint (
ASSERT_EFI_ERROR (Status);
return Status;
}
-
+
VariableSize = sizeof (AcpiVariableSetCompatibility);
Status = VariableServices->GetVariable (
VariableServices,
@@ -1104,7 +1104,7 @@ PlatformInitPreMemEntryPoint (
sizeof (AcpiVarHobSize)
);
- DEBUG ((DEBUG_INFO, "AcpiVariableAddr : 0x%08x\n", AcpiVariableSetCompatibility));
+ DEBUG ((DEBUG_INFO, "AcpiVariableAddr : 0x%08x\n", AcpiVariableSetCompatibility));
PERF_START_EX (NULL, "RstVctr", "IBBL", 1, 0x1000);
Tick = CarMap->IbblPerfRecord0;
@@ -1348,11 +1348,13 @@ PlatformInitPreMemEntryPoint (
DEBUG ((DEBUG_INFO, "IBBM address: %x\n", Memory));
PeiServicesInstallFvInfoPpi (
NULL,
- (VOID *) Memory,
+ Memory,
PcdGet32 (PcdFlashFvIBBMSize),
NULL,
NULL
);
+ // Added this so that IBBM is available during DXE so the EEPROM library can find the FV copy of the EEPROM binary
+ BuildFvHob ((EFI_PHYSICAL_ADDRESS) Memory, PcdGet32 (PcdFlashFvIBBMSize));
} else {
ASSERT (FALSE);
}
@@ -1409,7 +1411,7 @@ ReadBxtIPlatformIds (
/**
Description:
- This function finds the matched default data and create GUID hob for it.
+ This function finds the matched default data and create GUID hob for it.
Arguments:
@@ -1553,7 +1555,7 @@ PlatformCreateDefaultVariableHob (
DefaultInfo ++;
}
//
- // Size is 24 bits wide so mask upper 8 bits.
+ // Size is 24 bits wide so mask upper 8 bits.
// SectionLength is adjusted it is 4 byte aligned.
// Go to the next section
//
diff --git a/Platform/BroxtonPlatformPkg/Common/SaveMemoryConfigDxe/SaveMemoryConfig.c b/Platform/BroxtonPlatformPkg/Common/SaveMemoryConfigDxe/SaveMemoryConfig.c
index 58b19c0236..a264f38548 100644
--- a/Platform/BroxtonPlatformPkg/Common/SaveMemoryConfigDxe/SaveMemoryConfig.c
+++ b/Platform/BroxtonPlatformPkg/Common/SaveMemoryConfigDxe/SaveMemoryConfig.c
@@ -2,7 +2,7 @@
This is the driver that locates the MemoryConfigurationData HOB, if it
exists, and saves the data to NVRAM.
- Copyright (c) 1999 - 2017, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -30,6 +30,7 @@
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/UefiLib.h>
#include <Library/MemoryAllocationLib.h>
+#include <Library/EepromLib.h>
#define MRC_DATA_REQUIRED_FROM_OUTSIDE
#include "MmrcData.h"
@@ -297,6 +298,12 @@ SaveMemoryConfigEntryPoint (
}
//
+ // Do some EEPROM checking here and install valid image into memory. We perform the check here so that
+ // if a reset is required, it is after the MRC training data has been saved so that the next POST isn't as slow.
+ //
+ GetValidEepromLibrary (TRUE);
+
+ //
// This driver does not produce any protocol services, so always unload it.
//
return EFI_UNLOAD_IMAGE;
diff --git a/Platform/BroxtonPlatformPkg/Common/SaveMemoryConfigDxe/SaveMemoryConfigDxe.inf b/Platform/BroxtonPlatformPkg/Common/SaveMemoryConfigDxe/SaveMemoryConfigDxe.inf
index 919f16779a..168e07234a 100644
--- a/Platform/BroxtonPlatformPkg/Common/SaveMemoryConfigDxe/SaveMemoryConfigDxe.inf
+++ b/Platform/BroxtonPlatformPkg/Common/SaveMemoryConfigDxe/SaveMemoryConfigDxe.inf
@@ -1,7 +1,7 @@
## @file
# Component description for driver that locates the MemoryConfigurationData HOB, which saves the data to NVRAM.
#
-# Copyright (c) 1999 - 2017, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@@ -40,6 +40,7 @@
UefiLib
BaseLib
HeciMsgLib
+ EepromLib
[Protocols]
gMemInfoProtocolGuid
diff --git a/Platform/BroxtonPlatformPkg/PlatformDsc/Components.IA32.dsc b/Platform/BroxtonPlatformPkg/PlatformDsc/Components.IA32.dsc
index dd65c37dcd..56f4d63789 100644
--- a/Platform/BroxtonPlatformPkg/PlatformDsc/Components.IA32.dsc
+++ b/Platform/BroxtonPlatformPkg/PlatformDsc/Components.IA32.dsc
@@ -110,7 +110,6 @@
!if $(TARGET) == DEBUG
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2E
- gPlatformModuleTokenSpaceGuid.PcdFlashFvIBBMBase|0xFEF30000
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
diff --git a/Platform/BroxtonPlatformPkg/PlatformDsc/Defines.dsc b/Platform/BroxtonPlatformPkg/PlatformDsc/Defines.dsc
index a2da30bf72..a07b8778dc 100644
--- a/Platform/BroxtonPlatformPkg/PlatformDsc/Defines.dsc
+++ b/Platform/BroxtonPlatformPkg/PlatformDsc/Defines.dsc
@@ -150,17 +150,18 @@
DEFINE FTPM_ENABLE = TRUE
DEFINE TPM12_ENABLE = TRUE
- DEFINE FSP_IBBL_SIZE = 0x2000
- DEFINE BLD_IBBL_SIZE = 0x6000
- DEFINE FSP_IBBM_SIZE = 0x58000
- DEFINE BLD_IBBM_SIZE = 0x35000
-
+ #
+ # NOTE: These last defines are tied to InitNEM.asm. Be sure and update that file if they change.
+ #
+ DEFINE FSP_IBBM_SIZE = 0x00059000 # Size of FSP_M.fv
+ DEFINE BLD_IBBM_SIZE = 0x00039000 # Size of IBBM FV
DEFINE CAR_BASE_ADDRESS = 0xFEF00000 # @PcdTemporaryRamBase
- DEFINE BLD_RAM_DATA_SIZE = 0x16000 # BOOTLOADER temp memory size
- DEFINE FSP_RAM_DATA_SIZE = 0x2A000 # FSP temp memory size
- DEFINE FSP_EMP_DATA_SIZE = 0x05000 # Free space
- DEFINE BLD_RAM_CODE_SIZE = $(BLD_IBBM_SIZE)
- DEFINE FSP_RAM_CODE_SIZE = $(FSP_IBBM_SIZE)
- DEFINE CAR_REGION_SIZE = 0x100000
+ DEFINE BLD_RAM_DATA_SIZE = 0x00016000 # BOOTLOADER temp memory size
+ DEFINE FSP_RAM_DATA_SIZE = 0x0002A000 # FSP temp memory size
+ DEFINE FSP_EMP_DATA_SIZE = 0x00005000 # Free space
+ DEFINE CAR_REGION_SIZE = 0x00100000
DEFINE SOURCE_DEBUG_ENABLE = FALSE
+ DEFINE EXT_BIOS_ENABLE = FALSE # False = 3MB BIOS; True = 5MB BIOS
+ DEFINE EEPROM_CODE_ENABLE = FALSE
+
diff --git a/Platform/BroxtonPlatformPkg/PlatformDsc/LibraryClasses.IA32.PEI.dsc b/Platform/BroxtonPlatformPkg/PlatformDsc/LibraryClasses.IA32.PEI.dsc
index 86767bf278..678250d884 100644
--- a/Platform/BroxtonPlatformPkg/PlatformDsc/LibraryClasses.IA32.PEI.dsc
+++ b/Platform/BroxtonPlatformPkg/PlatformDsc/LibraryClasses.IA32.PEI.dsc
@@ -67,8 +67,14 @@
#
# EEPROM binary libs
#
- BaseCryptLib | CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
- EepromDataLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromDataLib/EepromDataPeiLib.inf
- EepromLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromLib/EepromPeiLib.inf
- EepromPlatformLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromPlatformLib/EepromPlatformPeiLib.inf
+ BaseCryptLib | CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
+ !if $(EEPROM_CODE_ENABLE) == TRUE
+ EepromDataLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromDataLib/EepromDataPeiLib.inf
+ EepromLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromLib/EepromPeiLib.inf
+ EepromPlatformLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromPlatformLib/EepromPlatformPeiLib.inf
+ !else
+ EepromDataLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromDataLib/EepromDataPeiNullLib.inf
+ EepromLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromLib/EepromNullLib.inf
+ EepromPlatformLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.inf
+ !endif
diff --git a/Platform/BroxtonPlatformPkg/PlatformDsc/LibraryClasses.dsc b/Platform/BroxtonPlatformPkg/PlatformDsc/LibraryClasses.dsc
index ad5a70d498..cd8df538cd 100644
--- a/Platform/BroxtonPlatformPkg/PlatformDsc/LibraryClasses.dsc
+++ b/Platform/BroxtonPlatformPkg/PlatformDsc/LibraryClasses.dsc
@@ -101,7 +101,7 @@
PciSegmentLib|MdePkg/Library/BasePciSegmentLibPci/BasePciSegmentLibPci.inf
FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
-
+
#
# Generic Modules
#
@@ -279,9 +279,15 @@
#
# EEPROM binary libs
#
- BaseCryptLib | CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
- EepromDataLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromDataLib/EepromDataLib.inf
- EepromLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromLib/EepromLib.inf
- EepromPlatformLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.inf
- I2cLib | $(PLATFORM_SI_PACKAGE)/SouthCluster/Library/I2cLib/I2cLib.inf
+ BaseCryptLib | CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
+ I2cLib | $(PLATFORM_SI_PACKAGE)/SouthCluster/Library/I2cLib/I2cLib.inf
+ !if $(EEPROM_CODE_ENABLE) == TRUE
+ EepromDataLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromDataLib/EepromDataLib.inf
+ EepromLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromLib/EepromLib.inf
+ EepromPlatformLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromPlatformLib/EepromPlatformLib.inf
+ !else
+ EepromDataLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromDataLib/EepromDataNullLib.inf
+ EepromLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromLib/EepromNullLib.inf
+ EepromPlatformLib | $(PLATFORM_PACKAGE_COMMON)/Features/Eeprom/EepromPlatformLib/EepromPlatformNullLib.inf
+ !endif
diff --git a/Platform/BroxtonPlatformPkg/PlatformDsc/PcdsFixedAtBuild.dsc b/Platform/BroxtonPlatformPkg/PlatformDsc/PcdsFixedAtBuild.dsc
index 2346ce47d9..42056a617f 100644
--- a/Platform/BroxtonPlatformPkg/PlatformDsc/PcdsFixedAtBuild.dsc
+++ b/Platform/BroxtonPlatformPkg/PlatformDsc/PcdsFixedAtBuild.dsc
@@ -88,7 +88,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate|115200
- !if $(MINNOW3_MODULE_BOARD) == TRUE
+ !if $(EEPROM_CODE_ENABLE) == TRUE
#
# I2C bus the master EEPROM is hanging on
gPlatformModuleTokenSpaceGuid.PcdEepromBus|0x08
diff --git a/Platform/BroxtonPlatformPkg/PlatformPkg.dec b/Platform/BroxtonPlatformPkg/PlatformPkg.dec
index aecaae9e5b..a19a57b90e 100644
--- a/Platform/BroxtonPlatformPkg/PlatformPkg.dec
+++ b/Platform/BroxtonPlatformPkg/PlatformPkg.dec
@@ -192,7 +192,7 @@
gPlatformModuleTokenSpaceGuid.PcdBoardVbtFileGuid|{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }|VOID*|0x80000014
## This PCD used to enable or disable SueCreek
gPlatformModuleTokenSpaceGuid.PcdSueCreek|FALSE|BOOLEAN|0x80000015
- ## This PCD used for QR code display under EFI Shell
+ ## This PCD used for QR code display under EFI Shell
gPlatformModuleTokenSpaceGuid.PcdLogoDisplay|FALSE|BOOLEAN|0x80000016
## This PCD used to select bluetooth device
gPlatformModuleTokenSpaceGuid.PcdBtDevice|0x00|UINT8|0x80000017
@@ -255,6 +255,9 @@
gPlatformModuleTokenSpaceGuid.PcdEepromInMemoryFlag|0|BOOLEAN|0xEEEE0006
## Flag to tell if EEPROM Map is in HOB
gPlatformModuleTokenSpaceGuid.PcdEepromMapHobValid|0|BOOLEAN|0xEEEE0007
+ ## Flag to tell if EEPROM image require DXE verification or not
+ gPlatformModuleTokenSpaceGuid.PcdEepromDxeVerificationRequired|0|BOOLEAN|0xEEEE0008
+
[PcdsFeatureFlag] # 0x10000000
## This PCD specifies whether StatusCode is reported via ISA Serial port.
gEfiSerialPortTokenSpaceGuid.PcdStatusCodeUseIsaSerial|TRUE|BOOLEAN|0x00000020
@@ -349,7 +352,8 @@
## EEPROM PCDs
##
## I2C bus the master EEPROM is hanging on
- gPlatformModuleTokenSpaceGuid.PcdEepromBus|0x06|UINT8|0xEEEE2000
+ ## 0-7 = I2C 8 = SmBus as I2C7
+ gPlatformModuleTokenSpaceGuid.PcdEepromBus|0x08|UINT8|0xEEEE2000
## 7-bit address of the master EEPROM
gPlatformModuleTokenSpaceGuid.PcdEepromAddress|0x50|UINT8|0xEEEE2001
## Priority order of EEPROM data libraries
@@ -362,6 +366,9 @@
gPlatformModuleTokenSpaceGuid.PcdEepromFvImageFile|{0xAC, 0x3D, 0xBD, 0xBF, 0xEB, 0x01, 0xEB, 0x4F, 0xA9, 0xDE, 0xBC, 0xC9, 0xD1, 0xBA, 0x55, 0x31}|VOID*|0xEEEE2004
## GPIO PAD whitelist | END OF ARRAY |
gPlatformModuleTokenSpaceGuid.PcdGpioWhiteList|{0xFF, 0xFF, 0xFF, 0xFF}|VOID*|0xEEEE2005
+ ## EEPROM security violation policy action
+ ## 0x00 - CPU dead loop
+ gPlatformModuleTokenSpaceGuid.PcdEepromSecurityViolationPolicy|0x00|UINT8|0xEEEE2006
[PcdsPatchableInModule]
## MemoryCheck value for checking memory before boot OS.
diff --git a/Platform/BroxtonPlatformPkg/PlatformPkg.fdf b/Platform/BroxtonPlatformPkg/PlatformPkg.fdf
index ca080bc472..a9b37249fd 100644
--- a/Platform/BroxtonPlatformPkg/PlatformPkg.fdf
+++ b/Platform/BroxtonPlatformPkg/PlatformPkg.fdf
@@ -14,6 +14,20 @@
##
[Defines]
+ #==========================|============|============|=======================================
+ # FV label | Base | Offset | Size
+ #--------------------------|------------|------------|---------------------------------------
+ # FV_IBBL | 0xFFFFF000 | 0x00316000 | 0x00001000
+ # Empty | 0xFFFFA000 | 0x00311000 | 0x00005000
+ # FV_IBBM | 0xFFFC1000 | 0x002D8000 | 0x00039000
+ # FTW_SPARE | 0xFFF81000 | 0x00298000 | 0x00040000
+ # FTW_WORKING | 0xFFF7F000 | 0x00296000 | 0x00002000
+ # FV_VPD | 0xFFF41000 | 0x00258000 | 0x0003E000
+ # Empty | 0xFFF34000 | 0x0024B000 | 0x0000D000
+ # FV_OBBX | 0xFFDBA000 | 0x000D1000 | 0x0017A000
+ # FV_OBB | 0xFFD44000 | 0x0005B000 | 0x00076000
+ # FV_IBBR | 0xFFCE9000 | 0x00000000 | 0x0005B000
+ #==========================|============|============|=======================================
!if $(EXT_BIOS_ENABLE) == FALSE
#==========================================================================================
@@ -37,7 +51,7 @@
DEFINE FLASH_AREA_SIZE = 0x00800000
DEFINE FLASH_REGION_FV_IBBR_OFFSET = 0x00000000
- DEFINE FLASH_REGION_FV_IBBR_SIZE = 0x00050000
+ DEFINE FLASH_REGION_FV_IBBR_SIZE = 0x0005B000
DEFINE FLASH_REGION_OBB_OFFSET = $(FLASH_REGION_FV_IBBR_OFFSET) + $(FLASH_REGION_FV_IBBR_SIZE)
DEFINE FLASH_REGION_OBB_SIZE = 0x00076000
DEFINE FLASH_REGION_OBBX_OFFSET = $(FLASH_REGION_OBB_OFFSET) + $(FLASH_REGION_OBB_SIZE)
@@ -236,37 +250,37 @@
# VBT For Leaf Hill (File Guid is gPeiLeafHillVbtGuid)
FILE FREEFORM = 6AE80680-5E3F-4E63-A5F5-78E5214F13FE {
SECTION RAW = $(PLATFORM_NAME)/Board/LeafHill/Vbt/VbtBxtMipi.bin
- SECTION UI = "IntelGopVbt1"
+ SECTION UI = "IntelGopVbtLeafHill"
}
# VBT For Minnowboard 3 (File Guid is gPeiMinnowBoard3VbtGuid)
FILE FREEFORM = E08CA6D5-8D02-43ae-ABB1-952CC787C933 {
SECTION RAW = $(PLATFORM_NAME)/Board/MinnowBoard3/Vbt/VbtBxtMipi.bin
- SECTION UI = "IntelGopVbt1"
+ SECTION UI = "IntelGopVbtMinnow3"
}
# VBT For Minnowboard 3 Module (File Guid is gPeiMinnow3ModuleVbtGuid)
FILE FREEFORM = 1F9CBB42-107E-46A4-A2CB-92F586F9FB31 {
SECTION RAW = $(PLATFORM_NAME)/Board/MinnowBoard3Module/Vbt/VbtBxtMipi.bin
- SECTION UI = "IntelGopVbt1"
+ SECTION UI = "IntelGopVbtMinnow3Module"
}
# VBT For Benson Glacier (File Guid is gPeiBensonGlacierVbtGuid)
FILE FREEFORM = BFDE308E-2D5A-4CA7-AA76-19938AAAE4DA {
SECTION RAW = $(PLATFORM_NAME)/Board/BensonGlacier/Vbt/VbtBxtMipi.bin
- SECTION UI = "IntelGopVbt1"
+ SECTION UI = "IntelGopVbtBensonGlacier"
}
# VBT For Aurora Glacier (File Guid is gPeiAuroraGlacierVbtGuid)
FILE FREEFORM = AA80B0B1-BA1E-4D4F-83E0-CCF47AAA3CD8 {
SECTION RAW = $(PLATFORM_NAME)/Board/AuroraGlacier/Vbt/VbtBxtMipi.bin
- SECTION UI = "IntelGopVbt1"
+ SECTION UI = "IntelGopVbtAuroaGlacier"
}
# VBT For Up2 (File Guid is gPeiUp2VbtGuid)
FILE FREEFORM = 16667736-B2FE-49b3-A0EB-D6B9D7F9657B {
SECTION RAW = $(PLATFORM_NAME)/Board/UP2/Vbt/Vbt.bin
- SECTION UI = "IntelGopVbt1"
+ SECTION UI = "IntelGopVbtUp2"
}
!endif
@@ -305,7 +319,7 @@
[FV.FVIBBM]
BlockSize = $(FLASH_BLOCK_SIZE)
- FvBaseAddress = 0xFEF45000
+ FvBaseAddress = 0xFEF45000 # This should match InitNEM.asm .IBBBase
FvAlignment = 16 #FV alignment and FV attributes setting.
ERASE_POLARITY = 1
@@ -350,9 +364,12 @@ APRIORI PEI {
INF $(PLATFORM_PACKAGE_COMMON)/SampleCode/IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf
INF RuleOverride = RESET_VECTOR USE = IA32 BroxtonSiPkg/Cpu/ResetVector/Vtf1/Bin/ResetVector.inf
- FILE FREEFORM = PCD (gPlatformModuleTokenSpaceGuid.PcdEepromFvImageFile) {
- SECTION RAW = $(PLATFORM_NAME)/Board/MinnowBoard3Module/Eeprom/MB3-Eeprom.bin
- }
+ !if $(EEPROM_CODE_ENABLE) == TRUE
+ FILE FREEFORM = PCD (gPlatformModuleTokenSpaceGuid.PcdEepromFvImageFile) {
+ SECTION RAW = $(PLATFORM_NAME)/Board/MinnowBoard3Module/Eeprom/MB3-Eeprom.bin
+ }
+ !endif
+
[FV.FVIBBL]
BlockSize = $(FLASH_BLOCK_SIZE)
FvAlignment = 16 #FV alignment and FV attributes setting.
@@ -420,9 +437,11 @@ APRIORI DXE {
!if $(SOURCE_DEBUG_ENABLE) == TRUE
INF SourceLevelDebugPkg/DebugAgentDxe/DebugAgentDxe.inf
!endif
- FILE FREEFORM = PCD (gPlatformModuleTokenSpaceGuid.PcdEepromPublicKeyFile) {
- SECTION RAW = $(PLATFORM_NAME)/Board/MinnowBoard3Module/Eeprom/RSA-keys/MB3-public.bin
- }
+ !if $(EEPROM_CODE_ENABLE) == TRUE
+ FILE FREEFORM = PCD (gPlatformModuleTokenSpaceGuid.PcdEepromPublicKeyFile) {
+ SECTION RAW = $(PLATFORM_NAME)/Board/MinnowBoard3Module/Eeprom/RSA-keys/MB3-public.bin
+ }
+ !endif
INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
diff --git a/Platform/BroxtonPlatformPkg/PlatformPkgIA32.dsc b/Platform/BroxtonPlatformPkg/PlatformPkgIA32.dsc
index 262aca7606..f842ec6309 100644
--- a/Platform/BroxtonPlatformPkg/PlatformPkgIA32.dsc
+++ b/Platform/BroxtonPlatformPkg/PlatformPkgIA32.dsc
@@ -123,6 +123,7 @@
[LibraryClasses.Common.UEFI_APPLICATION]
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+ HeciMsgLib|$(PLATFORM_SI_PACKAGE)/Txe/Library/HeciMsgLib/DxeSmmHeciMsgLib.inf
################################################################################
#
diff --git a/Platform/BroxtonPlatformPkg/PlatformPkgX64.dsc b/Platform/BroxtonPlatformPkg/PlatformPkgX64.dsc
index 483d23c234..6e1be38553 100644
--- a/Platform/BroxtonPlatformPkg/PlatformPkgX64.dsc
+++ b/Platform/BroxtonPlatformPkg/PlatformPkgX64.dsc
@@ -123,6 +123,7 @@
[LibraryClasses.Common.UEFI_APPLICATION]
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+ HeciMsgLib|$(PLATFORM_SI_PACKAGE)/Txe/Library/HeciMsgLib/DxeSmmHeciMsgLib.inf
################################################################################
#
diff --git a/Platform/BroxtonPlatformPkg/PlatformPkgX64Gcc.dsc b/Platform/BroxtonPlatformPkg/PlatformPkgX64Gcc.dsc
index ab15dcc33d..2e978aed57 100644
--- a/Platform/BroxtonPlatformPkg/PlatformPkgX64Gcc.dsc
+++ b/Platform/BroxtonPlatformPkg/PlatformPkgX64Gcc.dsc
@@ -1,170 +1,171 @@
-## @file
-# Platform description.
-#
-# Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-##
-
-################################################################################
-#
-# Defines Section - statements that will be processed to create a Makefile.
-#
-################################################################################
-[Defines]
- PLATFORM_NAME = BroxtonPlatformPkg
- PLATFORM_GUID = 1D3686CF-D2CE-4B6E-9F59-28F61976CB73
- PLATFORM_VERSION = 0.1
- DSC_SPECIFICATION = 0x00010005
-
- OUTPUT_DIRECTORY = Build/$(PLATFORM_NAME)
- SUPPORTED_ARCHITECTURES = IA32|X64
- BUILD_TARGETS = DEBUG|RELEASE
- SKUID_IDENTIFIER = DEFAULT
-
- #
- # Set platform specific package/folder names, same as passed from PREBUILD script.
- # PLATFORM_PACKAGE would be the same as PLATFORM_NAME as well as package build folder
- # The CORE_PACKAGES value could be set to '.' if Core packages get moved to Workspace root
- #
- DEFINE SILICON_NAME = BroxtonSoC
- DEFINE PLATFORM_PACKAGE_COMMON = $(PLATFORM_NAME)/Common
- DEFINE PLATFORM_SI_PACKAGE = $(SILICON_NAME)/BroxtonSiPkg
-
- !include DefineAtBuildMacros.dsc
- !include PlatformDsc/Defines.dsc
-
-################################################################################
-#
-# SKU Identification section - list of all SKU IDs supported by this Platform.
-#
-################################################################################
-[SkuIds]
- 0|DEFAULT # The entry: 0|DEFAULT is reserved and always required.
-
-################################################################################
-#
-# Library Class section - list of all Library Classes needed by this Platform.
-#
-################################################################################
-[LibraryClasses.Common]
- #
- # RC Package
- #
- !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgCommonLib.dsc
- #
- # Platform
- #
- !include PlatformDsc/LibraryClasses.dsc
-
-[LibraryClasses.IA32.SEC]
- !if $(PERFORMANCE_ENABLE) == TRUE
- PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
- !endif
-
-[LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC]
-!if $(PERFORMANCE_ENABLE) == TRUE
- !if $(INTEL_FPDT_ENABLE) == TRUE
- PerformanceLib|$(PLATFORM_PACKAGE_COMMON)/Library/PeiFpdtPerformanceLib/PeiFpdtPerformanceLib.inf
- !else
- PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- !endif
-!endif
- #
- # RC Package
- #
- !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgPeiLib.dsc
-
- !include PlatformDsc/LibraryClasses.IA32.PEI.dsc
-
-[LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE]
-!if $(PERFORMANCE_ENABLE) == TRUE
- !if $(INTEL_FPDT_ENABLE) == TRUE
- PerformanceLib|$(PLATFORM_PACKAGE_COMMON)/Library/PeiFpdtPerformanceLib/PeiFpdtPerformanceLib.inf
- !else
- PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- !endif
- TimerLib|$(PLATFORM_PACKAGE_COMMON)/Library/PlatformTscTimerLib/DxeTscTimerLib.inf
-!endif
-
-[LibraryClasses.IA32.DXE_DRIVER]
- !if $(PERFORMANCE_ENABLE) == TRUE
- PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE_COMMON)/Library/PlatformTscTimerLib/DxeTscTimerLib.inf
- !endif
-
-[LibraryClasses.Common.DXE_DRIVER, LibraryClasses.Common.DXE_CORE, LibraryClasses.Common.DXE_SMM_DRIVER, LibraryClasses.Common.SMM_CORE, LibraryClasses.Common.DXE_RUNTIME_DRIVER]
- #
- # RC Package
- #
- !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgDxeLib.dsc
-
-[LibraryClasses.Common.DXE_DRIVER]
- !include PlatformDsc/LibraryClasses.DxeDriver.dsc
-
-[LibraryClasses.Common.DXE_CORE]
- !include PlatformDsc/LibraryClasses.DxeCore.dsc
-
-[LibraryClasses.Common.DXE_SMM_DRIVER]
- !include PlatformDsc/LibraryClasses.DxeSmmDriver.dsc
-
-[LibraryClasses.Common.SMM_CORE]
- !include PlatformDsc/LibraryClasses.SmmCore.dsc
-
-[LibraryClasses.Common.DXE_RUNTIME_DRIVER]
- !include PlatformDsc/LibraryClasses.DxeRuntimeDriver.dsc
-
-[LibraryClasses.Common.UEFI_APPLICATION]
- PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
-
-################################################################################
-#
-# Pcd Section - list of all EDK II PCD Entries defined by this Platform
-#
-################################################################################
-[PcdsFeatureFlag.Common]
- !include PlatformDsc/PcdsFeatureFlag.dsc
-
-[PcdsFixedAtBuild.Common]
- gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxFvSupported|0x9
- !include PlatformDsc/PcdsFixedAtBuild.dsc
-
-[PcdsPatchableInModule.Common]
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x807B05FF
- gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x$(PLATFORM_PCIEXPRESS_BASE)
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLegacyBiosCacheLegacyRegion|FALSE
- ## Default Creator ID for ACPI table creation, override to "BRXT"
- gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId|0x54585242
-
-[PcdsDynamicHii.Common.DEFAULT]
- !include PlatformDsc/PcdsDynamicHii.Default.dsc
-
-[PcdsDynamicDefault.Common.DEFAULT]
- !include PlatformDsc/PcdsDynamicDefault.Default.dsc
-
-[Components.IA32]
- !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgPei.dsc
- !include PlatformDsc/Components.IA32.dsc
-
-[Components.X64]
- !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgDxe.dsc
- !include PlatformDsc/Components.dsc
- $(PLATFORM_SI_PACKAGE)/SouthCluster/ScInit/Dxe/ScInitDxe.inf
-
-################################################################################
-#
-# Build Options section - list of all Build Flags used by this Platform.
-#
-################################################################################
-#[BuildOptions.Common]
-
-[BuildOptions.Common.EDKII]
- !include PlatformDsc/BuildOptions.EDKII.Gcc.dsc
-
+## @file
+# Platform description.
+#
+# Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>
+#
+# This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php.
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+##
+
+################################################################################
+#
+# Defines Section - statements that will be processed to create a Makefile.
+#
+################################################################################
+[Defines]
+ PLATFORM_NAME = BroxtonPlatformPkg
+ PLATFORM_GUID = 1D3686CF-D2CE-4B6E-9F59-28F61976CB73
+ PLATFORM_VERSION = 0.1
+ DSC_SPECIFICATION = 0x00010005
+
+ OUTPUT_DIRECTORY = Build/$(PLATFORM_NAME)
+ SUPPORTED_ARCHITECTURES = IA32|X64
+ BUILD_TARGETS = DEBUG|RELEASE
+ SKUID_IDENTIFIER = DEFAULT
+
+ #
+ # Set platform specific package/folder names, same as passed from PREBUILD script.
+ # PLATFORM_PACKAGE would be the same as PLATFORM_NAME as well as package build folder
+ # The CORE_PACKAGES value could be set to '.' if Core packages get moved to Workspace root
+ #
+ DEFINE SILICON_NAME = BroxtonSoC
+ DEFINE PLATFORM_PACKAGE_COMMON = $(PLATFORM_NAME)/Common
+ DEFINE PLATFORM_SI_PACKAGE = $(SILICON_NAME)/BroxtonSiPkg
+
+ !include DefineAtBuildMacros.dsc
+ !include PlatformDsc/Defines.dsc
+
+################################################################################
+#
+# SKU Identification section - list of all SKU IDs supported by this Platform.
+#
+################################################################################
+[SkuIds]
+ 0|DEFAULT # The entry: 0|DEFAULT is reserved and always required.
+
+################################################################################
+#
+# Library Class section - list of all Library Classes needed by this Platform.
+#
+################################################################################
+[LibraryClasses.Common]
+ #
+ # RC Package
+ #
+ !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgCommonLib.dsc
+ #
+ # Platform
+ #
+ !include PlatformDsc/LibraryClasses.dsc
+
+[LibraryClasses.IA32.SEC]
+ !if $(PERFORMANCE_ENABLE) == TRUE
+ PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
+ !endif
+
+[LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC]
+!if $(PERFORMANCE_ENABLE) == TRUE
+ !if $(INTEL_FPDT_ENABLE) == TRUE
+ PerformanceLib|$(PLATFORM_PACKAGE_COMMON)/Library/PeiFpdtPerformanceLib/PeiFpdtPerformanceLib.inf
+ !else
+ PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
+ !endif
+!endif
+ #
+ # RC Package
+ #
+ !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgPeiLib.dsc
+
+ !include PlatformDsc/LibraryClasses.IA32.PEI.dsc
+
+[LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE]
+!if $(PERFORMANCE_ENABLE) == TRUE
+ !if $(INTEL_FPDT_ENABLE) == TRUE
+ PerformanceLib|$(PLATFORM_PACKAGE_COMMON)/Library/PeiFpdtPerformanceLib/PeiFpdtPerformanceLib.inf
+ !else
+ PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
+ !endif
+ TimerLib|$(PLATFORM_PACKAGE_COMMON)/Library/PlatformTscTimerLib/DxeTscTimerLib.inf
+!endif
+
+[LibraryClasses.IA32.DXE_DRIVER]
+ !if $(PERFORMANCE_ENABLE) == TRUE
+ PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
+ TimerLib|$(PLATFORM_PACKAGE_COMMON)/Library/PlatformTscTimerLib/DxeTscTimerLib.inf
+ !endif
+
+[LibraryClasses.Common.DXE_DRIVER, LibraryClasses.Common.DXE_CORE, LibraryClasses.Common.DXE_SMM_DRIVER, LibraryClasses.Common.SMM_CORE, LibraryClasses.Common.DXE_RUNTIME_DRIVER]
+ #
+ # RC Package
+ #
+ !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgDxeLib.dsc
+
+[LibraryClasses.Common.DXE_DRIVER]
+ !include PlatformDsc/LibraryClasses.DxeDriver.dsc
+
+[LibraryClasses.Common.DXE_CORE]
+ !include PlatformDsc/LibraryClasses.DxeCore.dsc
+
+[LibraryClasses.Common.DXE_SMM_DRIVER]
+ !include PlatformDsc/LibraryClasses.DxeSmmDriver.dsc
+
+[LibraryClasses.Common.SMM_CORE]
+ !include PlatformDsc/LibraryClasses.SmmCore.dsc
+
+[LibraryClasses.Common.DXE_RUNTIME_DRIVER]
+ !include PlatformDsc/LibraryClasses.DxeRuntimeDriver.dsc
+
+[LibraryClasses.Common.UEFI_APPLICATION]
+ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+ HeciMsgLib|$(PLATFORM_SI_PACKAGE)/Txe/Library/HeciMsgLib/DxeSmmHeciMsgLib.inf
+
+################################################################################
+#
+# Pcd Section - list of all EDK II PCD Entries defined by this Platform
+#
+################################################################################
+[PcdsFeatureFlag.Common]
+ !include PlatformDsc/PcdsFeatureFlag.dsc
+
+[PcdsFixedAtBuild.Common]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxFvSupported|0x9
+ !include PlatformDsc/PcdsFixedAtBuild.dsc
+
+[PcdsPatchableInModule.Common]
+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x807B05FF
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x$(PLATFORM_PCIEXPRESS_BASE)
+ gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLegacyBiosCacheLegacyRegion|FALSE
+ ## Default Creator ID for ACPI table creation, override to "BRXT"
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId|0x54585242
+
+[PcdsDynamicHii.Common.DEFAULT]
+ !include PlatformDsc/PcdsDynamicHii.Default.dsc
+
+[PcdsDynamicDefault.Common.DEFAULT]
+ !include PlatformDsc/PcdsDynamicDefault.Default.dsc
+
+[Components.IA32]
+ !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgPei.dsc
+ !include PlatformDsc/Components.IA32.dsc
+
+[Components.X64]
+ !include $(WORKSPACE)/edk2-platforms/Silicon/$(PLATFORM_SI_PACKAGE)/SiPkgDxe.dsc
+ !include PlatformDsc/Components.dsc
+ $(PLATFORM_SI_PACKAGE)/SouthCluster/ScInit/Dxe/ScInitDxe.inf
+
+################################################################################
+#
+# Build Options section - list of all Build Flags used by this Platform.
+#
+################################################################################
+#[BuildOptions.Common]
+
+[BuildOptions.Common.EDKII]
+ !include PlatformDsc/BuildOptions.EDKII.Gcc.dsc
+
diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/Cpu/ResetVector/Vtf0/Ia32/InitNEM.asm b/Silicon/BroxtonSoC/BroxtonSiPkg/Cpu/ResetVector/Vtf0/Ia32/InitNEM.asm
index 905e615a2c..0ec3e82f90 100644
--- a/Silicon/BroxtonSoC/BroxtonSiPkg/Cpu/ResetVector/Vtf0/Ia32/InitNEM.asm
+++ b/Silicon/BroxtonSoC/BroxtonSiPkg/Cpu/ResetVector/Vtf0/Ia32/InitNEM.asm
@@ -1,7 +1,7 @@
;; @file
; Search for the Boot Firmware Volume (BFV) base address.
;
-; Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.<BR>
+; Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
;
; This program and the accompanying materials
; are licensed and made available under the terms and conditions of the BSD License
@@ -178,18 +178,31 @@ sub %1, fourGigabytes - %2
ALIGN 16
HOBStructure:
istruc HobStruc
+ ;
+ ; NOTE: The $(Variable) values come from defines.dsc
+ ;
+ ; .CarBase = $(CAR_BASE_ADDRESS)
+ ; .CarSize = $(CAR_REGION_SIZE)
+ ; .StackBase = .CarBase
+ ; .StackSize = $(BLD_RAM_DATA_SIZE)
+ ; .IBBLBase = .CarBase + .StackSize + $(FSP_RAM_DATA_SIZE)
+ ; .IBBLSize = $(FLASH_REGION_FV_IBBL_SIZE)
+ ; .FITBase = .IBBLBase + .IBBLSize
+ ; .IBBBase = .FitBase + 0x00004000
+ ; .IBBSize = $(BLD_IBBM_SIZE) + $(FSP_IBBM_SIZE)
+ ;
dd "$SIG" ; .Sign
- dd 0xFEF00000 ; .CarBase
- dd 0x00100000 ; .CarSize
+ dd 0xFEF00000 ; .CarBase = $(CAR_BASE_ADDRESS)
+ dd 0x00100000 ; .CarSize = $(CAR_REGION_SIZE)
dd 0xFFF00000 ; .IBBSource = Not used
- dd 0xFEF45000 ; .IBBBase = .CarBase
- dd 0x0008E000 ; .IBBSize = size of (FVIBBM.fv+FSP_M.fv) = BLD_IBBM_SIZE + FSP_IBBM_SIZE = 0x8D000
+ dd 0xFEF45000 ; .IBBBase = .FitBase + 0x00004000
+ dd 0x00092000 ; .IBBSize = $(BLD_IBBM_SIZE) + $(FSP_IBBM_SIZE)
dd 0xFFFFF000 ; .IBBLSource = 0x100000000 - .IBBLSize = PcdFlashFvIBBLBase
- dd 0xFEF40000 ; .IBBLBase = .IBBBase + .IBBSize
+ dd 0xFEF40000 ; .IBBLBase = .CarBase + $(BLD_RAM_DATA_SIZE) + $(FSP_RAM_DATA_SIZE)
dd 0x00001000 ; .IBBLSize = PcdFlashFvIBBLSize = FLASH_REGION_FV_IBBL_SIZE in .fdf
- dd 0xFEF41000 ; .FITBase
- dd 0xFEF00000 ; .Stack&Heap Base
- dd 0x16000 ; .Stack&Heap Size
+ dd 0xFEF41000 ; .FITBase = .IBBLBase + .IBBLSize
+ dd 0xFEF00000 ; .StackBase = .CarBase
+ dd 0x00016000 ; .StackSize = $(BLD_RAM_DATA_SIZE)
dd 0 ; .HostToCse
dd 0 ; .CseToHost
dd 0 ; .ChunkIndex
--
2.11.0.windows.1
reply other threads:[~2018-10-03 22:30 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E6EF8131FBAF5A44BF17D9E2B45E20755FBF3A1F@ORSMSX114.amr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox