@@ -2456,6 +2456,47 @@ void PCM::initUncorePMUsDirect()
2456
2456
}
2457
2457
}
2458
2458
}
2459
+ auto findPCICFGPMU = [](uint32 did,
2460
+ const int s,
2461
+ const uint32 CtlOffset,
2462
+ const std::vector<uint32> & CounterControlOffsets,
2463
+ const std::vector<uint32> & CounterValueOffsets)
2464
+ {
2465
+ int found = 0 ;
2466
+ UncorePMU out;
2467
+ forAllIntelDevices ([&](const uint32 group, const uint32 bus, const uint32 device, const uint32 function, const uint32 device_id)
2468
+ {
2469
+ if (device_id == did)
2470
+ {
2471
+ if (s == found)
2472
+ {
2473
+ auto handle = std::make_shared<PciHandleType>(group, bus, device, function);
2474
+ const size_t n_regs = 4 ;
2475
+ std::vector<std::shared_ptr<HWRegister> > CounterControlRegs, CounterValueRegs;
2476
+ for (size_t r = 0 ; r < n_regs; ++r)
2477
+ {
2478
+ CounterControlRegs.push_back (std::make_shared<PCICFGRegister32>(handle, CounterControlOffsets[r]));
2479
+ CounterValueRegs.push_back (std::make_shared<PCICFGRegister64>(handle, CounterValueOffsets[r]));
2480
+ }
2481
+ auto boxCtlRegister = std::make_shared<PCICFGRegister32>(handle, CtlOffset);
2482
+ out = UncorePMU (boxCtlRegister, CounterControlRegs, CounterValueRegs);
2483
+ return ;
2484
+ }
2485
+ ++found;
2486
+ }
2487
+ });
2488
+ return out;
2489
+ };
2490
+ for (uint32 s = 0 ; s < (uint32)num_sockets; ++s)
2491
+ {
2492
+ switch (cpu_model)
2493
+ {
2494
+ case BDX:
2495
+ irpPMUs[s][0 ] = findPCICFGPMU (0x6f2a , s, 0xF4 , {0xD8 , 0xDC , 0xE0 , 0xE4 }, {0xA0 , 0xB0 , 0xB8 , 0xC0 });
2496
+ iioPMUs[s][0 ] = findPCICFGPMU (0x6f34 , s, 0xF4 , {0xD8 , 0xDC , 0xE0 , 0xE4 }, {0xA0 , 0xA8 , 0xB0 , 0xB8 });
2497
+ break ;
2498
+ }
2499
+ }
2459
2500
2460
2501
if (hasPCICFGUncore () && MSR.size ())
2461
2502
{
@@ -9329,6 +9370,9 @@ void PCM::programIIOCounters(uint64 rawEvents[4], int IIOStack)
9329
9370
case PCM::SNOWRIDGE:
9330
9371
stacks_count = SNR_IIO_STACK_COUNT;
9331
9372
break ;
9373
+ case PCM::BDX:
9374
+ stacks_count = BDX_IIO_STACK_COUNT;
9375
+ break ;
9332
9376
case PCM::SKX:
9333
9377
default :
9334
9378
stacks_count = SKX_IIO_STACK_COUNT;
@@ -9364,6 +9408,7 @@ void PCM::programIIOCounters(uint64 rawEvents[4], int IIOStack)
9364
9408
9365
9409
void PCM::programIRPCounters (uint64 rawEvents[4 ], int IIOStack)
9366
9410
{
9411
+ // std::cerr << "PCM::programIRPCounters IRP PMU unit (stack) " << IIOStack << " getMaxNumOfIIOStacks(): " << getMaxNumOfIIOStacks()<< "\n";
9367
9412
std::vector<int32> IIO_units;
9368
9413
if (IIOStack == -1 )
9369
9414
{
@@ -9389,6 +9434,7 @@ void PCM::programIRPCounters(uint64 rawEvents[4], int IIOStack)
9389
9434
std::cerr << " IRP PMU unit (stack) " << unit << " is not found \n " ;
9390
9435
continue ;
9391
9436
}
9437
+ // std::cerr << "Programming IRP PMU unit (stack) " << unit << " on socket " << i << " \n";
9392
9438
auto & pmu = irpPMUs[i][unit];
9393
9439
pmu.initFreeze (UNC_PMON_UNIT_CTL_RSV);
9394
9440
0 commit comments