summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/occ/p8_pmc_force_vsafe.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/occ/p8_pmc_force_vsafe.C')
-rw-r--r--src/usr/hwpf/hwp/occ/p8_pmc_force_vsafe.C516
1 files changed, 280 insertions, 236 deletions
diff --git a/src/usr/hwpf/hwp/occ/p8_pmc_force_vsafe.C b/src/usr/hwpf/hwp/occ/p8_pmc_force_vsafe.C
index 8aafead51..c90e1b187 100644
--- a/src/usr/hwpf/hwp/occ/p8_pmc_force_vsafe.C
+++ b/src/usr/hwpf/hwp/occ/p8_pmc_force_vsafe.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: p8_pmc_force_vsafe.C,v 1.11 2013/04/01 04:16:44 stillgs Exp $
+// $Id: p8_pmc_force_vsafe.C,v 1.12 2013/08/02 19:26:22 stillgs Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/p8_pmc_force_vsafe.C,v $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
@@ -135,11 +135,12 @@ p8_pmc_force_vsafe(const fapi::Target& i_target )
{
fapi::ReturnCode rc;
ecmdDataBufferBase data(64);
+ ecmdDataBufferBase pmcstatusreg(64);
uint32_t e_rc = 0;
-
+
// maximum number of status poll attempts to make before giving up
- const uint32_t MAX_POLL_ATTEMPTS = 0x200;
-
+ const uint32_t MAX_POLL_ATTEMPTS = 0x200;
+
uint32_t count = 0;
// size_t i;
uint16_t pvsafe = 0;
@@ -149,94 +150,107 @@ p8_pmc_force_vsafe(const fapi::Target& i_target )
uint16_t pstate_actual = 0;
uint8_t DONE_FLAG = 0;
uint8_t any_error = 0;
- uint8_t any_ongoing =0;
+ uint8_t any_ongoing = 0;
uint8_t dummy = 0;
- uint8_t debug_mode = 1 ;
- FAPI_INF("Executing p8_pmc_force_vsafe ....");
+ FAPI_INF("p8_pmc_force_vsafe start ....");
- // ******************************************************************
- // - PMC_MODE_REG checking
- // ******************************************************************
- rc = fapiGetScom(i_target, PMC_MODE_REG_0x00062000, data );
- if (rc)
+ do
{
- FAPI_ERR("fapiGetScom(PMC_MODE_REG_0x00062000) failed.");
- return rc;
- }
+ // ******************************************************************
+ // - PMC_MODE_REG checking
+ // ******************************************************************
+ rc = fapiGetScom(i_target, PMC_MODE_REG_0x00062000, data );
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(PMC_MODE_REG_0x00062000) failed.");
+ break;
+ }
- if ( (data.isBitClear(0) && data.isBitClear(1) ))
- {
- FAPI_ERR("PMC is not in HARDWARE or FIRMWARE AUCTION MODE");
- // FAPI_SET_HWP_ERROR(rc, RC_PROCPM_INITAL_AUCTION_MODE_ERR);
- return rc;
- }
+ if ( (data.isBitClear(0) && data.isBitClear(1) ))
+ {
+ FAPI_INF("PMC is not in HARDWARE or FIRMWARE AUCTION MODE so hardware mechanism cannot be used.");
+ break;
+ }
- if ( ( data.isBitClear(3) ))
- {
- FAPI_ERR("PMC is disabled for Voltage changes");
- FAPI_SET_HWP_ERROR(rc, RC_PROCPM_VOLTAGE_CHAGE_MODE_ERR);
- return rc;
- }
+ if ( ( data.isBitClear(3) ))
+ {
+ FAPI_ERR("PMC is disabled for Voltage changes");
+ const uint64_t & PMCMODE = data.getDoubleWord(0);
+ FAPI_SET_HWP_ERROR(rc, RC_PROCPM_VOLTAGE_CHANGE_MODE_ERR);
+ break;
+ }
- if ( ( !data.isBitClear(5) ))
- {
- FAPI_ERR("PMC is disabled PMC_MASTER_SEQUENCER");
- FAPI_SET_HWP_ERROR(rc, RC_PROCPM_MST_SEQUENCER_STATE_ERR);
- return rc;
- }
+ if ( ( !data.isBitClear(5) ))
+ {
+ FAPI_ERR("PMC is disabled PMC_MASTER_SEQUENCER");
+ const uint64_t & PMCMODE = data.getDoubleWord(0);
+ FAPI_SET_HWP_ERROR(rc, RC_PROCPM_MST_SEQUENCER_STATE_ERR);
+ break;
+ }
- // ****************************************************************************
- // - PMC_STATE_MONITOR_AND_CTRL_REG PMC_PARAMETER_REG1 before the psafe
- // ****************************************************************************
+ // ****************************************************************************
+ // - PMC_STATE_MONITOR_AND_CTRL_REG PMC_PARAMETER_REG1 before the psafe
+ // ****************************************************************************
- rc = fapiGetScom(i_target, PMC_PARAMETER_REG1_0x00062006, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(PMC_PARAMETER_REG1_0x00062006) failed.");
- return rc;
- }
+ rc = fapiGetScom(i_target, PMC_PARAMETER_REG1_0x00062006, data );
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(PMC_PARAMETER_REG1_0x00062006) failed.");
+ break;
+ }
- e_rc = data.extractToRight( &pvsafe,22,8);if (e_rc) { rc.setEcmdError(e_rc); return rc; }
+ e_rc |= data.extractToRight( &pvsafe,22,8);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
- rc = fapiGetScom(i_target, PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002) failed.");
- return rc;
- }
+ rc = fapiGetScom(i_target, PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002, data );
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002) failed.");
+ break;
+ }
- e_rc = data.extractToRight( &pstate_target,0,8);if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc = data.extractToRight( &pstate_step_target,8,8);if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc = data.extractToRight( &pstate_actual,16,8);if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- FAPI_INF(" voltage values before the hearbeat loss " );
- FAPI_INF(" pvsafe => %x , ptarget => %x , pstarget => %x ,pactual => %x " , pvsafe , pstate_target ,pstate_step_target , pstate_actual);
+ e_rc |= data.extractToRight( &pstate_target,0,8);
+ e_rc |= data.extractToRight( &pstate_step_target,8,8);
+ e_rc |= data.extractToRight( &pstate_actual,16,8);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
- // ******************************************************************
- // - SEE PMC_STATUS_REG if debug_mode ==1
- // ******************************************************************
+ FAPI_INF(" voltage values before the hearbeat loss " );
+ FAPI_INF(" pvsafe => %x , ptarget => %x , pstarget => %x ,pactual => %x " , pvsafe , pstate_target ,pstate_step_target , pstate_actual);
- if (debug_mode)
- {
+ // ******************************************************************
+ // - SEE PMC_STATUS_REG if debug_mode ==1
+ // ******************************************************************
rc = fapiGetScom(i_target, PMC_STATUS_REG_0x00062009, data );
if (rc)
{
FAPI_ERR("fapiGetScom(PMC_STATUS_REG_0x00062009) failed.");
- return rc;
+ break;
}
FAPI_DBG(" debug_mode : status_b4_heartbeat_loss => 0x%16llx", data.getDoubleWord(0));
-
+
l_set = data.isBitSet(0);
FAPI_DBG(" pstate_processing_is_susp => %x ", l_set ) ;
l_set = data.isBitSet(1);
FAPI_DBG(" gpsa_bdcst_error => %x ", l_set );
- e_rc = data.extractToRight( &dummy,2,3);if (e_rc) { rc.setEcmdError(e_rc); return rc; }
+ e_rc = data.extractToRight( &dummy,2,3);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
FAPI_DBG(" gpsa_bdcst_resp_info => %x ", dummy );
- // l_set = data.isBitSet(2);
- // FAPI_DBG(" gpsa_bdcst_resp_dbgo => %x ", l_set );
l_set = data.isBitSet(5);
FAPI_DBG(" gpsa_vchg_error => %x ", l_set );
l_set = data.isBitSet(6);
@@ -254,200 +268,230 @@ p8_pmc_force_vsafe(const fapi::Target& i_target )
l_set = data.isBitSet(12);
FAPI_DBG(" istate_processing_is_susp => %x ", l_set );
- } // if(debug_mode)
- // ******************************************************************
- // - PMC_OCC_HEARTBEAT_REG
- // ******************************************************************
+ // ******************************************************************
+ // - PMC_OCC_HEARTBEAT_REG
+ // ******************************************************************
- FAPI_INF("Forcing PMC Heartbeat loss ");
+ FAPI_INF("Forcing PMC Heartbeat loss ");
- e_rc = data.flushTo0(); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc = data.setBit(16); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
-
- rc = fapiPutScom(i_target, PMC_OCC_HEARTBEAT_REG_0x00062066, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(PMC_OCC_HEARTBEAT_REG_0x00062066) failed."); return rc;
- }
+ e_rc |= data.flushTo0();
+ e_rc |= data.setBit(16);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
- rc = fapiPutScom(i_target, PMC_OCC_HEARTBEAT_REG_0x00062066, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(PMC_OCC_HEARTBEAT_REG_0x00062066) failed."); return rc;
- }
-
- // \todo check with Thomas B. on how immediate the on-going will assert.
- // This delay may be covered under the "fapiGetScom" operation.
- // rc = fapiDelay();
- DONE_FLAG = 0;
-
- // ******************************************************************
- // POLL for PMC_STATUS_REG --> BIT_8 to go to 0 or any errors
- // ******************************************************************
- FAPI_DBG("Start polling for ongoing to go low ... ");
- // Loop only if count is less thean poll attempts and DONE_FLAG = 0 and no error
- for(count=0 , DONE_FLAG = 0 , any_error = 0; count<=MAX_POLL_ATTEMPTS && DONE_FLAG == 0 && any_error == 0; count++)
- {
- rc = fapiGetScom(i_target, PMC_STATUS_REG_0x00062009, data );
+ rc = fapiPutScom(i_target, PMC_OCC_HEARTBEAT_REG_0x00062066, data );
if (rc)
{
- FAPI_ERR("fapiGetScom(PMC_STATUS_REG_0x00062009) failed.");
- return rc;
+ FAPI_ERR("fapiPutScom(PMC_OCC_HEARTBEAT_REG_0x00062066) failed.");
+ break;
}
- FAPI_DBG(" poll_status => 0x%16llx", data.getDoubleWord(0));
- /* any_error = !(data.isBitClear(0) && data.isBitClear(1) && data.isBitClear(5) &&
- data.isBitClear(6) && data.isBitClear(10) && data.isBitClear(11) &&
- data.isBitClear(12));
- */
- any_error = !(data.isBitClear(1) && data.isBitClear(5) &&
- data.isBitClear(6) && data.isBitClear(10) && data.isBitClear(11) &&
- data.isBitClear(12));
- any_ongoing = !(data.isBitClear(8) && data.isBitClear(7)&& data.isBitClear(9));
- // Check for voltage change has any error
- if ( any_error == 1)
- {
- // An error was detected
-
- // \todo These messages will fail in HostBoot as genHexRightStr
- // cannot be used.
- // Suggest doing a walking bit check (if (isBitSet(x))) to write
- // which bits are on
- // FAPI_DBG(" -----------------------------------------------------");
- FAPI_DBG(" PMC_STATUS_REG is Read after the opn ----------> ");
- // FAPI_DBG(" -----------------------------------------------------");
-
- l_set = data.isBitSet(0);
- FAPI_ERR(" pstate_processing_is_susp => %x ", l_set ) ;
- l_set = data.isBitSet(1);
- FAPI_ERR(" gpsa_bdcst_error => %x ", l_set );
-
- e_rc = data.extractToRight( &dummy,2,3);if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- FAPI_ERR(" gpsa_bdcst_resp_info => %x ", dummy );
- // l_set = data.isBitSet(2);
- // FAPI_ERR(" gpsa_bdcst_resp_dbgo => %x ", l_set );
- l_set = data.isBitSet(5);
- FAPI_ERR(" gpsa_vchg_error => %x ", l_set );
- l_set = data.isBitSet(6);
- FAPI_ERR(" gpsa_timeout_error => %x ", l_set );
- l_set = data.isBitSet(7);
- FAPI_ERR(" gpsa_chg_ongoing => %x ", l_set );
- l_set = data.isBitSet(8);
- FAPI_ERR(" volt_chg_ongoing => %x ", l_set );
- l_set = data.isBitSet(9);
- FAPI_ERR(" brd_cst_ongoing => %x ", l_set );
- l_set = data.isBitSet(10);
- FAPI_ERR(" gpsa_table_error => %x ", l_set );
- l_set = data.isBitSet(11);
- FAPI_ERR(" pstate_interchip_error => %x ", l_set );
- l_set = data.isBitSet(12);
- FAPI_ERR(" istate_processing_is_susp => %x ", l_set );
-
- // FAPI_DBG(" -----------------------------------------------------");
-
- FAPI_ERR("Error detected with PMC on-going deassertion during safe voltage movement ");
- FAPI_SET_HWP_ERROR(rc, RC_PROCPM_VLT_ERROR);
- return rc;
-
- } // end of error if
- else if (any_ongoing == 0)
+ // \todo check with Thomas B. on how immediate the on-going will assert.
+ // This delay may be covered under the "fapiGetScom" operation.
+ // rc = fapiDelay();
+
+ // ******************************************************************
+ // POLL for PMC_STATUS_REG --> BIT_8 to go to 0 or any errors
+ // ******************************************************************
+ FAPI_DBG("Start polling for ongoing to go low ... ");
+ // Loop only if count is less thean poll attempts and DONE_FLAG = 0 and no error
+ for(count=0; ((count<=MAX_POLL_ATTEMPTS) && (DONE_FLAG == 0) && (any_error == 0)); count++)
{
- // Voltage change done (not on-going) and not errors
-
- // \todo Check that PVSAFE Pstate (in PMC Parameter Reg1) is the value
- // in the voltage stepper in the following fields of
- // PMC_STATE_MONITOR_AND_CRTL_REG
- // 0:7 - Global Pstate Target
- // 8:15 - Global Pstate Step Target
- // 16:23 - Global Pstate Actual
- // if the above do not match, post an error
-
- FAPI_DBG(" status_after_heartbeat_loss => 0x%16llx", data.getDoubleWord(0));
-
- l_set = data.isBitSet(0);
- FAPI_DBG(" pstate_processing_is_susp => %x ", l_set ) ;
- l_set = data.isBitSet(1);
- FAPI_DBG(" gpsa_bdcst_error => %x ", l_set );
-
- e_rc = data.extractToRight( &dummy,2,3);if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- FAPI_DBG(" gpsa_bdcst_resp_info => %x ", dummy );
-
- l_set = data.isBitSet(5);
- FAPI_DBG(" gpsa_vchg_error => %x ", l_set );
- l_set = data.isBitSet(6);
- FAPI_DBG(" gpsa_timeout_error => %x ", l_set );
- l_set = data.isBitSet(7);
- FAPI_DBG(" gpsa_chg_ongoing => %x ", l_set );
- l_set = data.isBitSet(8);
- FAPI_DBG(" volt_chg_ongoing => %x ", l_set );
- l_set = data.isBitSet(9);
- FAPI_DBG(" brd_cst_ongoing => %x ", l_set );
- l_set = data.isBitSet(10);
- FAPI_DBG(" gpsa_table_error => %x ", l_set );
- l_set = data.isBitSet(11);
- FAPI_DBG(" pstate_interchip_error => %x ", l_set );
- l_set = data.isBitSet(12);
- FAPI_DBG(" istate_processing_is_susp => %x ", l_set );
-
- FAPI_DBG("Voltage_change done without any error ... ");
- rc = fapiGetScom(i_target, PMC_PARAMETER_REG1_0x00062006, data );
+ rc = fapiGetScom(i_target, PMC_STATUS_REG_0x00062009, data );
if (rc)
{
- FAPI_ERR("fapiGetScom(PMC_PARAMETER_REG1_0x00062006) failed.");
- return rc;
+ FAPI_ERR("fapiGetScom(PMC_STATUS_REG_0x00062009) failed.");
+ break;
}
- e_rc = data.extractToRight( &pvsafe,22,8);
- if (e_rc) {rc.setEcmdError(e_rc); return rc; }
+ FAPI_DBG(" poll_status => 0x%16llx", data.getDoubleWord(0));
- rc = fapiGetScom(i_target, PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002) failed.");
- return rc;
- }
+ any_error = !(data.isBitClear(1) && data.isBitClear(5) &&
+ data.isBitClear(6) && data.isBitClear(10) && data.isBitClear(11) &&
+ data.isBitClear(12));
- e_rc = data.extractToRight( &pstate_target,0,8);
- e_rc = data.extractToRight( &pstate_step_target,8,8);
- e_rc = data.extractToRight( &pstate_actual,16,8);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- return rc;
- }
- FAPI_INF(" pvsafe => %x , ptarget => %x , pstarget => %x ,pactual => %x " , pvsafe , pstate_target ,pstate_step_target , pstate_actual);
+ any_ongoing = !(data.isBitClear(8) && data.isBitClear(7)&& data.isBitClear(9));
+
+ // Save PMC Status
+ pmcstatusreg = data;
- if (pstate_target != pvsafe || pstate_step_target != pvsafe || pstate_actual != pvsafe )
+ // Check for voltage change has any error
+ if (any_error == 1)
+ {
+ // An error was detected
+
+ // \todo These messages will fail in HostBoot as genHexRightStr
+ // cannot be used.
+ // Suggest doing a walking bit check (if (isBitSet(x))) to write
+ // which bits are on
+ FAPI_DBG(" PMC_STATUS_REG is Read after the opn ----------> ");
+
+ if (data.isBitSet(0))
+ FAPI_ERR(" pstate_processing_is_susp active");
+ if (data.isBitSet(1))
+ FAPI_ERR(" gpsa_bdcst_error active");
+
+ e_rc = data.extractToRight( &dummy,2,3);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
+ if (dummy)
+ FAPI_ERR(" gpsa_bdcst_resp_info is non-zero => %x ", dummy );
+
+ if (data.isBitSet(5))
+ FAPI_ERR(" gpsa_vchg_error active");
+ if (data.isBitSet(6))
+ FAPI_ERR(" gpsa_timeout_error active");
+ if (data.isBitSet(7))
+ FAPI_ERR(" gpsa_chg_ongoing active");
+ if (data.isBitSet(8))
+ FAPI_ERR(" volt_chg_ongoing active");
+ if (data.isBitSet(9))
+ FAPI_ERR(" brd_cst_ongoing active");
+ if (data.isBitSet(10))
+ FAPI_ERR(" gpsa_table_error active");
+ if (data.isBitSet(11))
+ FAPI_ERR(" pstate_interchip_error active");
+ if (data.isBitSet(12))
+ FAPI_ERR(" istate_processing_is_susp active");
+
+ FAPI_ERR("Error detected with PMC on-going deassertion during safe voltage movement ");
+ const uint64_t & PMCSTATUS = data.getDoubleWord(0);
+ FAPI_SET_HWP_ERROR(rc, RC_PROCPM_VLT_ERROR);
+ break;
+
+ } // end of error if
+ else if (any_ongoing == 0)
{
- FAPI_ERR("Pstate monitor and control register targets didnot match");
- FAPI_SET_HWP_ERROR(rc, RC_PROCPM_PSTATE_MONITOR_ERR);
- return rc;
+ // Voltage change done (not on-going) and not errors
+
+ // \todo Check that PVSAFE Pstate (in PMC Parameter Reg1) is the value
+ // in the voltage stepper in the following fields of
+ // PMC_STATE_MONITOR_AND_CRTL_REG
+ // 0:7 - Global Pstate Target
+ // 8:15 - Global Pstate Step Target
+ // 16:23 - Global Pstate Actual
+ // if the above do not match, post an error
+
+ FAPI_DBG(" status_after_heartbeat_loss => 0x%16llx", data.getDoubleWord(0));
+
+ l_set = data.isBitSet(0);
+ FAPI_DBG(" pstate_processing_is_susp => %x ", l_set ) ;
+ l_set = data.isBitSet(1);
+ FAPI_DBG(" gpsa_bdcst_error => %x ", l_set );
+
+ e_rc = data.extractToRight( &dummy,2,3);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
+ FAPI_DBG(" gpsa_bdcst_resp_info => %x ", dummy );
+
+ l_set = data.isBitSet(5);
+ FAPI_DBG(" gpsa_vchg_error => %x ", l_set );
+ l_set = data.isBitSet(6);
+ FAPI_DBG(" gpsa_timeout_error => %x ", l_set );
+ l_set = data.isBitSet(7);
+ FAPI_DBG(" gpsa_chg_ongoing => %x ", l_set );
+ l_set = data.isBitSet(8);
+ FAPI_DBG(" volt_chg_ongoing => %x ", l_set );
+ l_set = data.isBitSet(9);
+ FAPI_DBG(" brd_cst_ongoing => %x ", l_set );
+ l_set = data.isBitSet(10);
+ FAPI_DBG(" gpsa_table_error => %x ", l_set );
+ l_set = data.isBitSet(11);
+ FAPI_DBG(" pstate_interchip_error => %x ", l_set );
+ l_set = data.isBitSet(12);
+ FAPI_DBG(" istate_processing_is_susp => %x ", l_set );
+
+ // Save PMC Status
+ pmcstatusreg = data;
+
+ FAPI_DBG("Voltage_change done without any error ... ");
+ rc = fapiGetScom(i_target, PMC_PARAMETER_REG1_0x00062006, data );
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(PMC_PARAMETER_REG1_0x00062006) failed.");
+ break;
+ }
+
+ e_rc = data.extractToRight( &pvsafe,22,8);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
+
+ rc = fapiGetScom(i_target, PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002, data );
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002) failed.");
+ break;
+ }
+
+ e_rc |= data.extractToRight( &pstate_target,0,8);
+ e_rc |= data.extractToRight( &pstate_step_target,8,8);
+ e_rc |= data.extractToRight( &pstate_actual,16,8);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
+ FAPI_INF(" pvsafe => %x , ptarget => %x , pstarget => %x ,pactual => %x " , pvsafe , pstate_target ,pstate_step_target , pstate_actual);
+
+ if (pstate_target != pvsafe || pstate_step_target != pvsafe || pstate_actual != pvsafe )
+ {
+ FAPI_ERR("Pstate monitor and control register targets did not match");
+ const uint64_t & PSTATETARGET = (uint64_t)pstate_target;
+ const uint64_t & PSTATESTEPTARGET = (uint64_t)pstate_step_target;
+ const uint64_t & PSTATEACTUAL = (uint64_t)pstate_actual;
+ const uint64_t & PMCSTATUS = pmcstatusreg.getDoubleWord(0);
+ FAPI_SET_HWP_ERROR(rc, RC_PROCPM_PSTATE_MONITOR_ERR);
+ break;
+ }
+ DONE_FLAG = 1;
}
- DONE_FLAG = 1;
- }
- else // voltage change is ongoing so wait and then poll again
- {
- FAPI_DBG(" status => 0x%16llx", data.getDoubleWord(0));
-
- // wait for 1 millisecond in hardware, 1000 cycles in sim
- rc = fapiDelay(1000*1000, 20000000);
- if (rc)
+ else // voltage change is ongoing so wait and then poll again
{
- FAPI_ERR("fapi delay ends up with error");
- return rc ;
+ FAPI_DBG(" status => 0x%16llx", data.getDoubleWord(0));
+
+ // wait for 1 millisecond in hardware
+ rc = fapiDelay(1000*1000, 20000000);
+ if (rc)
+ {
+ FAPI_ERR("fapi delay ends up with error");
+ break;
+ }
}
+ } // For loop
+ // Inner loop error check
+ if (!rc.ok())
+ {
+ break;
}
- } // For loop
- // If we get here, the above loop timed out
- if (count>=MAX_POLL_ATTEMPTS)
- {
- FAPI_ERR("Timed out wait for voltage change on-going to drop");
- FAPI_SET_HWP_ERROR(rc, RC_PROCPM_VLT_TIMEOUT);
- return rc;
- }
- // simcheckpoint("pcn_o2s_poll_status_12");
+ // Check if the above loop timed out
+ if (count>=MAX_POLL_ATTEMPTS)
+ {
+ FAPI_ERR("Timed out wait for voltage change on-going to drop");
+ const uint64_t & PSTATETARGET = (uint64_t)pstate_target;
+ const uint64_t & PSTATESTEPTARGET = (uint64_t)pstate_step_target;
+ const uint64_t & PSTATEACTUAL = (uint64_t)pstate_actual;
+ const uint64_t & PMCSTATUS = pmcstatusreg.getDoubleWord(0);
+ FAPI_SET_HWP_ERROR(rc, RC_PROCPM_VLT_TIMEOUT);
+ break;
+ }
+
+ } while(0);
+
+ FAPI_INF("p8_pmc_force_vsafe end ....");
return rc ;
} // Procedure
OpenPOWER on IntegriCloud