@@ -380,16 +380,18 @@ p9_cme_stop_entry()
380
380
out32 (CME_LCL_SICR_OR , core_stop1 << SHIFT32 (1 ));
381
381
out32 (CME_LCL_SICR_CLR , core_stop1 << SHIFT32 (1 ));
382
382
383
- // Removed: Do not want users to become accustomed to seeing Stop1 reflected in Stop History on DD1
384
- //
385
- //PK_TRACE("Update STOP history: in core stop level 1");
386
- //scom_data.words.lower = 0;
387
- //scom_data.words.upper = SSH_ACT_LV1_COMPLETE;
388
- //CME_PUTSCOM(PPM_SSHSRC, core_stop1, scom_data.value);
389
- //
383
+ PK_TRACE ("Update STOP history: in core stop level 1" );
384
+ scom_data .words .lower = 0 ;
385
+ scom_data .words .upper = SSH_ACT_LV1_COMPLETE ;
386
+ CME_PUTSCOM (PPM_SSHSRC , core_stop1 , scom_data .value );
390
387
391
388
core = core & ~core_stop1 ;
392
389
390
+ if (!core )
391
+ {
392
+ break ;
393
+ }
394
+
393
395
#else
394
396
395
397
// Nap should be done by hardware when auto_stop1 is enabled
@@ -401,6 +403,10 @@ p9_cme_stop_entry()
401
403
402
404
}
403
405
406
+ //----------------------------------------------------------------------
407
+ PK_TRACE ("+++++ +++++ STOP LEVEL 2 ENTRY +++++ +++++" );
408
+ //----------------------------------------------------------------------
409
+
404
410
#if HW405292_NDD1_PCBMUX_SAVIOR
405
411
406
412
p9_cme_pcbmux_savior_prologue (core );
@@ -411,6 +417,7 @@ p9_cme_stop_entry()
411
417
out32 (CME_LCL_SICR_OR , core << SHIFT32 (11 ));
412
418
413
419
// Poll Infinitely for PCB Mux Grant
420
+ // MF: change watchdog timer in pk to ensure forward progress
414
421
while ((core & (in32 (CME_LCL_SISR ) >> SHIFT32 (11 ))) != core );
415
422
416
423
PK_TRACE ("PCB Mux Granted on Core[%d]" , core );
@@ -421,20 +428,6 @@ p9_cme_stop_entry()
421
428
422
429
#endif
423
430
424
- #if HW386841_NDD1_DSL_STOP1_FIX
425
-
426
- // exit after getting PCBMUX for Stop1 Workaround
427
- if (!core )
428
- {
429
- break ;
430
- }
431
-
432
- #endif
433
-
434
- //----------------------------------------------------------------------
435
- PK_TRACE ("+++++ +++++ STOP LEVEL 2 ENTRY +++++ +++++" );
436
- //----------------------------------------------------------------------
437
-
438
431
// set target_level from pm_state for both cores or just one core
439
432
target_level = (core == CME_MASK_C0 ) ? G_cme_stop_record .req_level [0 ] :
440
433
G_cme_stop_record .req_level [1 ];
@@ -571,6 +564,7 @@ p9_cme_stop_entry()
571
564
while ((lclr_data & core ) != core );
572
565
573
566
// Waits quiesce done for at least 512 core cycles
567
+ // MF: verify generate FCB otherwise math is wrong.
574
568
PPE_WAIT_CORE_CYCLES (512 )
575
569
576
570
PK_TRACE_INF ("SE.2B: Interfaces Quiesced" );
@@ -699,6 +693,9 @@ p9_cme_stop_entry()
699
693
PK_PANIC (CME_STOP_ENTRY_STOPCLK_FAILED );
700
694
}
701
695
696
+ // MF: verify compiler generate single rlwmni
697
+ // MF: delay may be needed for stage latch to propagate thold
698
+
702
699
PK_TRACE_INF ("SE.2C: Core Clock Stopped" );
703
700
704
701
//==============================
0 commit comments