summaryrefslogtreecommitdiffstats
path: root/import/chips/p9/procedures/hwp/perv/p9_perv_sbe_cmn.C
diff options
context:
space:
mode:
Diffstat (limited to 'import/chips/p9/procedures/hwp/perv/p9_perv_sbe_cmn.C')
-rw-r--r--import/chips/p9/procedures/hwp/perv/p9_perv_sbe_cmn.C173
1 files changed, 133 insertions, 40 deletions
diff --git a/import/chips/p9/procedures/hwp/perv/p9_perv_sbe_cmn.C b/import/chips/p9/procedures/hwp/perv/p9_perv_sbe_cmn.C
index 6fd5f0ec..f2917668 100644
--- a/import/chips/p9/procedures/hwp/perv/p9_perv_sbe_cmn.C
+++ b/import/chips/p9/procedures/hwp/perv/p9_perv_sbe_cmn.C
@@ -21,7 +21,7 @@
///
/// @brief Modules for scan 0 and array init
//------------------------------------------------------------------------------
-// *HWP HW Owner : Anusha Reddy Rangareddygari <anusrang@in.ibm.com>
+// *HWP HW Owner : Abhishek Agarwal <abagarw8@in.ibm.com>
// *HWP HW Backup Owner : Srinivas V Naga <srinivan@in.ibm.com>
// *HWP FW Owner : sunil kumar <skumar8j@in.ibm.com>
// *HWP Team : Perv
@@ -33,9 +33,9 @@
//## auto_generated
#include "p9_perv_sbe_cmn.H"
-#include "p9_perv_scom_addresses.H"
-#include "p9_perv_scom_addresses_fld.H"
-#include "p9_const_common.H"
+#include <p9_perv_scom_addresses.H>
+#include <p9_perv_scom_addresses_fld.H>
+#include <p9_const_common.H>
enum P9_PERV_SBE_CMN_Private_Constants
@@ -43,8 +43,8 @@ enum P9_PERV_SBE_CMN_Private_Constants
P9_OPCG_DONE_SCAN0_POLL_COUNT = 1500, // No. of times OPCG read to check OPCG_DONE
P9_OPCG_DONE_SCAN0_HW_NS_DELAY = 100000, // unit is nano seconds
P9_OPCG_DONE_SCAN0_SIM_CYCLE_DELAY = 100000, // unit is cycles
- P9_OPCG_DONE_ARRAYINIT_POLL_COUNT = 1500, // No. of times OPCG read to check OPCG_DONE
P9_OPCG_DONE_ARRAYINIT_HW_NS_DELAY = 100000, // unit is nano seconds
+ P9_OPCG_DONE_ARRAYINIT_POLL_COUNT = 1500, // No. of times OPCG read to check OPCG_DONE
P9_OPCG_DONE_ARRAYINIT_SIM_CYCLE_DELAY = 280000 // unit is cycles
};
@@ -91,16 +91,16 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
fapi2::buffer<uint64_t> l_data64;
int l_timeout = 0;
fapi2::buffer<uint64_t> l_data64_clk_region;
- FAPI_DBG("Entering ...");
+ FAPI_INF("Entering ...");
- FAPI_INF("Drop vital fence (moved to arrayinit from scan0 module)");
+ FAPI_DBG("Drop vital fence (moved to arrayinit from sacn0 module)");
//Setting CPLT_CTRL1 register value
l_data64.flush<0>();
//CPLT_CTRL1.TC_VITL_REGION_FENCE = 0
l_data64.setBit<PERV_1_CPLT_CTRL1_TC_VITL_REGION_FENCE>();
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CPLT_CTRL1_CLEAR, l_data64));
- FAPI_INF("Start pervasive region Clocks");
+ FAPI_DBG("Start pervasive regions Clocks");
l_data64_clk_region.flush<0>();
//Setting CLK_REGION register value
l_data64_clk_region.insertFromRight<PERV_1_CLK_REGION_CLOCK_CMD, PERV_1_CLK_REGION_CLOCK_CMD_LEN>
@@ -115,17 +115,17 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CLK_REGION,
l_data64_clk_region));
- FAPI_INF("Mask all LFIR's in Chiplet Global FIR");
+ FAPI_DBG("Mask all LFIR's in Chiplet Global FIR");
//Setting FIR_MASK register value
//FIR_MASK = 0xFFFFFFFFFFFFFFFF
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_FIR_MASK, 0xFFFFFFFFFFFFFFFF));
- FAPI_INF("Mask Special Attention");
+ FAPI_DBG("Mask Special Attention");
//Setting SPA_MASK register value
//SPA_MASK = 0xFFFFFFFFFFFFFFFF
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_SPA_MASK, 0xFFFFFFFFFFFFFFFF));
- FAPI_INF("Stop Pervasive region clocks");
+ FAPI_DBG("Stop Pervasive regions clocks");
l_data64_clk_region.flush<0>();
//Setting CLK_REGION register value
l_data64_clk_region.insertFromRight<PERV_1_CLK_REGION_CLOCK_CMD, PERV_1_CLK_REGION_CLOCK_CMD_LEN>
@@ -140,14 +140,14 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CLK_REGION,
l_data64_clk_region));
- FAPI_INF("Setup ABISTMUX_SEL");
+ FAPI_DBG("Setup ABISTMUX_SEL");
//Setting CPLT_CTRL0 register value
l_data64.flush<0>();
//CPLT_CTRL0.CTRL_CC_ABSTCLK_MUXSEL_DC = 1
l_data64.setBit<PERV_1_CPLT_CTRL0_CTRL_CC_ABSTCLK_MUXSEL_DC>();
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CPLT_CTRL0_OR, l_data64));
- FAPI_INF("setup ABIST modes , BIST REGIONS:%#018lX", i_regions);
+ FAPI_DBG("setup ABIST modes , BIST REGIONS:%#018lX", i_regions);
//Setting BIST register value
FAPI_TRY(fapi2::getScom(i_target_chiplets, PERV_BIST, l_data64));
l_data64.clearBit<0>(); //BIST.TC_BIST_START_TEST_DC = 0
@@ -178,9 +178,9 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
//BIST.BIST_UNIT10 = i_regions.getBit<15>()
l_data64.writeBit<14>(i_regions.getBit<15>());
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_BIST, l_data64));
- FAPI_INF("l_data64 value:%#018lX", l_data64);
+ FAPI_DBG("l_data64 value:%#018lX", l_data64);
- FAPI_INF("Setup all Clock Domains and Clock Types");
+ FAPI_DBG("Setup all Clock Domains and Clock Types");
//Setting CLK_REGION register value
FAPI_TRY(fapi2::getScom(i_target_chiplets, PERV_CLK_REGION,
l_data64_clk_region));
@@ -215,7 +215,7 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CLK_REGION,
l_data64_clk_region));
- FAPI_INF("Drop Region fences");
+ FAPI_DBG("Drop Region fences");
//Setting CPLT_CTRL1 register value
l_data64.flush<0>();
l_data64.writeBit<PERV_1_CPLT_CTRL1_TC_PERV_REGION_FENCE>
@@ -242,7 +242,7 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
l_data64.writeBit<PERV_1_CPLT_CTRL1_UNUSED_14B>(i_regions.getBit<15>());
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CPLT_CTRL1_CLEAR, l_data64));
- FAPI_INF("Setup: loopcount , OPCG engine start ABIST, run-N mode");
+ FAPI_DBG("Setup: loopcount , OPCG engine start ABIST, run-N mode");
//Setting OPCG_REG0 register value
FAPI_TRY(fapi2::getScom(i_target_chiplets, PERV_OPCG_REG0, l_data64));
l_data64.setBit<PERV_1_OPCG_REG0_RUNN_MODE>(); //OPCG_REG0.RUNN_MODE = 1
@@ -255,7 +255,7 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
i_start_abist_match_value.extractToRight<12, 12>(l_misr_a_value);
i_start_abist_match_value.extractToRight<24, 12>(l_misr_b_value);
- FAPI_INF("Setup IDLE count");
+ FAPI_DBG("Setup IDLE count");
//Setting OPCG_REG1 register value
FAPI_TRY(fapi2::getScom(i_target_chiplets, PERV_OPCG_REG1, l_data64));
l_data64.insertFromRight<PERV_1_OPCG_REG1_SCAN_COUNT, PERV_1_OPCG_REG1_SCAN_COUNT_LEN>
@@ -266,13 +266,13 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
(l_misr_b_value); //OPCG_REG1.MISR_B_VAL = l_misr_b_value
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_OPCG_REG1, l_data64));
- FAPI_INF("opcg go");
+ FAPI_DBG("opcg go");
//Setting OPCG_REG0 register value
FAPI_TRY(fapi2::getScom(i_target_chiplets, PERV_OPCG_REG0, l_data64));
l_data64.setBit<1>(); //OPCG_REG0.OPCG_GO = 1
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_OPCG_REG0, l_data64));
- FAPI_INF("Poll OPCG done bit to check for run-N completeness");
+ FAPI_DBG("Poll OPCG done bit to check for run-N completeness");
l_timeout = P9_OPCG_DONE_ARRAYINIT_POLL_COUNT;
//UNTIL CPLT_STAT0.CC_CTRL_OPCG_DONE_DC == 1
@@ -288,11 +288,12 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
break;
}
- fapi2::delay(P9_OPCG_DONE_ARRAYINIT_HW_NS_DELAY, P9_OPCG_DONE_ARRAYINIT_SIM_CYCLE_DELAY);
+ fapi2::delay(P9_OPCG_DONE_ARRAYINIT_HW_NS_DELAY,
+ P9_OPCG_DONE_ARRAYINIT_SIM_CYCLE_DELAY);
--l_timeout;
}
- FAPI_INF("Loop Count :%d", l_timeout);
+ FAPI_DBG("Loop Count :%d", l_timeout);
FAPI_ASSERT(l_timeout > 0,
fapi2::SBE_ARRAYINIT_POLL_THRESHOLD_ERR(),
@@ -300,7 +301,7 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
//oaim_poll_done
{
- FAPI_INF("OPCG done, clear Run-N mode");
+ FAPI_DBG("OPCG done, clear Run-N mode");
//Setting OPCG_REG0 register value
FAPI_TRY(fapi2::getScom(i_target_chiplets, PERV_OPCG_REG0, l_data64));
l_data64.clearBit<PERV_1_OPCG_REG0_RUNN_MODE>(); //OPCG_REG0.RUNN_MODE = 0
@@ -308,27 +309,118 @@ fapi2::ReturnCode p9_perv_sbe_cmn_array_init_module(const
l_data64.clearBit<PERV_1_OPCG_REG0_LOOP_COUNT, PERV_1_OPCG_REG0_LOOP_COUNT_LEN>(); //OPCG_REG0.LOOP_COUNT = 0
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_OPCG_REG0, l_data64));
- FAPI_INF("clear all clock REGIONS and type");
+ FAPI_DBG("clear all clock REGIONS and type");
//Setting CLK_REGION register value
//CLK_REGION = 0
l_data64_clk_region = 0; //using variable to keep register data
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CLK_REGION,
l_data64_clk_region));
- FAPI_INF("clear ABISTCLK_MUXSEL");
+ FAPI_DBG("clear ABISTCLK_MUXSEL");
//Setting CPLT_CTRL0 register value
l_data64.flush<0>();
//CPLT_CTRL0.CTRL_CC_ABSTCLK_MUXSEL_DC = 0
l_data64.setBit<PERV_1_CPLT_CTRL0_CTRL_CC_ABSTCLK_MUXSEL_DC>();
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CPLT_CTRL0_CLEAR, l_data64));
- FAPI_INF("clear BIST REGISTER");
+ FAPI_DBG("clear BIST REGISTER");
//Setting BIST register value
//BIST = 0
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_BIST, 0));
}
- FAPI_DBG("Exiting ...");
+ FAPI_INF("Exiting ...");
+
+fapi_try_exit:
+ return fapi2::current_err;
+
+}
+
+/// @brief Region value settings
+///
+/// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target
+/// @param[in] i_regions_value regions except vital and pll
+/// @param[out] o_regions_value regions value
+/// @return FAPI2_RC_SUCCESS if success, else error code.
+fapi2::ReturnCode p9_perv_sbe_cmn_regions_setup_16(const
+ fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet,
+ const fapi2::buffer<uint16_t> i_regions_value,
+ fapi2::buffer<uint16_t>& o_regions_value)
+{
+ fapi2::buffer<uint32_t> l_read_attr = 0;
+ fapi2::buffer<uint32_t> l_read_attr_invert = 0;
+ fapi2::buffer<uint32_t> l_read_attr_shift1_right = 0;
+ FAPI_INF("Entering ...");
+
+ FAPI_DBG("Reading ATTR_PG");
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_read_attr));
+ FAPI_DBG("ATTR_PG Value : %#018lX", l_read_attr);
+
+ FAPI_DBG("i_regions_value input from calling function: %#018lX",
+ i_regions_value);
+
+ if ( l_read_attr == 0x0 )
+ {
+ o_regions_value = i_regions_value;
+ }
+ else
+ {
+ l_read_attr_invert = l_read_attr.invert();
+ FAPI_DBG("ATTR_PG inverted: %#018lX", l_read_attr_invert);
+ l_read_attr_shift1_right = (l_read_attr_invert >> 1);
+ FAPI_DBG("ATTR_PG inverted and shifted right by 1 %#018lX",
+ l_read_attr_shift1_right);
+
+ o_regions_value = (i_regions_value & l_read_attr_shift1_right);
+ }
+
+ FAPI_INF("Exiting ...");
+
+fapi_try_exit:
+ return fapi2::current_err;
+
+}
+
+/// @brief Region value settings
+///
+/// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target
+/// @param[in] i_regions_value regions except vital and pll
+/// @param[out] o_regions_value Regions value
+/// @return FAPI2_RC_SUCCESS if success, else error code.
+fapi2::ReturnCode p9_perv_sbe_cmn_regions_setup_64(const
+ fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet,
+ const fapi2::buffer<uint16_t> i_regions_value,
+ fapi2::buffer<uint64_t>& o_regions_value)
+{
+ fapi2::buffer<uint32_t> l_read_attr = 0;
+ fapi2::buffer<uint32_t> l_read_attr_invert = 0;
+ fapi2::buffer<uint32_t> l_read_attr_shift1_right = 0;
+ fapi2::buffer<uint64_t> l_temp = 0;
+ FAPI_INF("Entering ...");
+
+ FAPI_DBG("Reading ATTR_PG");
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_read_attr));
+ FAPI_DBG("ATTR_PG Value : %#018lX", l_read_attr);
+
+ FAPI_DBG("i_regions_value input from calling function: %#018lX",
+ i_regions_value);
+
+ if ( l_read_attr == 0x0 )
+ {
+ o_regions_value = (i_regions_value | l_temp);
+ }
+ else
+ {
+ l_read_attr_invert = l_read_attr.invert();
+ FAPI_DBG("ATTR_PG inverted: %#018lX", l_read_attr_invert);
+ l_read_attr_shift1_right = (l_read_attr_invert >> 1);
+ FAPI_DBG("ATTR_PG inverted and shifted right by 1 %#018lX",
+ l_read_attr_shift1_right);
+
+ o_regions_value = (i_regions_value & l_read_attr_shift1_right);
+ }
+
+ FAPI_INF("Exiting ...");
fapi_try_exit:
return fapi2::current_err;
@@ -358,16 +450,16 @@ fapi2::ReturnCode p9_perv_sbe_cmn_scan0_module(const
{
fapi2::buffer<uint64_t> l_data64;
int l_timeout = 0;
- FAPI_DBG("Entering ...");
+ FAPI_INF("Entering ...");
- FAPI_INF("raise Vital clock region fence");
+ FAPI_DBG("raise Vital clock region fence");
//Setting CPLT_CTRL1 register value
l_data64.flush<0>();
//CPLT_CTRL1.TC_VITL_REGION_FENCE = 1
l_data64.setBit<PERV_1_CPLT_CTRL1_TC_VITL_REGION_FENCE>();
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CPLT_CTRL1_OR, l_data64));
- FAPI_INF("Raise region fences for scanned regions");
+ FAPI_DBG("Raise region fences for scanned regions");
//Setting CPLT_CTRL1 register value
l_data64.flush<0>();
//CPLT_CTRL1.TC_PERV_REGION_FENCE = 1
@@ -385,7 +477,7 @@ fapi2::ReturnCode p9_perv_sbe_cmn_scan0_module(const
l_data64.setBit<PERV_1_CPLT_CTRL1_UNUSED_14B>(); //CPLT_CTRL1.UNUSED_14B = 1
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CPLT_CTRL1_OR, l_data64));
- FAPI_INF("Setup all Clock Domains and Clock Types");
+ FAPI_DBG("Setup all Clock Domains and Clock Types");
//Setting CLK_REGION register value
FAPI_TRY(fapi2::getScom(i_target_chiplets, PERV_CLK_REGION, l_data64));
//CLK_REGION.CLOCK_REGION_PERV = i_regions.getBit<5>()
@@ -418,7 +510,7 @@ fapi2::ReturnCode p9_perv_sbe_cmn_scan0_module(const
l_data64.setBit<PERV_1_CLK_REGION_SEL_THOLD_ARY>();
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CLK_REGION, l_data64));
- FAPI_INF("Write scan select register");
+ FAPI_DBG("Write scan select register");
//Setting SCAN_REGION_TYPE register value
l_data64.flush<0>(); //SCAN_REGION_TYPE = 0
//SCAN_REGION_TYPE.SCAN_REGION_PERV = i_regions.getBit<5>()
@@ -469,19 +561,19 @@ fapi2::ReturnCode p9_perv_sbe_cmn_scan0_module(const
l_data64.writeBit<59>(i_scan_types.getBit<15>());
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_SCAN_REGION_TYPE, l_data64));
- FAPI_INF("set OPCG_REG0 register bit 0='0'");
+ FAPI_DBG("set OPCG_REG0 register bit 0='0'");
//Setting OPCG_REG0 register value
FAPI_TRY(fapi2::getScom(i_target_chiplets, PERV_OPCG_REG0, l_data64));
l_data64.clearBit<PERV_1_OPCG_REG0_RUNN_MODE>(); //OPCG_REG0.RUNN_MODE = 0
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_OPCG_REG0, l_data64));
- FAPI_INF("trigger Scan0");
+ FAPI_DBG("trigger Scan0");
//Setting OPCG_REG0 register value
FAPI_TRY(fapi2::getScom(i_target_chiplets, PERV_OPCG_REG0, l_data64));
l_data64.setBit<PERV_1_OPCG_REG0_RUN_SCAN0>(); //OPCG_REG0.RUN_SCAN0 = 1
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_OPCG_REG0, l_data64));
- FAPI_INF("Poll OPCG done bit to check for run-N completeness");
+ FAPI_DBG("Poll OPCG done bit to check for run-N completeness");
l_timeout = P9_OPCG_DONE_SCAN0_POLL_COUNT;
//UNTIL CPLT_STAT0.CC_CTRL_OPCG_DONE_DC == 1
@@ -497,11 +589,12 @@ fapi2::ReturnCode p9_perv_sbe_cmn_scan0_module(const
break;
}
- fapi2::delay(P9_OPCG_DONE_SCAN0_HW_NS_DELAY, P9_OPCG_DONE_SCAN0_SIM_CYCLE_DELAY);
+ fapi2::delay(P9_OPCG_DONE_SCAN0_HW_NS_DELAY,
+ P9_OPCG_DONE_SCAN0_SIM_CYCLE_DELAY);
--l_timeout;
}
- FAPI_INF("Loop Count :%d", l_timeout);
+ FAPI_DBG("Loop Count :%d", l_timeout);
FAPI_ASSERT(l_timeout > 0,
fapi2::SBE_SCAN0_DONE_POLL_THRESHOLD_ERR(),
@@ -509,18 +602,18 @@ fapi2::ReturnCode p9_perv_sbe_cmn_scan0_module(const
//os0m_poll_done
{
- FAPI_INF("clear all clock REGIONS and type");
+ FAPI_DBG("clear all clock REGIONS and type");
//Setting CLK_REGION register value
//CLK_REGION = 0
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_CLK_REGION, 0));
- FAPI_INF("Clear Scan Select Register");
+ FAPI_DBG("Clear Scan Select Register");
//Setting SCAN_REGION_TYPE register value
//SCAN_REGION_TYPE = 0
FAPI_TRY(fapi2::putScom(i_target_chiplets, PERV_SCAN_REGION_TYPE, 0));
}
- FAPI_DBG("Exiting ...");
+ FAPI_INF("Exiting ...");
fapi_try_exit:
return fapi2::current_err;
OpenPOWER on IntegriCloud