diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2013-10-22 15:10:18 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-11-07 14:49:45 -0600 |
commit | 2d6ab3cf820134bd3086139adea76f51bbdceb64 (patch) | |
tree | 85111c6a6b313bfa5044e3e45ba9fb9df5890bc6 /src/usr/hwpf/hwp/core_activate/core_activate.C | |
parent | 7c27703341d61f28b204254ad96c3fea5840bb73 (diff) | |
download | talos-hostboot-2d6ab3cf820134bd3086139adea76f51bbdceb64.tar.gz talos-hostboot-2d6ab3cf820134bd3086139adea76f51bbdceb64.zip |
Handle winkle-wakeup times in slave cores.
Change-Id: I6978d66ecfdef57da9754e6251d2ac1d3d078210
RTC: 73559
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/6851
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/core_activate/core_activate.C')
-rw-r--r-- | src/usr/hwpf/hwp/core_activate/core_activate.C | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/usr/hwpf/hwp/core_activate/core_activate.C b/src/usr/hwpf/hwp/core_activate/core_activate.C index d3433f3f4..36ab41cf5 100644 --- a/src/usr/hwpf/hwp/core_activate/core_activate.C +++ b/src/usr/hwpf/hwp/core_activate/core_activate.C @@ -45,6 +45,8 @@ #include <hwpisteperror.H> #include <errl/errludtarget.H> +#include <intr/interrupt.H> + // targeting support #include <targeting/common/commontargeting.H> #include <targeting/common/utilFilter.H> @@ -103,7 +105,7 @@ void* call_host_activate_master( void *io_pArgs ) const TARGETING::Target* l_masterCore = getMasterCore( ); assert( l_masterCore != NULL ); - + TARGETING::Target* l_cpu_target = const_cast<TARGETING::Target *> ( getParentChip( l_masterCore ) ); @@ -114,7 +116,7 @@ void* call_host_activate_master( void *io_pArgs ) // Pass in Master EX target const TARGETING::Target* l_masterEx = getExChiplet(l_masterCore); assert(l_masterEx != NULL ); - + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_host_activate_master: call proc_prep_master_winkle. " "Target HUID %.8X", @@ -280,9 +282,7 @@ void* call_host_activate_slave_cores( void *io_pArgs ) assert( sys != NULL ); uint64_t en_threads = sys->getAttr<ATTR_ENABLED_THREADS>(); - uint64_t pir = l_coreId << 3; - pir |= l_chipId << 7; - pir |= l_logicalNodeId << 10; + uint64_t pir = INTR::PIR_t(l_logicalNodeId, l_chipId, l_coreId).word; if (pir != l_masterCoreID) { @@ -292,11 +292,7 @@ void* call_host_activate_slave_cores( void *io_pArgs ) int rc = cpu_start_core(pir,en_threads); - // We purposefully only create one error log here. The only - // failure from the kernel is a bad PIR, which means we have - // a pervasive attribute problem of some sort. Just log the - // first failing PIR. - if ((0 != rc) && (NULL == l_errl)) + if (0 != rc) { TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_host_activate_slave_cores: " @@ -313,12 +309,27 @@ void* call_host_activate_slave_cores( void *io_pArgs ) * * @devdesc Kernel returned error when trying to activate core. */ - l_errl = + errlHndl_t l_tmperrl = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE, ISTEP_HOST_ACTIVATE_SLAVE_CORES, ISTEP_BAD_RC, pir, rc ); + + // Callout core that failed to wake up. + l_tmperrl->addHwCallout(*l_core, + HWAS::SRCI_PRIORITY_MED, + HWAS::DECONFIG, + HWAS::GARD_Predictive); + + if (NULL == l_errl) + { + l_errl = l_tmperrl; + } + else + { + errlCommit( l_tmperrl, HWPF_COMP_ID ); + } } } } |