diff options
Diffstat (limited to 'src/vendorcode/amd/agesa/f10/Proc/IDS/Control/IdsCtrl.c')
-rw-r--r-- | src/vendorcode/amd/agesa/f10/Proc/IDS/Control/IdsCtrl.c | 771 |
1 files changed, 0 insertions, 771 deletions
diff --git a/src/vendorcode/amd/agesa/f10/Proc/IDS/Control/IdsCtrl.c b/src/vendorcode/amd/agesa/f10/Proc/IDS/Control/IdsCtrl.c deleted file mode 100644 index 4538c5ef32..0000000000 --- a/src/vendorcode/amd/agesa/f10/Proc/IDS/Control/IdsCtrl.c +++ /dev/null @@ -1,771 +0,0 @@ -/** - * @file - * - * AMD Integrated Debug Option Backend Routines - * - * Contains AMD AGESA debug macros and library functions - * - * @xrefitem bom "File Content Label" "Release Content" - * @e project: AGESA - * @e sub-project: IDS - * @e \$Revision $ @e \$Date $ - */ -/***************************************************************************** - * Copyright (c) 2011, Advanced Micro Devices, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Advanced Micro Devices, Inc. nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ -/*---------------------------------------------------------------------------------------- - * M O D U L E S U S E D - *---------------------------------------------------------------------------------------- - */ - -#include "AGESA.h" -#include "Ids.h" -#include "Topology.h" -#include "htFeat.h" -#include "IdsHt.h" -#include "amdlib.h" -#include "mm.h" -#include "mn.h" -#include "cpuRegisters.h" -#include "heapManager.h" -#include "cpuFamilyTranslation.h" -#include "GeneralServices.h" -#include "IdsLib.h" -#include "Filecode.h" -#define FILECODE PROC_IDS_CONTROL_IDSCTRL_FILECODE - -/*---------------------------------------------------------------------------- - * EXPORTED FUNCTIONS - * - *---------------------------------------------------------------------------- - */ - - -extern CONST IDS_FEAT_STRUCT* ROMDATA IdsCommonFeats[]; - - -/** - * IDS option hooking function dispatcher. - * - * This is the top level interface for IDS option Backend code. - * - * @param[in] IdsOption IDS indicator value, see @ref AGESA_IDS_OPTION - * @param[in,out] DataPtr Data pointer. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - **/ -IDS_STATUS -AmdIdsCtrlDispatcher ( - IN AGESA_IDS_OPTION IdsOption, - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader - ) -{ - IDS_NV_ITEM *IdsNvPtr; - IDS_STATUS ReturnFlag; - IDS_STATUS ExtendedFlag; - - IdsNvPtr = NULL; - ReturnFlag = IDS_SUCCESS; - - ASSERT (StdHeader != NULL); - if (AmdGetIdsNvTable ((VOID **)&IdsNvPtr, StdHeader) != AGESA_SUCCESS) { - AmdIdsCtrlInitialize (StdHeader); - AmdGetIdsNvTable ((VOID **)&IdsNvPtr, StdHeader); - } - - if (IdsNvPtr != NULL) { - ReturnFlag = IdsParseFeatTbl (IdsOption, IdsCommonFeats, DataPtr, IdsNvPtr, StdHeader); - ExtendedFlag = IDS_EXTENDED_HOOK (IdsOption, DataPtr, IdsNvPtr, StdHeader); - if (ExtendedFlag != IDS_SUCCESS) { - ReturnFlag = IDS_UNSUPPORTED; - } - } - return ReturnFlag; -} - -/** - * Ids code for parse IDS feat table. - * - * Feat table in IDS is used to decribe the IDS support feat and its according family,handler. - * - * @param[in] PIdsFeatTbl point to Ids Feat table - * @param[in] IdsOption IDS indicator value, see @ref AGESA_IDS_OPTION - * @param[in,out] DataPtr Data pointer. - * @param[in] IdsNvPtr Ids Nvram pointer. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - **/ -IDS_STATUS -IdsParseFeatTbl ( - IN AGESA_IDS_OPTION IdsOption, - IN CONST IDS_FEAT_STRUCT * PIdsFeatTbl[], - IN OUT VOID *DataPtr, - IN IDS_NV_ITEM *IdsNvPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader - ) -{ - UINT16 i; - AGESA_STATUS Tmpsts; - CPU_LOGICAL_ID CpuLogicalId; - BOOLEAN No_Check_Bsp; - CONST IDS_FEAT_STRUCT *PIdsFeat; - IDS_STATUS ReturnFlag; - IDS_STATUS status; - - status = IDS_SUCCESS; - ReturnFlag = IDS_SUCCESS; - - for (i = 0; PIdsFeatTbl[i] != NULL; i++) { - PIdsFeat = PIdsFeatTbl[i]; - //Does specified IdsOption reached - if (PIdsFeat->IdsOption == IdsOption) { - //check if bsp only - if (PIdsFeat->IsBsp) { - No_Check_Bsp = 0; - } else { - No_Check_Bsp = 1; - } - if (No_Check_Bsp || IsBsp (StdHeader, &Tmpsts)) { - //Does Family Match required - GetLogicalIdOfCurrentCore (&CpuLogicalId, StdHeader); - if ((CpuLogicalId.Family) & (PIdsFeat->CpuFamily)) { - //Excute the code for specific Ids Feat - status = PIdsFeat->pf_idsoption (DataPtr, StdHeader, IdsNvPtr); - if (status != IDS_SUCCESS) { - ReturnFlag = status; - } - } - } - } - } - return ReturnFlag; -} - -/** - * - * IDS Object Initialization - * - * Initializer routine that will be invoked by the wrapper to initialize - * the data buffer in heap for the IDS object. It includes IDS control - * structure, IDS mem table and IDS GRA table. - * - * @param[in,out] StdHeader The Pointer of IDS Initial Parameter - * - * @retval AGESA_SUCCESS Success to init IDS Object. - * @retval AGESA_ERROR Fail to init IDS Object. - * - **/ - -#ifdef IDS_HEAP_2STAGES - #define IDS_HEAP_PERSIST_EARLY HEAP_LOCAL_CACHE - #define IDS_HEAP_ASSERTION_LATE -#else - #define IDS_HEAP_PERSIST_EARLY HEAP_SYSTEM_MEM - #define IDS_HEAP_ASSERTION_LATE ASSERT(FALSE) -#endif - -AGESA_STATUS -AmdIdsCtrlInitialize ( - IN OUT AMD_CONFIG_PARAMS *StdHeader - ) -{ - AGESA_STATUS status; - UINT16 NvTblSize; - UINT16 i; - IDS_NV_ITEM IdsNvTable[IDS_NUM_NV_ITEM]; - IDS_NV_ITEM *NvTable; - IDS_NV_ITEM *NvPtr; - IDS_CONTROL_STRUCT *IdsCtrlPtr; - IDS_CALLOUT_STRUCT IdsCalloutData; - ALLOCATE_HEAP_PARAMS AllocHeapParams; - UINT16 MemTblSize; - UINT8 HeapPersist; - - NvTblSize = 0; - MemTblSize = 0; - HeapPersist = HEAP_SYSTEM_MEM; - //Heap status with HEAP_LOCAL_CACHE, will allocate heap with HEAP_LOCAL_CACHE - //with HEAP_TEMP_MEM HEAP_SYSTEM_MEM HEAP_DO_NOT_EXIST_ANYMORE HEAP_S3_RESUME - // with allocate with HEAP_SYSTEM_MEM - if (StdHeader->HeapStatus == HEAP_LOCAL_CACHE) { - MemTblSize = IDS_MAX_MEM_ITEMS; - HeapPersist = IDS_HEAP_PERSIST_EARLY; - } else if ((StdHeader->HeapStatus == HEAP_DO_NOT_EXIST_YET) || (StdHeader->HeapStatus == HEAP_DO_NOT_EXIST_ANYMORE)) { - return AGESA_ERROR; - } else { - IDS_HEAP_ASSERTION_LATE; - } - - IdsCalloutData.IdsNvPtr = IdsNvTable; - IdsCalloutData.StdHeader = *StdHeader; -//init IDS_CALLOUT_STRUCT before calling out, give NVITEM default value - for (i = AGESA_IDS_EXT_ID_START; i < IDS_NUM_NV_ITEM; i++) { - IdsNvTable[i].IdsNvId = i; - IdsNvTable[i].IdsNvValue = AGESA_IDS_DFT_VAL; - } - - AGESA_TESTPOINT (TpIfBeforeGetIdsData, StdHeader); - if (AgesaGetIdsData (IDS_CALLOUT_INIT, &IdsCalloutData) == AGESA_SUCCESS) { - NvTable = IdsCalloutData.IdsNvPtr; - NvPtr = NvTable; - while (NvPtr->IdsNvId != AGESA_IDS_NV_END) { - NvTblSize ++; - NvPtr ++; - } - NvTblSize ++; - - AllocHeapParams.RequestedBufferSize = sizeof (IDS_CONTROL_STRUCT); - AllocHeapParams.RequestedBufferSize += NvTblSize * sizeof (IDS_NV_ITEM); - AllocHeapParams.RequestedBufferSize += MemTblSize * sizeof (MEM_TABLE_ALIAS); - AllocHeapParams.RequestedBufferSize += IDS_EXTENDED_HEAP_SIZE; - AllocHeapParams.BufferHandle = IDS_CONTROL_HANDLE; - AllocHeapParams.Persist = HeapPersist; - - // - // Allocate data buffer in heap - // - if (HeapAllocateBuffer (&AllocHeapParams, (AMD_CONFIG_PARAMS *) StdHeader) == AGESA_SUCCESS) { - // - // Initialize IDS Date Buffer - // - IdsCtrlPtr = (IDS_CONTROL_STRUCT *) AllocHeapParams.BufferPtr; - IdsCtrlPtr->IdsHeapMemSize = AllocHeapParams.RequestedBufferSize; - IdsCtrlPtr->IdsNvTableOffset = sizeof (IDS_CONTROL_STRUCT); - IdsCtrlPtr->IdsMemTableOffset = IdsCtrlPtr->IdsNvTableOffset + NvTblSize * sizeof (IDS_NV_ITEM); - IdsCtrlPtr->IdsExtendOffset = IdsCtrlPtr->IdsMemTableOffset + MemTblSize * sizeof (MEM_TABLE_ALIAS); - - NvPtr = (IDS_NV_ITEM *) (AllocHeapParams.BufferPtr + IdsCtrlPtr->IdsNvTableOffset); - for (i = 0; i < NvTblSize ; i++) { - NvPtr->IdsNvId = NvTable->IdsNvId; - NvPtr->IdsNvValue = NvTable->IdsNvValue; - NvPtr ++; - NvTable ++; - } - status = AGESA_SUCCESS; - } else { - status = AGESA_ERROR; - } - } else { - status = AGESA_ERROR; - } - AGESA_TESTPOINT (TpIfAfterGetIdsData, StdHeader); - - return status; -} -/** - * IDS Backend Function for Target Pstate - * - * - * @param[in,out] DataPtr The Pointer of AMD_CPU_EARLY_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubTargetPstate ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - IDS_STATUS tarpst; - CPU_SPECIFIC_SERVICES *FamilySpecificServices; - - IDS_NV_READ_SKIP (tarpst, AGESA_IDS_NV_TARGET_PSTATE, IdsNvPtr) { - GetCpuServicesOfCurrentCore (&FamilySpecificServices, StdHeader); - FamilySpecificServices->TransitionPstate (FamilySpecificServices, (UINT8) tarpst, (BOOLEAN) FALSE, StdHeader); - } - return IDS_SUCCESS; -} - -/** - * IDS Backend Function for HdtOut - * - * - * @param[in,out] DataPtr The Pointer of AMD_CPU_EARLY_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubHdtOut ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - IDS_STATUS idsvalue; - AMD_EARLY_PARAMS *rptr; - - rptr = (AMD_EARLY_PARAMS *)DataPtr; -//set HDTOUT En/Dis - IDS_NV_READ_SKIP (idsvalue, AGESA_IDS_NV_HDTOUT, IdsNvPtr) { -//if HDTOUT set to enable, set the corresponding DR2 flag to 0x99cc - if (idsvalue == 1) { - LibAmdWriteCpuReg (DR2_REG, 0x99cc); - } - } - return IDS_SUCCESS; -} - -/** - * IDS Backend Function for Power down mode - * - * @param[in,out] DataPtr The Pointer of AMD_POST_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubPowerDownCtrl ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - AMD_POST_PARAMS *PostParamsPtr; - MEM_PARAMETER_STRUCT *RefPtr; - IDS_STATUS idsvalue; - MEM_DATA_STRUCT * memdataptr; - - PostParamsPtr = (AMD_POST_PARAMS *)DataPtr; - memdataptr = PostParamsPtr->MemConfig.MemData; - RefPtr = memdataptr->ParameterListPtr; - - IDS_NV_READ_SKIP (idsvalue, AGESA_IDS_NV_MEMORY_POWER_DOWN, IdsNvPtr) { - if (idsvalue < (IDS_STATUS)0x2) { - RefPtr->EnablePowerDown = (BOOLEAN) idsvalue; - } - } - return IDS_SUCCESS; -} - -/** - * Backend Function for IDS Option Hook Point: IDS_UCODE - * - * This function is used to disable UCode Installation if IDS Option disables ucode. - * The method is to force the number of total patches to ZERO. - * - * @param[in,out] DataPtr The Pointer of Data to Override. - * @param[in,out] StdHeader The Pointer of AGESA Header. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubUCode ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - UINT8 *TotalPatches; - - TotalPatches = (UINT8 *) DataPtr; - if (AmdIdsNvReader (AGESA_IDS_NV_UCODE, IdsNvPtr) == (IDS_STATUS) 0x0) { - (*TotalPatches) = 0; - } - return IDS_SUCCESS; -} - -/** - * IDS Backend Function for Post P-State - * - * This function is used to set Post P-State which are CPU specifically. - * - * @param[in,out] DataPtr The Pointer of AMD_CPU_EARLY_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubPostPState ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - AMD_CPU_EARLY_PARAMS *PCpuEarlyParams; - IDS_STATUS idsvalue; - UINT8 curpstatesnum; - - PCpuEarlyParams = (AMD_CPU_EARLY_PARAMS *)DataPtr; - curpstatesnum = IdsGetNumPstatesFamCommon (StdHeader); - idsvalue = AmdIdsNvReader (AGESA_IDS_NV_POSTPSTATE, IdsNvPtr); - - if (idsvalue < (IDS_STATUS) (curpstatesnum + 3)) { - switch (idsvalue) { - case (IDS_STATUS) 0x0: - // Auto - break; - case (IDS_STATUS) 0x1: - // Maximum Performance - PCpuEarlyParams->MemInitPState = 0; - break; - case (IDS_STATUS) 0x2: - // Minimum Performance - PCpuEarlyParams->MemInitPState = curpstatesnum - 1; - break; - default: - PCpuEarlyParams->MemInitPState = (UINT8) (idsvalue - 3); - break; - } - } - return IDS_SUCCESS; -} - - -/** - * IDS Backend Function for ECC symbol size - * - * This function is used to override mem parameter - * - * @param[in,out] DataPtr The Pointer of AMD_POST_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ - -IDS_STATUS -IdsSubEccSymbolSize ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - BOOLEAN *peccsymbolsize; - IDS_STATUS Status; - peccsymbolsize = (BOOLEAN *)DataPtr; - Status = AmdIdsNvReader (AGESA_IDS_NV_ECC_SYMBOL_SIZE, IdsNvPtr); - if (Status != IDS_UNSUPPORTED) { - if (Status == 0x1 || Status == 0x2) { - *peccsymbolsize = (BOOLEAN)(Status - 1); - } - } - return IDS_SUCCESS; -} - -/** - * IDS Backend Function for Memory Mode Unganged - * - * This function is used to override Memory Mode Unganged. - * - * @param[in,out] DataPtr The Pointer of AMD_POST_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubGangingMode ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - IDS_STATUS GangingMode; - IDS_NV_READ_SKIP (GangingMode, AGESA_IDS_NV_DCT_GANGING_MODE, IdsNvPtr) { - *((UINT8 *)DataPtr) = (UINT8) GangingMode; - } - return IDS_SUCCESS; -} - -/** - * IDS Backend Function for Power Down Mode - * - * This function is used to override Power Down Mode. - * - * @param[in,out] DataPtr The Pointer of AMD_POST_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubPowerDownMode ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - IDS_STATUS PowerDownMode; - PowerDownMode = AmdIdsNvReader (AGESA_IDS_NV_MEMORY_POWER_DOWN_MODE, IdsNvPtr); - if (PowerDownMode < (IDS_STATUS)0x2) { - *((UINT8 *) DataPtr) = (UINT8)PowerDownMode; - } - return IDS_SUCCESS; -} - -/** - * IDS Backend Function for Burst Length32 - * - * This function is used to override Burst Length32. - * - * @param[in,out] DataPtr The Pointer of AMD_POST_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubBurstLength32 ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - IDS_STATUS BurstLength32; - BurstLength32 = AmdIdsNvReader (AGESA_IDS_NV_DRAM_BURST_LENGTH32, IdsNvPtr); - if (BurstLength32 < (IDS_STATUS)0x2) { - *((UINT8 *) DataPtr) = (UINT8)BurstLength32; - } - return IDS_SUCCESS; -} - -/** - * IDS Backend Function for All Memory Clks Enable - * - * This function is used to override All Memory Clks Enable - * - * @param[in,out] DataPtr The Pointer of AMD_POST_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubAllMemClkEn ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - IDS_STATUS AllMemClkEn; - AllMemClkEn = AmdIdsNvReader (AGESA_IDS_NV_ALL_MEMCLKS , IdsNvPtr); - if (AllMemClkEn < (IDS_STATUS)0x2) { - *((UINT8 *) DataPtr) = (UINT8)AllMemClkEn; - } - return IDS_SUCCESS; -} - -/** - * IDS Backend Function for Dll Shut Down - * - * This function is used to override Dll Shut Down Option - * - * @param[in,out] DataPtr The Pointer of AMD_POST_PARAMS. - * @param[in,out] StdHeader The Pointer of AMD_CONFIG_PARAMS. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - **/ -IDS_STATUS -IdsSubDllShutDownSR ( - IN OUT VOID *DataPtr, - IN OUT AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - IDS_STATUS DllShutDownSR; - IDS_NV_READ_SKIP (DllShutDownSR, AGESA_IDS_NV_DLL_SHUT_DOWN , IdsNvPtr) { - *((UINT8 *) DataPtr) = (UINT8)DllShutDownSR; - } - return IDS_SUCCESS; -} - -/** - * IDS Backend Function for HT Link Configuration - * - * Provide the nv settings to the HT code in the form of a port override list. - * Create the list on the heap, so the HT code doesn't have to keep asking for it. - * - * @param[out] Data A reference to the HT Port Override List - * @param[in] StdHeader Header for library and services. - * @param[in] IdsNvPtr The Pointer of NV Table. - * - * @retval IDS_SUCCESS Backend function is called successfully. - * @retval IDS_UNSUPPORTED No Backend function is found. - * - */ -IDS_STATUS -IdsSubHtLinkControl ( - OUT VOID *Data, - IN AMD_CONFIG_PARAMS *StdHeader, - IN IDS_NV_ITEM *IdsNvPtr - ) -{ - ALLOCATE_HEAP_PARAMS AllocHeapParams; - HTIDS_PORT_OVERRIDE_LIST *ListReference; - HTIDS_PORT_OVERRIDE_LIST PortOverrideList; - UINT32 HTlinkSocket; - UINT32 HTlinkPort; - UINT32 HTlinkFre; - UINT32 HTlinkWidthIn; - UINT32 HTlinkWidthOut; - - ASSERT (IdsNvPtr != NULL); - ASSERT (Data != NULL); - - ListReference = Data; - *ListReference = NULL; - // Allocated the number of portlist override option sets supported (currently 1) plus 1 more for terminal. - AllocHeapParams.RequestedBufferSize = (sizeof (HTIDS_PORT_OVERRIDE) * 2); - AllocHeapParams.BufferHandle = IDS_HT_DATA_HANDLE; - AllocHeapParams.Persist = HEAP_LOCAL_CACHE; - if (HeapAllocateBuffer (&AllocHeapParams, StdHeader) == AGESA_SUCCESS) { - PortOverrideList = (HTIDS_PORT_OVERRIDE_LIST) AllocHeapParams.BufferPtr; - LibAmdMemFill (PortOverrideList, HT_LIST_TERMINAL, AllocHeapParams.RequestedBufferSize, StdHeader); - *ListReference = PortOverrideList; - - HTlinkSocket = AmdIdsNvReader (AGESA_IDS_NV_HTLINKSOCKET, IdsNvPtr); - if (HTlinkSocket != IDS_UNSUPPORTED) { - switch (HTlinkSocket) { - case (UINT32) 0xE: - HTlinkSocket = 0xFE; - break; - case (UINT32) 0xF: - HTlinkSocket = 0xFF; - break; - default: - break; - } - PortOverrideList->Socket = (UINT8) HTlinkSocket; - } - HTlinkPort = AmdIdsNvReader (AGESA_IDS_NV_HTLINKPORT, IdsNvPtr); - if (HTlinkPort != IDS_UNSUPPORTED) { - switch (HTlinkPort) { - case (UINT32) 0xC: - HTlinkPort = 0xFC; - break; - case (UINT32) 0xD: - HTlinkPort = 0xFD; - break; - case (UINT32) 0xE: - HTlinkPort = 0xFE; - break; - case (UINT32) 0xF: - HTlinkPort = 0xFF; - break; - default: - break; - } - PortOverrideList->Link = (UINT8) HTlinkPort; - } - HTlinkFre = AmdIdsNvReader (AGESA_IDS_NV_HTLINKFREQ, IdsNvPtr); - if (HTlinkFre != IDS_UNSUPPORTED) { - switch (HTlinkFre) { - case (UINT32) 0x1F: - HTlinkFre = 0xFF; - break; - default: - break; - } - PortOverrideList->Frequency = (UINT8) HTlinkFre; - } - HTlinkWidthIn = AmdIdsNvReader (AGESA_IDS_NV_HTLINKWIDTHIN , IdsNvPtr); - if (HTlinkWidthIn != IDS_UNSUPPORTED) { - switch (HTlinkWidthIn) { - case (UINT32) 0x0: - HTlinkWidthIn = 0x8; - break; - case (UINT32) 0x01: - HTlinkWidthIn = 0x16; - break; - case (UINT32) 0x04: - HTlinkWidthIn = 0x2; - break; - case (UINT32) 0x5: - HTlinkWidthIn = 0x4; - break; - case (UINT32) 0x7: - HTlinkWidthIn = 0xFF; - break; - default: - break; - } - PortOverrideList->WidthIn = (UINT8) HTlinkWidthIn; - } - HTlinkWidthOut = AmdIdsNvReader (AGESA_IDS_NV_HTLINKWIDTHOUT, IdsNvPtr); - if (HTlinkWidthOut != IDS_UNSUPPORTED) { - switch (HTlinkWidthOut) { - case (UINT32) 0x0: - HTlinkWidthOut = 0x8; - break; - case (UINT32) 0x01: - HTlinkWidthOut = 0x16; - break; - case (UINT32) 0x04: - HTlinkWidthOut = 0x2; - break; - case (UINT32) 0x5: - HTlinkWidthOut = 0x4; - break; - case (UINT32) 0x7: - HTlinkWidthOut = 0xFF; - break; - default: - break; - } - PortOverrideList->WidthOut = (UINT8) HTlinkWidthOut; - } - } - return IDS_SUCCESS; -} - |