Skip to content

Commit aa2e2ac

Browse files
ibmzachwghoffa
authored andcommitted
Only check MC_SYNC_MODE for SCOM multicast workaround on Nimbus
This commit fixes a problem with the SCOM multicast workaround, which is that it was checking the MC_SYNC_MODE on all models rather than just Nimbus for which the attribute was intended. This was causing issues in the multicast SCOM request to collect a bit from MC_CHIPLET_UCS_FIR from each MC and put it in GLOBAL_UCS_FIR when a unit checkstop occurs. Rather than collect the bits as intended, the SCOM read was returning 0. Change-Id: Ie20148d1be285d664d11c2ea081b55d80d85b9bd CQ: SW492080 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/98192 Reviewed-by: Ilya Smirnov <ismirno@us.ibm.com> Reviewed-by: Corey V Swenson <cswenson@us.ibm.com> Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: William G Hoffa <wghoffa@us.ibm.com>
1 parent a6a0226 commit aa2e2ac

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

src/usr/scom/scom.C

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
/* */
66
/* OpenPOWER HostBoot Project */
77
/* */
8-
/* Contributors Listed Below - COPYRIGHT 2011,2019 */
8+
/* Contributors Listed Below - COPYRIGHT 2011,2020 */
99
/* [+] International Business Machines Corp. */
1010
/* */
1111
/* */
@@ -1431,13 +1431,29 @@ errlHndl_t doMulticastWorkaround( DeviceFW::OperationType i_opType,
14311431
if( !g_useMemChiplets
14321432
&& ((l_unit >= P9_FIRST_MC) && (l_unit <= P9_LAST_MC)) )
14331433
{
1434-
// Only access the mem chiplets if we're not in async mode
1435-
// because we don't start clocks until later on in that case
1436-
auto l_syncMode =
1437-
i_target->getAttr<TARGETING::ATTR_MC_SYNC_MODE>();
1438-
if( l_syncMode == TARGETING::MC_SYNC_MODE_NOT_IN_SYNC )
1434+
using namespace TARGETING;
1435+
1436+
// Only access the mem chiplets if we're not in async mode on
1437+
// Nimbus systems, because we don't start clocks until later on
1438+
// in that case
1439+
TargetHandleList list;
1440+
PredicateCTM pred(CLASS_CHIP, TYPE_PROC);
1441+
1442+
targetService().getAssociated(list, i_target, TargetService::PARENT_BY_AFFINITY,
1443+
TargetService::ALL, &pred);
1444+
1445+
assert(list.size() <= 1,
1446+
"Expected no more than one PROC parent on HUID 0x%08x",
1447+
get_huid(i_target));
1448+
1449+
if (!list.empty() && list[0]->getAttr<ATTR_MODEL>() == MODEL_NIMBUS)
14391450
{
1440-
continue;
1451+
auto l_syncMode =
1452+
i_target->getAttr<ATTR_MC_SYNC_MODE>();
1453+
if( l_syncMode == MC_SYNC_MODE_NOT_IN_SYNC )
1454+
{
1455+
continue;
1456+
}
14411457
}
14421458
}
14431459
#endif

0 commit comments

Comments
 (0)