summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/perv
diff options
context:
space:
mode:
authorAnusha Reddy Rangareddygari <anusrang@in.ibm.com>2017-01-04 06:33:28 +0100
committerSachin Gupta <sgupta2m@in.ibm.com>2017-01-18 07:58:59 -0500
commitfb9435e007fb19f1e2b43c763fdcbc02b9ae3276 (patch)
treea92ff56b6b95983f460d39d640c534790b777b73 /src/import/chips/p9/procedures/hwp/perv
parent3856467f1133e0cea0d8535d479551aaa4bd2c81 (diff)
downloadtalos-sbe-fb9435e007fb19f1e2b43c763fdcbc02b9ae3276.tar.gz
talos-sbe-fb9435e007fb19f1e2b43c763fdcbc02b9ae3276.zip
p9_sbe_chiplet_pll_setup optimized
Change-Id: Ie723e71f8b080d2f0e7b2842b4785653b45f48bd Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/34320 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Reviewed-by: Soma Bhanutej <soma.bhanu@in.ibm.com> Reviewed-by: RAJA DAS <rajadas2@in.ibm.com> Reviewed-by: PARVATHI RACHAKONDA <prachako@in.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/34321 Reviewed-by: Hostboot Team <hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/perv')
-rw-r--r--src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_pll_setup.C273
1 files changed, 111 insertions, 162 deletions
diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_pll_setup.C b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_pll_setup.C
index e2dea74e..357133b8 100644
--- a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_pll_setup.C
+++ b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_pll_setup.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER sbe Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2015,2016 */
+/* Contributors Listed Below - COPYRIGHT 2015,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -57,21 +57,18 @@ enum P9_SBE_CHIPLET_PLL_SETUP_Private_Constants
REGIONS = 0x001
};
-static fapi2::ReturnCode p9_sbe_chiplet_pll_setup_check_pci_pll_lock(
- const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet);
static fapi2::ReturnCode p9_sbe_chiplet_pll_setup_check_pll_lock(
- const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet);
+ const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet,
+ bool is_pcie_chiplet);
static fapi2::ReturnCode p9_sbe_chiplet_pll_setup_function(
const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet,
const bool i_bypass);
-static fapi2::ReturnCode p9_sbe_chiplet_pll_setup_mc_dcc_bypass(
- const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet);
-
-static fapi2::ReturnCode p9_sbe_chiplet_pll_setup_mc_pdly_bypass(
- const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet);
+static fapi2::ReturnCode p9_sbe_chiplet_pll_setup_mc_pdly_dcc_bypass(
+ const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet,
+ bool mc_pdly_bypass, bool mc_dcc_bypass);
static fapi2::ReturnCode p9_sbe_chiplet_pll_setup_pll_reset(
const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet);
@@ -89,12 +86,11 @@ fapi2::ReturnCode p9_sbe_chiplet_pll_setup(const
uint8_t l_bypass = 0;
FAPI_INF("p9_sbe_chiplet_pll_setup: Entering ...");
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (fapi2::TARGET_FILTER_ALL_MC, fapi2::TARGET_STATE_FUNCTIONAL))
- {
- FAPI_DBG("Drop PDLY bypass");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_mc_pdly_bypass(l_chplt_trgt));
- }
+ auto l_mc_io_func = 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_XBUS |
+ fapi2::TARGET_FILTER_ALL_PCI),
+ fapi2::TARGET_STATE_FUNCTIONAL);
FAPI_DBG("Reading bypass attribute");
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_NEST_MEM_X_O_PCI_BYPASS, i_target_chip, l_bypass));
@@ -102,117 +98,100 @@ fapi2::ReturnCode p9_sbe_chiplet_pll_setup(const
FAPI_DBG("Reading ATTR_mc_sync_mode");
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_MC_SYNC_MODE, i_target_chip, l_read_attr));
- if ( l_read_attr )
+ for (auto& mc : l_mc_io_func)
{
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (fapi2::TARGET_FILTER_ALL_PCI, fapi2::TARGET_STATE_FUNCTIONAL))
- {
- FAPI_DBG("call clock start stop module and drop syncclk muxsel");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_strt_pci_nsl_drp_synclk_mux(l_chplt_trgt));
- }
+ uint32_t l_chipletID = mc.getChipletNumber();
- if (l_bypass == 0)
+ if( l_chipletID == 7 || l_chipletID == 8 )
{
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_ALL_OBUS |
- fapi2::TARGET_FILTER_XBUS), fapi2::TARGET_STATE_FUNCTIONAL))
- {
- FAPI_DBG("release pll test enable for except pcie");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_pll_test_enable(l_chplt_trgt));
- }
-
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_ALL_OBUS |
- fapi2::TARGET_FILTER_ALL_PCI | fapi2::TARGET_FILTER_XBUS),
- fapi2::TARGET_STATE_FUNCTIONAL))
- {
- FAPI_DBG("Release PLL reset");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_pll_reset(l_chplt_trgt));
- }
-
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (fapi2::TARGET_FILTER_ALL_PCI, fapi2::TARGET_STATE_FUNCTIONAL))
- {
- FAPI_DBG("Check pll lock for PCIe");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_check_pci_pll_lock(l_chplt_trgt));
- }
+ FAPI_DBG("Drop PDLY bypass");
+ FAPI_TRY(p9_sbe_chiplet_pll_setup_mc_pdly_dcc_bypass(mc, true, false));
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_ALL_OBUS |
- fapi2::TARGET_FILTER_XBUS), fapi2::TARGET_STATE_FUNCTIONAL))
+ if ( !(l_read_attr) )
{
- FAPI_DBG("Check pll lock for Xb,Ob");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_check_pll_lock(l_chplt_trgt));
+ FAPI_DBG("Drop DCC bypass");
+ FAPI_TRY(p9_sbe_chiplet_pll_setup_mc_pdly_dcc_bypass(mc, false, true));
}
}
-
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (static_cast<fapi2::TargetFilter>(fapi2::TARGET_FILTER_ALL_OBUS |
- fapi2::TARGET_FILTER_ALL_PCI | fapi2::TARGET_FILTER_XBUS),
- fapi2::TARGET_STATE_FUNCTIONAL))
- {
- FAPI_TRY(p9_sbe_chiplet_pll_setup_function(l_chplt_trgt, l_bypass));
- }
}
- else
+
+ for (auto& pcie : l_mc_io_func)
{
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (fapi2::TARGET_FILTER_ALL_MC, fapi2::TARGET_STATE_FUNCTIONAL))
- {
- FAPI_DBG("Drop MCC bypass");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_mc_dcc_bypass(l_chplt_trgt));
- }
+ // PCIe
+ uint32_t l_chipletID = pcie.getChipletNumber();
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (fapi2::TARGET_FILTER_ALL_PCI, fapi2::TARGET_STATE_FUNCTIONAL))
+ if( l_chipletID >= 13 && l_chipletID <= 15 )
{
- FAPI_DBG("call clock start stop module and drop syncclk_muxsel");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_strt_pci_nsl_drp_synclk_mux(l_chplt_trgt));
+ FAPI_DBG("call clock start stop module and drop syncclk muxsel");
+ FAPI_TRY(p9_sbe_chiplet_pll_setup_strt_pci_nsl_drp_synclk_mux( pcie ));
}
+ }
- if (l_bypass == 0)
+ if (l_bypass == 0)
+ {
+ for (auto& targ : l_mc_io_func)
{
- for (auto& l_chplt_trgt : 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_XBUS),
- fapi2::TARGET_STATE_FUNCTIONAL))
+ // OBUS, XBUS, MC
+ uint32_t l_chipletID = targ.getChipletNumber();
+
+ if(l_chipletID == 6 || (l_chipletID >= 9 && l_chipletID <= 12) ||
+ ((!l_read_attr) && (l_chipletID == 7 || l_chipletID == 8)) )
{
FAPI_DBG("release pll test enable for except pcie");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_pll_test_enable(l_chplt_trgt));
+ FAPI_TRY(p9_sbe_chiplet_pll_setup_pll_test_enable(targ));
}
+ }
- for (auto& l_chplt_trgt : 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))
+ for (auto& targ : l_mc_io_func)
+ {
+ // OBUS, XBUS, PCIe, MC
+ uint32_t l_chipletID = targ.getChipletNumber();
+
+ if(l_chipletID == 6 || (l_chipletID >= 9 && l_chipletID <= 12) ||
+ (l_chipletID >= 13 && l_chipletID <= 15) ||
+ ((!l_read_attr) && (l_chipletID == 7 || l_chipletID == 8)) )
{
FAPI_DBG("Release PLL reset");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_pll_reset(l_chplt_trgt));
+ FAPI_TRY(p9_sbe_chiplet_pll_setup_pll_reset(targ));
}
+ }
+
+ for (auto& pcie : l_mc_io_func)
+ {
+ // PCIe
+ uint32_t l_chipletID = pcie.getChipletNumber();
- for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>
- (fapi2::TARGET_FILTER_ALL_PCI, fapi2::TARGET_STATE_FUNCTIONAL))
+ if( l_chipletID >= 13 && l_chipletID <= 15 )
{
FAPI_DBG("Check pll lock for pcie");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_check_pci_pll_lock(l_chplt_trgt));
+ FAPI_TRY(p9_sbe_chiplet_pll_setup_check_pll_lock(pcie, true));
}
+ }
- for (auto& l_chplt_trgt : 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_XBUS),
- fapi2::TARGET_STATE_FUNCTIONAL))
+ for (auto& targ : l_mc_io_func)
+ {
+ // OBUS, XBUS, MC
+ uint32_t l_chipletID = targ.getChipletNumber();
+
+ if(l_chipletID == 6 || (l_chipletID >= 9 && l_chipletID <= 12) ||
+ ((!l_read_attr) && (l_chipletID == 7 || l_chipletID == 8)) )
{
FAPI_DBG("check pll lock for Mc,Xb,Ob");
- FAPI_TRY(p9_sbe_chiplet_pll_setup_check_pll_lock(l_chplt_trgt));
+ FAPI_TRY(p9_sbe_chiplet_pll_setup_check_pll_lock(targ, false));
}
}
+ }
- for (auto& l_chplt_trgt : 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))
+ for (auto& targ : l_mc_io_func)
+ {
+ // OBUS, XBUS, PCIe, MC
+ uint32_t l_chipletID = targ.getChipletNumber();
+
+ if(l_chipletID == 6 || (l_chipletID >= 9 && l_chipletID <= 12) ||
+ (l_chipletID >= 13 && l_chipletID <= 15) ||
+ ((!l_read_attr) && (l_chipletID == 7 || l_chipletID == 8)) )
{
- FAPI_TRY(p9_sbe_chiplet_pll_setup_function(l_chplt_trgt, l_bypass));
+ FAPI_TRY(p9_sbe_chiplet_pll_setup_function(targ, l_bypass));
}
}
@@ -223,42 +202,12 @@ fapi_try_exit:
}
-/// @brief check pll lock for pcie chiplet
-///
-/// @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_pll_setup_check_pci_pll_lock(
- const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet)
-{
- fapi2::buffer<uint64_t> l_read_reg;
- fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> l_chip = i_target_chiplet.getParent<fapi2::TARGET_TYPE_PROC_CHIP>();
- FAPI_INF("p9_sbe_chiplet_pll_setup_check_pci_pll_lock: Entering ...");
-
- FAPI_DBG("Check PLL lock");
- //Getting PLL_LOCK_REG register value
- FAPI_TRY(fapi2::getScom(i_target_chiplet, PERV_PLL_LOCK_REG,
- l_read_reg)); //l_read_reg = PLL_LOCK_REG
-
- FAPI_ASSERT(l_read_reg.getBit<0>() == 1 && l_read_reg.getBit<1>() == 1,
- fapi2::PLL_LOCK_ERR()
- .set_TARGET_CHIPLET(i_target_chiplet)
- .set_TARGET_CHIP(l_chip)
- .set_PLL_READ(l_read_reg),
- "ERROR:PLL LOCK NOT SET");
-
- FAPI_INF("p9_sbe_chiplet_pll_setup_check_pci_pll_lock: Exiting ...");
-
-fapi_try_exit:
- return fapi2::current_err;
-
-}
-
-/// @brief check pll lock for OB,XB,MC
+/// @brief check pll lock for OB,XB,MC,PCIe 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_pll_setup_check_pll_lock(
- const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet)
+ const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet, bool is_pcie_chiplet)
{
fapi2::buffer<uint64_t> l_read_reg;
fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> l_chip = i_target_chiplet.getParent<fapi2::TARGET_TYPE_PROC_CHIP>();
@@ -269,12 +218,24 @@ static fapi2::ReturnCode p9_sbe_chiplet_pll_setup_check_pll_lock(
FAPI_TRY(fapi2::getScom(i_target_chiplet, PERV_PLL_LOCK_REG,
l_read_reg)); //l_read_reg = PLL_LOCK_REG
- FAPI_ASSERT(l_read_reg.getBit<0>() == 1 ,
- fapi2::PLL_LOCK_ERR()
- .set_TARGET_CHIPLET(i_target_chiplet)
- .set_TARGET_CHIP(l_chip)
- .set_PLL_READ(l_read_reg),
- "ERROR:PLL LOCK NOT SET");
+ if ( is_pcie_chiplet )
+ {
+ FAPI_ASSERT(l_read_reg.getBit<0>() == 1 && l_read_reg.getBit<1>() == 1,
+ fapi2::PLL_LOCK_ERR()
+ .set_TARGET_CHIPLET(i_target_chiplet)
+ .set_TARGET_CHIP(l_chip)
+ .set_PLL_READ(l_read_reg),
+ "ERROR:PCIe PLL LOCK NOT SET");
+ }
+ else
+ {
+ FAPI_ASSERT(l_read_reg.getBit<0>() == 1 ,
+ fapi2::PLL_LOCK_ERR()
+ .set_TARGET_CHIPLET(i_target_chiplet)
+ .set_TARGET_CHIP(l_chip)
+ .set_PLL_READ(l_read_reg),
+ "ERROR:PLL LOCK NOT SET");
+ }
FAPI_INF("p9_sbe_chiplet_pll_setup_check_pll_lock: Exiting ...");
@@ -283,6 +244,7 @@ fapi_try_exit:
}
+
/// @brief Setup PLL for XBus, OBus, PCIe, (MC) chiplets
///
/// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target
@@ -327,54 +289,41 @@ fapi_try_exit:
}
-/// @brief Drop Mc DCC bypass
+/// @brief Drop Mc DCC bypass, Drop Mc PDLY bypass
///
/// @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_pll_setup_mc_dcc_bypass(
- const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet)
+static fapi2::ReturnCode p9_sbe_chiplet_pll_setup_mc_pdly_dcc_bypass(
+ const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet,
+ bool mc_pdly_bypass, bool mc_dcc_bypass)
{
fapi2::buffer<uint64_t> l_data64;
- FAPI_INF("p9_sbe_chiplet_pll_setup_mc_dcc_bypass: Entering ...");
+ FAPI_INF("p9_sbe_chiplet_pll_setup_mc_pdly_dcc_bypass: Entering ...");
- FAPI_DBG("Drop DCC bypass");
- //Setting NET_CTRL1 register value
l_data64.flush<1>();
- //NET_CTRL1.CLK_DCC_BYPASS_EN = 0
- l_data64.clearBit<PERV_1_NET_CTRL1_CLK_DCC_BYPASS_EN>();
- FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_NET_CTRL1_WAND, l_data64));
-
- FAPI_INF("p9_sbe_chiplet_pll_setup_mc_dcc_bypass: Exiting ...");
-fapi_try_exit:
- return fapi2::current_err;
-
-}
+ if ( mc_pdly_bypass )
+ {
+ FAPI_DBG("Drop PDLY bypass");
+ l_data64.clearBit<PERV_1_NET_CTRL1_CLK_PDLY_BYPASS_EN>();
+ }
-/// @brief Drop Mc PDLY bypass
-///
-/// @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_pll_setup_mc_pdly_bypass(
- const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet)
-{
- fapi2::buffer<uint64_t> l_data64;
- FAPI_INF("p9_sbe_chiplet_pll_setup_mc_pdly_bypass: Entering ...");
+ if ( mc_dcc_bypass )
+ {
+ FAPI_DBG("Drop DCC bypass");
+ l_data64.clearBit<PERV_1_NET_CTRL1_CLK_DCC_BYPASS_EN>();
+ }
- FAPI_DBG("Drop PDLY bypass");
- //Setting NET_CTRL1 register value
- l_data64.flush<1>();
- //NET_CTRL1.CLK_PDLY_BYPASS_EN = 0
- l_data64.clearBit<PERV_1_NET_CTRL1_CLK_PDLY_BYPASS_EN>();
FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_NET_CTRL1_WAND, l_data64));
- FAPI_INF("p9_sbe_chiplet_pll_setup_mc_pdly_bypass: Exiting ...");
+ FAPI_INF("p9_sbe_chiplet_pll_setup_mc_pdly_dcc_bypass: Exiting ...");
fapi_try_exit:
return fapi2::current_err;
}
+
/// @brief release pll reset and wait
///
/// @param[in] i_target_chip Reference to TARGET_TYPE_PERV target
OpenPOWER on IntegriCloud