diff options
author | Greg Still <stillgs@us.ibm.com> | 2017-08-08 16:23:13 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-10-09 12:02:40 -0400 |
commit | e587878d9e099145c6c3d3b6c35472d41902f804 (patch) | |
tree | c1bf4f435fdaf588c6e20fa24085553485d02d3c /src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C | |
parent | 58e1baea3881477294f1020eba92218e779990a2 (diff) | |
download | talos-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.C | 68 |
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) |