From b7c51c9cf4864df6aabb99a1ae843becd577237c Mon Sep 17 00:00:00 2001 From: raywu Date: Fri, 15 Jun 2018 00:00:50 +0800 Subject: init. 1AQQW051 --- .../SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.c | 252 +++++++++++++++++++++ .../SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.cif | 11 + .../SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.dxs | 50 ++++ .../SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.mak | 44 ++++ .../SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.sdl | 27 +++ 5 files changed, 384 insertions(+) create mode 100644 Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.c create mode 100644 Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.cif create mode 100644 Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.dxs create mode 100644 Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.mak create mode 100644 Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.sdl (limited to 'Chipset/SB/PchWrap/SmBusMemoryDown') diff --git a/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.c b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.c new file mode 100644 index 0000000..8e081d1 --- /dev/null +++ b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.c @@ -0,0 +1,252 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2012, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* + +//************************************************************************* +// $Header: /Alaska/BIN/Chipset/Intel/SouthBridge/LynxPoint/Intel Pch SB Chipset/PchWrap/SmBusMemoryDown.c 1 12/11/12 1:09a Scottyang $ +// +// $Date: 12/11/12 1:09a $ +//************************************************************************* +// Revision History +// ---------------- +// $Log: +// +//************************************************************************* +// +// +// Name: SmBusMemoryDown.c +// +// Description: SmBus support MemoryDown functions implementation +// +// +//************************************************************************* + +#include +#include +#include +#include + +EFI_SMBUS_HC_PROTOCOL *SmBusProtocol = NULL; +static EFI_SMBUS_HC_EXECUTE_OPERATION PchSmBusExecute = NULL; +EFI_EVENT gSmBusMemoryDownEvent; +VOID *gSmBusMemoryDownEventReg; +UINT8 IsRunMemoryDown = 0; +EFI_GUID gEfiSMBusProtocolGuid = EFI_SMBUS_HC_PROTOCOL_GUID; + +#ifndef AMI_OVERRIDE_FOR_MEMORY_DOWN +#if defined(NB_OEM_DIMM1_STATUS) && (NB_OEM_DIMM1_STATUS == 0x02) +static UINT8 Dimm1SpdTbl[] = NB_OEM_DIMM1_SPD_DATA; +#endif +#if defined(NB_OEM_DIMM2_STATUS) && (NB_OEM_DIMM2_STATUS == 0x02) +static UINT8 Dimm2SpdTbl[] = NB_OEM_DIMM2_SPD_DATA; +#endif +#if defined(NB_OEM_DIMM3_STATUS) && (NB_OEM_DIMM3_STATUS == 0x02) +static UINT8 Dimm3SpdTbl[] = NB_OEM_DIMM3_SPD_DATA; +#endif +#if defined(NB_OEM_DIMM4_STATUS) && (NB_OEM_DIMM4_STATUS == 0x02) +static UINT8 Dimm4SpdTbl[] = NB_OEM_DIMM4_SPD_DATA; +#endif +#endif // AMI_OVERRIDE_FOR_MEMORY_DOWN + +VOID OverrideSmBusNotify ( + IN EFI_EVENT Event, + IN VOID *Context +); + + +//************************************************************************* +// +// +// Procedure: OverrideSmBusExecute +// +// Description: Init SmBus MemoryDown Protocol Execute.. +// +// Input: +// +// Output: +// +// +//************************************************************************* +EFI_STATUS +EFIAPI +OverrideSmBusExecute ( + IN EFI_SMBUS_HC_PROTOCOL *This, + IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress, + IN EFI_SMBUS_DEVICE_COMMAND Command, + IN EFI_SMBUS_OPERATION Operation, + IN BOOLEAN PecCheck, + IN OUT UINTN *Length, + IN OUT VOID *Buffer + ) +{ + UINT8 *DimmSpd = NULL; + UINT8 *BufferPoint = Buffer; + UINT16 i = 0; + + if (IsRunMemoryDown) { +#ifdef NB_OEM_DIMM1_SPD_DATA + if(SlaveAddress.SmbusDeviceAddress == DIMM1_SMBUS_ADDRESS >> 1) { + DimmSpd = Dimm1SpdTbl; + } +#endif +#ifdef NB_OEM_DIMM2_SPD_DATA + if(SlaveAddress.SmbusDeviceAddress == DIMM2_SMBUS_ADDRESS >> 1) { + DimmSpd = Dimm2SpdTbl; + } +#endif +#ifdef NB_OEM_DIMM3_SPD_DATA + if(SlaveAddress.SmbusDeviceAddress == DIMM3_SMBUS_ADDRESS >> 1) { + DimmSpd = Dimm3SpdTbl; + } +#endif +#ifdef NB_OEM_DIMM4_SPD_DATA + if(SlaveAddress.SmbusDeviceAddress == DIMM4_SMBUS_ADDRESS >> 1) { + DimmSpd = Dimm4SpdTbl; + } +#endif + if (DimmSpd != NULL) { + for (i=0; i <= *Length; i++) { + *BufferPoint = DimmSpd[Command + i]; + BufferPoint++; + } + return EFI_SUCCESS; + } + } + + return PchSmBusExecute ( + This, + SlaveAddress, + Command, + Operation, + PecCheck, + Length, + Buffer + ); + +} +//************************************************************************* +// +// +// Procedure: OverrideSmBusNotify +// +// Description: Override SmBus Protocol Execute. +// +// Input: +// IN EFI_LEGACY_REGION_PROTOCOL *This, +// IN UINT32 Start, +// IN UINT32 Length, +// OUT UINT32 *Granularity, +// IN BOOLEAN *On +// +// Output: +// Status of the operation +// +// +//************************************************************************* +VOID OverrideSmBusNotify ( + IN EFI_EVENT Event, + IN VOID *Context ) +{ + EFI_STATUS Status; + + Status = pBS->LocateProtocol (&gEfiSmbusProtocolGuid, NULL, (VOID**) &SmBusProtocol); + if (!EFI_ERROR (Status)) { + + PchSmBusExecute = SmBusProtocol->Execute; + SmBusProtocol->Execute = OverrideSmBusExecute; + } + // Kill event + pBS->CloseEvent(Event); +} +//************************************************************************* +// +// +// Procedure: InitSmBusMemoryDown +// +// Description: Override the SmBus protocol. +// +// Input: +// IN EFI_HANDLE ImageHandle, +// IN EFI_SYSTEM_TABLE *SystemTable +// +// Output: +// Status of the operation +// +// Notes: +// Here is the control flow of this function: +// 1. Get SmBus protocol. +// 2. Override the SmBus protocol. +// +// +//************************************************************************* +EFI_STATUS InitSmBusMemoryDown( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + NB_SETUP_DATA *NBSetupData = NULL; + UINTN VariableSize = sizeof(NB_SETUP_DATA); + + + InitAmiLib(ImageHandle, SystemTable); + + Status = pBS->AllocatePool( EfiBootServicesData, \ + VariableSize, \ + &NBSetupData ); + ASSERT_EFI_ERROR(Status); + + GetNbSetupData( pRS, NBSetupData, FALSE ); + + if (NBSetupData->IsRunMemoryDown) { + IsRunMemoryDown = NBSetupData->IsRunMemoryDown; + + + //NbSetupdata Pass to SaGlobalNvsArea. + Status = pBS->CreateEvent ( + EFI_EVENT_NOTIFY_SIGNAL, + TPL_CALLBACK, + OverrideSmBusNotify, + NULL, + &gSmBusMemoryDownEvent + ); + + if (!EFI_ERROR (Status)) { + Status = pBS->RegisterProtocolNotify ( + &gEfiSMBusProtocolGuid, + gSmBusMemoryDownEvent, + &gSmBusMemoryDownEventReg + ); + } + + } + // Free memory used for setup data + pBS->FreePool( NBSetupData ); + + return Status; + +} + +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2012, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* diff --git a/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.cif b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.cif new file mode 100644 index 0000000..d187e08 --- /dev/null +++ b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.cif @@ -0,0 +1,11 @@ + + name = "SmBusMemoryDown" + category = ModulePart + LocalRoot = "Chipset\SB\PchWrap\SmBusMemoryDown\" + RefName = "SmBusMemoryDown" +[files] +"SmBusMemoryDown.sdl" +"SmBusMemoryDown.mak" +"SmBusMemoryDown.dxs" +"SmBusMemoryDown.c" + diff --git a/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.dxs b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.dxs new file mode 100644 index 0000000..6b1acfb --- /dev/null +++ b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.dxs @@ -0,0 +1,50 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2012, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* + +//************************************************************************* +// $Header: /Alaska/BIN/Chipset/Intel/SouthBridge/LynxPoint/Intel Pch SB Chipset/PchWrap/SmBusMemoryDown.dxs 1 12/11/12 1:09a Scottyang $ +// +// $Date: 12/11/12 1:09a $ +//************************************************************************* +// Revision History +// ---------------- +// $Log: +// +//************************************************************************* +// +// +// Name: SmBusMemoryDown.dxs +// +// Description: SmBusMemoryDown dependency file +// +// +//************************************************************************* + +DEPENDENCY_START + TRUE +DEPENDENCY_END + +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2012, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* diff --git a/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.mak b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.mak new file mode 100644 index 0000000..c99931f --- /dev/null +++ b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.mak @@ -0,0 +1,44 @@ +#************************************************************************* +#************************************************************************* +#** ** +#** (C)Copyright 1985-2011, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#************************************************************************* +#************************************************************************* + +all : SmBusMemoryDown + +SmBusMemoryDown : $(BUILD_DIR)\SmBusMemoryDown.mak SmBusMemoryDownBin + +$(BUILD_DIR)\SmBusMemoryDown.mak : $(SMBUS_MEMORYDOWN_DIR)\$(@B).cif $(SMBUS_MEMORYDOWN_DIR)\$(@B).mak $(BUILD_RULES) + $(CIF2MAK) $(SMBUS_MEMORYDOWN_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS) + +SmBusMemoryDownBin : $(AMIDXELIB) $(AMICSPLib) + $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\ + /f $(BUILD_DIR)\SmBusMemoryDown.mak all\ + GUID=F6A59595-BB9F-415b-A7F3-DC7C09387BE6 \ + ENTRY_POINT=InitSmBusMemoryDown \ + DEPEX1=$(SMBUS_MEMORYDOWN_DIR)\SmBusMemoryDown.dxs\ + DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX \ + TYPE=BS_DRIVER \ + COMPRESS=1\ + +#************************************************************************* +#************************************************************************* +#** ** +#** (C)Copyright 1985-2012, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#************************************************************************* +#************************************************************************* diff --git a/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.sdl b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.sdl new file mode 100644 index 0000000..e5f0206 --- /dev/null +++ b/Chipset/SB/PchWrap/SmBusMemoryDown/SmBusMemoryDown.sdl @@ -0,0 +1,27 @@ +TOKEN + Name = "SmBusMemoryDown_SUPPORT" + Value = "1" + Help = "Main switch to enable SmBusMemoryDown support in Project" + TokenType = Boolean + TargetEQU = Yes + TargetMAK = Yes + Master = Yes + Token = "PchSmbusDxe_SUPPORT" "=" "1" + Token = "MRC_MEMORY_DOWN_SUPPORT" "=" "1" +End + +PATH + Name = "SMBUS_MEMORYDOWN_DIR" +End + +MODULE + Help = "Includes SmBusMemoryDown.mak to Project" + File = "SmBusMemoryDown.mak" +End + +ELINK + Name = "$(BUILD_DIR)\SmBusMemoryDown.ffs" + Parent = "FV_MAIN" + InvokeOrder = AfterParent +End + -- cgit v1.2.3