diff options
author | Bill Hoffa <wghoffa@us.ibm.com> | 2017-01-05 15:25:59 -0600 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2017-01-14 20:05:00 -0500 |
commit | b4c9eaa651a2be4e4bc714e47e0a9380d4685a80 (patch) | |
tree | a0b1d36544ad30a4993bf344b559b602e33047a8 /src/usr/isteps | |
parent | 549b531ac0e9d39e56d5bc8544661f6e296f3499 (diff) | |
download | talos-hostboot-b4c9eaa651a2be4e4bc714e47e0a9380d4685a80.tar.gz talos-hostboot-b4c9eaa651a2be4e4bc714e47e0a9380d4685a80.zip |
Basic TOD Support for 2 procs
Change-Id: Ife07abfd9e0377a50f1f8cbfe98b7e0027c82799
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/34447
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Reviewed-by: Dean Sanner <dsanner@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/isteps')
-rw-r--r-- | src/usr/isteps/istep18/makefile | 43 | ||||
-rw-r--r-- | src/usr/isteps/istep18/tod_init.C | 209 | ||||
-rw-r--r-- | src/usr/isteps/istep18/tod_init.H | 10 |
3 files changed, 215 insertions, 47 deletions
diff --git a/src/usr/isteps/istep18/makefile b/src/usr/isteps/istep18/makefile index 1cc52fb48..005e67640 100644 --- a/src/usr/isteps/istep18/makefile +++ b/src/usr/isteps/istep18/makefile @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2016 +# Contributors Listed Below - COPYRIGHT 2016,2017 # [+] International Business Machines Corp. # # @@ -27,31 +27,34 @@ ROOTPATH = ../../../.. MODULE = istep18 PROCEDURES_PATH = ${ROOTPATH}/src/import/chips/p9/procedures +NEST_HWP_PATH += ${PROCEDURES_PATH}/hwp/nest + + +VPATH += ${NEST_HWP_PATH} + +#Add all the objs for istep 18 +OBJS += tod_init.o + +#Add all the extra include paths +EXTRAINCDIR += ${ROOTPATH}/src/include/usr/fapi2 +EXTRAINCDIR += ${ROOTPATH}/src/import/chips/p9/common/include +EXTRAINCDIR += ${NEST_HWP_PATH} +EXTRAINCDIR += ${ROOTPATH}/src/import/hwpf/fapi2/include +EXTRAINCDIR += ${ROOTPATH}/src/import/chips/p9/utils/imageProcs/ +EXTRAINCDIR += ${ROOTPATH}/src/include/usr/isteps + ## support for Targeting and fapi EXTRAINCDIR += ${ROOTPATH}/src/include/usr/ecmddatabuffer EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/tod_init EXTRAINCDIR += ${PROCEDURES_PATH} -EXTRAINCDIR += ${ROOTPATH}/src/include/usr/isteps -## pointer to common HWP files +#Required include before all the procedure.mk are included +include ${ROOTPATH}/procedure.rules.mk -#@TODO-RTC:149253-Add TOD support -OBJS += tod_init.o -#OBJS += TodControls.o -#OBJS += TodDrawer.o -#OBJS += TodProc.o -#OBJS += TodSvc.o -#OBJS += TodSvcUtil.o -#OBJS += TodHwpIntf.o -#OBJS += TodTopologyManager.o - -#OBJS += proc_tod_setup.o -#OBJS += proc_tod_save_config.o -#OBJS += proc_tod_init.o -#OBJS += proc_tod_utils.o -#OBJS += call_tod_setup.o -#OBJS += call_tod_init.o +#Include all the procedure makefiles +include $(NEST_HWP_PATH)/p9_tod_utils.mk +include $(NEST_HWP_PATH)/p9_tod_setup.mk +include $(NEST_HWP_PATH)/p9_tod_init.mk -include ${ROOTPATH}/procedure.rules.mk include ${ROOTPATH}/config.mk diff --git a/src/usr/isteps/istep18/tod_init.C b/src/usr/isteps/istep18/tod_init.C index ba2b0c8b8..7a63c961f 100644 --- a/src/usr/isteps/istep18/tod_init.C +++ b/src/usr/isteps/istep18/tod_init.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2016 */ +/* Contributors Listed Below - COPYRIGHT 2016,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -40,10 +40,24 @@ #include <targeting/common/targetservice.H> #include <initservice/initserviceif.H> +#include <isteps/hwpisteperror.H> +#include <initservice/isteps_trace.H> + +#include <targeting/common/commontargeting.H> +#include <targeting/common/util.H> +#include <targeting/common/utilFilter.H> +#include <targeting/common/target.H> + +#include <fapi2.H> +#include <fapi2/plat_hwp_invoker.H> + + +#include <p9_tod_setup.H> +#include <p9_tod_init.H> + #include "TodTrace.H" -// @TODO RTC:149253 -//#include "tod_init.H" -//#include "TodSvc.H" +#include "tod_init.H" + namespace ISTEP_18 { @@ -53,17 +67,28 @@ void * call_tod_setup(void *dummy) errlHndl_t l_errl = NULL; TOD_ENTER("call_tod_setup"); -// //@TODO RTC:149253 uncomment -// if (!INITSERVICE::spBaseServicesEnabled()) -// { -// l_errl = TOD::TodSvc::getTheInstance().todSetup(); -// -// if (l_errl) -// { -// TOD_ERR("todSetup() return errl handle %p", l_errl); -// errlCommit( l_errl, TOD_COMP_ID ); -// } -// } + + //Hack job to get things going while waiting for true + //TOD support + //@TODO RTC:149253 replace with full content + if (!INITSERVICE::spBaseServicesEnabled()) + { + //Initialize the iv_tod_node_data structure + tod_topology_node l_tod_node; + build_proc_topology(l_tod_node); + + FAPI_INVOKE_HWP( l_errl, p9_tod_setup, + &l_tod_node, + TOD_PRIMARY, + TOD_OSC_0 ); + + if (l_errl) + { + TOD_ERR("todSetup() return errl handle %p", l_errl); + errlCommit( l_errl, TOD_COMP_ID ); + } + delete_proc_topology(l_tod_node); + } return l_errl; // //@TODO RTC:149253 update later } @@ -73,19 +98,151 @@ void * call_tod_init(void *dummy) errlHndl_t l_errl = NULL; TOD_ENTER("call_init"); -// // @TODO RTC:149253 -// if (!INITSERVICE::spBaseServicesEnabled()) -// { -// l_errl = TOD::TodSvc::getTheInstance().todInit(); -// -// if (l_errl) -// { -// TOD_ERR("todInit() return errl handle %p", l_errl); -// errlCommit( l_errl, TOD_COMP_ID ); -// } -// } + + // @TODO RTC:149253 - Replace below with full functionality + if (!INITSERVICE::spBaseServicesEnabled()) + { + TARGETING::Target* l_masterproc = nullptr; + TARGETING::targetService().masterProcChipTargetHandle(l_masterproc); + fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> + l_fapi2_proc_target (l_masterproc); + + //Initialize the iv_tod_node_data structure + tod_topology_node l_tod_node; + build_proc_topology(l_tod_node); + + FAPI_INVOKE_HWP( l_errl, p9_tod_init, + &l_tod_node, + NULL); + + if (l_errl) + { + TOD_ERR("todInit() return errl handle %p", l_errl); + errlCommit( l_errl, TOD_COMP_ID ); + } + + //Clear up TOD data + delete_proc_topology(l_tod_node); + } return l_errl; //@TODO RTC:149253 update later } + +void build_proc_topology(tod_topology_node &i_tod_node) +{ + + // @TODO RTC:149253 + if (!INITSERVICE::spBaseServicesEnabled()) + { + //Get top level target + TARGETING::Target* pSys; + TARGETING::targetService().getTopLevelTarget(pSys); + + //Create predicate to find Functional Procs + TARGETING::PredicateCTM l_procFilter(TARGETING::CLASS_CHIP, + TARGETING::TYPE_PROC); + TARGETING::PredicateHwas l_funcPred; + l_funcPred.functional(true); + TARGETING::PredicatePostfixExpr l_funcProcPostfixExpr; + l_funcProcPostfixExpr.push(&l_procFilter).push(&l_funcPred).And(); + + //Get the procs in a list + TARGETING::TargetHandleList l_procs; + TARGETING::targetService().getAssociated(l_procs, + pSys, + TARGETING::TargetService::CHILD, + TARGETING::TargetService::ALL, + &l_funcProcPostfixExpr); + + TARGETING::Target* l_masterproc = nullptr; + TARGETING::targetService().masterProcChipTargetHandle(l_masterproc); + fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>* l_fapi2_proc_target = + new fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>(l_masterproc); + + i_tod_node.i_target = l_fapi2_proc_target; + i_tod_node.i_tod_master = true; + i_tod_node.i_drawer_master = true; + i_tod_node.i_bus_rx = NONE; + i_tod_node.i_bus_tx = NONE; + i_tod_node.i_children.clear(); + + //Iterate through functional procs setting base TOD information + for (auto l_proc : l_procs) + { + //Add children to TOD Structure of master proc + if (l_proc != l_masterproc) + { + TOD_INF("Found non-master proc, adding to TOD topology"); + + tod_topology_node * l_tod_proc = new tod_topology_node; + + fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>* + l_fapi2_proc_target= + new fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>(l_proc); + + l_tod_proc->i_target = l_fapi2_proc_target; + l_tod_proc->i_tod_master = false; + l_tod_proc->i_drawer_master = true; + + auto l_xbus_targets = + l_fapi2_proc_target->getChildren<fapi2::TARGET_TYPE_XBUS>(); + + for (auto l_xbus : l_xbus_targets) + { + if (l_xbus.isFunctional()) + { + const TARGETING::Target * l_xTarget = + static_cast<TARGETING::Target*>(l_xbus); + switch (l_xTarget->getAttr<TARGETING::ATTR_REL_POS>()) + { + case 0 : l_tod_proc->i_bus_rx = XBUS0; + l_tod_proc->i_bus_tx = XBUS0; + TOD_DTRAC("XBUS 0 Functional"); + break; + case 1 : l_tod_proc->i_bus_rx = XBUS1; + l_tod_proc->i_bus_tx = XBUS1; + TOD_DTRAC("XBUS 1 Functional"); + break; + case 2 : l_tod_proc->i_bus_rx = XBUS2; + l_tod_proc->i_bus_tx = XBUS2; + TOD_DTRAC("XBUS 2 Functional"); + break; + } + } + } + + //Child proc should have no children + l_tod_proc->i_children.clear(); + + //Add non-master proc as child of master proc in the + // TOD topology + i_tod_node.i_children.push_back(l_tod_proc); + } + } + } + + return; +} + +void delete_proc_topology(tod_topology_node &i_tod_node) +{ + if (i_tod_node.i_target != NULL) + { + delete i_tod_node.i_target; + i_tod_node.i_target = NULL; + } + + for (auto l_child_node : i_tod_node.i_children) + { + if (l_child_node->i_target != NULL) + { + delete l_child_node->i_target; + l_child_node->i_target = NULL; + } + + delete l_child_node; + } +} + }; // end namespace diff --git a/src/usr/isteps/istep18/tod_init.H b/src/usr/isteps/istep18/tod_init.H index 02936616d..79e0de560 100644 --- a/src/usr/isteps/istep18/tod_init.H +++ b/src/usr/isteps/istep18/tod_init.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2016 */ +/* Contributors Listed Below - COPYRIGHT 2016,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -25,4 +25,12 @@ #ifndef TOD_INIT_H #define TOD_INIT_H +namespace ISTEP_18 +{ + + void build_proc_topology(tod_topology_node &i_tod_node); + void delete_proc_topology(tod_topology_node &i_tod_node); + +}; + #endif |