@@ -118,7 +118,7 @@ void AMDRyzenCPUPowerManagement::startWorkLoop() {
118
118
119
119
// Read PStateDef generated by EFI.
120
120
if (pmRyzen_cpu_is_master (cpu_num))
121
- provider->dumpPstate ();
121
+ provider->dumpPstate (nullptr );
122
122
123
123
124
124
if (!pmRyzen_cpu_primary_in_core (cpu_num)) return ;
@@ -381,12 +381,17 @@ IOReturn AMDRyzenCPUPowerManagement::setPowerState(unsigned long powerStateOrdin
381
381
if (0 == powerStateOrdinal) {
382
382
// Going to sleep
383
383
IOLog (" AMDCPUSupport::setPowerState preparing for sleep\n " );
384
- wentToSleep = true ;
384
+ sleepState.sleep = true ;
385
+ sleepState.cpb = getCPBState ();
386
+ dumpPstate (sleepState.pstate );
387
+
385
388
stopWorkLoop ();
386
- } else if (1 == powerStateOrdinal && wentToSleep ) {
389
+ } else if (1 == powerStateOrdinal && sleepState. sleep ) {
387
390
// Waking up
388
391
IOLog (" AMDCPUSupport::setPowerState preparing for wakeup\n " );
389
- wentToSleep = false ;
392
+ sleepState.sleep = false ;
393
+ setCPBState (sleepState.cpb );
394
+ dumpPstate (sleepState.pstate );
390
395
startWorkLoop ();
391
396
}
392
397
@@ -637,9 +642,8 @@ void AMDRyzenCPUPowerManagement::updatePackageEnergy(){
637
642
pwrLastTSC = rdtsc64 ();
638
643
}
639
644
640
- void AMDRyzenCPUPowerManagement::dumpPstate (){
645
+ void AMDRyzenCPUPowerManagement::dumpPstate (uint64_t buf[ 8 ] ){
641
646
642
- uint8_t len = 0 ;
643
647
for (uint32_t i = 0 ; i < kMSR_PSTATE_LEN ; i++) {
644
648
uint64_t msr_value_buf = 0 ;
645
649
bool err = !read_msr (kMSR_PSTATE_0 + i, &msr_value_buf);
@@ -658,17 +662,12 @@ void AMDRyzenCPUPowerManagement::dumpPstate(){
658
662
PStateDef_perCore[i] = msr_value_buf;
659
663
PStateDefClock_perCore[i] = clock;
660
664
661
- if (msr_value_buf & ((uint64_t )1 << 63 )) len++;
662
- // IOLog("a: %llu", msr_value_buf);
663
- }
664
-
665
- PStateEnabledLen = max (PStateEnabledLen, len);
665
+ if (buf != nullptr ) buf[i] = msr_value_buf;
666
+ };
666
667
}
667
668
668
669
void AMDRyzenCPUPowerManagement::writePstate (const uint64_t *buf){
669
670
670
- PStateEnabledLen = 0 ;
671
-
672
671
// A bit hacky but at least works for now.
673
672
void * args[] = {this , (void *)buf};
674
673
@@ -691,7 +690,7 @@ void AMDRyzenCPUPowerManagement::writePstate(const uint64_t *buf){
691
690
692
691
693
692
if (!pmRyzen_cpu_is_master (cpu_number ())) return ;
694
- provider->dumpPstate ();
693
+ provider->dumpPstate (nullptr );
695
694
696
695
}, nullptr , args);
697
696
0 commit comments