summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C
diff options
context:
space:
mode:
authorGreg Still <stillgs@us.ibm.com>2017-08-08 16:23:13 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-10-09 12:02:40 -0400
commite587878d9e099145c6c3d3b6c35472d41902f804 (patch)
treec1bf4f435fdaf588c6e20fa24085553485d02d3c /src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C
parent58e1baea3881477294f1020eba92218e779990a2 (diff)
downloadtalos-hostboot-e587878d9e099145c6c3d3b6c35472d41902f804.tar.gz
talos-hostboot-e587878d9e099145c6c3d3b6c35472d41902f804.zip
PM: p9_dump_pstate_table and p9_pstate_parameter_block enhancements for OPPB
- added OPPB in p9_dump_pstate_table including IDDQ output - added IDDQ output from the OPPB in p9_pstate_parameter_block - initialize nest freq in oppb structure - added PGPE Header Flag output Change-Id: I2a6779b4e45e5459b76bf388ce874f1863a368c4 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/44648 Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: RAHUL BATRA <rbatra@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/44652 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C')
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C68
1 files changed, 57 insertions, 11 deletions
diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C b/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C
index d774fe986..42771d6e6 100644
--- a/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C
+++ b/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C
@@ -3006,6 +3006,9 @@ oppb_print(OCCPstateParmBlock* i_oppb)
strcat(l_buffer, l_temp_buffer);
FAPI_INF("%s", l_buffer);
+ // Put out the structure to the trace
+ iddq_print(&(i_oppb->iddq));
+
FAPI_INF("---------------------------------------------------------------------------------------");
}
@@ -3025,6 +3028,8 @@ iddq_print(IddqTable* i_iddqt)
static const uint32_t IDDQ_QUAD_SIZE = IDDQ_DESC_SIZE -
strlen("Quad X:");
+ FAPI_INF("IDDQ");
+
// Put out the endian-corrected scalars
// get IQ version and advance pointer 1-byte
@@ -3078,25 +3083,28 @@ iddq_print(IddqTable* i_iddqt)
// Put out the measurement voltages to the trace.
strcpy(l_line_str, " Measurement voltages:");
- sprintf(l_buffer_str, "%-*s", IDDQ_DESC_SIZE, l_line_str);
+ sprintf(l_buffer_str, "%-*s ", IDDQ_DESC_SIZE, l_line_str);
strcpy(l_line_str, l_buffer_str);
strcpy(l_buffer_str, "");
for (i = 0; i < IDDQ_MEASUREMENTS; i++)
{
- sprintf(l_buffer_str, " %*sV", 5, idd_meas_str[i]);
+ sprintf(l_buffer_str, " %*sV ", 5, idd_meas_str[i]);
strcat(l_line_str, l_buffer_str);
}
FAPI_INF("%s", l_line_str);
#define IDDQ_CURRENT_EXTRACT(_member) \
- i_iddqt->_member = revle16(i_iddqt->_member) * CONST_5MA_1MA; \
- sprintf(l_buffer_str, " %05u ", i_iddqt->_member); \
- strcat(l_line_str, l_buffer_str);
+ { \
+ uint16_t _temp = revle16(i_iddqt->_member) * CONST_5MA_1MA; \
+ sprintf(l_buffer_str, " %6.3f ", (double)_temp/1000); \
+ strcat(l_line_str, l_buffer_str); \
+ }
+// Temps are all 1B quantities. Not endianess issues.
#define IDDQ_TEMP_EXTRACT(_member) \
- sprintf(l_buffer_str, " %05u ", i_iddqt->_member); \
+ sprintf(l_buffer_str, " %4.1f ", ((double)i_iddqt->_member)/2); \
strcat(l_line_str, l_buffer_str);
#define IDDQ_TRACE(string, size) \
@@ -3217,9 +3225,6 @@ iddq_print(IddqTable* i_iddqt)
}
// Convert frequency to Pstate number
-///
-/// \param stream The output stream
-
int
freq2pState (const GlobalPstateParmBlock* gppb,
const uint32_t freq_khz,
@@ -3260,6 +3265,27 @@ freq2pState (const GlobalPstateParmBlock* gppb,
return rc;
}
+// Convert Pstate number to frequency
+int
+pState2freq (const GlobalPstateParmBlock* gppb,
+ const Pstate i_pstate,
+ uint32_t* o_freq_khz)
+{
+ int rc = 0;
+ float pstate32 = i_pstate;
+ float l_freq_khz = 0;
+
+ // ----------------------------------
+ // compute frequency from a pstate
+ // ----------------------------------
+ l_freq_khz = ((float)(revle32(gppb->reference_frequency_khz)) -
+ (pstate32 * (float)revle32(gppb->frequency_step_khz)));
+
+ *o_freq_khz = (uint32_t)l_freq_khz;
+
+ return rc;
+}
+
fapi2::ReturnCode
proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target,
@@ -3765,12 +3791,28 @@ void p9_pstate_update_vfrt(const GlobalPstateParmBlock* i_gppb,
strcat(l_line_str, l_buffer_str);
FAPI_INF("%s", l_line_str);
+ const fapi2::Target<fapi2::TARGET_TYPE_SYSTEM> FAPI_SYSTEM;
+
+ fapi2::ATTR_WOF_ENABLE_FRATIO_Type l_enable_fratio;
+ FAPI_ATTR_GET(fapi2::ATTR_WOF_ENABLE_FRATIO,
+ FAPI_SYSTEM,
+ l_enable_fratio);
+
+ fapi2::ATTR_WOF_ENABLE_VRATIO_Type l_enable_vratio;
+ FAPI_ATTR_GET(fapi2::ATTR_WOF_ENABLE_VRATIO,
+ FAPI_SYSTEM,
+ l_enable_vratio);
+
+ bool b_fratio_set = true;
+
//Initialize VFRT data part
for (l_index_0 = 0; l_index_0 < VFRT_FRATIO_SIZE; ++l_index_0)
{
strcpy(l_buffer_str, "");
strcpy(l_line_str, " ");
+ bool b_first_vratio_set = true;
+
for (l_index_1 = 0; l_index_1 < VFRT_VRATIO_SIZE; ++l_index_1)
{
// Offset MHz*1000 (khz) + step (khz) * sysvalue
@@ -3792,17 +3834,21 @@ void p9_pstate_update_vfrt(const GlobalPstateParmBlock* i_gppb,
// in a loop that is processing over 1000 tables, the first
// 8 gives a view that can correlate that the input data read
// is correct without overfilling the HB trace buffer.
- if (!((l_index_1 + 1) % 8))
+ if (!((l_index_1 + 1) % 8) && b_first_vratio_set && b_fratio_set)
{
FAPI_INF("%s", l_line_str);
strcpy(l_buffer_str, "");
strcpy(l_line_str, " ");
+ b_first_vratio_set = false;
}
i_pBuffer++;
}
-// FAPI_INF("%s", l_line_str);
+ // If fratio is not enabled, don't trace the remaining, duplicate entries.
+ if (!l_enable_fratio)
+ b_fratio_set = false;
+
}
// Flip the type from System (0) to HOMER (1)
OpenPOWER on IntegriCloud