Skip to content

Commit

Permalink
Defer handling attentions on non-master proc until after SMP is up
Browse files Browse the repository at this point in the history
The current code enables PRD/Attention Handling on the slave
processors as soon as we get the SBE started (clocks running).
This is a problem because most of the FIR regs are blacklisted
such that we cannot write them until after the SMP is up and
we are using xscom.  This restriction will lead to an infinite
loop in PRD if we get a recoverable attention on the slave proc.

The fix is to defer all of the attention handling on the slave
procs until after the SMP is up.  We will move the enabled from
istep 8.5 host_attnlisten_proc to the end of istep 10.1
proc_build_smp.  Note that this makes 8.5 a complete NOOP.

Change-Id: I1b6542efe2cd14717d7fa55d01327121027c6862
CQ: SW429438
Backport: yes
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59509
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>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
  • Loading branch information
dcrowell77 committed Jun 2, 2018
1 parent acedcb2 commit 384e76d
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
14 changes: 4 additions & 10 deletions src/usr/isteps/istep08/call_host_attnlisten_proc.C
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2016 */
/* Contributors Listed Below - COPYRIGHT 2016,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
Expand Down Expand Up @@ -73,15 +73,9 @@ void* call_host_attnlisten_proc(void *io_pArgs)
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_attnlisten_proc entry" );

uint8_t l_useAllProcs = 1;
TARGETING::Target *l_sys = NULL;
TARGETING::targetService().getTopLevelTarget( l_sys );
assert(l_sys != NULL);

// All we need to do is set a flag so that the
// ATTN code will check ALL processors the next
// time it gets called versus just the master proc.
l_sys->trySetAttr<ATTR_ATTN_CHK_ALL_PROCS>(l_useAllProcs);
// Function is a NOOP because with security enabled, PRD is unable
// to write FIRs due to blacklist violations. All of the slave
// processor attentions will be ignored until the SMP comes up.

TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_attnlisten_proc exit" );
Expand Down
8 changes: 8 additions & 0 deletions src/usr/isteps/istep10/call_proc_build_smp.C
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,14 @@ void* call_proc_build_smp (void *io_pArgs)
++curproc;
}

// Set a flag so that the ATTN code will check ALL processors
// the next time it gets called versus just the master proc.
uint8_t l_useAllProcs = 1;
TARGETING::Target *l_sys = NULL;
TARGETING::targetService().getTopLevelTarget( l_sys );
assert(l_sys != NULL);
l_sys->setAttr<ATTR_ATTN_CHK_ALL_PROCS>(l_useAllProcs);

} while (0);

TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
Expand Down

0 comments on commit 384e76d

Please sign in to comment.