123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- /** @file
- Platform SEC Library for Quark.
- Copyright (c) 2013-2015 Intel Corporation.
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <PiPei.h>
- #include <Ppi/SecPlatformInformation.h>
- #include <Ppi/TemporaryRamSupport.h>
- #include <Library/PcdLib.h>
- #include <Library/BaseLib.h>
- #include <Library/DebugLib.h>
- #include <Library/BaseMemoryLib.h>
- #include <Library/HobLib.h>
- #include <Library/MtrrLib.h>
- /**
- Entry point to the C language phase of SEC. After the SEC assembly
- code has initialized some temporary memory and set up the stack,
- the control is transferred to this function.
- @param SizeOfRam Size of the temporary memory available for use.
- @param TempRamBase Base address of temporary ram
- @param BootFirmwareVolume Base address of the Boot Firmware Volume.
- **/
- VOID
- EFIAPI
- SecStartup (
- IN UINT32 SizeOfRam,
- IN UINT32 TempRamBase,
- IN VOID *BootFirmwareVolume
- );
- /**
- Auto-generated function that calls the library constructors for all of the module's
- dependent libraries. This function must be called by the SEC Core once a stack has
- been established.
- **/
- VOID
- EFIAPI
- ProcessLibraryConstructorList (
- VOID
- );
- /**
- Entry point to the C language phase of PlatformSecLib. After the SEC assembly
- code has initialized some temporary memory and set up the stack, control is
- transferred to this function.
- **/
- VOID
- EFIAPI
- PlatformSecLibStartup (
- VOID
- )
- {
- //
- // Process all library constructor functions linked to SecCore.
- // This function must be called before any library functions are called
- //
- ProcessLibraryConstructorList ();
- //
- // Set write back cache attribute for SPI FLASH
- //
- MtrrSetMemoryAttribute (
- PcdGet32 (PcdFlashAreaBaseAddress),
- PcdGet32 (PcdFlashAreaSize),
- CacheWriteBack
- );
- //
- // Set write back cache attribute for 512KB Embedded SRAM
- //
- MtrrSetMemoryAttribute (
- PcdGet32 (PcdEsramStage1Base),
- SIZE_512KB,
- CacheWriteBack
- );
- //
- // Pass control to SecCore module passing in the size of the temporary RAM in
- // Embedded SRAM, the base address of the temporary RAM in Embedded SRAM, and
- // the base address of the boot firmware volume. The top 32KB of the 512 KB
- // embedded SRAM are used as temporary RAM.
- //
- SecStartup (
- SIZE_32KB,
- PcdGet32 (PcdEsramStage1Base) + SIZE_512KB - SIZE_32KB,
- (VOID *)(UINTN)PcdGet32 (PcdFlashFvRecoveryBase)
- );
- }
- /**
- A developer supplied function to perform platform specific operations.
- It's a developer supplied function to perform any operations appropriate to a
- given platform. It's invoked just before passing control to PEI core by SEC
- core. Platform developer may modify the SecCoreData and PPI list that is
- passed to PEI Core.
- @param SecCoreData The same parameter as passing to PEI core. It
- could be overridden by this function.
- @param PpiList The default PPI list passed from generic SEC
- part.
- @return The final PPI list that platform wishes to passed to PEI core.
- **/
- EFI_PEI_PPI_DESCRIPTOR *
- EFIAPI
- SecPlatformMain (
- IN OUT EFI_SEC_PEI_HAND_OFF *SecCoreData,
- IN EFI_PEI_PPI_DESCRIPTOR *PpiList
- )
- {
- return NULL;
- }
- /**
- This interface conveys state information out of the Security (SEC) phase into PEI.
- @param PeiServices Pointer to the PEI Services Table.
- @param StructureSize Pointer to the variable describing size of the input buffer.
- @param PlatformInformationRecord Pointer to the EFI_SEC_PLATFORM_INFORMATION_RECORD.
- @retval EFI_SUCCESS The data was successfully returned.
- @retval EFI_BUFFER_TOO_SMALL The buffer was too small.
- **/
- EFI_STATUS
- EFIAPI
- SecPlatformInformation (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN OUT UINT64 *StructureSize,
- OUT EFI_SEC_PLATFORM_INFORMATION_RECORD *PlatformInformationRecord
- )
- {
- UINT32 *BIST;
- UINT32 Size;
- UINT32 Count;
- EFI_HOB_GUID_TYPE *GuidHob;
- UINT32 *TopOfStack;
- //
- // Top of the stack is the top of the 512KB Embedded SRAM region
- //
- TopOfStack = (UINT32 *)(UINTN)(PcdGet32 (PcdEsramStage1Base) + SIZE_512KB);
- GuidHob = GetFirstGuidHob (&gEfiSecPlatformInformationPpiGuid);
- if (GuidHob != NULL) {
- Size = GET_GUID_HOB_DATA_SIZE (GuidHob);
- BIST = GET_GUID_HOB_DATA (GuidHob);
- } else {
- //
- // The entries of BIST information, together with the number of them,
- // reside in the bottom of stack, left untouched by normal stack operation.
- // This routine copies the BIST information to the buffer pointed by
- // PlatformInformationRecord for output.
- //
- Count = *(TopOfStack - 1);
- Size = Count * sizeof (IA32_HANDOFF_STATUS);
- BIST = (UINT32 *) ((UINT32) TopOfStack - sizeof (UINT32) - Size);
- //
- // Copy Data from Stack to Hob to avoid data is lost after memory is ready.
- //
- BuildGuidDataHob (
- &gEfiSecPlatformInformationPpiGuid,
- BIST,
- (UINTN)Size
- );
- GuidHob = GetFirstGuidHob (&gEfiSecPlatformInformationPpiGuid);
- Size = GET_GUID_HOB_DATA_SIZE (GuidHob);
- BIST = GET_GUID_HOB_DATA (GuidHob);
- }
- if ((*StructureSize) < (UINT64) Size) {
- *StructureSize = Size;
- return EFI_BUFFER_TOO_SMALL;
- }
- *StructureSize = Size;
- CopyMem (PlatformInformationRecord, BIST, Size);
- return EFI_SUCCESS;
- }
- /**
- This interface disables temporary memory in SEC Phase.
- **/
- VOID
- EFIAPI
- SecPlatformDisableTemporaryMemory (
- VOID
- )
- {
- }
|