diff options
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.C | 516 |
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 |