diff options
| author | Matt Ploetz <maploetz@us.ibm.com> | 2014-02-13 13:19:53 -0600 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-02-27 15:01:01 -0600 |
| commit | 27b7743dc369209b32071eed287bea3a10a6b7cc (patch) | |
| tree | bdbc882854f197b02867a76189a71d5b0a7c58a9 | |
| parent | 0c77c1149543e775fe0168e9e99947a33d16f6d3 (diff) | |
| download | blackbird-hostboot-27b7743dc369209b32071eed287bea3a10a6b7cc.tar.gz blackbird-hostboot-27b7743dc369209b32071eed287bea3a10a6b7cc.zip | |
INITPROC: Hostboot - SW245714 force_vsafe
Change-Id: I701c4c3e3212182f71d082126faa9ff97bc508cb
CQ:SW245714
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8832
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
| -rw-r--r-- | src/usr/hwpf/hwp/occ/p8_pmc_force_vsafe.C | 188 | ||||
| -rw-r--r-- | src/usr/hwpf/hwp/runtime_errors/p8_force_vsafe_errors.xml | 38 | ||||
| -rw-r--r-- | src/usr/hwpf/hwp/runtime_errors/p8_pstate_registers.xml | 43 | ||||
| -rw-r--r-- | src/usr/hwpf/makefile | 3 |
4 files changed, 71 insertions, 201 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 862243ea7..1c2a2d80b 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.13 2014/01/20 22:15:56 jdavidso Exp $ +// $Id: p8_pmc_force_vsafe.C,v 1.14 2014/01/24 23:41:37 jdavidso 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 @@ -136,20 +136,6 @@ p8_pmc_force_vsafe(const fapi::Target& i_target ) fapi::ReturnCode rc; ecmdDataBufferBase data(64); ecmdDataBufferBase pmcstatusreg(64); - ecmdDataBufferBase pmclfir(64); - ecmdDataBufferBase pmclfirmaskreg(64); - ecmdDataBufferBase pmcmodereg(64); - ecmdDataBufferBase pmcpstatemonitor(64); - ecmdDataBufferBase pmcrailbounds(64); - ecmdDataBufferBase pmcparamreg0(64); - ecmdDataBufferBase pmcparamreg1(64); - ecmdDataBufferBase pmceffglobalact(64); - ecmdDataBufferBase pmcglobalact(64); - ecmdDataBufferBase pmcinttchpreg1(64); - ecmdDataBufferBase pmcinttchpreg4(64); - ecmdDataBufferBase pmcinttchpstatus(64); - ecmdDataBufferBase pmcinttchppstate(64); - ecmdDataBufferBase pmcinttchpcmd(64); uint32_t e_rc = 0; // maximum number of status poll attempts to make before giving up @@ -304,9 +290,8 @@ p8_pmc_force_vsafe(const fapi::Target& i_target ) break; } - // \todo check with Thomas B. on how immediate the on-going will assert. - // This delay may be covered under the "fapiGetScom" operation. - // rc = fapiDelay(); + // delay to reduce number of polling loops + rc = fapiDelay(1000, 1000); // ****************************************************************** // POLL for PMC_STATUS_REG --> BIT_8 to go to 0 or any errors @@ -337,11 +322,6 @@ p8_pmc_force_vsafe(const fapi::Target& i_target ) 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)) @@ -378,133 +358,6 @@ p8_pmc_force_vsafe(const fapi::Target& i_target ) FAPI_ERR("Error detected with PMC on-going deassertion during safe voltage movement "); const uint64_t & PMCSTATUS = data.getDoubleWord(0); - // need to add: (also in xml file for ffdc export) - // PMC_LFIR - rc = fapiGetScom(i_target, PMC_LFIR_0x01010840, pmclfir); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_LFIR_0x01010840) failed."); - break; - } - const uint64_t & PMC_LFIR = pmclfir.getDoubleWord(0); - - // PMC_LFIR_ERR_MASK_REG - rc = fapiGetScom(i_target, PMC_LFIR_MASK_0x01010843, pmclfirmaskreg); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_LFIR_MASK_REG_0x01010843) failed."); - break; - } - const uint64_t& PMC_LFIR_MASK_REG = pmclfirmaskreg.getDoubleWord(0); - - // PMC_MODE_REG - rc = fapiGetScom(i_target, PMC_MODE_REG_0x00062000, pmcmodereg); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_MODE_REG_0x00062000) failed."); - break; - } - const uint64_t & PMC_MODE_REG = pmcmodereg.getDoubleWord(0); - - // PMC_PSTATE_MONITOR_AND_CTRL_REG - rc = fapiGetScom(i_target, PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002, pmcpstatemonitor); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002) failed."); - break; - } - const uint64_t& PMC_PSTATE_MONITOR_AND_CTRL_REG = pmcpstatemonitor.getDoubleWord(0); - - // PMC_RAIL_BOUNDS_REGISTER - rc = fapiGetScom(i_target, PMC_RAIL_BOUNDS_0x00062003, pmcrailbounds); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_RAIL_BOUNDS_0x00062003) failed."); - break; - } - const uint64_t& PMC_RAIL_BOUNDS = pmcrailbounds.getDoubleWord(0); - - // PMC_PARAMETER_REG0 - rc = fapiGetScom(i_target, PMC_PARAMETER_REG0_0x00062005, pmcparamreg0); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_PARAMETER_REG0_0x00062005) failed."); - break; - } - const uint64_t& PMC_PARAMETER_REG0 = pmcparamreg0.getDoubleWord(0); - - // PMC_PARAMETER_REG1 - rc = fapiGetScom(i_target, PMC_PARAMETER_REG1_0x00062006, pmcparamreg1); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_PARAMETER_REG1_0x00062006) failed."); - break; - } - const uint64_t& PMC_PARAMETER_REG1 = pmcparamreg1.getDoubleWord(0); - - // PMC_EFF_GLOBAL_ACTUAL_VOLTAGE_REG - rc = fapiGetScom(i_target, PMC_EFF_GLOBAL_ACTUAL_VOLTAGE_REG_0x00062007, pmceffglobalact); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_EFF_GLOBAL_ACTUAL_VOLTAGE_REG_0x00062007) failed."); - break; - } - const uint64_t& PMC_EFF_GLOBAL_ACTUAL_VOLTAGE_REG = pmceffglobalact.getDoubleWord(0); - - // PMC_GLOBAL_ACTUAL_VOLTAGE_REG - rc = fapiGetScom(i_target, PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002, pmcglobalact); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_EFF_GLOBAL_ACTUAL_VOLTAGE_REG_0x00062007) failed."); - break; - } - const uint64_t& PMC_GLOBAL_ACTUAL_VOLTAGE_REG = pmcglobalact.getDoubleWord(0); - - // PMC_INTCHP_CTRL_REG1 - rc = fapiGetScom(i_target, PMC_INTCHP_CTRL_REG1_0x00062010, pmcinttchpreg1); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_INTCHP_CTRL_REG1_0x00062010) failed."); - break; - } - const uint64_t& PMC_INTCHP_CTRL_REG1 = pmcinttchpreg1.getDoubleWord(0); - - // PMC_INTCHP_CTRL_REG4 - rc = fapiGetScom(i_target, PMC_INTCHP_CTRL_REG4_0x00062012, pmcinttchpreg4); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_INTCHP_CTRL_REG4_0x00062012) failed."); - break; - } - const uint64_t& PMC_INTCHP_CTRL_REG4 = pmcinttchpreg4.getDoubleWord(0); - - // PMC_INTCHP_STATUS_REG - rc = fapiGetScom(i_target, PMC_INTCHP_STATUS_REG_0x00062013, pmcinttchpstatus); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_INTCHP_STATUS_REG_0x00062013) failed."); - break; - } - const uint64_t& PMC_INTCHP_STATUS_REG = pmcinttchpstatus.getDoubleWord(0); - - // PMC_INTCHP_PSTATE_REG - rc = fapiGetScom(i_target, PMC_INTCHP_PSTATE_REG_0x00062017, pmcinttchppstate); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_INTCHP_PSTATE_REG_0x00062017) failed."); - break; - } - const uint64_t& PMC_INTCHP_PSTATE_REG = pmcinttchppstate.getDoubleWord(0); - - // PMC_INTCHP_COMMAND_REG - rc = fapiGetScom(i_target, PMC_INTCHP_COMMAND_REG_0x00062014, pmcinttchpcmd); - if (rc) - { - FAPI_ERR("fapiGetScom(PMC_INTCHP_COMMAND_REG_0x00062014) failed."); - break; - } - const uint64_t& PMC_INTCHP_COMMAND_REG = pmcinttchpcmd.getDoubleWord(0); - const fapi::Target & CHIP = i_target; FAPI_SET_HWP_ERROR(rc, RC_PROCPM_VLT_ERROR); break; @@ -514,13 +367,6 @@ p8_pmc_force_vsafe(const fapi::Target& i_target ) { // 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)); @@ -589,6 +435,13 @@ p8_pmc_force_vsafe(const fapi::Target& i_target ) } FAPI_INF(" pvsafe => %x , ptarget => %x , pstarget => %x ,pactual => %x " , pvsafe , pstate_target ,pstate_step_target , pstate_actual); + // 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 if (pstate_target != pvsafe || pstate_step_target != pvsafe || pstate_actual != pvsafe ) { FAPI_ERR("Pstate monitor and control register targets did not match"); @@ -627,21 +480,14 @@ p8_pmc_force_vsafe(const fapi::Target& i_target ) 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; + // get current pmc status value + rc = fapiGetScom(i_target, PMC_STATUS_REG_0x00062009, pmcstatusreg ); + if (rc) + { + FAPI_ERR("fapiGetScom(PMC_STATUS_REG_0x00062009) failed."); + break; + } const uint64_t & PMCSTATUS = pmcstatusreg.getDoubleWord(0); - const uint64_t & PMC_LFIR = pmclfir.getDoubleWord(0); - const uint64_t& PMC_LFIR_MASK_REG = pmclfirmaskreg.getDoubleWord(0); - const uint64_t & PMC_MODE_REG = pmcmodereg.getDoubleWord(0); - const uint64_t& PMC_PSTATE_MONITOR_AND_CTRL_REG = pmcpstatemonitor.getDoubleWord(0); - const uint64_t& PMC_RAIL_BOUNDS = pmcrailbounds.getDoubleWord(0); - const uint64_t& PMC_PARAMETER_REG0 = pmcparamreg0.getDoubleWord(0); - const uint64_t& PMC_PARAMETER_REG1 = pmcparamreg1.getDoubleWord(0); - const uint64_t& PMC_EFF_GLOBAL_ACTUAL_VOLTAGE_REG = pmceffglobalact.getDoubleWord(0); - const uint64_t& PMC_GLOBAL_ACTUAL_VOLTAGE_REG = pmcglobalact.getDoubleWord(0); - const uint64_t& PMC_INTCHP_CTRL_REG1 = pmcinttchpreg1.getDoubleWord(0); - const uint64_t& PMC_INTCHP_CTRL_REG4 = pmcinttchpreg4.getDoubleWord(0); - const uint64_t& PMC_INTCHP_STATUS_REG = pmcinttchpstatus.getDoubleWord(0); - const uint64_t& PMC_INTCHP_PSTATE_REG = pmcinttchppstate.getDoubleWord(0); - const uint64_t& PMC_INTCHP_COMMAND_REG = pmcinttchpcmd.getDoubleWord(0); const fapi::Target & CHIP = i_target; FAPI_SET_HWP_ERROR(rc, RC_PROCPM_VLT_TIMEOUT); break; diff --git a/src/usr/hwpf/hwp/runtime_errors/p8_force_vsafe_errors.xml b/src/usr/hwpf/hwp/runtime_errors/p8_force_vsafe_errors.xml index e53cd6abe..ef0fa1c2b 100644 --- a/src/usr/hwpf/hwp/runtime_errors/p8_force_vsafe_errors.xml +++ b/src/usr/hwpf/hwp/runtime_errors/p8_force_vsafe_errors.xml @@ -20,7 +20,7 @@ <!-- Origin: 30 --> <!-- --> <!-- IBM_PROLOG_END_TAG --> -<!-- $Id: p8_force_vsafe_errors.xml,v 1.4 2014/01/20 22:12:13 jdavidso Exp $ --> +<!-- $Id: p8_force_vsafe_errors.xml,v 1.5 2014/01/24 23:40:22 jdavidso Exp $ --> <!-- Error definitions for proc_pmc_force_vsage procedure --> <hwpErrors> <!-- *********************************************************************** --> @@ -35,20 +35,10 @@ <ffdc>PSTATESTEPTARGET</ffdc> <ffdc>PSTATEACTUAL</ffdc> <ffdc>PMCSTATUS</ffdc> - <ffdc>PMC_LFIR</ffdc> - <ffdc>PMC_LFIR_MASK_REG</ffdc> - <ffdc>PMC_MODE_REG</ffdc> - <ffdc>PMC_PSTATE_MONITOR_AND_CTRL_REG</ffdc> - <ffdc>PMC_RAIL_BOUNDS</ffdc> - <ffdc>PMC_PARAMETER_REG0</ffdc> - <ffdc>PMC_PARAMETER_REG1</ffdc> - <ffdc>PMC_EFF_GLOBAL_ACTUAL_VOLTAGE_REG</ffdc> - <ffdc>PMC_GLOBAL_ACTUAL_VOLTAGE_REG</ffdc> - <ffdc>PMC_INTCHP_CTRL_REG1</ffdc> - <ffdc>PMC_INTCHP_CTRL_REG4</ffdc> - <ffdc>PMC_INTCHP_STATUS_REG</ffdc> - <ffdc>PMC_INTCHP_PSTATE_REG</ffdc> - <ffdc>PMC_INTCHP_COMMAND_REG</ffdc> + <collectRegisterFfdc> + <id>REG_FFDC_PSTATE_REGISTERS</id> + <target>CHIP</target> + </collectRegisterFfdc> </hwpError> <!-- *********************************************************************** --> <hwpError> @@ -59,20 +49,10 @@ <priority>HIGH</priority> </callout> <ffdc>PMCSTATUS</ffdc> - <ffdc>PMC_LFIR</ffdc> - <ffdc>PMC_LFIR_MASK_REG</ffdc> - <ffdc>PMC_MODE_REG</ffdc> - <ffdc>PMC_PSTATE_MONITOR_AND_CTRL_REG</ffdc> - <ffdc>PMC_RAIL_BOUNDS</ffdc> - <ffdc>PMC_PARAMETER_REG0</ffdc> - <ffdc>PMC_PARAMETER_REG1</ffdc> - <ffdc>PMC_EFF_GLOBAL_ACTUAL_VOLTAGE_REG</ffdc> - <ffdc>PMC_GLOBAL_ACTUAL_VOLTAGE_REG</ffdc> - <ffdc>PMC_INTCHP_CTRL_REG1</ffdc> - <ffdc>PMC_INTCHP_CTRL_REG4</ffdc> - <ffdc>PMC_INTCHP_STATUS_REG</ffdc> - <ffdc>PMC_INTCHP_PSTATE_REG</ffdc> - <ffdc>PMC_INTCHP_COMMAND_REG</ffdc> + <collectRegisterFfdc> + <id>REG_FFDC_PSTATE_REGISTERS</id> + <target>CHIP</target> + </collectRegisterFfdc> </hwpError> <!-- *********************************************************************** --> <hwpError> diff --git a/src/usr/hwpf/hwp/runtime_errors/p8_pstate_registers.xml b/src/usr/hwpf/hwp/runtime_errors/p8_pstate_registers.xml new file mode 100644 index 000000000..b7a3a82f6 --- /dev/null +++ b/src/usr/hwpf/hwp/runtime_errors/p8_pstate_registers.xml @@ -0,0 +1,43 @@ +<!-- IBM_PROLOG_BEGIN_TAG --> +<!-- This is an automatically generated prolog. --> +<!-- --> +<!-- $Source: src/usr/hwpf/hwp/runtime_errors/p8_pstate_registers.xml $ --> +<!-- --> +<!-- IBM CONFIDENTIAL --> +<!-- --> +<!-- COPYRIGHT International Business Machines Corp. 2014 --> +<!-- --> +<!-- p1 --> +<!-- --> +<!-- Object Code Only (OCO) source materials --> +<!-- Licensed Internal Code Source Materials --> +<!-- IBM HostBoot Licensed Internal Code --> +<!-- --> +<!-- The source code for this program is not published or otherwise --> +<!-- divested of its trade secrets, irrespective of what has been --> +<!-- deposited with the U.S. Copyright Office. --> +<!-- --> +<!-- Origin: 30 --> +<!-- --> +<!-- IBM_PROLOG_END_TAG --> +<!-- $Id: p8_pstate_registers.xml,v 1.1 2014/01/24 23:40:22 jdavidso Exp $ --> +<!-- Definition of PMC registers to collect on some errors --> +<hwpErrors> + <registerFfdc> + <id>REG_FFDC_PSTATE_REGISTERS</id> + <scomRegister>PMC_STATUS_REG_0x00062009</scomRegister> + <scomRegister>PMC_LFIR_0x01010840</scomRegister> + <scomRegister>PMC_LFIR_MASK_0x01010843</scomRegister> + <scomRegister>PMC_MODE_REG_0x00062000</scomRegister> + <scomRegister>PMC_PSTATE_MONITOR_AND_CTRL_REG_0x00062002</scomRegister> + <scomRegister>PMC_RAIL_BOUNDS_0x00062003</scomRegister> + <scomRegister>PMC_PARAMETER_REG0_0x00062005</scomRegister> + <scomRegister>PMC_PARAMETER_REG1_0x00062006</scomRegister> + <scomRegister>PMC_EFF_GLOBAL_ACTUAL_VOLTAGE_REG_0x00062007</scomRegister> + <scomRegister>PMC_INTCHP_CTRL_REG1_0x00062010</scomRegister> + <scomRegister>PMC_INTCHP_CTRL_REG4_0x00062012</scomRegister> + <scomRegister>PMC_INTCHP_STATUS_REG_0x00062013</scomRegister> + <scomRegister>PMC_INTCHP_PSTATE_REG_0x00062017</scomRegister> + <scomRegister>PMC_INTCHP_COMMAND_REG_0x00062014</scomRegister> + </registerFfdc> +</hwpErrors> diff --git a/src/usr/hwpf/makefile b/src/usr/hwpf/makefile index 215d576e7..31c4eb2e3 100644 --- a/src/usr/hwpf/makefile +++ b/src/usr/hwpf/makefile @@ -134,7 +134,8 @@ HWP_ERROR_XML_FILES = hwp/fapiHwpErrorInfo.xml \ hwp/dram_training/mem_pll_setup/cen_mem_pll_setup_errors.xml \ hwp/core_activate/proc_check_slw_done/proc_check_slw_done_errors.xml \ hwp/dram_initialization/proc_throttle_sync/proc_throttle_sync_errors.xml \ - hwp/dram_initialization/mss_power_cleanup/memory_mss_power_cleanup.xml + hwp/dram_initialization/mss_power_cleanup/memory_mss_power_cleanup.xml \ + hwp/runtime_errors/p8_pstate_registers.xml ## these get generated into obj/genfiles/AttributeIds.H HWP_ATTR_XML_FILES = hwp/memory_attributes.xml \ |

