summaryrefslogtreecommitdiffstats
path: root/src/import
diff options
context:
space:
mode:
authorcrgeddes <crgeddes@us.ibm.com>2017-03-14 17:19:03 -0500
committerSachin Gupta <sgupta2m@in.ibm.com>2017-03-21 04:34:06 -0400
commitddbd1c07f224346b1b0951ee3fd90abfaf135051 (patch)
tree292589241a55e685e2719b7180867811fa6e2aaf /src/import
parent821f09c416a57ac522fdde70227c61f5d8d6b8b7 (diff)
downloadtalos-sbe-ddbd1c07f224346b1b0951ee3fd90abfaf135051.tar.gz
talos-sbe-ddbd1c07f224346b1b0951ee3fd90abfaf135051.zip
Update proc_select_ex to remove target from old MC group
proc_select_ex sets up some multicast groups for Cores EXs and Eqs. The code was not written to be called multiple times because it was not removing the target from its old group when it was added to a new group. Before we were blindly removing every target from group 7 (which has nothing in it), now we read the prev group and remove the target from the prev group Change-Id: Iea339cb778cd50a2712f59ee41c243dcbae95d0c Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/37949 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Reviewed-by: Joachim Fenkes <fenkes@de.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Reviewed-by: SRINIVAS V. POLISETTY <srinivan@in.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/37976 Reviewed-by: Hostboot Team <hostboot@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@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')
-rw-r--r--src/import/chips/p9/procedures/hwp/perv/p9_sbe_select_ex.C165
1 files changed, 72 insertions, 93 deletions
diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_select_ex.C b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_select_ex.C
index c2cd7f68..7307cdfd 100644
--- a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_select_ex.C
+++ b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_select_ex.C
@@ -149,6 +149,11 @@ fapi2::ReturnCode select_ex_add_ex_to_mc_groups(
fapi2::ReturnCode select_ex_add_eq_to_mc_group(
const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt);
+fapi2::ReturnCode select_ex_update_mc_group(
+ const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt,
+ const uint8_t i_mc_group,
+ const uint64_t i_mc_reg_addr);
+
// -----------------------------------------------------------------------------
// Function definitions
// -----------------------------------------------------------------------------
@@ -405,16 +410,6 @@ fapi2::ReturnCode select_ex_add_core_to_mc_group(
{
FAPI_INF("> add_to_core_mc_group...");
- fapi2::buffer<uint64_t> l_data64 = 0;
-
- // Add core to functional Chiplets group
-
- // Entering group
- l_data64.insertFromRight<0, 3>(0x7);
- l_data64.insertFromRight<3, 3>(ALL_CHIPLETS_MC_GROUP);
- // Removed group
- l_data64.insertFromRight<19, 3>(BROADCAST_GROUP);
-
#ifndef __PPE__
uint8_t l_attr_chip_unit_pos = 0;
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_UNIT_POS,
@@ -425,35 +420,19 @@ fapi2::ReturnCode select_ex_add_core_to_mc_group(
l_attr_chip_unit_pos - PERV_CORE_START,
ALL_CHIPLETS_MC_GROUP );
#endif
- FAPI_TRY(fapi2::putScom(i_target_cplt,
- ALL_CHIPLETS_MC_REG,
- l_data64),
- "Error: Core MC group register, rc 0x%.8X",
- (uint32_t)fapi2::current_err);
-
- // Add core to functional core group
- // Entering group
- l_data64.insertFromRight<0, 3>(0x7);
- l_data64.insertFromRight<3, 3>(ALL_CORES_MC_GROUP);
- // Removed group
- l_data64.insertFromRight<19, 3>(BROADCAST_GROUP);
+ select_ex_update_mc_group(i_target_cplt,
+ ALL_CHIPLETS_MC_GROUP,
+ ALL_CHIPLETS_MC_REG);
#ifndef __PPE__
FAPI_DBG("Adding Core %d to MC group %d",
l_attr_chip_unit_pos - PERV_CORE_START,
ALL_CORES_MC_GROUP );
#endif
- FAPI_TRY(fapi2::putScom(i_target_cplt,
- ALL_CORES_MC_REG,
- l_data64),
- "Error: Core MC group register, rc 0x%.8X",
- (uint32_t)fapi2::current_err);
- // Entering group
- l_data64.insertFromRight<0, 3>(0x7);
- l_data64.insertFromRight<3, 3>(CORE_STOP_MC_GROUP);
- // Removed group
- l_data64.insertFromRight<19, 3>(BROADCAST_GROUP);
+ select_ex_update_mc_group(i_target_cplt,
+ ALL_CORES_MC_GROUP,
+ ALL_CORES_MC_REG);
#ifndef __PPE__
FAPI_DBG("Adding Core %d to MC group %d",
@@ -461,11 +440,9 @@ fapi2::ReturnCode select_ex_add_core_to_mc_group(
CORE_STOP_MC_GROUP );
#endif
- FAPI_TRY(fapi2::putScom(i_target_cplt,
- CORE_MC_REG,
- l_data64),
- "Error: Core MC group register, rc 0x%.8X",
- (uint32_t)fapi2::current_err);
+ select_ex_update_mc_group(i_target_cplt,
+ CORE_STOP_MC_GROUP,
+ CORE_MC_REG);
fapi_try_exit:
FAPI_INF("< add_to_core_mc_group...");
@@ -491,46 +468,29 @@ fapi2::ReturnCode select_ex_add_ex_to_mc_groups(
// If the Core is in a odd EX, then put the EQ chiplet in the EQ MC group
// and the EX Odd MC group.
- fapi2::buffer<uint64_t> l_data64 = 0;
-
- l_data64.insertFromRight<0, 3>(0x7);
- // Removed group
- l_data64.insertFromRight<19, 3>(BROADCAST_GROUP);
-
- if (i_ex_num % 2) // Odd EX
+ if(i_ex_num % 2)
{
-
+#ifndef __PPE__
FAPI_DBG("Add EX %d (Odd) to MC group %d",
i_ex_num,
EX_ODD_STOP_MC_GROUP);
-
- // Entering group
- l_data64.insertFromRight<3, 3>(EX_ODD_STOP_MC_GROUP);
-
- FAPI_TRY(fapi2::putScom(i_target_cplt,
- EX_ODD_MC_REG,
- l_data64),
- "Error: EX Odd MC group register, rc 0x%.8X",
- (uint32_t)fapi2::current_err);
-
+#endif
+ select_ex_update_mc_group(i_target_cplt,
+ EX_ODD_STOP_MC_GROUP,
+ EX_ODD_MC_REG);
}
- else // Even EX
+ else
{
+#ifndef __PPE__
FAPI_DBG("Add EX %d (Even) to MC group %d",
i_ex_num,
EX_EVEN_STOP_MC_GROUP);
-
- // Entering group
- l_data64.insertFromRight<3, 3>(EX_EVEN_STOP_MC_GROUP);
-
- FAPI_TRY(fapi2::putScom(i_target_cplt,
- EX_EVEN_MC_REG,
- l_data64),
- "Error: EX Even MC group register, rc 0x%.16X",
- (uint32_t)fapi2::current_err);
+#endif
+ select_ex_update_mc_group(i_target_cplt,
+ EX_EVEN_STOP_MC_GROUP,
+ EX_EVEN_MC_REG);
}
-fapi_try_exit:
FAPI_INF("< select_ex_add_ex_to_mc_groups...");
return fapi2::current_err;
@@ -545,16 +505,6 @@ fapi2::ReturnCode select_ex_add_eq_to_mc_group(
{
FAPI_INF("> select_ex_add_eq_to_mc_group...");
- fapi2::buffer<uint64_t> l_data64;
-
- // Add EQ to functional chiplets group
-
- // Entering group
- l_data64.insertFromRight<0, 3>(0x7);
- l_data64.insertFromRight<3, 3>(ALL_CHIPLETS_MC_GROUP);
- // Removed group
- l_data64.insertFromRight<19, 3>(BROADCAST_GROUP);
-
#ifndef __PPE__
uint8_t l_attr_chip_unit_pos = 0;
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_UNIT_POS,
@@ -566,19 +516,9 @@ fapi2::ReturnCode select_ex_add_eq_to_mc_group(
ALL_CHIPLETS_MC_GROUP );
#endif
- FAPI_TRY(fapi2::putScom(i_target_cplt,
- ALL_CHIPLETS_MC_REG,
- l_data64),
- "Error: EQ All chiplets MC group register, rc 0x%.8X",
- (uint32_t)fapi2::current_err);
-
- // Add EQ to EQ STOP group
-
- // Entering group
- l_data64.insertFromRight<0, 3>(0x7);
- l_data64.insertFromRight<3, 3>(EQ_STOP_MC_GROUP);
- // Removed group
- l_data64.insertFromRight<19, 3>(BROADCAST_GROUP);
+ select_ex_update_mc_group(i_target_cplt,
+ ALL_CHIPLETS_MC_GROUP,
+ ALL_CHIPLETS_MC_REG);
#ifndef __PPE__
FAPI_DBG("Adding EQ %d to MC group %d",
@@ -586,14 +526,53 @@ fapi2::ReturnCode select_ex_add_eq_to_mc_group(
EQ_STOP_MC_GROUP );
#endif
+ select_ex_update_mc_group(i_target_cplt,
+ EQ_STOP_MC_GROUP,
+ EQ_MC_REG);
+
+fapi_try_exit:
+ FAPI_INF("< select_ex_add_eq_to_mc_group...");
+ return fapi2::current_err;
+
+}
+
+///-----------------------------------------------------------------------------
+/// @brief Update mc group reg with a read modify write
+///
+/// @return FAPI2_RC_SUCCESS if success, else error code.
+fapi2::ReturnCode select_ex_update_mc_group(
+ const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_cplt,
+ const uint8_t i_mc_group,
+ const uint64_t i_mc_reg_addr)
+{
+ FAPI_INF("> select_ex_update_mc_group...");
+
+ fapi2::buffer<uint64_t> l_data64;
+ uint8_t l_prevGroup = 0;
+
+ FAPI_TRY(fapi2::getScom(i_target_cplt,
+ i_mc_reg_addr,
+ l_data64));
+
+ // Read out the previous group and save it
+ l_data64.extractToRight<uint8_t>(l_prevGroup, 3, 3);
+
+ // adding group
+ l_data64.insertFromRight<0, 3>(0x7);
+ l_data64.insertFromRight<3, 3>(i_mc_group);
+ // Removing group
+ l_data64.insertFromRight<19, 3>(l_prevGroup);
+
+
FAPI_TRY(fapi2::putScom(i_target_cplt,
- EQ_MC_REG,
+ i_mc_reg_addr,
l_data64),
- "Error: EQ MC group register, rc 0x%.8X",
+ "Error: Failed to write multicast group update, rc 0x%.8X",
(uint32_t)fapi2::current_err);
fapi_try_exit:
- FAPI_INF("< select_ex_add_eq_to_mc_group...");
+ FAPI_INF("< select_ex_update_mc_group...");
return fapi2::current_err;
-
}
+
+
OpenPOWER on IntegriCloud