summaryrefslogtreecommitdiffstats
path: root/import
diff options
context:
space:
mode:
authorAnusha Reddy Rangareddygari <anusrang@in.ibm.com>2016-06-24 11:46:55 +0200
committerSachin Gupta <sgupta2m@in.ibm.com>2016-07-11 06:15:13 -0400
commitb0dc57fef18e48be897d546e0b4a58879763e5d4 (patch)
tree7687959f0c712584b49f6a66adc20e38525ac645 /import
parented0cbedef5e5f384f4fd8a375148f46889cbb826 (diff)
downloadtalos-sbe-b0dc57fef18e48be897d546e0b4a58879763e5d4.tar.gz
talos-sbe-b0dc57fef18e48be897d546e0b4a58879763e5d4.zip
Level 2 HWP for p9_sbe_tp_chiplet_init3
* Pervasive chiplet removed from MC group0 * Included clock_test2 content * Included precision reference voltage updates Change-Id: I9cce50775bffc082dbb2aa0913bcf98f0b7aec39 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/26241 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Reviewed-by: Sunil Kumar <skumar8j@in.ibm.com> Reviewed-by: Soma Bhanutej <soma.bhanu@in.ibm.com> Reviewed-by: PARVATHI RACHAKONDA <prachako@in.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/26244 Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Diffstat (limited to 'import')
-rw-r--r--import/chips/p9/procedures/hwp/perv/p9_sbe_tp_chiplet_init3.C149
-rw-r--r--import/chips/p9/procedures/xml/error_info/p9_sbe_tp_chiplet_init3_errors.xml17
-rw-r--r--import/chips/p9/sw_simulation/pervasive.act25
3 files changed, 183 insertions, 8 deletions
diff --git a/import/chips/p9/procedures/hwp/perv/p9_sbe_tp_chiplet_init3.C b/import/chips/p9/procedures/hwp/perv/p9_sbe_tp_chiplet_init3.C
index 01f2fc96..0586e44e 100644
--- a/import/chips/p9/procedures/hwp/perv/p9_sbe_tp_chiplet_init3.C
+++ b/import/chips/p9/procedures/hwp/perv/p9_sbe_tp_chiplet_init3.C
@@ -46,9 +46,16 @@ enum P9_SBE_TP_CHIPLET_INIT3_Private_Constants
{
START_CMD = 0x1,
REGIONS_ALL_EXCEPT_PIB_NET = 0x4FF,
- CLOCK_TYPES = 0x7
+ CLOCK_TYPES = 0x7,
+ HW_NS_DELAY = 100000, // unit is nano seconds
+ SIM_CYCLE_DELAY = 1000, // unit is sim cycles
+ POLL_COUNT = 300, // Observed Number of times CBS read for CBS_INTERNAL_STATE_VECTOR
+ OSC_ERROR_MASK = 0xF700000000000000 // Mask OSC errors
};
+static fapi2::ReturnCode p9_sbe_tp_chiplet_init3_clock_test2(
+ const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip);
+
static fapi2::ReturnCode p9_sbe_tp_chiplet_init3_region_fence_setup(
const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet);
@@ -59,10 +66,12 @@ fapi2::ReturnCode p9_sbe_tp_chiplet_init3(const
fapi2::buffer<uint32_t> l_pfet_value;
fapi2::buffer<uint32_t> l_attr_pfet;
fapi2::buffer<uint64_t> l_regions;
+ fapi2::buffer<uint64_t> l_kvref_reg;
fapi2::Target<fapi2::TARGET_TYPE_PERV> l_tpchiplet =
i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>(fapi2::TARGET_FILTER_TP,
fapi2::TARGET_STATE_FUNCTIONAL)[0];
fapi2::buffer<uint64_t> l_data64;
+ int l_timeout = 0;
FAPI_INF("Entering ...");
FAPI_DBG("Reading ATTR_PFET_OFF_CONTROLS");
@@ -90,6 +99,9 @@ fapi2::ReturnCode p9_sbe_tp_chiplet_init3(const
FAPI_TRY(p9_sbe_common_clock_start_stop(l_tpchiplet, START_CMD, 0, 0, l_regions,
CLOCK_TYPES));
+ FAPI_DBG("Calling clock_test2");
+ FAPI_TRY(p9_sbe_tp_chiplet_init3_clock_test2(i_target_chip));
+
FAPI_DBG("Drop FSI fence 5");
//Setting ROOT_CTRL0 register value
FAPI_TRY(fapi2::getScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_data64));
@@ -128,12 +140,6 @@ fapi2::ReturnCode p9_sbe_tp_chiplet_init3(const
//PERV.LOCAL_FIR_ACTION1=0;
//PERV.LOCAL_FIR_MASK=0;
- FAPI_DBG("Add Pervasive chiplet to Multicast Group 0");
- //Setting MULTICAST_GROUP_1 register value
- //PERV.MULTICAST_GROUP_1 = 0xE0001c0000000000
- FAPI_TRY(fapi2::putScom(i_target_chip, PERV_TP_MULTICAST_GROUP_1,
- 0xE0001c0000000000));
-
FAPI_DBG("Setup Pervasive Hangcounter 0:Thermal, 1:OCC/SBE, 2:PBA hang, 3:Nest freq for TOD hang, 5:malefunction alert");
//Setting HANG_PULSE_0_REG register value (Setting all fields)
//PERV.HANG_PULSE_0_REG.HANG_PULSE_REG_0 = 0b010000
@@ -172,6 +178,133 @@ fapi2::ReturnCode p9_sbe_tp_chiplet_init3(const
.set_READ_XSTOP(l_read_reg),
"XSTOP BIT GET SET");
+ FAPI_DBG("Start calibration");
+ //Setting KVREF_AND_VMEAS_MODE_STATUS_REG register value
+ FAPI_TRY(fapi2::getScom(i_target_chip, PERV_TP_KVREF_AND_VMEAS_MODE_STATUS_REG, l_data64));
+ l_data64.setBit<0>(); //KVREF_AND_VMEAS_MODE_STATUS_REG.KVREF_START_CAL = 0b1
+ FAPI_TRY(fapi2::putScom(i_target_chip, PERV_TP_KVREF_AND_VMEAS_MODE_STATUS_REG, l_data64));
+
+ FAPI_DBG("Check for calibration done");
+ l_timeout = POLL_COUNT;
+
+ //UNTIL KVREF_AND_VMEAS_MODE_STATUS_REG.KVREF_CAL_DONE == 1
+ while (l_timeout != 0)
+ {
+ //Getting KVREF_AND_VMEAS_MODE_STATUS_REG register value
+ FAPI_TRY(fapi2::getScom(i_target_chip, PERV_TP_KVREF_AND_VMEAS_MODE_STATUS_REG, l_data64));
+ //bool l_poll_data = KVREF_AND_VMEAS_MODE_STATUS_REG.KVREF_CAL_DONE
+ bool l_poll_data = l_data64.getBit<16>();
+
+ if (l_poll_data == 1)
+ {
+ break;
+ }
+
+ fapi2::delay(HW_NS_DELAY, SIM_CYCLE_DELAY);
+ --l_timeout;
+ }
+
+ FAPI_DBG("Loop Count :%d", l_timeout);
+
+ FAPI_ASSERT(l_timeout > 0,
+ fapi2::CALIBRATION_NOT_DONE(),
+ "Calibration not done, bit16 not set");
+
+ FAPI_INF("Exiting ...");
+
+fapi_try_exit:
+ return fapi2::current_err;
+
+}
+
+/// @brief clock test
+///
+/// @param[in] i_target_chip Reference to TARGET_TYPE_PROC_CHIP target
+/// @return FAPI2_RC_SUCCESS if success, else error code.
+static fapi2::ReturnCode p9_sbe_tp_chiplet_init3_clock_test2(
+ const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip)
+{
+ fapi2::buffer<uint64_t> l_read ;
+ fapi2::buffer<uint64_t> l_data64;
+ FAPI_INF("Entering ...");
+
+ FAPI_DBG("unfence 281D");
+ //Setting ROOT_CTRL0 register value
+ FAPI_TRY(fapi2::getScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_data64));
+ l_data64.clearBit<0>(); //PIB.ROOT_CTRL0.TPFSI_SBE_FENCE_VTLIO_DC_UNUSED = 0
+ FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_data64));
+
+ //Getting ROOT_CTRL3 register value
+ FAPI_TRY(fapi2::getScom(i_target_chip, PERV_ROOT_CTRL3_SCOM,
+ l_read)); //l_read = PIB.ROOT_CTRL3
+
+ l_read.setBit<27>();
+
+ FAPI_DBG("Set osc_ok latch active");
+ //Setting ROOT_CTRL3 register value
+ //PIB.ROOT_CTRL3 = l_read
+ FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL3_SCOM, l_read));
+
+ FAPI_DBG("Turn on oscilate pgood");
+ //Setting ROOT_CTRL6 register value
+ FAPI_TRY(fapi2::getScom(i_target_chip, PERV_ROOT_CTRL6_SCOM, l_data64));
+ //PIB.ROOT_CTRL6.TPFSI_OSCSW1_PGOOD = 1
+ l_data64.setBit<PERV_ROOT_CTRL6_SET_TPFSI_OSCSW1_PGOOD>();
+ FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL6_SCOM, l_data64));
+
+ //Getting ROOT_CTRL3 register value
+ FAPI_TRY(fapi2::getScom(i_target_chip, PERV_ROOT_CTRL3_SCOM,
+ l_read)); //l_read = PIB.ROOT_CTRL3
+
+ l_read.clearBit<17>();
+
+ FAPI_DBG("turn off use_osc_1_0");
+ //Setting ROOT_CTRL3 register value
+ //PIB.ROOT_CTRL3 = l_read
+ FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL3_SCOM, l_read));
+
+ FAPI_DBG("Mask OSC err");
+ //Setting OSCERR_MASK register value
+ //PIB.OSCERR_MASK = OSC_ERROR_MASK
+ FAPI_TRY(fapi2::putScom(i_target_chip, PERV_TP_OSCERR_MASK, OSC_ERROR_MASK));
+
+ FAPI_DBG("reset osc-error_reg");
+ //Setting OSCERR_HOLD register value
+ FAPI_TRY(fapi2::getScom(i_target_chip, PERV_TP_OSCERR_HOLD, l_data64));
+ l_data64.clearBit<4, 4>(); //PERV.OSCERR_HOLD.OSCERR_MEM = 0000
+ FAPI_TRY(fapi2::putScom(i_target_chip, PERV_TP_OSCERR_HOLD, l_data64));
+
+ FAPI_DBG("Rests FIR");
+ //Setting LOCAL_FIR register value
+ l_data64.flush<1>();
+ l_data64.clearBit<35>(); //PERV.LOCAL_FIR.FIR_IN35 = 0
+ l_data64.clearBit<36>(); //PERV.LOCAL_FIR.FIR_IN36 = 0
+ FAPI_TRY(fapi2::putScom(i_target_chip, PERV_TP_LOCAL_FIR_AND, l_data64));
+
+#ifndef SIM_ONLY_OSC_SWC_CHK
+
+ FAPI_DBG("check for OSC ok");
+ //Getting SNS1LTH register value
+ FAPI_TRY(fapi2::getScom(i_target_chip, PERV_SNS1LTH_SCOM,
+ l_read)); //l_read = PIB.SNS1LTH
+
+ FAPI_ASSERT(l_read.getBit<21>() == 0 && l_read.getBit<28>() == 1,
+ fapi2::MF_OSC_NOT_TOGGLE()
+ .set_READ_SNS1LTH(l_read),
+ "MF oscillator not toggling");
+
+ FAPI_DBG("Osc error active");
+ //Getting OSCERR_HOLD register value
+ FAPI_TRY(fapi2::getScom(i_target_chip, PERV_TP_OSCERR_HOLD,
+ l_read)); //l_read = PERV.OSCERR_HOLD
+
+ FAPI_ASSERT(l_read.getBit<4>() == 0,
+ fapi2::MF_OSC_ERR()
+ .set_READ_OSCERR_HOLD(l_read),
+ "MF oscillator error active");
+
+#endif
+
FAPI_INF("Exiting ...");
fapi_try_exit:
@@ -197,7 +330,7 @@ static fapi2::ReturnCode p9_sbe_tp_chiplet_init3_region_fence_setup(
l_attr_pg.invert();
l_attr_pg.extractToRight<20, 11>(l_attr_pg_data);
- FAPI_INF("Drop partial good fences");
+ FAPI_DBG("Drop partial good fences");
//Setting CPLT_CTRL1 register value
l_data64.flush<0>();
l_data64.writeBit<PERV_1_CPLT_CTRL1_TC_VITL_REGION_FENCE>
diff --git a/import/chips/p9/procedures/xml/error_info/p9_sbe_tp_chiplet_init3_errors.xml b/import/chips/p9/procedures/xml/error_info/p9_sbe_tp_chiplet_init3_errors.xml
index 3e683467..4cb8d32a 100644
--- a/import/chips/p9/procedures/xml/error_info/p9_sbe_tp_chiplet_init3_errors.xml
+++ b/import/chips/p9/procedures/xml/error_info/p9_sbe_tp_chiplet_init3_errors.xml
@@ -28,4 +28,21 @@
<ffdc>READ_XSTOP</ffdc>
</hwpError>
<!-- ******************************************************************** -->
+ <hwpError>
+ <rc>RC_CALIBRATION_NOT_DONE</rc>
+ <description>Precision Reference Voltage : Calibration not done</description>
+ </hwpError>
+ <!-- ******************************************************************** -->
+ <hwpError>
+ <rc>RC_MF_OSC_ERR</rc>
+ <description>MF Oscillator error active</description>
+ <ffdc>READ_OSCERR_HOLD</ffdc>
+ </hwpError>
+ <!-- ******************************************************************** -->
+ <hwpError>
+ <rc>RC_MF_OSC_NOT_TOGGLE</rc>
+ <description>MF Oscillator not toggling</description>
+ <ffdc>READ_SNS1LTH</ffdc>
+ </hwpError>
+ <!-- ******************************************************************** -->
</hwpErrors>
diff --git a/import/chips/p9/sw_simulation/pervasive.act b/import/chips/p9/sw_simulation/pervasive.act
index 25ab1c7a..4c1d3130 100644
--- a/import/chips/p9/sw_simulation/pervasive.act
+++ b/import/chips/p9/sw_simulation/pervasive.act
@@ -45,6 +45,31 @@ EFFECT: TARGET=[REG(MYCHIPLET,0x00030009)] OP=[EQUALTO,BUF] DATA=[LITERAL(64,0xF
EFFECT: TARGET=[REG(MYCHIPLET,0x0003000A)] OP=[EQUALTO,BUF] DATA=[LITERAL(64,0xF601FFFF FFFFFFFF)]
}
+CAUSE_EFFECT{
+LABEL=[Start Calibration]
+# Watch KVREF_AND_VMEAS_MODE_STATUS_REG register
+WATCH=[REG(0x01020007)]
+# KVREF_AND_VMEAS_MODE_STATUS_REG.KVREF_START_CAL = 0b1
+CAUSE: TARGET=[REG(0x01020007)] OP=[BIT,ON] BIT=[0]
+# Check KVREF_AND_VMEAS_MODE_STATUS_REG.KVREF_CAL_DONE
+EFFECT: TARGET=[REG(0x01020007)] OP=[BIT,ON] BIT=[16]
+}
+
+CAUSE_EFFECT{
+LABEL=[Check for OSC ok]
+# Setting LOCAL_FIR register value
+WATCH=[REG(0x0104000B)]
+# PERV.LOCAL_FIR.FIR_IN35 = 0
+CAUSE: TARGET=[REG(0x0104000B)] OP=[BIT,OFF] BIT=[35]
+# PERV.LOCAL_FIR.FIR_IN36 = 0
+CAUSE: TARGET=[REG(0x0104000B)] OP=[BIT,OFF] BIT=[36]
+# Check for OSC ok
+EFFECT: TARGET=[REG(0x0005001D)] OP=[BIT,OFF] BIT=[21]
+EFFECT: TARGET=[REG(0x0005001D)] OP=[BIT,ON] BIT=[28]
+# Osc error active
+EFFECT: TARGET=[REG(0x01020019)] OP=[BIT,OFF] BIT=[4]
+}
+
# =============================================================================
# Simics action for p9_sbe_npll_setup
# =============================================================================
OpenPOWER on IntegriCloud