]> git.proxmox.com Git - mirror_edk2.git/blame - Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c
ArmPkg/CompilerIntrinsicsLib: Add uread, uwrite GCC assembly sources
[mirror_edk2.git] / Vlv2TbltDevicePkg / FspSupport / Library / SecFspPlatformSecLibVlv2 / SaveSecContext.c
CommitLineData
3cbfba02
DW
1/** @file\r
2 This PEIM will parse the hoblist from fsp and report them into pei core.\r
3 This file contains the main entrypoint of the PEIM.\r
4\r
5 Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>\r
9dc8036d 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
3cbfba02
DW
7\r
8**/\r
9\r
10\r
11#include <PiPei.h>\r
12#include <Library/DebugLib.h>\r
13\r
14#include <Ppi/TopOfTemporaryRam.h>\r
15#include <Ppi/SecPlatformInformation.h>\r
16\r
17/**\r
18 Save BIST value before call FspInit.\r
19\r
20 @param Bist BIST value.\r
21**/\r
22VOID\r
23AsmSaveBistValue (\r
24 IN UINT32 Bist\r
25 );\r
26\r
27/**\r
28 Save Ticker value before call FspInit.\r
29\r
30 @param Ticker Ticker value.\r
31**/\r
32VOID\r
33AsmSaveTickerValue (\r
34 IN UINT64 Ticker\r
35 );\r
36\r
37/**\r
38 Save SEC context before call FspInit.\r
39\r
40 @param PeiServices Pointer to PEI Services Table.\r
41**/\r
42VOID\r
43EFIAPI\r
44SaveSecContext (\r
45 IN CONST EFI_PEI_SERVICES **PeiServices\r
46 )\r
47{\r
48 UINT32 *Bist;\r
49 UINT64 *Ticker;\r
50 UINT32 Size;\r
51 UINT32 Count;\r
52 UINT32 TopOfTemporaryRam;\r
53 VOID *TopOfTemporaryRamPpi;\r
54 EFI_STATUS Status;\r
55\r
56 DEBUG ((DEBUG_INFO, "SaveSecContext - 0x%x\n", PeiServices));\r
57\r
58 Status = (*PeiServices)->LocatePpi (\r
59 PeiServices,\r
60 &gTopOfTemporaryRamPpiGuid,\r
61 0,\r
62 NULL,\r
63 (VOID **) &TopOfTemporaryRamPpi\r
64 );\r
65 if (EFI_ERROR (Status)) {\r
66 return ;\r
67 }\r
68\r
69 DEBUG ((DEBUG_INFO, "TopOfTemporaryRamPpi - 0x%x\n", TopOfTemporaryRamPpi));\r
70\r
71 //\r
72 // The entries of BIST information, together with the number of them,\r
73 // reside in the bottom of stack, left untouched by normal stack operation.\r
74 // This routine copies the BIST information to the buffer pointed by\r
75 // PlatformInformationRecord for output.\r
76 //\r
77 // |--------------| <- TopOfTemporaryRam\r
78 // |Number of BSPs|\r
79 // |--------------|\r
80 // | BIST |\r
81 // |--------------|\r
82 // | .... |\r
83 // |--------------|\r
84 // | TSC[63:32] |\r
85 // |--------------|\r
86 // | TSC[31:00] |\r
87 // |--------------|\r
88 //\r
89\r
90 TopOfTemporaryRam = (UINT32)(UINTN)TopOfTemporaryRamPpi - sizeof(UINT32);\r
91 TopOfTemporaryRam -= sizeof(UINT32) * 2;\r
92 DEBUG ((DEBUG_INFO, "TopOfTemporaryRam - 0x%x\n", TopOfTemporaryRam));\r
93 Count = *(UINT32 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32));\r
94 DEBUG ((DEBUG_INFO, "Count - 0x%x\n", Count));\r
95 Size = Count * sizeof (IA32_HANDOFF_STATUS);\r
96 DEBUG ((DEBUG_INFO, "Size - 0x%x\n", Size));\r
97\r
98 Bist = (UINT32 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32) - Size);\r
99 DEBUG ((DEBUG_INFO, "Bist - 0x%x\n", *Bist));\r
100 Ticker = (UINT64 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32) - Size - sizeof(UINT64));\r
101 DEBUG ((DEBUG_INFO, "Ticker - 0x%lx\n", *Ticker));\r
102\r
103 //\r
104 // Just need record BSP\r
105 //\r
106 AsmSaveBistValue (*Bist);\r
107 AsmSaveTickerValue (*Ticker);\r
108}\r