9
9
**/
10
10
11
11
#include <PiPei.h>
12
- #include <Ppi/EdkiiMpServices2 .h>
12
+ #include <Ppi/MpServices2 .h>
13
13
#include <Library/PeiServicesLib.h>
14
14
#include <Library/DebugLib.h>
15
15
#include <Library/TimerLib.h>
16
16
#include <Library/SynchronizationLib.h>
17
17
18
+ EDKII_PEI_MP_SERVICES2_PPI * mCpuMp2Ppi ;
19
+
18
20
typedef struct {
19
21
UINT32 MagicNum ;
20
22
UINT32 SleepTime ;
@@ -177,13 +179,23 @@ Procedure (
177
179
)
178
180
{
179
181
PEI_MP2_PROCEDURE_PARAM * Argument ;
182
+ UINTN ApIndex ;
183
+
184
+ ApIndex = 0 ;
185
+
186
+ EFI_STATUS Status ;
187
+
188
+ if (mCpuMp2Ppi != NULL ) {
189
+ Status = mCpuMp2Ppi -> WhoAmI (mCpuMp2Ppi , & ApIndex );
190
+ ASSERT_EFI_ERROR (Status );
191
+ }
180
192
181
193
Argument = (PEI_MP2_PROCEDURE_PARAM * )ProcedureArgument ;
182
194
while (!AcquireSpinLockOrFail (& mConsoleLock )) {
183
195
CpuPause ();
184
196
}
185
197
186
- DEBUG ((DEBUG_INFO , " Procedure function done, SleepTime = 0x%x.\n" , Argument -> SleepTime ));
198
+ DEBUG ((DEBUG_INFO , "Ap 0x%x Procedure function done, SleepTime = 0x%x.\n" , ApIndex , Argument -> SleepTime ));
187
199
ReleaseSpinLock (& mConsoleLock );
188
200
189
201
if (Argument -> SleepTime != 0 ) {
@@ -208,7 +220,7 @@ PeiMp2UnitTest (
208
220
)
209
221
{
210
222
EFI_STATUS Status ;
211
- EDKII_PEI_MP_SERVICES2_PPI * CpuMp2Ppi ;
223
+
212
224
PEI_MP2_PROCEDURE_PARAM ProcParam ;
213
225
214
226
InitializeSpinLock ((SPIN_LOCK * ) & mConsoleLock );
@@ -220,7 +232,7 @@ PeiMp2UnitTest (
220
232
& gEdkiiPeiMpServices2PpiGuid ,
221
233
0 ,
222
234
NULL ,
223
- (VOID * * )& CpuMp2Ppi
235
+ (VOID * * )& mCpuMp2Ppi
224
236
);
225
237
ASSERT_EFI_ERROR (Status );
226
238
@@ -230,30 +242,36 @@ PeiMp2UnitTest (
230
242
231
243
ProcParam .SleepTime = 0 ;
232
244
DEBUG ((DEBUG_INFO , "1.Test StartupAllCPUs begin, SleepTime = 0x%x\n" , ProcParam .SleepTime ));
233
- Status = CpuMp2Ppi -> StartupAllCPUs (
234
- CpuMp2Ppi ,
245
+ Status = mCpuMp2Ppi -> StartupAllCPUs (
246
+ mCpuMp2Ppi ,
235
247
Procedure ,
236
248
0 ,
237
249
& ProcParam
238
250
);
239
251
if (EFI_ERROR (Status )) {
240
- DEBUG ((DEBUG_INFO , "Test StartupAllCPUs End ==== Fail !\n" ));
252
+ DEBUG ((DEBUG_INFO , "1. Test StartupAllCPUs End ==== Fail !\n" ));
241
253
} else {
242
- DEBUG ((DEBUG_INFO , "Test StartupAllCPUs End ==== Pass !\n" ));
254
+ DEBUG ((DEBUG_INFO , "1. Test StartupAllCPUs End ==== Pass !\n" ));
243
255
}
244
256
245
257
ProcParam .SleepTime = 0x30 ;
246
258
DEBUG ((DEBUG_INFO , "2.Test StartupAllCPUs with SleepTime = 0x%x\n" , ProcParam .SleepTime ));
247
- Status = CpuMp2Ppi -> StartupAllCPUs (
248
- CpuMp2Ppi ,
259
+ Status = mCpuMp2Ppi -> StartupAllCPUs (
260
+ mCpuMp2Ppi ,
249
261
Procedure ,
250
262
0x20 ,
251
263
& ProcParam
252
264
);
253
265
if (EFI_ERROR (Status )) {
254
- DEBUG ((DEBUG_INFO , "Test StartupAllCPUs End ==== Fail !\n" ));
266
+ //
267
+ // StartAllCPUs will let APs to run the procedure first, then BSP
268
+ // itself will run the procedure, at last BSP will check the APs
269
+ // result. So the timeout value not works here because Bsp run
270
+ // procedure also needs time.
271
+ //
272
+ DEBUG ((DEBUG_INFO , "2. Test StartupAllCPUs End ==== Fail !\n" ));
255
273
} else {
256
- DEBUG ((DEBUG_INFO , "Test StartupAllCPUs End ==== Pass !\n" ));
274
+ DEBUG ((DEBUG_INFO , "2. Test StartupAllCPUs End ==== Pass !\n" ));
257
275
}
258
276
259
277
DEBUG ((DEBUG_INFO , "Edkii Pei Mp Services2 Ppi test End!\n" ));
0 commit comments