Files
slimbootloader/BootloaderCorePkg/Library/FspApiLib/FspSiliconInit.c
T
Guo Dong 5e10bd1e07 Update BSD license to BSD+Patent license
To align with EDK2, update file license
to use BSD+Patent license

Signed-off-by: Guo Dong <guo.dong@intel.com>
2019-06-13 10:46:49 -07:00

57 lines
1.9 KiB
C

/** @file
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <FspApiLibInternal.h>
#include <Library/BoardInitLib.h>
/**
This FSP API is called after TempRamExit API.
FspMemoryInit, TempRamExit and FspSiliconInit APIs provide an alternate method to complete the
silicon initialization.
@retval EFI_SUCCESS FSP execution environment was initialized successfully.
@retval EFI_INVALID_PARAMETER Input parameters are invalid.
@retval EFI_UNSUPPORTED The FSP calling conditions were not met.
@retval EFI_DEVICE_ERROR FSP initialization failed.
@retval FSP_STATUS_RESET_REQUIREDx A reset is reuired. These status codes will not be returned during S3.
**/
EFI_STATUS
EFIAPI
CallFspSiliconInit (
VOID
)
{
UINT8 FspsUpd[FixedPcdGet32 (PcdFSPSUpdSize)];
UINT8 *DefaultSiliconInitUpd;
FSP_INFO_HEADER *FspHeader;
FSP_SILICON_INIT FspSiliconInit;
EFI_STATUS Status;
FspHeader = (FSP_INFO_HEADER *) (PcdGet32 (PcdFSPSBase) + FSP_INFO_HEADER_OFF);
ASSERT (FspHeader->Signature == FSP_INFO_HEADER_SIGNATURE);
ASSERT (FspHeader->ImageBase == PcdGet32 (PcdFSPSBase));
// Copy default UPD data
DefaultSiliconInitUpd = (UINT8 *) (FspHeader->ImageBase + FspHeader->CfgRegionOffset);
CopyMem (&FspsUpd, DefaultSiliconInitUpd, FspHeader->CfgRegionSize);
/* Update architectural UPD fields */
UpdateFspConfig (FspsUpd);
ASSERT (FspHeader->FspSiliconInitEntryOffset != 0);
FspSiliconInit = (FSP_SILICON_INIT) (FspHeader->ImageBase + \
FspHeader->FspSiliconInitEntryOffset);
DEBUG ((DEBUG_INFO, "Call FspSiliconInit ... \n"));
Status = FspSiliconInit (&FspsUpd);
DEBUG ((DEBUG_INFO, "%r\n", Status));
return Status;
}