diff options
author | dgilbert <dgilbert@us.ibm.com> | 2013-01-24 12:08:24 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-04-08 11:03:59 -0500 |
commit | 2c5c5d4f7107fd6b31809677135e0418970461a0 (patch) | |
tree | 281bd6cbf98b4aa4f9bada4e017e2f49f9a2f0f9 /src/usr/targeting/targetservicestart.C | |
parent | 1c2753a32b9b8b819b7ae19438b7362fad58fe32 (diff) | |
download | talos-hostboot-2c5c5d4f7107fd6b31809677135e0418970461a0.tar.gz talos-hostboot-2c5c5d4f7107fd6b31809677135e0418970461a0.zip |
Need to disable interrupt sources before waiting for interrupts(MPIPL)
RTC:41868
Change-Id: I57891102fc0c96c156a9a69467c95645e4848703
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3018
Tested-by: Jenkins Server
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/targeting/targetservicestart.C')
-rw-r--r-- | src/usr/targeting/targetservicestart.C | 123 |
1 files changed, 100 insertions, 23 deletions
diff --git a/src/usr/targeting/targetservicestart.C b/src/usr/targeting/targetservicestart.C index d010f0e1e..dc252eed5 100644 --- a/src/usr/targeting/targetservicestart.C +++ b/src/usr/targeting/targetservicestart.C @@ -1,25 +1,25 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/usr/targeting/targetservicestart.C $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2012 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/targeting/targetservicestart.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ /** * @file targeting/targetservicestart.C @@ -45,6 +45,10 @@ #include <targeting/common/targetservice.H> #include <targeting/attrrp.H> +// Others +#include <errl/errlentry.H> +#include <devicefw/userif.H> + //****************************************************************************** // targetService //****************************************************************************** @@ -62,6 +66,11 @@ namespace TARGETING #define TARG_CLASS "" +/* + * @brief Initialize any attributes that need to be set early on + */ +static void initializeAttributes(TargetService& i_targetService); + /** * @brief Entry point for initialization service to initialize the targeting * code @@ -84,11 +93,13 @@ static void initTargeting(errlHndl_t& io_pError) { TargetService& l_targetService = targetService(); (void)l_targetService.init(); + + initializeAttributes(l_targetService); } TARG_EXIT(); - #undef TARG_FN +#undef TARG_FN } /** @@ -97,6 +108,72 @@ static void initTargeting(errlHndl_t& io_pError) */ TASK_ENTRY_MACRO(initTargeting); + + +/* + * @brief Initialize any attributes that need to be set early on + */ +static void initializeAttributes(TargetService& i_targetService) +{ + #define TARG_FN "initializeAttributes()...)" + TARG_ENTER(); + + bool l_isMpipl = false; + Target* l_pTopLevel = NULL; + + i_targetService.getTopLevelTarget(l_pTopLevel); + if(l_pTopLevel) + { + Target* l_pMasterProcChip = NULL; + i_targetService.masterProcChipTargetHandle(l_pMasterProcChip); + + if(l_pMasterProcChip) + { + errlHndl_t l_errl = NULL; + size_t l_size = sizeof(uint64_t); + uint64_t l_data; + + // Scratch register 2 is defined as 0x00050039.. accessing + // directly to avoid confusion as the Literals set have + // 0x00050039 mapped to MBOX_SCRATCH1 which is confusing. + l_errl = DeviceFW::deviceRead(l_pMasterProcChip, + &(l_data), + l_size, + DEVICE_SCOM_ADDRESS(0x00050039)); + + if(l_errl) + { + TARG_INF("Read of scratch register failed"); + errlCommit(l_errl,TARG_COMP_ID); + } + else + { + // bit 0 on indicates MPIPL + if(l_data & 0x8000000000000000ull) + { + l_isMpipl = true; + } + } + } + + if(l_isMpipl) + { + l_pTopLevel->setAttr<ATTR_IS_MPIPL_HB>(1); + } + else + { + l_pTopLevel->setAttr<ATTR_IS_MPIPL_HB>(0); + } + } + else // top level is NULL - never expected + { + TARG_INF("Top level target is NULL"); + } + + TARG_EXIT(); + #undef TARG_FN +} + #undef TARG_CLASS #undef TARG_NAMESPACE |