summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/core/p9_hcd_core_stopclocks.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/core/p9_hcd_core_stopclocks.C')
-rw-r--r--src/import/chips/p9/procedures/hwp/core/p9_hcd_core_stopclocks.C63
1 files changed, 38 insertions, 25 deletions
diff --git a/src/import/chips/p9/procedures/hwp/core/p9_hcd_core_stopclocks.C b/src/import/chips/p9/procedures/hwp/core/p9_hcd_core_stopclocks.C
index 0b72b51e..f401258a 100644
--- a/src/import/chips/p9/procedures/hwp/core/p9_hcd_core_stopclocks.C
+++ b/src/import/chips/p9/procedures/hwp/core/p9_hcd_core_stopclocks.C
@@ -32,7 +32,7 @@
// *HWP Backup HWP Owner : Greg Still <stillgs@us.ibm.com>
// *HWP FW Owner : Sangeetha T S <sangeet2@in.ibm.com>
// *HWP Team : PM
-// *HWP Consumed by : HB:PREV
+// *HWP Consumed by : HB:PERV
// *HWP Level : 2
//------------------------------------------------------------------------------
@@ -65,7 +65,8 @@ enum P9_HCD_CORE_STOPCLOCKS_CONSTANTS
fapi2::ReturnCode
p9_hcd_core_stopclocks(
- const fapi2::Target<fapi2::TARGET_TYPE_CORE>& i_target)
+ const fapi2::Target<fapi2::TARGET_TYPE_CORE>& i_target,
+ const bool i_sync_stop_quad_clk)
{
FAPI_INF(">>p9_hcd_core_stopclocks");
fapi2::ReturnCode l_rc;
@@ -159,35 +160,47 @@ p9_hcd_core_stopclocks(
FAPI_DBG("Clear all SCAN_REGION_TYPE bits");
FAPI_TRY(putScom(i_target, C_SCAN_REGION_TYPE, MASK_ZERO));
- FAPI_DBG("Stop core clocks(all but pll) via CLK_REGION");
- l_data64 = (p9hcd::CLK_STOP_CMD |
- p9hcd::CLK_REGION_ALL_BUT_PLL |
- p9hcd::CLK_THOLD_ALL);
- FAPI_TRY(putScom(i_target, C_CLK_REGION, l_data64));
-
- FAPI_DBG("Poll for core clocks stopped via CPLT_STAT0[8]");
- l_loops1ms = 1E6 / CORE_CLK_STOP_POLLING_HW_NS_DELAY;
-
- do
+ if(i_sync_stop_quad_clk)
{
- fapi2::delay(CORE_CLK_STOP_POLLING_HW_NS_DELAY,
- CORE_CLK_STOP_POLLING_SIM_CYCLE_DELAY);
+ FAPI_DBG("Stop core clocks(all but pll) via CLK_REGION in SLAVE mode");
+ l_data64 = (p9hcd::CLK_STOP_CMD_SLAVE |
+ p9hcd::CLK_REGION_ALL_BUT_PLL |
+ p9hcd::CLK_THOLD_ALL);
+ FAPI_TRY(putScom(i_target, C_CLK_REGION, l_data64));
- FAPI_TRY(getScom(i_target, C_CPLT_STAT0, l_data64));
}
- while((l_data64.getBit<8>() != 1) && ((--l_loops1ms) != 0));
+ else
+ {
+ FAPI_DBG("Stop core clocks(all but pll) via CLK_REGION");
+ l_data64 = (p9hcd::CLK_STOP_CMD |
+ p9hcd::CLK_REGION_ALL_BUT_PLL |
+ p9hcd::CLK_THOLD_ALL);
+ FAPI_TRY(putScom(i_target, C_CLK_REGION, l_data64));
- FAPI_ASSERT((l_loops1ms != 0),
- fapi2::PMPROC_CORECLKSTOP_TIMEOUT().set_CORECPLTSTAT(l_data64),
- "Core Clock Stop Timeout");
+ FAPI_DBG("Poll for core clocks stopped via CPLT_STAT0[8]");
+ l_loops1ms = 1E6 / CORE_CLK_STOP_POLLING_HW_NS_DELAY;
- FAPI_DBG("Check core clocks stopped via CLOCK_STAT_SL[4-13]");
- FAPI_TRY(getScom(i_target, C_CLOCK_STAT_SL, l_data64));
+ do
+ {
+ fapi2::delay(CORE_CLK_STOP_POLLING_HW_NS_DELAY,
+ CORE_CLK_STOP_POLLING_SIM_CYCLE_DELAY);
+
+ FAPI_TRY(getScom(i_target, C_CPLT_STAT0, l_data64));
+ }
+ while((l_data64.getBit<8>() != 1) && ((--l_loops1ms) != 0));
- FAPI_ASSERT((((~l_data64) & p9hcd::CLK_REGION_ALL_BUT_PLL) == 0),
- fapi2::PMPROC_CORECLKSTOP_FAILED().set_CORECLKSTAT(l_data64),
- "Core Clock Stop Failed");
- FAPI_DBG("Core clocks stopped now");
+ FAPI_ASSERT((l_loops1ms != 0),
+ fapi2::PMPROC_CORECLKSTOP_TIMEOUT().set_CORECPLTSTAT(l_data64),
+ "Core Clock Stop Timeout");
+
+ FAPI_DBG("Check core clocks stopped via CLOCK_STAT_SL[4-13]");
+ FAPI_TRY(getScom(i_target, C_CLOCK_STAT_SL, l_data64));
+
+ FAPI_ASSERT((((~l_data64) & p9hcd::CLK_REGION_ALL_BUT_PLL) == 0),
+ fapi2::PMPROC_CORECLKSTOP_FAILED().set_CORECLKSTAT(l_data64),
+ "Core Clock Stop Failed");
+ FAPI_DBG("Core clocks stopped now");
+ }
// -------------------------------
// Disable core clock sync
OpenPOWER on IntegriCloud