summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Ploetz <maploetz@us.ibm.com>2014-02-13 13:19:53 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-02-27 15:01:01 -0600
commit27b7743dc369209b32071eed287bea3a10a6b7cc (patch)
treebdbc882854f197b02867a76189a71d5b0a7c58a9
parent0c77c1149543e775fe0168e9e99947a33d16f6d3 (diff)
downloadblackbird-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.C188
-rw-r--r--src/usr/hwpf/hwp/runtime_errors/p8_force_vsafe_errors.xml38
-rw-r--r--src/usr/hwpf/hwp/runtime_errors/p8_pstate_registers.xml43
-rw-r--r--src/usr/hwpf/makefile3
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 \
OpenPOWER on IntegriCloud