summaryrefslogtreecommitdiffstats
path: root/src/usr/htmgt/htmgt_cfgdata.C
diff options
context:
space:
mode:
authorChris Cain <cjcain@us.ibm.com>2017-05-12 16:08:49 -0500
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2017-05-15 11:46:29 -0400
commitd1ca408e8bb617c208b3a012b0d8d8a89771f9e0 (patch)
treedea2bf800e2ecfa30db4bd7d27cd196f00ccf57a /src/usr/htmgt/htmgt_cfgdata.C
parent6148a403bc643c4ed118f757edb984d706dc9b36 (diff)
downloadtalos-hostboot-d1ca408e8bb617c208b3a012b0d8d8a89771f9e0.tar.gz
talos-hostboot-d1ca408e8bb617c208b3a012b0d8d8a89771f9e0.zip
HTMGT Witherspoon updates
- Add internal flag to enable memory monitoring - Fix power cap data - Additional console traces on errors Change-Id: I726260aa678c5b0ddd7ea60a8e0dfbd8d1e7ea4d Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40469 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Martha Broyles <mbroyles@us.ibm.com> Reviewed-by: Sheldon R. Bailey <baileysh@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/htmgt/htmgt_cfgdata.C')
-rw-r--r--src/usr/htmgt/htmgt_cfgdata.C76
1 files changed, 35 insertions, 41 deletions
diff --git a/src/usr/htmgt/htmgt_cfgdata.C b/src/usr/htmgt/htmgt_cfgdata.C
index 58605c342..a876a4535 100644
--- a/src/usr/htmgt/htmgt_cfgdata.C
+++ b/src/usr/htmgt/htmgt_cfgdata.C
@@ -145,7 +145,7 @@ namespace HTMGT
break;
case OCC_CFGDATA_MEM_CONFIG:
- getMemConfigMessageData(occ->getTarget(), true,
+ getMemConfigMessageData(occ->getTarget(),
cmdData, cmdDataLen);
break;
@@ -159,8 +159,11 @@ namespace HTMGT
break;
case OCC_CFGDATA_MEM_THROTTLE:
- getMemThrottleMessageData(occ->getTarget(),
+ if (int_flags_set(FLAG_SEND_MEM_CONFIG))
+ {
+ getMemThrottleMessageData(occ->getTarget(),
cmdData, cmdDataLen);
+ }
break;
case OCC_CFGDATA_TCT_CONFIG:
@@ -292,7 +295,6 @@ void writeMemConfigData( uint8_t *& o_data,
void getMemConfigMessageData(const TargetHandle_t i_occ,
- bool i_monitoringEnabled,
uint8_t* o_data, uint64_t & o_size)
{
uint64_t index = 0;
@@ -302,12 +304,10 @@ void getMemConfigMessageData(const TargetHandle_t i_occ,
o_data[index++] = OCC_CFGDATA_MEM_CONFIG;
o_data[index++] = OCC_CFGDATA_MEM_CONFIG_VERSION;
-
//System reference needed for these ATTR.
Target* sys = nullptr;
targetService().getTopLevelTarget(sys);
-
if( is_sapphire_load() )//if OPAL then no "Power Control Default" support.
{
//Byte 3: Memory Power Control Default.
@@ -326,14 +326,10 @@ void getMemConfigMessageData(const TargetHandle_t i_occ,
sys->getAttr<ATTR_MSS_MRW_IDLE_POWER_CONTROL_REQUESTED>();
}
-
-
-
//Byte 5: Number of data sets.
size_t numSetsOffset = index++; //Will fill in numSets at the end
-
- if (i_monitoringEnabled)
+ if (int_flags_set(FLAG_SEND_MEM_CONFIG))
{
TargetHandleList centaurs;
TargetHandleList mbas;
@@ -342,7 +338,6 @@ void getMemConfigMessageData(const TargetHandle_t i_occ,
uint8_t dimmPos = 0;
uint8_t numSets = 0;
-
ConstTargetHandle_t proc = getParentChip(i_occ);
assert(proc != nullptr);
@@ -357,7 +352,6 @@ void getMemConfigMessageData(const TargetHandle_t i_occ,
proc->getAttr<ATTR_HUID>(),
centaurs.size());
-
for ( const auto & centaur : centaurs )
{
numSets++;
@@ -379,7 +373,6 @@ void getMemConfigMessageData(const TargetHandle_t i_occ,
0, //" "
index );
-
mbas.clear();
getChildAffinityTargets(mbas, centaur,
CLASS_UNIT, TYPE_MBA);
@@ -449,7 +442,7 @@ void getMemConfigMessageData(const TargetHandle_t i_occ,
numSets, i_occ->getAttr<ATTR_HUID>());
o_data[numSetsOffset] = numSets;
- }//END i_monitoringEnabled
+ }
else
{
TMGT_INF("getMemConfigMessageData: Mem monitoring is disabled");
@@ -652,44 +645,39 @@ void getPowerCapMessageData(uint8_t* o_data, uint64_t & o_size)
o_data[index++] = OCC_CFGDATA_PCAP_CONFIG;
o_data[index++] = OCC_CFGDATA_PCAP_CONFIG_VERSION;
-
// Minimum HARD Power Cap
- ATTR_OPEN_POWER_MIN_POWER_CAP_WATTS_type pcap =
+ ATTR_OPEN_POWER_MIN_POWER_CAP_WATTS_type min_pcap =
sys->getAttr<ATTR_OPEN_POWER_MIN_POWER_CAP_WATTS>();
-
// Minimum SOFT Power Cap
ATTR_OPEN_POWER_SOFT_MIN_PCAP_WATTS_type soft_pcap;
- //if attr does not exists.
if ( ! sys->tryGetAttr
<ATTR_OPEN_POWER_SOFT_MIN_PCAP_WATTS>(soft_pcap))
{
- soft_pcap = pcap;
+ // attr does not exist (us min)
+ soft_pcap = min_pcap;
}
-
-
- // Minimum Soft Power Cap
- TMGT_INF("getPowerCapMessageData: minimum soft power cap =%dW",soft_pcap);
- memcpy(&o_data[index], &soft_pcap, 2);
+ UINT16_PUT(&o_data[index], soft_pcap);
index += 2;
// Minimum Hard Power Cap
- TMGT_INF("getPowerCapMessageData: minimum hard power cap = %dW",pcap);
- memcpy(&o_data[index], &pcap, 2);
+ UINT16_PUT(&o_data[index], min_pcap);
index += 2;
// System Maximum Power Cap
- pcap = getMaxPowerCap(sys);
- memcpy(&o_data[index], &pcap, 2);
+ const uint16_t max_pcap = getMaxPowerCap(sys);
+ UINT16_PUT(&o_data[index], max_pcap);
index += 2;
// Quick Power Drop Power Cap
- pcap = sys->getAttr<ATTR_OPEN_POWER_N_BULK_POWER_LIMIT_WATTS>();
- TMGT_INF("getPowerCapMessageData: oversubscription power cap = %dW",
- pcap);
- memcpy(&o_data[index], &pcap, 2);
+ ATTR_OPEN_POWER_N_BULK_POWER_LIMIT_WATTS_type qpd_pcap =
+ sys->getAttr<ATTR_OPEN_POWER_N_BULK_POWER_LIMIT_WATTS>();
+ UINT16_PUT(&o_data[index], qpd_pcap);
index += 2;
+ TMGT_INF("getPowerCapMessageData: pcaps - soft min: %d, min: %d, max: %d,"
+ " qpd: %d (in Watts)",
+ soft_pcap, min_pcap, max_pcap, qpd_pcap);
o_size = index;
}
@@ -942,7 +930,7 @@ void getFrequencyPointMessageData(uint8_t* o_data,
turbo = sys->getAttr<ATTR_FREQ_CORE_MAX>();
//Ultra Turbo Frequency in MHz
- const uint16_t wofSupported = sys->getAttr<ATTR_WOF_ENABLED>();
+ const uint16_t wofSupported = sys->getAttr<ATTR_SYSTEM_WOF_ENABLED>();
if (0 != wofSupported)
{
ultra = sys->getAttr<ATTR_ULTRA_TURBO_FREQ_MHZ>();
@@ -1001,8 +989,8 @@ void getApssMessageData(uint8_t* o_data,
ATTR_ADC_CHANNEL_FUNC_IDS_type function;
sys->tryGetAttr<ATTR_ADC_CHANNEL_FUNC_IDS>(function);
- ATTR_ADC_CHANNEL_GNDS_type ground;
- sys->tryGetAttr<ATTR_ADC_CHANNEL_GNDS>(ground);
+ ATTR_ADC_CHANNEL_GROUNDS_type ground;
+ sys->tryGetAttr<ATTR_ADC_CHANNEL_GROUNDS>(ground);
ATTR_ADC_CHANNEL_GAINS_type gain;
sys->tryGetAttr<ATTR_ADC_CHANNEL_GAINS>(gain);
@@ -1035,14 +1023,13 @@ void getApssMessageData(uint8_t* o_data,
o_data[2] = 0;
o_data[3] = 0;
uint64_t idx = 4;
- uint32_t sensorId = 0;
for(uint64_t channel = 0; channel < sizeof(function); ++channel)
{
o_data[idx] = function[channel]; // ADC Channel assignement
idx += sizeof(uint8_t);
- sensorId = 0;
+ uint32_t sensorId = 0;
if (sensors != nullptr)
{
sensorId = (*sensors)[channel];
@@ -1053,11 +1040,15 @@ void getApssMessageData(uint8_t* o_data,
o_data[idx] = ground[channel]; // Ground Select
idx += sizeof(uint8_t);
- memcpy(o_data+idx, &gain[channel], sizeof(uint32_t)); // Gain
- idx += sizeof(uint32_t);
+ INT32_PUT(o_data+idx, gain[channel]);
+ idx += sizeof(int32_t);
- memcpy(o_data+idx, &offset[channel], sizeof(uint32_t)); // offset
- idx += sizeof(uint32_t);
+ INT32_PUT(o_data+idx, offset[channel]);
+ idx += sizeof(int32_t);
+
+ TMGT_INF("APSS channel[%2d]: 0x%02X 0x%08X 0x%02X 0x%08X 0x%08X",
+ channel, function[channel], sensorId, ground[channel],
+ gain[channel], offset[channel]);
}
ATTR_APSS_GPIO_PORT_MODES_type gpioMode;
@@ -1077,6 +1068,9 @@ void getApssMessageData(uint8_t* o_data,
o_data[idx] = 0;
idx += sizeof(uint8_t);
memcpy(o_data + idx, gpioPin+pinIdx, pinsPerPort);
+ TMGT_INF("APSS GPIO port[%2d]: 0x%02X 0x%08X 0x%08X",
+ port, gpioMode[port], UINT32_GET(o_data+idx),
+ UINT32_GET(o_data+idx+4));
idx += pinsPerPort;
pinIdx += pinsPerPort;
}
OpenPOWER on IntegriCloud