diff options
Diffstat (limited to 'import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C')
-rw-r--r-- | import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C | 652 |
1 files changed, 269 insertions, 383 deletions
diff --git a/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C b/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C index 212e651d..e96b0a3a 100644 --- a/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C +++ b/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C @@ -26,6 +26,7 @@ /// 4) Similar way, Reset sys.config and OPCG setting for Nest and MC chiplet in sync mode /// /// Done +/// //------------------------------------------------------------------------------ // *HWP HW Owner : Abhishek Agarwal <abagarw8@in.ibm.com> // *HWP HW Backup Owner : Srinivas V. Naga <srinivan@in.ibm.com> @@ -38,6 +39,8 @@ //## auto_generated #include "p9_sbe_chiplet_reset.H" +//## auto_generated +#include "p9_const_common.H" #include <p9_perv_scom_addresses.H> #include <p9_perv_scom_addresses_fld.H> @@ -45,14 +48,17 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_all_cplt_hang_cnt_setup( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt); + const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt, + const uint8_t i_reg0_val = 0xff, + const uint8_t i_reg1_val = 0xff, + const uint8_t i_reg2_val = 0xff, + const uint8_t i_reg3_val = 0xff, + const uint8_t i_reg4_val = 0xff, + const uint8_t i_reg5_val = 0xff); static fapi2::ReturnCode p9_sbe_chiplet_reset_all_cplt_net_cntl_setup( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt); -static fapi2::ReturnCode p9_sbe_chiplet_reset_cache_hang_cnt_setup( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_ep); - static fapi2::ReturnCode p9_sbe_chiplet_reset_clk_mux_MC( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, const fapi2::buffer<uint32_t> i_clk_mux_value); @@ -72,17 +78,12 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_clk_mux_xbus( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, const fapi2::buffer<uint32_t> i_clk_mux_value); -static fapi2::ReturnCode p9_sbe_chiplet_reset_core_hang_cnt_setup( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_ec); - -static fapi2::ReturnCode p9_sbe_chiplet_reset_disable_listen_to_sync( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); - static fapi2::ReturnCode p9_sbe_chiplet_reset_div_clk_bypass( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); static fapi2::ReturnCode p9_sbe_chiplet_reset_enable_listen_to_sync( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); + const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, + const bool i_enable); static fapi2::ReturnCode p9_sbe_chiplet_reset_enable_pll( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); @@ -91,23 +92,16 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_mc_net_ctrl_clk_async_reset( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); static fapi2::ReturnCode p9_sbe_chiplet_reset_mc_setup(const - fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); - -static fapi2::ReturnCode p9_sbe_chiplet_reset_mc_setup_MC( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); + fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, + const uint64_t i_mc_grp1_val, + const uint64_t i_mc_grp2_val = 0x0); static fapi2::ReturnCode p9_sbe_chiplet_reset_mc_setup_cache( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); -static fapi2::ReturnCode p9_sbe_chiplet_reset_mc_setup_core( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); - static fapi2::ReturnCode p9_sbe_chiplet_reset_nest_hang_cnt_setup( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt); -static fapi2::ReturnCode p9_sbe_chiplet_reset_nest_mc_call( - const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_cplt); - static fapi2::ReturnCode p9_sbe_chiplet_reset_net_ctrl_lvltrans_fence_pcb_ep_reset( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); @@ -124,6 +118,9 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_scan0_call( static fapi2::ReturnCode p9_sbe_chiplet_reset_setup(const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet); +static fapi2::ReturnCode p9_sbe_chiplet_reset_setup_iop_logic( + const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chip); + fapi2::ReturnCode p9_sbe_chiplet_reset(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip) { @@ -131,14 +128,24 @@ fapi2::ReturnCode p9_sbe_chiplet_reset(const //uint8_t l_mc_sync_mode = 0; FAPI_INF("Entering ..."); - // Configuring chiplet multicasting registers.. - FAPI_TRY(p9_sbe_chiplet_reset_nest_mc_call(i_target_chip)); + for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> + (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_ALL_NEST | + fapi2::TARGET_FILTER_ALL_OBUS | fapi2::TARGET_FILTER_ALL_PCI | + fapi2::TARGET_FILTER_XBUS), fapi2::TARGET_STATE_FUNCTIONAL)) + { + // Configuring chiplet multicasting registers. + FAPI_DBG("Configuring multicasting registers for Nest,Xb,Obus,pcie chiplets" ); + FAPI_TRY(p9_sbe_chiplet_reset_mc_setup(l_target_cplt, + p9SbeChipletReset::MCGR0_CNFG_SETTINGS)); + } for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> (fapi2::TARGET_FILTER_ALL_MC, fapi2::TARGET_STATE_FUNCTIONAL)) { FAPI_DBG("Configuring multicast registers for MC01,MC23"); - FAPI_TRY(p9_sbe_chiplet_reset_mc_setup_MC(l_target_cplt)); + FAPI_TRY(p9_sbe_chiplet_reset_mc_setup(l_target_cplt, + p9SbeChipletReset::MCGR0_CNFG_SETTINGS, + p9SbeChipletReset::MCGR2_CNFG_SETTINGS)); } for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> @@ -154,7 +161,9 @@ fapi2::ReturnCode p9_sbe_chiplet_reset(const { // Configuring chiplet multicasting registers.. FAPI_DBG("Configuring core chiplet multicasting registers"); - FAPI_TRY(p9_sbe_chiplet_reset_mc_setup_core(l_target_cplt)); + FAPI_TRY(p9_sbe_chiplet_reset_mc_setup(l_target_cplt, + p9SbeChipletReset::MCGR0_CNFG_SETTINGS, + p9SbeChipletReset::MCGR1_CNFG_SETTINGS)); } for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> @@ -171,12 +180,22 @@ fapi2::ReturnCode p9_sbe_chiplet_reset(const for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_ALL_MC | - fapi2::TARGET_FILTER_ALL_OBUS | fapi2::TARGET_FILTER_ALL_PCI | fapi2::TARGET_FILTER_XBUS), fapi2::TARGET_STATE_FUNCTIONAL)) { // Setting up hang pulse counter for register 0 and register 6 - FAPI_DBG("Setup hang pulse counter for Mc,Xbus,Obus,Pcie"); - FAPI_TRY(p9_sbe_chiplet_reset_all_cplt_hang_cnt_setup(l_target_cplt)); + FAPI_DBG("Setup hang pulse counter for Mc,Pcie"); + FAPI_TRY(p9_sbe_chiplet_reset_all_cplt_hang_cnt_setup(l_target_cplt, + p9SbeChipletReset::HANG_PULSE_0X10)); + } + + for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> + (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_XBUS | + fapi2::TARGET_FILTER_ALL_OBUS), fapi2::TARGET_STATE_FUNCTIONAL)) + { + // Setting up hang pulse counter for register 0 and register 6 + FAPI_DBG("Setup hang pulse counter for Xbus,Obus"); + FAPI_TRY(p9_sbe_chiplet_reset_all_cplt_hang_cnt_setup(l_target_cplt, + p9SbeChipletReset::HANG_PULSE_0X10, p9SbeChipletReset::HANG_PULSE_0X04)); } for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> @@ -192,7 +211,9 @@ fapi2::ReturnCode p9_sbe_chiplet_reset(const { // Setting up hang pulse counter for register 5 FAPI_DBG("Setup hang pulse counter for core chiplet"); - FAPI_TRY(p9_sbe_chiplet_reset_core_hang_cnt_setup(l_target_cplt)); + FAPI_TRY(p9_sbe_chiplet_reset_all_cplt_hang_cnt_setup(l_target_cplt, + p9SbeChipletReset::HANG_PULSE_0X10, p9SbeChipletReset::HANG_PULSE_0X1A, 0xff, + 0xff, 0xff, p9SbeChipletReset::HANG_PULSE_0X06)); } for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> @@ -200,7 +221,10 @@ fapi2::ReturnCode p9_sbe_chiplet_reset(const { // Setting up hang pulse counter for register 5 FAPI_DBG("Setup hang pulse counter for cache chiplet"); - FAPI_TRY(p9_sbe_chiplet_reset_cache_hang_cnt_setup(l_target_cplt)); + FAPI_TRY(p9_sbe_chiplet_reset_all_cplt_hang_cnt_setup(l_target_cplt, + p9SbeChipletReset::HANG_PULSE_0X10, p9SbeChipletReset::HANG_PULSE_0X01, + p9SbeChipletReset::HANG_PULSE_0X01, p9SbeChipletReset::HANG_PULSE_0X04, + p9SbeChipletReset::HANG_PULSE_0X00, p9SbeChipletReset::HANG_PULSE_0X06)); } FAPI_DBG("Clock mux settings"); @@ -256,13 +280,6 @@ fapi2::ReturnCode p9_sbe_chiplet_reset(const } for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> - (fapi2::TARGET_FILTER_ALL_PCI, fapi2::TARGET_STATE_FUNCTIONAL)) - { - FAPI_DBG("Setup IOP logic for PCIe chiplet"); - FAPI_TRY(p9_sbe_chiplet_reset_pcie_iop_logic_setup(l_target_cplt)); - } - - for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_ALL_MC | fapi2::TARGET_FILTER_ALL_NEST | fapi2::TARGET_FILTER_ALL_OBUS | fapi2::TARGET_FILTER_ALL_PCI | fapi2::TARGET_FILTER_XBUS), @@ -278,14 +295,23 @@ fapi2::ReturnCode p9_sbe_chiplet_reset(const fapi2::TARGET_FILTER_XBUS), fapi2::TARGET_STATE_FUNCTIONAL)) { FAPI_DBG("Enable listen to sync for NEST,OB,XB,PCIe"); - FAPI_TRY(p9_sbe_chiplet_reset_enable_listen_to_sync(l_target_cplt)); + FAPI_TRY(p9_sbe_chiplet_reset_enable_listen_to_sync(l_target_cplt, true)); } for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> - (fapi2::TARGET_FILTER_ALL_MC, fapi2::TARGET_STATE_FUNCTIONAL)) + (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_ALL_MC | + fapi2::TARGET_FILTER_ALL_OBUS | fapi2::TARGET_FILTER_ALL_PCI | + fapi2::TARGET_FILTER_XBUS), fapi2::TARGET_STATE_FUNCTIONAL)) { FAPI_DBG("Disable listen_to_sync for Nest,MC,XB,OB,PCIe"); - FAPI_TRY(p9_sbe_chiplet_reset_disable_listen_to_sync(l_target_cplt)); + FAPI_TRY(p9_sbe_chiplet_reset_enable_listen_to_sync(l_target_cplt, false)); + } + + for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> + (fapi2::TARGET_FILTER_ALL_PCI, fapi2::TARGET_STATE_FUNCTIONAL)) + { + FAPI_DBG("Setup IOP Logic for PCIe"); + FAPI_TRY(p9_sbe_chiplet_reset_setup_iop_logic(l_target_cplt)); } for (auto l_target_cplt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV> @@ -314,61 +340,93 @@ fapi_try_exit: } -/// @brief Setup IOP logic for PCIe chiplet -/// -/// @param[in] i_target_chip Reference to TARGET_TYPE_PERV target -/// @return FAPI2_RC_SUCCESS if success, else error code. -fapi2::ReturnCode p9_sbe_chiplet_reset_pcie_iop_logic_setup( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chip) -{ - fapi2::buffer<uint64_t> l_data64_cplt_conf1; - FAPI_INF("Entering ..."); - - //Setting CPLT_CONF1 register value - l_data64_cplt_conf1.flush<0>(); - l_data64_cplt_conf1.setBit<30>(); //CPLT_CONF1.TC_IOP_HSSPORWREN = 0b1 - FAPI_TRY(fapi2::putScom(i_target_chip, PERV_CPLT_CONF1_OR, - l_data64_cplt_conf1)); - - fapi2::delay(p9SbeChipletReset::HW_NS_DELAY, - p9SbeChipletReset::SIM_CYCLE_DELAY); - - //Setting CPLT_CONF1 register value - l_data64_cplt_conf1.flush<0>(); - l_data64_cplt_conf1.setBit<28>(); //CPLT_CONF1.TC_IOP_SYS_RESET_PCS = 0b1 - l_data64_cplt_conf1.setBit<29>(); //CPLT_CONF1.TC_IOP_SYS_RESET_PMA = 0b1 - FAPI_TRY(fapi2::putScom(i_target_chip, PERV_CPLT_CONF1_OR, - l_data64_cplt_conf1)); - - FAPI_INF("Exiting ..."); - -fapi_try_exit: - return fapi2::current_err; - -} - /// @brief Setting up hang pulse counter for all parital good chiplet except for Tp,nest, core and cache /// /// @param[in] i_target_cplt Reference to TARGET_TYPE_PERV target +/// @param[in] i_reg0_val value for HANG_PULSE_0_REG +/// @param[in] i_reg1_val value for HANG_PULSE_1_REG +/// @param[in] i_reg2_val value for HANG_PULSE_2_REG +/// @param[in] i_reg3_val value for HANG_PULSE_3_REG +/// @param[in] i_reg4_val value for HANG_PULSE_4_REG +/// @param[in] i_reg5_val value for HANG_PULSE_5_REG /// @return FAPI2_RC_SUCCESS if success, else error code. static fapi2::ReturnCode p9_sbe_chiplet_reset_all_cplt_hang_cnt_setup( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt) + const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt, + const uint8_t i_reg0_val, + const uint8_t i_reg1_val, + const uint8_t i_reg2_val, + const uint8_t i_reg3_val, + const uint8_t i_reg4_val, + const uint8_t i_reg5_val) { + uint32_t l_attr_pg = 0; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_cplt, l_attr_pg)); if ( l_attr_pg != 0xFFFF ) { //Setting HANG_PULSE_0_REG register value (Setting all fields) - //HANG_PULSE_0_REG.HANG_PULSE_REG_0 = p9SbeChipletReset::HANG_PULSE_0X10 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X10); - l_data64.clearBit<6>(); //HANG_PULSE_0_REG.SUPPRESS_HANG_0 = 0 - FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_0_REG, l_data64)); + if (i_reg0_val != 0xff) + { + //HANG_PULSE_0_REG.HANG_PULSE_REG_0 = (i_reg0_val != 0xff) ? i_reg0_val + l_data64.insertFromRight<0, 6>(i_reg0_val); + //HANG_PULSE_0_REG.SUPPRESS_HANG_0 = (i_reg0_val != 0xff) ? 0 + l_data64.clearBit<6>(); + FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_0_REG, l_data64)); + } + + //Setting HANG_PULSE_1_REG register value (Setting all fields) + if (i_reg1_val != 0xff) + { + //HANG_PULSE_1_REG.HANG_PULSE_REG_1 = (i_reg1_val != 0xff) ? i_reg1_val + l_data64.insertFromRight<0, 6>(i_reg1_val); + //HANG_PULSE_1_REG.SUPPRESS_HANG_1 = (i_reg1_val != 0xff) ? 0 + l_data64.clearBit<6>(); + FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_1_REG, l_data64)); + } + + //Setting HANG_PULSE_2_REG register value (Setting all fields) + if (i_reg2_val != 0xff) + { + //HANG_PULSE_2_REG.HANG_PULSE_REG_2 = (i_reg2_val != 0xff) ? i_reg2_val + l_data64.insertFromRight<0, 6>(i_reg2_val); + //HANG_PULSE_2_REG.SUPPRESS_HANG_2 = (i_reg2_val != 0xff) ? 0 + l_data64.clearBit<6>(); + FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_2_REG, l_data64)); + } + + //Setting HANG_PULSE_3_REG register value (Setting all fields) + if (i_reg3_val != 0xff) + { + //HANG_PULSE_3_REG.HANG_PULSE_REG_3 = (i_reg3_val != 0xff) ? i_reg3_val + l_data64.insertFromRight<0, 6>(i_reg3_val); + //HANG_PULSE_3_REG.SUPPRESS_HANG_3 = (i_reg3_val != 0xff) ? 0 + l_data64.clearBit<6>(); + FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_3_REG, l_data64)); + } + + //Setting HANG_PULSE_4_REG register value (Setting all fields) + if (i_reg4_val != 0xff) + { + //HANG_PULSE_4_REG.HANG_PULSE_REG_4 = (i_reg4_val != 0xff) ? i_reg4_val + l_data64.insertFromRight<0, 6>(i_reg4_val); + //HANG_PULSE_4_REG.SUPPRESS_HANG_4 = (i_reg4_val != 0xff) ? 0 + l_data64.clearBit<6>(); + FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_4_REG, l_data64)); + } + + //Setting HANG_PULSE_5_REG register value (Setting all fields) + if (i_reg5_val != 0xff) + { + //HANG_PULSE_5_REG.HANG_PULSE_REG_5 = (i_reg5_val != 0xff) ? i_reg5_val + l_data64.insertFromRight<0, 6>(i_reg5_val); + //HANG_PULSE_5_REG.SUPPRESS_HANG_5 = (i_reg5_val != 0xff) ? 0 + l_data64.clearBit<6>(); + FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_5_REG, l_data64)); + } } FAPI_INF("Exiting ..."); @@ -403,62 +461,6 @@ fapi_try_exit: } -/// @brief Setup Cache hang pulse counter configuration... -/// -/// @param[in] i_target_ep Reference to TARGET_TYPE_PERV target -/// @return FAPI2_RC_SUCCESS if success, else error code. -static fapi2::ReturnCode p9_sbe_chiplet_reset_cache_hang_cnt_setup( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_ep) -{ - fapi2::buffer<uint64_t> l_data64; - FAPI_INF("Entering ..."); - - uint32_t l_attr_pg; - - FAPI_DBG("Reading ATTR_PG"); - FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_ep, l_attr_pg)); - - if ( l_attr_pg != 0xFFFF ) - { - //Setting HANG_PULSE_0_REG register value (Setting all fields) - //HANG_PULSE_0_REG.HANG_PULSE_REG_0 = p9SbeChipletReset::HANG_PULSE_0X10 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X10); - l_data64.clearBit<6>(); //HANG_PULSE_0_REG.SUPPRESS_HANG_0 = 0 - FAPI_TRY(fapi2::putScom(i_target_ep, PERV_HANG_PULSE_0_REG, l_data64)); - //Setting HANG_PULSE_1_REG register value (Setting all fields) - //HANG_PULSE_1_REG.HANG_PULSE_REG_1 = p9SbeChipletReset::HANG_PULSE_0X01 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X01); - l_data64.clearBit<6>(); //HANG_PULSE_1_REG.SUPPRESS_HANG_1 = 0 - FAPI_TRY(fapi2::putScom(i_target_ep, PERV_HANG_PULSE_1_REG, l_data64)); - //Setting HANG_PULSE_2_REG register value (Setting all fields) - //HANG_PULSE_2_REG.HANG_PULSE_REG_2 = p9SbeChipletReset::HANG_PULSE_0X01 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X01); - l_data64.clearBit<6>(); //HANG_PULSE_2_REG.SUPPRESS_HANG_2 = 0 - FAPI_TRY(fapi2::putScom(i_target_ep, PERV_HANG_PULSE_2_REG, l_data64)); - //Setting HANG_PULSE_3_REG register value (Setting all fields) - //HANG_PULSE_3_REG.HANG_PULSE_REG_3 = p9SbeChipletReset::HANG_PULSE_0X04 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X04); - l_data64.clearBit<6>(); //HANG_PULSE_3_REG.SUPPRESS_HANG_3 = 0 - FAPI_TRY(fapi2::putScom(i_target_ep, PERV_HANG_PULSE_3_REG, l_data64)); - //Setting HANG_PULSE_4_REG register value (Setting all fields) - //HANG_PULSE_4_REG.HANG_PULSE_REG_4 = p9SbeChipletReset::HANG_PULSE_0X00 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X00); - l_data64.clearBit<6>(); //HANG_PULSE_4_REG.SUPPRESS_HANG_4 = 0 - FAPI_TRY(fapi2::putScom(i_target_ep, PERV_HANG_PULSE_4_REG, l_data64)); - //Setting HANG_PULSE_5_REG register value (Setting all fields) - //HANG_PULSE_5_REG.HANG_PULSE_REG_5 = p9SbeChipletReset::HANG_PULSE_0X06 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X06); - l_data64.clearBit<6>(); //HANG_PULSE_5_REG.SUPPRESS_HANG_5 = 0 - FAPI_TRY(fapi2::putScom(i_target_ep, PERV_HANG_PULSE_5_REG, l_data64)); - } - - FAPI_INF("Exiting ..."); - -fapi_try_exit: - return fapi2::current_err; - -} - /// @brief clock mux settings for Mc chiplet /// /// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target @@ -468,11 +470,10 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_clk_mux_MC( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, const fapi2::buffer<uint32_t> i_clk_mux_value) { + uint32_t l_attr_pg = 0; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); @@ -626,12 +627,11 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_clk_mux_pcie( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, const fapi2::buffer<uint32_t> i_clk_mux_value) { + uint32_t l_attr_pg = 0; + uint8_t l_attr_unit_pos = 0; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - uint8_t l_attr_unit_pos; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); @@ -640,25 +640,22 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_clk_mux_pcie( FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_UNIT_POS, i_target_chiplet, l_attr_unit_pos)); - if ( l_attr_unit_pos == 0x0D ) + if ( l_attr_unit_pos != 0x0E ) { //Setting NET_CTRL1 register value FAPI_TRY(fapi2::getScom(i_target_chiplet, PERV_NET_CTRL1, l_data64)); - //NET_CTRL1.PLL_CLKIN_SEL = i_clk_mux_value.getBit<5>() - l_data64.writeBit<PERV_1_NET_CTRL1_PLL_CLKIN_SEL>(i_clk_mux_value.getBit<5>()); - l_data64.writeBit<PERV_1_NET_CTRL1_REFCLK_CLKMUX0_SEL> - (i_clk_mux_value.getBit<10>()); //NET_CTRL1.REFCLK_CLKMUX0_SEL = i_clk_mux_value.getBit<10>() - l_data64.writeBit<PERV_1_NET_CTRL1_REFCLK_CLKMUX1_SEL> - (i_clk_mux_value.getBit<11>()); //NET_CTRL1.REFCLK_CLKMUX1_SEL = i_clk_mux_value.getBit<11>() - FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_NET_CTRL1, l_data64)); - } + l_data64.writeBit<PERV_1_NET_CTRL1_PLL_CLKIN_SEL>((l_attr_unit_pos == 0x0D) ? + i_clk_mux_value.getBit<5>() : + i_clk_mux_value.getBit<4>()); //NET_CTRL1.PLL_CLKIN_SEL = (l_attr_unit_pos == 0x0D)? i_clk_mux_value.getBit<5>() : i_clk_mux_value.getBit<4>() + + if (l_attr_unit_pos == 0x0D) + { + l_data64.writeBit<PERV_1_NET_CTRL1_REFCLK_CLKMUX0_SEL> + (i_clk_mux_value.getBit<10>()); //NET_CTRL1.REFCLK_CLKMUX0_SEL = (l_attr_unit_pos == 0x0D)? i_clk_mux_value.getBit<10>() + l_data64.writeBit<PERV_1_NET_CTRL1_REFCLK_CLKMUX1_SEL> + (i_clk_mux_value.getBit<11>()); //NET_CTRL1.REFCLK_CLKMUX1_SEL = (l_attr_unit_pos == 0x0D)? i_clk_mux_value.getBit<11>() + } - if ( l_attr_unit_pos == 0x0F ) - { - //Setting NET_CTRL1 register value - FAPI_TRY(fapi2::getScom(i_target_chiplet, PERV_NET_CTRL1, l_data64)); - //NET_CTRL1.PLL_CLKIN_SEL = i_clk_mux_value.getBit<4>() - l_data64.writeBit<PERV_1_NET_CTRL1_PLL_CLKIN_SEL>(i_clk_mux_value.getBit<4>()); FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_NET_CTRL1, l_data64)); } } @@ -680,20 +677,19 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_clk_mux_xbus( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, const fapi2::buffer<uint32_t> i_clk_mux_value) { + uint32_t l_attr_pg = 0; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); - if ( l_attr_pg != 0xFFFF ) + //Setting NET_CTRL1 register value + if (l_attr_pg != 0xFFFF) { - //Setting NET_CTRL1 register value FAPI_TRY(fapi2::getScom(i_target_chiplet, PERV_NET_CTRL1, l_data64)); - //NET_CTRL1.PLL_CLKIN_SEL = i_clk_mux_value.getBit<8>() - l_data64.writeBit<PERV_1_NET_CTRL1_PLL_CLKIN_SEL>(i_clk_mux_value.getBit<8>()); + l_data64.writeBit<PERV_1_NET_CTRL1_PLL_CLKIN_SEL> + (i_clk_mux_value.getBit<8>()); //NET_CTRL1.PLL_CLKIN_SEL = (l_attr_pg != 0xFFFF) ? i_clk_mux_value.getBit<8>() FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_NET_CTRL1, l_data64)); } @@ -704,76 +700,6 @@ fapi_try_exit: } -/// @brief Setup core hang pulse counter configuration... -/// -/// @param[in] i_target_ec Reference to TARGET_TYPE_PERV target -/// @return FAPI2_RC_SUCCESS if success, else error code. -static fapi2::ReturnCode p9_sbe_chiplet_reset_core_hang_cnt_setup( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_ec) -{ - fapi2::buffer<uint64_t> l_data64; - FAPI_INF("Entering ..."); - - uint32_t l_attr_pg; - - FAPI_DBG("Reading ATTR_PG"); - FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_ec, l_attr_pg)); - - if ( l_attr_pg != 0xFFFF ) - { - //Setting HANG_PULSE_0_REG register value (Setting all fields) - //HANG_PULSE_0_REG.HANG_PULSE_REG_0 = p9SbeChipletReset::HANG_PULSE_0X10 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X10); - l_data64.clearBit<6>(); //HANG_PULSE_0_REG.SUPPRESS_HANG_0 = 0 - FAPI_TRY(fapi2::putScom(i_target_ec, PERV_HANG_PULSE_0_REG, l_data64)); - //Setting HANG_PULSE_1_REG register value (Setting all fields) - //HANG_PULSE_1_REG.HANG_PULSE_REG_1 = p9SbeChipletReset::HANG_PULSE_0X1A - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X1A); - l_data64.clearBit<6>(); //HANG_PULSE_1_REG.SUPPRESS_HANG_1 = 0 - FAPI_TRY(fapi2::putScom(i_target_ec, PERV_HANG_PULSE_1_REG, l_data64)); - //Setting HANG_PULSE_5_REG register value (Setting all fields) - //HANG_PULSE_5_REG.HANG_PULSE_REG_5 = p9SbeChipletReset::HANG_PULSE_0X06 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X06); - l_data64.clearBit<6>(); //HANG_PULSE_5_REG.SUPPRESS_HANG_5 = 0 - FAPI_TRY(fapi2::putScom(i_target_ec, PERV_HANG_PULSE_5_REG, l_data64)); - } - - FAPI_INF("Exiting ..."); - -fapi_try_exit: - return fapi2::current_err; - -} - -/// @brief Disable listen_to_sync mode for MC -/// -/// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target -/// @return FAPI2_RC_SUCCESS if success, else error code. -static fapi2::ReturnCode p9_sbe_chiplet_reset_disable_listen_to_sync( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) -{ - FAPI_INF("Entering ..."); - - uint32_t l_attr_pg; - - FAPI_DBG("Reading ATTR_PG"); - FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); - - if ( l_attr_pg != 0xFFFF ) - { - //Setting SYNC_CONFIG register value - //SYNC_CONFIG = p9SbeChipletReset::SYNC_CONFIG_4TO1 - FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_SYNC_CONFIG, - p9SbeChipletReset::SYNC_CONFIG_4TO1)); - } - - FAPI_INF("Exiting ..."); - -fapi_try_exit: - return fapi2::current_err; - -} - /// @brief Drop clk div bypass for Mc chiplet /// /// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target @@ -781,20 +707,20 @@ fapi_try_exit: static fapi2::ReturnCode p9_sbe_chiplet_reset_div_clk_bypass( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) { + uint32_t l_attr_pg = 0; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); - if ( l_attr_pg != 0xFFFF ) + FAPI_DBG("drop clk_div_bypass_en"); + + //Setting NET_CTRL1 register value + if (l_attr_pg != 0xFFFF) { - FAPI_DBG("drop clk_div_bypass_en"); - //Setting NET_CTRL1 register value l_data64.flush<1>(); - //NET_CTRL1.CLK_DIV_BYPASS_EN = 0 + //NET_CTRL1.CLK_DIV_BYPASS_EN = (l_attr_pg != 0xFFFF) ? 0 l_data64.clearBit<PERV_1_NET_CTRL1_CLK_DIV_BYPASS_EN>(); FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_NET_CTRL1_WAND, l_data64)); } @@ -810,23 +736,25 @@ fapi_try_exit: /// /// /// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target +/// @param[in] i_enable if TRUE - enable, FALSE - disable /// @return FAPI2_RC_SUCCESS if success, else error code. static fapi2::ReturnCode p9_sbe_chiplet_reset_enable_listen_to_sync( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) + const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, + const bool i_enable) { + uint32_t l_attr_pg = 0; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); if ( l_attr_pg != 0xFFFF ) { //Setting SYNC_CONFIG register value - //SYNC_CONFIG = p9SbeChipletReset::SYNC_CONFIG_DEFAULT + //SYNC_CONFIG = i_enable? p9SbeChipletReset::SYNC_CONFIG_DEFAULT : p9SbeChipletReset::SYNC_CONFIG_4TO1 FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_SYNC_CONFIG, - p9SbeChipletReset::SYNC_CONFIG_DEFAULT)); + i_enable ? p9SbeChipletReset::SYNC_CONFIG_DEFAULT : + p9SbeChipletReset::SYNC_CONFIG_4TO1)); } FAPI_INF("Exiting ..."); @@ -874,11 +802,10 @@ fapi_try_exit: static fapi2::ReturnCode p9_sbe_chiplet_reset_mc_net_ctrl_clk_async_reset( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) { + uint32_t l_attr_pg = 0; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); @@ -908,56 +835,34 @@ fapi_try_exit: /// @brief Configuring multicast registers for nest, cache, core /// /// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target +/// @param[in] i_mc_grp1_val value for MULTICAST_GROUP1 register +/// @param[in] i_mc_grp2_val value for MULTICAST_GROUP2 register /// @return FAPI2_RC_SUCCESS if success, else error code. static fapi2::ReturnCode p9_sbe_chiplet_reset_mc_setup(const - fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) + fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, + const uint64_t i_mc_grp1_val, + const uint64_t i_mc_grp2_val) { + uint32_t l_attr_pg = 0; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); if ( l_attr_pg != 0xFFFF ) { //Setting MULTICAST_GROUP_1 register value - //MULTICAST_GROUP_1 = p9SbeChipletReset::MCGR0_CNFG_SETTINGS + //MULTICAST_GROUP_1 = i_mc_grp1_val FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_MULTICAST_GROUP_1, - p9SbeChipletReset::MCGR0_CNFG_SETTINGS)); - } - - FAPI_INF("Exiting ..."); - -fapi_try_exit: - return fapi2::current_err; - -} + i_mc_grp1_val)); -/// @brief Multicast register setup for MC01, MC23 -/// -/// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target -/// @return FAPI2_RC_SUCCESS if success, else error code. -static fapi2::ReturnCode p9_sbe_chiplet_reset_mc_setup_MC( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) -{ - FAPI_INF("Entering ..."); - - uint32_t l_attr_pg; - - FAPI_DBG("Reading ATTR_PG"); - FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); - - if ( l_attr_pg != 0xFFFF ) - { - //Setting MULTICAST_GROUP_1 register value - //MULTICAST_GROUP_1 = p9SbeChipletReset::MCGR0_CNFG_SETTINGS - FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_MULTICAST_GROUP_1, - p9SbeChipletReset::MCGR0_CNFG_SETTINGS)); //Setting MULTICAST_GROUP_2 register value - //MULTICAST_GROUP_2 = p9SbeChipletReset::MCGR2_CNFG_SETTINGS - FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_MULTICAST_GROUP_2, - p9SbeChipletReset::MCGR2_CNFG_SETTINGS)); + if (i_mc_grp2_val != 0x0) + { + //MULTICAST_GROUP_2 = (i_mc_grp2_val != 0x0) ? i_mc_grp2_val + FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_MULTICAST_GROUP_2, + i_mc_grp2_val)); + } } FAPI_INF("Exiting ..."); @@ -1014,39 +919,6 @@ fapi_try_exit: } -/// @brief Multicast register setup for core chiplets -/// -/// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target -/// @return FAPI2_RC_SUCCESS if success, else error code. -static fapi2::ReturnCode p9_sbe_chiplet_reset_mc_setup_core( - const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) -{ - FAPI_INF("Entering ..."); - - uint32_t l_attr_pg; - - FAPI_DBG("Reading ATTR_PG"); - FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); - - if ( l_attr_pg != 0xFFFF ) - { - //Setting MULTICAST_GROUP_1 register value - //MULTICAST_GROUP_1 = p9SbeChipletReset::MCGR0_CNFG_SETTINGS - FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_MULTICAST_GROUP_1, - p9SbeChipletReset::MCGR0_CNFG_SETTINGS)); - //Setting MULTICAST_GROUP_2 register value - //MULTICAST_GROUP_2 = p9SbeChipletReset::MCGR1_CNFG_SETTINGS - FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_MULTICAST_GROUP_2, - p9SbeChipletReset::MCGR1_CNFG_SETTINGS)); - } - - FAPI_INF("Exiting ..."); - -fapi_try_exit: - return fapi2::current_err; - -} - /// @brief Setting up hang pulse counter for partial good Nest chiplet /// /// @param[in] i_target_cplt Reference to TARGET_TYPE_PERV target @@ -1054,16 +926,16 @@ fapi_try_exit: static fapi2::ReturnCode p9_sbe_chiplet_reset_nest_hang_cnt_setup( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt) { - fapi2::buffer<uint64_t> l_data64; - FAPI_INF("Entering ..."); - // Local variables // - uint8_t l_attr_chipunit_pos; - uint32_t l_attr_pg; - const uint8_t N0 = 0x02; - const uint8_t N1 = 0x03; - const uint8_t N3 = 0x05; + uint8_t l_attr_chipunit_pos = 0; + uint32_t l_attr_pg = 0; + const uint8_t l_n0 = 0x02; + const uint8_t l_n1 = 0x03; + const uint8_t l_n2 = 0x04; + const uint8_t l_n3 = 0x05; + fapi2::buffer<uint64_t> l_data64; + FAPI_INF("Entering ..."); FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_cplt, l_attr_pg)); @@ -1085,11 +957,11 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_nest_hang_cnt_setup( l_data64.clearBit<6>(); //HANG_PULSE_5_REG.SUPPRESS_HANG_5 = 0 FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_5_REG, l_data64)); - if ( l_attr_chipunit_pos == N0 ) + if ( l_attr_chipunit_pos == l_n0 ) { //Setting HANG_PULSE_1_REG register value (Setting all fields) - //HANG_PULSE_1_REG.HANG_PULSE_REG_1 = p9SbeChipletReset::HANG_PULSE_0X10 - l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X10); + //HANG_PULSE_1_REG.HANG_PULSE_REG_1 = p9SbeChipletReset::HANG_PULSE_0X18 + l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X18); l_data64.clearBit<6>(); //HANG_PULSE_1_REG.SUPPRESS_HANG_1 = 0 FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_1_REG, l_data64)); //Setting HANG_PULSE_2_REG register value (Setting all fields) @@ -1097,9 +969,14 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_nest_hang_cnt_setup( l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X22); l_data64.clearBit<6>(); //HANG_PULSE_2_REG.SUPPRESS_HANG_2 = 0 FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_2_REG, l_data64)); + //Setting HANG_PULSE_3_REG register value (Setting all fields) + //HANG_PULSE_3_REG.HANG_PULSE_REG_3 = p9SbeChipletReset::HANG_PULSE_0X12 + l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X12); + l_data64.clearBit<6>(); //HANG_PULSE_3_REG.SUPPRESS_HANG_3 = 0 + FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_3_REG, l_data64)); } - if ( l_attr_chipunit_pos == N1 ) + if ( l_attr_chipunit_pos == l_n1 ) { //Setting HANG_PULSE_2_REG register value (Setting all fields) //HANG_PULSE_2_REG.HANG_PULSE_REG_2 = p9SbeChipletReset::HANG_PULSE_0X0F @@ -1108,7 +985,16 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_nest_hang_cnt_setup( FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_2_REG, l_data64)); } - if ( l_attr_chipunit_pos == N3 ) + if ( l_attr_chipunit_pos == l_n2 ) + { + //Setting HANG_PULSE_3_REG register value (Setting all fields) + //HANG_PULSE_3_REG.HANG_PULSE_REG_3 = p9SbeChipletReset::HANG_PULSE_0X12 + l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X12); + l_data64.clearBit<6>(); //HANG_PULSE_3_REG.SUPPRESS_HANG_3 = 0 + FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_3_REG, l_data64)); + } + + if ( l_attr_chipunit_pos == l_n3 ) { //Setting HANG_PULSE_1_REG register value (Setting all fields) //HANG_PULSE_1_REG.HANG_PULSE_REG_1 = p9SbeChipletReset::HANG_PULSE_0X17 @@ -1125,6 +1011,11 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_nest_hang_cnt_setup( l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X0F); l_data64.clearBit<6>(); //HANG_PULSE_3_REG.SUPPRESS_HANG_3 = 0 FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_3_REG, l_data64)); + //Setting HANG_PULSE_4_REG register value (Setting all fields) + //HANG_PULSE_4_REG.HANG_PULSE_REG_4 = p9SbeChipletReset::HANG_PULSE_0X1C + l_data64.insertFromRight<0, 6>(p9SbeChipletReset::HANG_PULSE_0X1C); + l_data64.clearBit<6>(); //HANG_PULSE_4_REG.SUPPRESS_HANG_4 = 0 + FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_HANG_PULSE_4_REG, l_data64)); } } @@ -1135,32 +1026,6 @@ fapi_try_exit: } -/// @brief Calling nest/mc/other bus multicasting set up -/// -/// @param[in] i_target_cplt Reference to TARGET_TYPE_PROC_CHIP target -/// @return FAPI2_RC_SUCCESS if success, else error code. -static fapi2::ReturnCode p9_sbe_chiplet_reset_nest_mc_call( - const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_cplt) -{ - FAPI_INF("Entering ..."); - - for (auto l_target_cplt : i_target_cplt.getChildren<fapi2::TARGET_TYPE_PERV> - (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_ALL_NEST | - fapi2::TARGET_FILTER_ALL_OBUS | fapi2::TARGET_FILTER_ALL_PCI | - fapi2::TARGET_FILTER_XBUS), fapi2::TARGET_STATE_FUNCTIONAL)) - { - // Configuring chiplet multicasting registers. - FAPI_DBG("Configuring multicasting registers for Nest,Xb,Obus,pcie chiplets" ); - FAPI_TRY(p9_sbe_chiplet_reset_mc_setup(l_target_cplt)); - } - - FAPI_INF("Exiting ..."); - -fapi_try_exit: - return fapi2::current_err; - -} - /// @brief Drop Endpoint reset /// Drop lvltrans fence /// @@ -1170,11 +1035,10 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_net_ctrl_lvltrans_fence_pcb_ep_reset( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) { + uint32_t l_attr_pg = 0; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); @@ -1210,11 +1074,10 @@ fapi_try_exit: static fapi2::ReturnCode p9_sbe_chiplet_reset_opcg_cnfg( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) { + uint32_t l_attr_pg = 0; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); @@ -1247,21 +1110,21 @@ fapi_try_exit: static fapi2::ReturnCode p9_sbe_chiplet_reset_opcg_cnfg_scan_ratio( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt) { + uint32_t l_attr_pg = 0; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - uint32_t l_attr_pg; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_cplt, l_attr_pg)); - if ( l_attr_pg != 0xFFFF ) + FAPI_DBG("Set scan ratio to 1:1 as long as PLL is in bypass mode"); + + //Setting OPCG_ALIGN register value + if (l_attr_pg != 0xFFFF) { - FAPI_DBG("Set scan ratio to 1:1 as long as PLL is in bypass mode"); - //Setting OPCG_ALIGN register value FAPI_TRY(fapi2::getScom(i_target_cplt, PERV_OPCG_ALIGN, l_data64)); l_data64.insertFromRight<PERV_1_OPCG_ALIGN_SCAN_RATIO, PERV_1_OPCG_ALIGN_SCAN_RATIO_LEN> - (p9SbeChipletReset::SCAN_RATIO_0X0); //OPCG_ALIGN.SCAN_RATIO = p9SbeChipletReset::SCAN_RATIO_0X0 + (p9SbeChipletReset::SCAN_RATIO_0X0); //OPCG_ALIGN.SCAN_RATIO = (l_attr_pg != 0xFFFF) ? p9SbeChipletReset::SCAN_RATIO_0X0 FAPI_TRY(fapi2::putScom(i_target_cplt, PERV_OPCG_ALIGN, l_data64)); } @@ -1280,26 +1143,18 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_scan0_call( const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chip) { fapi2::buffer<uint16_t> l_regions; - int l_timeout = 1 ; FAPI_INF("Entering ..."); FAPI_TRY(p9_perv_sbe_cmn_regions_setup_16(i_target_chip, p9SbeChipletReset::REGIONS_EXCEPT_VITAL, l_regions)); - while(l_timeout != 0) - { - - FAPI_DBG("run scan0 module for region except vital and pll, scan types GPTR, TIME, REPR"); - FAPI_TRY(p9_perv_sbe_cmn_scan0_module(i_target_chip, l_regions, - p9SbeChipletReset::SCAN_TYPES_TIME_GPTR_REPR)); + FAPI_DBG("run scan0 module for region except vital and pll, scan types GPTR, TIME, REPR"); + FAPI_TRY(p9_perv_sbe_cmn_scan0_module(i_target_chip, l_regions, + p9SbeChipletReset::SCAN_TYPES_TIME_GPTR_REPR)); - FAPI_DBG("run scan0 module for region except vital and pll, scan types except GPTR, TIME, REPR"); - FAPI_TRY(p9_perv_sbe_cmn_scan0_module(i_target_chip, l_regions, - p9SbeChipletReset::SCAN_TYPES_EXCEPT_TIME_GPTR_REPR)); - FAPI_DBG("Loop Count :%d", l_timeout); - --l_timeout; - - } + FAPI_DBG("run scan0 module for region except vital and pll, scan types except GPTR, TIME, REPR"); + FAPI_TRY(p9_perv_sbe_cmn_scan0_module(i_target_chip, l_regions, + p9SbeChipletReset::SCAN_TYPES_EXCEPT_TIME_GPTR_REPR)); FAPI_INF("Exiting ..."); @@ -1315,13 +1170,12 @@ fapi_try_exit: static fapi2::ReturnCode p9_sbe_chiplet_reset_setup(const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet) { + // Local variable and constant definition + uint32_t l_attr_pg = 0; + const uint64_t l_error_default_value = 0xFFFFFFFFFFFFFFFFull; fapi2::buffer<uint64_t> l_data64; FAPI_INF("Entering ..."); - // Local variable and constant definition - uint32_t l_attr_pg; - const uint64_t ERROR_DEFAULT_VALUE = 0xFFFFFFFFFFFFFFFFull; - FAPI_DBG("Reading ATTR_PG"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PG, i_target_chiplet, l_attr_pg)); @@ -1335,8 +1189,9 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_setup(const FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_NET_CTRL0_WOR, l_data64)); //Setting ERROR_REG register value - //ERROR_REG = ERROR_DEFAULT_VALUE - FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_ERROR_REG, ERROR_DEFAULT_VALUE)); + //ERROR_REG = l_error_default_value + FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_ERROR_REG, + l_error_default_value)); } FAPI_INF("Exiting ..."); @@ -1345,3 +1200,34 @@ fapi_try_exit: return fapi2::current_err; } + +/// @brief Setup IOP Logic for PCIe +/// +/// @param[in] i_target_chip Reference to TARGET_TYPE_PERV target +/// @return FAPI2_RC_SUCCESS if success, else error code. +static fapi2::ReturnCode p9_sbe_chiplet_reset_setup_iop_logic( + const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chip) +{ + fapi2::buffer<uint64_t> l_data64; + FAPI_INF("Entering ..."); + + //Setting CPLT_CONF1 register value + l_data64.flush<0>(); + l_data64.setBit<30>(); //CPLT_CONF1.TC_IOP_HSSPORWREN = 0b1 + FAPI_TRY(fapi2::putScom(i_target_chip, PERV_CPLT_CONF1_OR, l_data64)); + + fapi2::delay(p9SbeChipletReset::HW_NS_DELAY, + p9SbeChipletReset::SIM_CYCLE_DELAY); + + //Setting CPLT_CONF1 register value + l_data64.flush<0>(); + l_data64.setBit<28>(); //CPLT_CONF1.TC_IOP_SYS_RESET_PCS = 0b1 + l_data64.setBit<29>(); //CPLT_CONF1.TC_IOP_SYS_RESET_PMA = 0b1 + FAPI_TRY(fapi2::putScom(i_target_chip, PERV_CPLT_CONF1_OR, l_data64)); + + FAPI_INF("Exiting ..."); + +fapi_try_exit: + return fapi2::current_err; + +} |