@@ -130,8 +130,7 @@ namespace HTMGT
130
130
{
131
131
case OCC_CFGDATA_FREQ_POINT :
132
132
getFrequencyPointMessageData (cmdData ,
133
- cmdDataLen ,
134
- occ -> wofResetCount ());
133
+ cmdDataLen );
135
134
break ;
136
135
137
136
case OCC_CFGDATA_OCC_ROLE :
@@ -1066,8 +1065,6 @@ void getGPUConfigMessageData(const TargetHandle_t i_occ,
1066
1065
1067
1066
uint16_t power = 0 ;
1068
1067
power = sys -> getAttr < ATTR_CALCULATED_MAX_SYS_POWER_EXCLUDING_GPUS > ( );
1069
- //uint16_t miscpwr =
1070
- // sys->getAttr<ATTR_MISC_SYSTEM_COMPONENTS_MAX_POWER_WATTS>();
1071
1068
UINT16_PUT (& o_data [index ], power ); // Total non-GPU max power (W)
1072
1069
index += 2 ;
1073
1070
@@ -1154,8 +1151,7 @@ void getGPUConfigMessageData(const TargetHandle_t i_occ,
1154
1151
1155
1152
1156
1153
void getFrequencyPointMessageData (uint8_t * o_data ,
1157
- uint64_t & o_size ,
1158
- uint8_t i_wofResetCount )
1154
+ uint64_t & o_size )
1159
1155
{
1160
1156
uint64_t index = 0 ;
1161
1157
uint16_t min = 0 ;
@@ -1177,73 +1173,13 @@ void getFrequencyPointMessageData(uint8_t* o_data,
1177
1173
memcpy (& o_data [index ], & nominal , 2 );
1178
1174
index += 2 ;
1179
1175
1180
- uint8_t turboAllowed =
1181
- sys -> getAttr < ATTR_OPEN_POWER_TURBO_MODE_SUPPORTED > ( );
1182
-
1183
- if (turboAllowed )
1184
- {
1185
- turbo = sys -> getAttr < ATTR_FREQ_CORE_MAX > ( );
1186
-
1187
- //Ultra Turbo Frequency in MHz
1188
- ATTR_SYSTEM_WOF_DISABLE_type wofSupported ;
1189
- if (!sys -> tryGetAttr < ATTR_SYSTEM_WOF_DISABLE > (wofSupported ))
1190
- {
1191
- ultra = WOF_SYSTEM_DISABLED ;
1192
- G_wofSupported = false;
1193
- }
1194
- else
1195
- {
1196
- uint16_t tempUt = sys -> getAttr < ATTR_ULTRA_TURBO_FREQ_MHZ > ( );
1197
- if ( wofSupported == SYSTEM_WOF_DISABLE_ON )
1198
- {
1199
- TMGT_INF ("System does not support WOF" );
1200
- G_wofSupported = false;
1201
- ultra = WOF_SYSTEM_DISABLED ;
1202
- }
1203
- else if ( tempUt == 0 )
1204
- {
1205
- TMGT_INF ("Missing Ultra Turbo VPD point. WOF disabled." );
1206
- G_wofSupported = false;
1207
- ultra = WOF_MISSING_ULTRA_TURBO ;
1208
- }
1209
- else if ( i_wofResetCount >= WOF_RESET_COUNT_THRESHOLD )
1210
- {
1211
- TMGT_INF ("WOF reset count reached. WOF disabled." );
1212
- G_wofSupported = false;
1213
- ultra = WOF_RESET_COUNT_REACHED ;
1214
- }
1215
- else if ( turbo <= nominal )
1216
- {
1217
- TMGT_INF ("Turbo is less than nominal. WOF disabled." );
1218
- G_wofSupported = false;
1219
- ultra = WOF_UNSUPPORTED_FREQ ;
1220
- }
1221
- else if ( tempUt <= turbo )
1222
- {
1223
- TMGT_INF ("Ultra Turbo is less than Turbo. WOF disabled." );
1224
- G_wofSupported = false;
1225
- ultra = WOF_UNSUPPORTED_FREQ ;
1226
- }
1227
- else
1228
- {
1229
- ultra = tempUt ;
1230
- }
1231
-
1232
- }
1233
-
1234
- if ( !G_wofSupported )
1235
- {
1236
- TMGT_INF ("getFrequencyPoint: WOF not enabled! RC = %x" , ultra );
1237
- }
1238
- }
1239
- else
1176
+ check_wof_support (turbo , ultra );
1177
+ if (turbo == 0 )
1240
1178
{
1241
1179
// If turbo not supported, send nominal for turbo
1242
1180
// and reason code for ultra-turbo (no WOF support)
1243
- TMGT_INF ("getFrequencyPoint: Turbo/WOF not supported" );
1244
1181
turbo = nominal ;
1245
1182
ultra = WOF_UNSUPPORTED_FREQ ;
1246
- G_wofSupported = false;
1247
1183
}
1248
1184
1249
1185
//Turbo Frequency in MHz
@@ -1375,4 +1311,97 @@ void getApssMessageData(uint8_t* o_data,
1375
1311
}
1376
1312
1377
1313
1378
- }// namespace HTMGT
1314
+ // Determine if WOF is supported and what the turbo/ultra frequencies are
1315
+ bool check_wof_support (uint16_t & o_turbo , uint16_t & o_ultra )
1316
+ {
1317
+ o_turbo = 0 ;
1318
+ o_ultra = 0 ;
1319
+
1320
+ Target * sys = nullptr ;
1321
+ targetService ().getTopLevelTarget (sys );
1322
+ assert (sys != nullptr );
1323
+
1324
+ uint8_t turboAllowed =
1325
+ sys -> getAttr < ATTR_OPEN_POWER_TURBO_MODE_SUPPORTED > ( );
1326
+ if (turboAllowed )
1327
+ {
1328
+ o_turbo = sys -> getAttr < ATTR_FREQ_CORE_MAX > ( );
1329
+
1330
+ //Ultra Turbo Frequency in MHz
1331
+ ATTR_SYSTEM_WOF_DISABLE_type wofSupported ;
1332
+ if (!sys -> tryGetAttr < ATTR_SYSTEM_WOF_DISABLE > (wofSupported ))
1333
+ {
1334
+ o_ultra = WOF_SYSTEM_DISABLED ;
1335
+ G_wofSupported = false;
1336
+ }
1337
+ else
1338
+ {
1339
+ // Loop through all functional OCCs
1340
+ uint8_t largest_wof_reset_count = 0 ;
1341
+ uint8_t occ_instance = 0 ;
1342
+ std ::vector < Occ * > occList = OccManager ::getOccArray ();
1343
+ for ( const auto & occ : occList )
1344
+ {
1345
+ if (occ -> wofResetCount () > largest_wof_reset_count )
1346
+ {
1347
+ occ_instance = occ -> getInstance ();
1348
+ largest_wof_reset_count = occ -> wofResetCount ();
1349
+ }
1350
+ }
1351
+ const uint16_t nominal = sys -> getAttr < ATTR_NOMINAL_FREQ_MHZ > ();
1352
+ const uint16_t tempUt = sys -> getAttr < ATTR_ULTRA_TURBO_FREQ_MHZ > ( );
1353
+ if ( wofSupported == SYSTEM_WOF_DISABLE_ON )
1354
+ {
1355
+ TMGT_INF ("System does not support WOF" );
1356
+ G_wofSupported = false;
1357
+ o_ultra = WOF_SYSTEM_DISABLED ;
1358
+ }
1359
+ else if ( tempUt == 0 )
1360
+ {
1361
+ TMGT_INF ("Missing Ultra Turbo VPD point. WOF disabled." );
1362
+ G_wofSupported = false;
1363
+ o_ultra = WOF_MISSING_ULTRA_TURBO ;
1364
+ }
1365
+ else if ( largest_wof_reset_count >= WOF_RESET_COUNT_THRESHOLD )
1366
+ {
1367
+ TMGT_INF ("WOF reset count reached for OCC%d. WOF disabled." ,
1368
+ occ_instance );
1369
+ G_wofSupported = false;
1370
+ o_ultra = WOF_RESET_COUNT_REACHED ;
1371
+ }
1372
+ else if ( o_turbo <= nominal )
1373
+ {
1374
+ TMGT_INF ("Turbo (%d) < nominal (%d). WOF disabled." ,
1375
+ o_turbo , nominal );
1376
+ G_wofSupported = false;
1377
+ o_ultra = WOF_UNSUPPORTED_FREQ ;
1378
+ }
1379
+ else if ( tempUt <= o_turbo )
1380
+ {
1381
+ TMGT_INF ("Ultra Turbo (%d) < Turbo (%d). WOF disabled." ,
1382
+ tempUt , o_turbo );
1383
+ G_wofSupported = false;
1384
+ o_ultra = WOF_UNSUPPORTED_FREQ ;
1385
+ }
1386
+ else
1387
+ {
1388
+ o_ultra = tempUt ;
1389
+ }
1390
+ }
1391
+
1392
+ if ( !G_wofSupported )
1393
+ {
1394
+ TMGT_INF ("check_wof_support: WOF not enabled! RC = 0x%04X" ,o_ultra );
1395
+ }
1396
+ }
1397
+ else
1398
+ {
1399
+ TMGT_INF ("check_wof_support: Turbo/WOF not supported" );
1400
+ G_wofSupported = false;
1401
+ }
1402
+
1403
+ return G_wofSupported ;
1404
+ } // end check_wof_support()
1405
+
1406
+
1407
+ }
0 commit comments