@@ -751,6 +751,7 @@ void PCM::initCStateSupportTables()
751
751
case SPR:
752
752
case EMR:
753
753
case GNR:
754
+ case GNR_D:
754
755
case GRR:
755
756
case SRF:
756
757
PCM_CSTATE_ARRAY (pkgCStateMsr, PCM_PARAM_PROTECT ({0 , 0 , 0x60D , 0 , 0 , 0 , 0x3F9 , 0 , 0 , 0 , 0 }) );
@@ -810,6 +811,7 @@ void PCM::initCStateSupportTables()
810
811
case SPR:
811
812
case EMR:
812
813
case GNR:
814
+ case GNR_D:
813
815
case GRR:
814
816
case SRF:
815
817
PCM_CSTATE_ARRAY (coreCStateMsr, PCM_PARAM_PROTECT ({0 , 0 , 0 , 0x3FC , 0 , 0 , 0x3FD , 0x3FE , 0 , 0 , 0 }) );
@@ -1689,6 +1691,7 @@ bool PCM::detectNominalFrequency()
1689
1691
|| cpu_family_model == SPR
1690
1692
|| cpu_family_model == EMR
1691
1693
|| cpu_family_model == GNR
1694
+ || cpu_family_model == GNR_D
1692
1695
|| cpu_family_model == SRF
1693
1696
|| cpu_family_model == GRR
1694
1697
) ? (100000000ULL ) : (133333333ULL );
@@ -1995,6 +1998,7 @@ void PCM::initUncoreObjects()
1995
1998
case SPR:
1996
1999
case EMR:
1997
2000
case GNR:
2001
+ case GNR_D:
1998
2002
case GRR:
1999
2003
case SRF:
2000
2004
{
@@ -2182,6 +2186,7 @@ void PCM::initUncorePMUsDirect()
2182
2186
break ;
2183
2187
case SRF:
2184
2188
case GNR:
2189
+ case GNR_D:
2185
2190
uncorePMUs[s].resize (1 );
2186
2191
{
2187
2192
std::vector<std::shared_ptr<HWRegister> > CounterControlRegs{
@@ -2330,6 +2335,7 @@ void PCM::initUncorePMUsDirect()
2330
2335
case SPR:
2331
2336
case EMR:
2332
2337
case GNR:
2338
+ case GNR_D:
2333
2339
case SRF:
2334
2340
uncorePMUs[s].resize (1 );
2335
2341
addPMUsFromDiscoveryRef (uncorePMUs[s][0 ][PCU_PMU_ID], SPR_PCU_BOX_TYPE, 0xE );
@@ -2357,6 +2363,7 @@ void PCM::initUncorePMUsDirect()
2357
2363
addMDFPMUs (SPR_MDF_BOX_TYPE);
2358
2364
break ;
2359
2365
case GNR:
2366
+ case GNR_D:
2360
2367
case SRF:
2361
2368
addMDFPMUs (BHS_MDF_BOX_TYPE);
2362
2369
break ;
@@ -2404,6 +2411,7 @@ void PCM::initUncorePMUsDirect()
2404
2411
switch (cpu_family_model)
2405
2412
{
2406
2413
case GNR:
2414
+ case GNR_D:
2407
2415
case GRR:
2408
2416
case SRF:
2409
2417
uncorePMUs[s].resize (1 );
@@ -2510,6 +2518,7 @@ void PCM::initUncorePMUsDirect()
2510
2518
}
2511
2519
break ;
2512
2520
case PCM::GNR:
2521
+ case PCM::GNR_D:
2513
2522
case PCM::SRF:
2514
2523
for (uint32 s = 0 ; s < (uint32)num_sockets; ++s)
2515
2524
{
@@ -2630,7 +2639,7 @@ void PCM::initUncorePMUsDirect()
2630
2639
{
2631
2640
static const uint32 IAA_DEV_IDS[] = { 0x0CFE };
2632
2641
static const uint32 DSA_DEV_IDS[] = { 0x0B25 };
2633
- static const uint32 QAT_DEV_IDS[] = { 0x4940 , 0x4942 , 0x4944 };
2642
+ static const uint32 QAT_DEV_IDS[] = { 0x4940 , 0x4942 , 0x4944 , 0x4946 , 0x578a };
2634
2643
std::vector<std::pair<uint32, uint32> > socket2IAAbus;
2635
2644
std::vector<std::pair<uint32, uint32> > socket2DSAbus;
2636
2645
std::vector<std::pair<uint32, uint32> > socket2QATbus;
@@ -2692,7 +2701,7 @@ void PCM::initUncorePMUsDirect()
2692
2701
std::hex << std::setw (4 ) << std::setfill (' 0' ) << devInfo.domain << " :" <<
2693
2702
std::hex << std::setw (2 ) << std::setfill (' 0' ) << devInfo.bus << " :" <<
2694
2703
std::hex << std::setw (2 ) << std::setfill (' 0' ) << devInfo.dev << " ." <<
2695
- std::hex << devInfo.func << " /telemetry/control" ;
2704
+ std::hex << devInfo.func << " /telemetry/control" ;
2696
2705
qatTLMCTLStr = readSysFS (qat_TLMCTL_sysfs_path.str ().c_str (), true );
2697
2706
if (!qatTLMCTLStr.size ()){
2698
2707
std::cerr << " Warning: IDX - QAT telemetry feature of B:0x" << std::hex << devInfo.bus << " ,D:0x" << devInfo.dev << " ,F:0x" << devInfo.func \
@@ -2740,6 +2749,7 @@ void PCM::initUncorePMUsDirect()
2740
2749
IRP_UNIT_CTL = SPR_IRP_UNIT_CTL;
2741
2750
break ;
2742
2751
case GNR:
2752
+ case GNR_D:
2743
2753
case SRF:
2744
2754
irpStacks = BHS_M2IOSF_NUM;
2745
2755
IRP_CTL_REG_OFFSET = BHS_IRP_CTL_REG_OFFSET;
@@ -2881,6 +2891,7 @@ void PCM::initUncorePMUsDirect()
2881
2891
case PCM::SPR:
2882
2892
case PCM::EMR:
2883
2893
case PCM::GNR:
2894
+ case PCM::GNR_D:
2884
2895
case PCM::SRF:
2885
2896
{
2886
2897
const auto n_units = (std::min)(uncorePMUDiscovery->getNumBoxes (SPR_CXLCM_BOX_TYPE, s),
@@ -3372,6 +3383,7 @@ bool PCM::isCPUModelSupported(const int model_)
3372
3383
|| model_ == SPR
3373
3384
|| model_ == EMR
3374
3385
|| model_ == GNR
3386
+ || model_ == GNR_D
3375
3387
|| model_ == GRR
3376
3388
|| model_ == SRF
3377
3389
);
@@ -3417,9 +3429,6 @@ bool PCM::checkModel()
3417
3429
case RPL_3:
3418
3430
cpu_family_model = RPL;
3419
3431
break ;
3420
- case GNR_D:
3421
- cpu_family_model = GNR;
3422
- break ;
3423
3432
}
3424
3433
3425
3434
if (!isCPUModelSupported ((int )cpu_family_model))
@@ -3698,6 +3707,7 @@ PCM::ErrorCode PCM::program(const PCM::ProgramMode mode_, const void * parameter
3698
3707
case SPR:
3699
3708
case EMR:
3700
3709
case GNR:
3710
+ case GNR_D:
3701
3711
assert (useSkylakeEvents ());
3702
3712
coreEventDesc[0 ].event_number = SKL_MEM_LOAD_RETIRED_L3_MISS_EVTNR;
3703
3713
coreEventDesc[0 ].umask_value = SKL_MEM_LOAD_RETIRED_L3_MISS_UMASK;
@@ -5023,6 +5033,8 @@ const char * PCM::getUArchCodename(const int32 cpu_family_model_param) const
5023
5033
return " Emerald Rapids-SP" ;
5024
5034
case GNR:
5025
5035
return " Granite Rapids-SP" ;
5036
+ case GNR_D:
5037
+ return " Granite Rapids-D" ;
5026
5038
case GRR:
5027
5039
return " Grand Ridge" ;
5028
5040
case SRF:
@@ -7813,6 +7825,19 @@ void ServerUncorePMUs::initRegisterLocations(const PCM * pcm)
7813
7825
PCM_PCICFG_M3UPI_INIT (5 , BHS);
7814
7826
}
7815
7827
break ;
7828
+ case PCM::GNR_D:
7829
+ {
7830
+ // B2CMI (M2M)
7831
+ PCM_PCICFG_M2M_INIT (0 , BHS)
7832
+ PCM_PCICFG_M2M_INIT (1 , BHS)
7833
+ PCM_PCICFG_M2M_INIT (2 , BHS)
7834
+ PCM_PCICFG_M2M_INIT (3 , BHS)
7835
+ PCM_PCICFG_M2M_INIT (4 , BHS)
7836
+ PCM_PCICFG_M2M_INIT (5 , BHS)
7837
+ PCM_PCICFG_M2M_INIT (6 , BHS)
7838
+ PCM_PCICFG_M2M_INIT (7 , BHS)
7839
+ }
7840
+ break ;
7816
7841
case PCM::SNOWRIDGE:
7817
7842
{
7818
7843
PCM_PCICFG_M2M_INIT (0 , SERVER)
@@ -8015,6 +8040,7 @@ void ServerUncorePMUs::initDirect(uint32 socket_, const PCM * pcm)
8015
8040
case PCM::SPR:
8016
8041
case PCM::EMR:
8017
8042
case PCM::GNR: // B2CMI PMUs
8043
+ case PCM::GNR_D:
8018
8044
case PCM::SRF:
8019
8045
m2mPMUs.push_back (
8020
8046
UncorePMU (
@@ -8183,20 +8209,25 @@ void ServerUncorePMUs::initDirect(uint32 socket_, const PCM * pcm)
8183
8209
}
8184
8210
}
8185
8211
8186
- auto initBHSiMCPMUs = [&](const size_t numChannelsParam)
8212
+ auto initBHSiMCPMUsBase = [&](const size_t base, const size_t numChannelsParam)
8187
8213
{
8188
8214
numChannels = (std::min)(numChannelsParam, m2mPMUs.size ());
8189
8215
if (initAndCheckSocket2Ubox0Bus ())
8190
8216
{
8191
8217
auto memBar = getServerSCFBar (socket2UBOX0bus[socket_].first , socket2UBOX0bus[socket_].second );
8192
8218
for (int channel = 0 ; channel < numChannels; ++channel)
8193
8219
{
8194
- imcPMUs.push_back (createIMCPMU (memBar + BHS_MC_CH_PMON_BASE_ADDR + channel * SERVER_MC_CH_PMON_STEP, SERVER_MC_CH_PMON_SIZE));
8220
+ imcPMUs.push_back (createIMCPMU (memBar + base + channel * SERVER_MC_CH_PMON_STEP, SERVER_MC_CH_PMON_SIZE));
8195
8221
num_imc_channels.push_back (1 );
8196
8222
}
8197
8223
}
8198
8224
};
8199
8225
8226
+ auto initBHSiMCPMUs = [&](const size_t numChannelsParam)
8227
+ {
8228
+ initBHSiMCPMUsBase (BHS_MC_CH_PMON_BASE_ADDR, numChannelsParam);
8229
+ };
8230
+
8200
8231
switch (cpu_family_model)
8201
8232
{
8202
8233
case PCM::GRR:
@@ -8206,6 +8237,9 @@ void ServerUncorePMUs::initDirect(uint32 socket_, const PCM * pcm)
8206
8237
case PCM::SRF:
8207
8238
initBHSiMCPMUs (12 );
8208
8239
break ;
8240
+ case PCM::GNR_D:
8241
+ initBHSiMCPMUsBase (pcm->getCPUStepping () ? GNR_D_B_MC_CH_PMON_BASE_ADDR : GNR_D_A_MC_CH_PMON_BASE_ADDR, 8 );
8242
+ break ;
8209
8243
}
8210
8244
8211
8245
if (imcPMUs.empty ())
@@ -8991,6 +9025,7 @@ void ServerUncorePMUs::programServerUncoreMemoryMetrics(const ServerUncoreMemory
8991
9025
}
8992
9026
break ;
8993
9027
case PCM::GNR:
9028
+ case PCM::GNR_D:
8994
9029
case PCM::GRR:
8995
9030
case PCM::SRF:
8996
9031
if (metrics == PmemMemoryMode)
@@ -9087,6 +9122,7 @@ void ServerUncorePMUs::program()
9087
9122
EDCCntConfig[EventPosition::WRITE] = MCCntConfig[EventPosition::WRITE] = MC_CH_PCI_PMON_CTL_EVENT (0x05 ) + MC_CH_PCI_PMON_CTL_UMASK (0xf0 ); // monitor writes on counter 1: CAS_COUNT.WR
9088
9123
break ;
9089
9124
case PCM::GNR:
9125
+ case PCM::GNR_D:
9090
9126
case PCM::GRR:
9091
9127
case PCM::SRF:
9092
9128
MCCntConfig[EventPosition::READ] = MC_CH_PCI_PMON_CTL_EVENT (0x05 ) + MC_CH_PCI_PMON_CTL_UMASK (0xcf ); // monitor reads on counter 0: CAS_COUNT_SCH0.RD
@@ -9220,6 +9256,7 @@ uint64 ServerUncorePMUs::getImcReadsForChannels(uint32 beginChannel, uint32 endC
9220
9256
switch (cpu_family_model)
9221
9257
{
9222
9258
case PCM::GNR:
9259
+ case PCM::GNR_D:
9223
9260
case PCM::GRR:
9224
9261
case PCM::SRF:
9225
9262
result += getMCCounter (i, EventPosition::READ2);
@@ -9238,6 +9275,7 @@ uint64 ServerUncorePMUs::getImcWrites()
9238
9275
switch (cpu_family_model)
9239
9276
{
9240
9277
case PCM::GNR:
9278
+ case PCM::GNR_D:
9241
9279
case PCM::GRR:
9242
9280
case PCM::SRF:
9243
9281
result += getMCCounter (i, EventPosition::WRITE2);
@@ -9484,6 +9522,7 @@ void ServerUncorePMUs::programM2M()
9484
9522
cfg[EventPosition::PMM_WRITE] = M2M_PCI_PMON_CTL_EVENT (0x38 ) + M2M_PCI_PMON_CTL_UMASK (0x80 ) + UNC_PMON_CTL_UMASK_EXT (0x1C ); // UNC_M2M_IMC_WRITES.TO_PMM
9485
9523
break ;
9486
9524
case PCM::GNR:
9525
+ case PCM::GNR_D:
9487
9526
case PCM::SRF:
9488
9527
cfg[EventPosition::NM_HIT] = M2M_PCI_PMON_CTL_EVENT (0x1F ) + M2M_PCI_PMON_CTL_UMASK (0x0F ); // UNC_B2CMI_TAG_HIT.ALL
9489
9528
cfg[EventPosition::M2M_CLOCKTICKS] = 0 ; // CLOCKTICKS
@@ -9962,6 +10001,7 @@ uint64 PCM::CX_MSR_PMON_CTRY(uint32 Cbo, uint32 Ctr) const
9962
10001
case SPR:
9963
10002
case EMR:
9964
10003
case GNR:
10004
+ case GNR_D:
9965
10005
case GRR:
9966
10006
case SRF:
9967
10007
return SPR_CHA0_MSR_PMON_CTR0 + SPR_CHA_MSR_STEP * Cbo + Ctr;
@@ -9994,6 +10034,7 @@ uint64 PCM::CX_MSR_PMON_BOX_FILTER(uint32 Cbo) const
9994
10034
case SPR:
9995
10035
case EMR:
9996
10036
case GNR:
10037
+ case GNR_D:
9997
10038
case GRR:
9998
10039
case SRF:
9999
10040
return SPR_CHA0_MSR_PMON_BOX_FILTER + SPR_CHA_MSR_STEP * Cbo;
@@ -10039,6 +10080,7 @@ uint64 PCM::CX_MSR_PMON_CTLY(uint32 Cbo, uint32 Ctl) const
10039
10080
case SPR:
10040
10081
case EMR:
10041
10082
case GNR:
10083
+ case GNR_D:
10042
10084
case GRR:
10043
10085
case SRF:
10044
10086
return SPR_CHA0_MSR_PMON_CTL0 + SPR_CHA_MSR_STEP * Cbo + Ctl;
@@ -10070,6 +10112,7 @@ uint64 PCM::CX_MSR_PMON_BOX_CTL(uint32 Cbo) const
10070
10112
case SPR:
10071
10113
case EMR:
10072
10114
case GNR:
10115
+ case GNR_D:
10073
10116
case GRR:
10074
10117
case SRF:
10075
10118
return SPR_CHA0_MSR_PMON_BOX_CTRL + SPR_CHA_MSR_STEP * Cbo;
@@ -10144,6 +10187,7 @@ uint32 PCM::getMaxNumOfCBoxesInternal() const
10144
10187
{
10145
10188
case GRR:
10146
10189
case GNR:
10190
+ case GNR_D:
10147
10191
case SRF:
10148
10192
{
10149
10193
const auto MSR_PMON_NUMBER_CBOS = 0x3fed ;
@@ -10262,6 +10306,7 @@ void PCM::programIIOCounters(uint64 rawEvents[4], int IIOStack)
10262
10306
stacks_count = GRR_M2IOSF_NUM;
10263
10307
break ;
10264
10308
case PCM::GNR:
10309
+ case PCM::GNR_D:
10265
10310
case PCM::SRF:
10266
10311
stacks_count = BHS_M2IOSF_NUM;
10267
10312
break ;
@@ -10357,6 +10402,7 @@ void PCM::programPCIeEventGroup(eventGroup_t &eventGroup)
10357
10402
switch (cpu_family_model)
10358
10403
{
10359
10404
case PCM::GNR:
10405
+ case PCM::GNR_D:
10360
10406
case PCM::GRR:
10361
10407
case PCM::SRF:
10362
10408
case PCM::SPR:
@@ -10410,6 +10456,7 @@ void PCM::programCbo(const uint64 * events, const uint32 opCode, const uint32 nc
10410
10456
&& SPR != cpu_family_model
10411
10457
&& EMR != cpu_family_model
10412
10458
&& GNR != cpu_family_model
10459
+ && GNR_D != cpu_family_model
10413
10460
&& SRF != cpu_family_model
10414
10461
&& GRR != cpu_family_model
10415
10462
)
@@ -10912,6 +10959,7 @@ void UncorePMU::freeze(const uint32 extra)
10912
10959
case PCM::SPR:
10913
10960
case PCM::EMR:
10914
10961
case PCM::GNR:
10962
+ case PCM::GNR_D:
10915
10963
case PCM::GRR:
10916
10964
case PCM::SRF:
10917
10965
*unitControl = SPR_UNC_PMON_UNIT_CTL_FRZ;
@@ -10928,6 +10976,7 @@ void UncorePMU::unfreeze(const uint32 extra)
10928
10976
case PCM::SPR:
10929
10977
case PCM::EMR:
10930
10978
case PCM::GNR:
10979
+ case PCM::GNR_D:
10931
10980
case PCM::GRR:
10932
10981
case PCM::SRF:
10933
10982
*unitControl = 0 ;
@@ -10949,6 +10998,7 @@ bool UncorePMU::initFreeze(const uint32 extra, const char* xPICheckMsg)
10949
10998
case PCM::SPR:
10950
10999
case PCM::EMR:
10951
11000
case PCM::GNR:
11001
+ case PCM::GNR_D:
10952
11002
case PCM::GRR:
10953
11003
case PCM::SRF:
10954
11004
*unitControl = SPR_UNC_PMON_UNIT_CTL_FRZ; // freeze
@@ -10989,6 +11039,7 @@ void UncorePMU::resetUnfreeze(const uint32 extra)
10989
11039
case PCM::SPR:
10990
11040
case PCM::EMR:
10991
11041
case PCM::GNR:
11042
+ case PCM::GNR_D:
10992
11043
case PCM::GRR:
10993
11044
case PCM::SRF:
10994
11045
*unitControl = SPR_UNC_PMON_UNIT_CTL_FRZ + SPR_UNC_PMON_UNIT_CTL_RST_COUNTERS; // freeze and reset counter registers
0 commit comments