summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/tod_init/TodProc.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/tod_init/TodProc.C')
-rwxr-xr-xsrc/usr/hwpf/hwp/tod_init/TodProc.C546
1 files changed, 0 insertions, 546 deletions
diff --git a/src/usr/hwpf/hwp/tod_init/TodProc.C b/src/usr/hwpf/hwp/tod_init/TodProc.C
deleted file mode 100755
index e3c31929d..000000000
--- a/src/usr/hwpf/hwp/tod_init/TodProc.C
+++ /dev/null
@@ -1,546 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/tod_init/TodProc.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* COPYRIGHT International Business Machines Corp. 2013,2014 */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-
-/**
- * @file TodProc.C
- *
- * @brief The file implements methods of TodProc class
- *
- * HWP_IGNORE_VERSION_CHECK
- *
- */
-
-//------------------------------------------------------------------------------
-//Includes
-//------------------------------------------------------------------------------
-#include <targeting/common/attributes.H>
-#include <targeting/common/targetservice.H>
-#include <targeting/common/utilFilter.H>
-#include <tod_init/tod_init_reasoncodes.H>
-#include "TodDrawer.H"
-#include "TodProc.H"
-#include "TodTypes.H"
-#include "TodAssert.H"
-#include "TodTrace.H"
-
-namespace TOD
-{
-
-//******************************************************************************
-// TodProc::TodProc
-//******************************************************************************
-TodProc::TodProc(
- const TARGETING::Target* i_procTarget,
- const TodDrawer* i_parentDrawer):
- iv_procTarget(i_procTarget),
- iv_parentDrawer(i_parentDrawer),
- iv_tod_node_data(NULL),
- iv_masterType(NOT_MASTER)
-{
- TOD_ASSERT(iv_procTarget, "Target input i_procTarget is NULL ");
- TOD_ASSERT(iv_parentDrawer, "TOD drawer input iv_parentDrawer is NULL ");
-
- TOD_ENTER("Created proc 0x%.8X on drawer 0x%.2X",
- iv_procTarget->getAttr<TARGETING::ATTR_HUID>(),
- iv_parentDrawer->getId());
- init();
-
- TOD_EXIT("TodProc constructor");
-}
-
-//******************************************************************************
-// TodProc::~TodProc
-//******************************************************************************
-TodProc::~TodProc()
-{
- TOD_ENTER("TodProc destructor");
-
- if(iv_tod_node_data)
- {
- delete iv_tod_node_data->i_target;
- iv_tod_node_data->i_target = NULL;
- delete iv_tod_node_data;
- iv_tod_node_data = NULL;
- }
- iv_xbusTargetList.clear();
- iv_abusTargetList.clear();
-
- TOD_EXIT("TodProc destructor");
-}
-
-
-//******************************************************************************
-// TodProc::getMasterType
-//******************************************************************************
-TodProc::ProcMasterType TodProc::getMasterType() const
-{
- return iv_masterType;
-}
-
-//******************************************************************************
-// TodProc::setMasterType
-//******************************************************************************
-void TodProc::setMasterType(const ProcMasterType i_masterType)
-{
- TOD_ENTER("setMasterType");
-
- iv_masterType = i_masterType;
- iv_tod_node_data->i_drawer_master = true;
- if(TOD_MASTER == i_masterType)
- {
- iv_tod_node_data->i_tod_master = true;
- }
-
- TOD_EXIT("setMasterType");
-}
-
-//******************************************************************************
-// TodProc::init
-//******************************************************************************
-void TodProc::init()
-{
- TOD_ENTER("init");
-
- if(iv_tod_node_data)
- {
- if(iv_tod_node_data->i_target)
- {
- delete iv_tod_node_data->i_target;
- }
- delete iv_tod_node_data;
- }
- iv_tod_node_data = new tod_topology_node();
- //Initialize the iv_tod_node_data structure
- iv_tod_node_data->i_target = new fapi::Target;
- iv_tod_node_data->i_target->setType(fapi::TARGET_TYPE_PROC_CHIP);
- iv_tod_node_data->i_target->set
- (reinterpret_cast<void*>(const_cast<TARGETING::Target*>(iv_procTarget)));
- iv_tod_node_data->i_tod_master = false;
- iv_tod_node_data->i_drawer_master = false;
- iv_tod_node_data->i_bus_rx = NONE;
- iv_tod_node_data->i_bus_tx = NONE;
-
- TodTopologyNodeContainer::iterator l_childItr;
-
- for(l_childItr = iv_tod_node_data->i_children.begin();
- l_childItr != iv_tod_node_data->i_children.end();
- ++l_childItr)
- {
- delete (*l_childItr);
- }
- iv_tod_node_data->i_children.clear();
-
- iv_xbusTargetList.clear();
- iv_abusTargetList.clear();
-
- //Make a list of outgoing bus targets for this processor
- TARGETING::PredicateCTM
- l_xbusCTM(TARGETING::CLASS_UNIT,TARGETING::TYPE_XBUS);
- TARGETING::PredicateCTM
- l_abusCTM(TARGETING::CLASS_UNIT,TARGETING::TYPE_ABUS);
-
- TARGETING::TargetHandleList l_xbusTargetList;
- TARGETING::TargetHandleList l_abusTargetList;
-
- TARGETING::PredicateIsFunctional l_func;
- TARGETING::PredicatePostfixExpr l_funcAndXbusFilter;
- TARGETING::PredicatePostfixExpr l_funcAndAbusFilter;
- l_funcAndXbusFilter.push(&l_xbusCTM).push(&l_func).And();
- l_funcAndAbusFilter.push(&l_abusCTM).push(&l_func).And();
-
- TARGETING::targetService().getAssociated(l_xbusTargetList,
- iv_procTarget,
- TARGETING::TargetService::CHILD,
- TARGETING::TargetService::ALL,
- &l_funcAndXbusFilter);
-
- //Push the X bus targets found to the iv_xbusTargetList
- for(uint32_t l_index =0 ; l_index < l_xbusTargetList.size();
- ++l_index)
- {
- iv_xbusTargetList.push_back(l_xbusTargetList[l_index]);
- }
-
- TARGETING::targetService().getAssociated(l_abusTargetList,
- iv_procTarget,
- TARGETING::TargetService::CHILD,
- TARGETING::TargetService::ALL,
- &l_funcAndAbusFilter);
- //Push the A bus targets found to the iv_abusTargetList
- for(uint32_t l_index =0 ; l_index < l_abusTargetList.size();
- ++l_index)
- {
- iv_abusTargetList.push_back(l_abusTargetList[l_index]);
- }
-
- TOD_EXIT("init");
-
- return;
-}
-
-//******************************************************************************
-// TodProc::connect
-//******************************************************************************
-errlHndl_t TodProc::connect(
- TodProc* i_destination,
- const TARGETING::TYPE i_busChipUnitType,
- bool& o_isConnected)
-{
- TOD_ENTER("Source proc HUID = 0x%08X "
- "Destination proc HUID = 0x%08X "
- "Bus type for connection = 0x%08X ",
- iv_procTarget->getAttr<TARGETING::ATTR_HUID>(),
- i_destination->getTarget()->getAttr<TARGETING::ATTR_HUID>(),
- static_cast<uint32_t>(i_busChipUnitType));
-
- errlHndl_t l_errHndl = NULL;
- o_isConnected = false;
-
- do
- {
- if(iv_procTarget->getAttr<TARGETING::ATTR_HUID>() ==
- i_destination->getTarget()->getAttr<TARGETING::ATTR_HUID>())
- {
- TOD_INF("This and the destination are the same procs");
- o_isConnected = true;
- break;
- }
-
- TARGETING::TargetHandleList* l_pBusList = NULL;
-
- //Check whether we've to connect over X or A bus
- if(TARGETING::TYPE_XBUS == i_busChipUnitType)
- {
- l_pBusList = &iv_xbusTargetList;
- }
- else if(TARGETING::TYPE_ABUS == i_busChipUnitType)
- {
- l_pBusList = &iv_abusTargetList;
- }
- else
- {
- TOD_ERR("Bus type 0x%.8X passed to the method is not "
- "supported", i_busChipUnitType);
- logUnsupportedBusType(i_busChipUnitType,l_errHndl);
- break;
- }
-
- //From this proc (iv_procTarget), find if destination(i_destination)
- //has a connection via the bus type i_busChipUnitType :
-
- //Step 1: Sequentially pick buses from either iv_xbusTargetList or
- //iv_abusTargetList depending on the bus type specified as input
- //Step 2: Get the parent of peer target of the bus target found in the
- //previous step. If it matches with the destination, we got a connection
- //Step 3: If a match is found then fill the i_bus_tx and i_bus_rx
- //attributes for the destination proc and return
-
- const TARGETING::Target * l_proc = NULL;
- TARGETING::TargetHandleList l_busList;
-
- TARGETING::TargetHandleList::iterator l_busIter = (*l_pBusList).begin();
- for(;l_busIter != (*l_pBusList).end() ; ++l_busIter)
- {
- l_busList.clear();
-
- //Get the peer target for this bus connection
- //I need to know the peer's (bus endpoint) attributes such as
- //HUID, chip unit. Applying a result filter will get me the proc
- //on the other end, but will abstract away the bus, which is not
- //what I want.
- getPeerTargets(
- l_busList,
- *l_busIter,
- NULL,
- NULL);
-
- //There should be only 1 peer
- if(1 == l_busList.size())
- {
- l_proc = getParentChip(l_busList[0]);
-
- if((l_proc) &&
- l_proc->getAttr<TARGETING::ATTR_HWAS_STATE>().functional &&
- (l_proc->getAttr<TARGETING::ATTR_HUID>() ==
- i_destination->iv_procTarget->
- getAttr<TARGETING::ATTR_HUID>()))
- {
- //We found a connection :
- //iv_procTarget --- i_busChipUnitType --- i_destination
- TOD_INF("Source processor 0x%.8X connects with the "
- "destination processor 0x%.8X over "
- "source bus 0x%.8X and destination bus 0x%.8X "
- "via bus type 0x%.8X",
- iv_procTarget->getAttr<TARGETING::ATTR_HUID>(),
- i_destination->iv_procTarget->
- getAttr<TARGETING::ATTR_HUID>(),
- (*l_busIter)->getAttr<TARGETING::ATTR_HUID>(),
- l_busList[0]->getAttr<TARGETING::ATTR_HUID>(),
- i_busChipUnitType);
-
- //Determine the bus type as per our format, for eg XBUS0
- //ATTR_CHIP_UNIT gives the instance number of
- //the bus and it has direct correspondance to
- //the port no.
- //For instance a processor has two A buses
- //then the one with ATTR_CHIP_UNIT 0 will be A0
- //and the one with ATTR_CHIP_UNIT 1 will be A1
- proc_tod_setup_bus l_busOut = NONE;
- proc_tod_setup_bus l_busIn = NONE;
- l_errHndl = getBusPort(i_busChipUnitType,
- (*l_busIter)->
- getAttr<TARGETING::ATTR_CHIP_UNIT>(),
- l_busOut);
- if(NULL == l_errHndl)
- {
- l_errHndl = getBusPort(i_busChipUnitType,
- l_busList[0]->
- getAttr<TARGETING::ATTR_CHIP_UNIT>(),
- l_busIn);
- }
- if(l_errHndl)
- {
- //Should not be hitting this path if HW procedure is
- //correctly defining all the bus types and ports
- TOD_ERR("proc_tod_setup_bus type not found for "
- "port 0x%.2X of bus type 0x%.8X. Source processor "
- "0x%.8X, destination processor 0x%.8X",
- (*l_busIter)->
- getAttr<TARGETING::ATTR_CHIP_UNIT>(),
- i_busChipUnitType,
- iv_procTarget->
- getAttr<TARGETING::ATTR_HUID>(),
- i_destination->iv_procTarget->
- getAttr<TARGETING::ATTR_HUID>());
- break;
- }
-
- //Set the bus connections for i_destination :
- //Bus out from this proc = l_busOut;
- //Bus in to destination = l_busIn;
- i_destination->setConnections(l_busOut, l_busIn);
- o_isConnected = true;
- break;
- }
- }
- }
- if(l_errHndl)
- {
- break;
- }
- }while(0);
-
- TOD_EXIT("connect. errHdl = %p", l_errHndl);
-
- return l_errHndl;
-}
-
-//******************************************************************************
-//TodProc::getBusPort
-//******************************************************************************
-errlHndl_t TodProc::getBusPort(
- const TARGETING::TYPE i_busChipUnitType,
- const uint32_t i_busPort,
- proc_tod_setup_bus& o_busPort) const
-{
- TOD_ENTER("getBusPort");
-
- errlHndl_t l_errHndl = NULL;
-
- if(TARGETING::TYPE_XBUS == i_busChipUnitType)
- {
- switch(i_busPort)
- {
- case 0:
- o_busPort = XBUS0;
- break;
- case 1:
- o_busPort = XBUS1;
- break;
- case 2:
- o_busPort = XBUS2;
- break;
- case 3:
- o_busPort = XBUS3;
- break;
- default:
- TOD_ERR("Port 0x%.8X not supported for X bus",
- i_busPort);
- logUnsupportedBusPort(i_busPort,
- i_busChipUnitType,
- l_errHndl);
- break;
- }
- }
- else if(TARGETING::TYPE_ABUS == i_busChipUnitType)
- {
- switch(i_busPort)
- {
- case 0:
- o_busPort = ABUS0;
- break;
- case 1:
- o_busPort = ABUS1;
- break;
- case 2:
- o_busPort = ABUS2;
- break;
- default:
- TOD_ERR("Port 0x%.8X not supported for A bus",
- i_busPort);
- logUnsupportedBusPort(i_busPort,
- i_busChipUnitType,
- l_errHndl);
- break;
- }
- }
- else
- {
- TOD_ERR("Bus type 0X%.8X not supported",i_busChipUnitType);
- logUnsupportedBusType(i_busChipUnitType, l_errHndl);
- }
-
- TOD_EXIT("getBusPort. errHdl = %p", l_errHndl);
-
- return l_errHndl;
-}
-
-
-//******************************************************************************
-//TodProc::logUnsupportedBusType
-//******************************************************************************
-void TodProc::logUnsupportedBusType(const int32_t i_busChipUnitType,
- errlHndl_t& io_errHdl) const
-{
- /*@
- * @errortype
- * @moduleid TOD_LOG_UNSUPPORTED_BUSTYPE
- * @reasoncode TOD_UNSUPPORTED_BUSTYPE
- * @userdata1 Bus type that is not currently supported
- * @devdesc Error: Unsupported bus type was detected
- * Possible Causes: Invalid bus configuration in targeting, or
- * getBusPort method has not been updated to support all the
- * bus type on a given system.
- * Resolution:Development team should be contacted.
- */
- io_errHdl = new ERRORLOG::ErrlEntry(
- ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- TOD_LOG_UNSUPPORTED_BUSTYPE,
- TOD_UNSUPPORTED_BUSTYPE,
- i_busChipUnitType, 0);
-}
-
-//******************************************************************************
-//TodProc::logUnsupportedBusPort
-//******************************************************************************
-void TodProc::logUnsupportedBusPort(
- const int32_t i_busPort,
- const int32_t i_busChipUnitType,
- errlHndl_t& io_errHdl) const
-{
- /*@
- * @errortype
- * @reasoncode TOD_UNSUPPORTED_BUSPORT
- * @moduleid TOD_LOG_UNSUPPORTED_BUSPORT
- * @userdata1 Bus port that is not currently supported
- * @userdata2 Bus Type for which the unsupported port has been reported
- * @devdesc Error: Unsupported bus port was detected for the specified
- * bus type.
- * Possible Causes: Invalid bus configuration in targeting, or
- * getBusPort method has not been updated to support all the
- * possible port for a bus on a given system type.
- * Resolution:Development team should be contacted.
- */
- io_errHdl = new ERRORLOG::ErrlEntry(
- ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- TOD_LOG_UNSUPPORTED_BUSPORT,
- TOD_UNSUPPORTED_BUSPORT,
- i_busPort, i_busChipUnitType);
-}
-
-//******************************************************************************
-// TodProc::addChild
-//******************************************************************************
-void TodProc::addChild(TodProc* i_child)
-{
- TOD_ENTER("addChild");
-
- if(iv_procTarget->getAttr<TARGETING::ATTR_HUID>() !=
- i_child->getTarget()->getAttr<TARGETING::ATTR_HUID>())
- {
- iv_childrenList.push_back(i_child);
- (iv_tod_node_data->i_children).push_back(i_child->getTopologyNode());
- }
-
- TOD_EXIT("addChild");
-}
-
-//******************************************************************************
-// TodProc::getTodRegs
-//******************************************************************************
-void TodProc::getTodRegs(proc_tod_setup_conf_regs& o_todRegs) const
-{
- o_todRegs.tod_m_path_ctrl_reg =
- iv_tod_node_data->o_todRegs.tod_m_path_ctrl_reg;
- o_todRegs.tod_pri_port_0_ctrl_reg =
- iv_tod_node_data->o_todRegs.tod_pri_port_0_ctrl_reg;
- o_todRegs.tod_pri_port_1_ctrl_reg =
- iv_tod_node_data->o_todRegs.tod_pri_port_1_ctrl_reg;
- o_todRegs.tod_sec_port_0_ctrl_reg =
- iv_tod_node_data->o_todRegs.tod_sec_port_0_ctrl_reg;
- o_todRegs.tod_sec_port_1_ctrl_reg =
- iv_tod_node_data->o_todRegs.tod_sec_port_1_ctrl_reg;
- o_todRegs.tod_s_path_ctrl_reg =
- iv_tod_node_data->o_todRegs.tod_s_path_ctrl_reg;
- o_todRegs.tod_i_path_ctrl_reg =
- iv_tod_node_data->o_todRegs.tod_i_path_ctrl_reg;
- o_todRegs.tod_pss_mss_ctrl_reg =
- iv_tod_node_data->o_todRegs.tod_pss_mss_ctrl_reg;
- o_todRegs.tod_chip_ctrl_reg =
- iv_tod_node_data->o_todRegs.tod_chip_ctrl_reg;
-}
-
-//******************************************************************************
-//TodProc::setTodChipData
-//******************************************************************************
-void TodProc::setTodChipData(TodChipData& o_todChipData) const
-{
- proc_tod_setup_conf_regs& l_todRegs = iv_tod_node_data->o_todRegs;
-
- o_todChipData.header.chipID = iv_procTarget->
- getAttr<TARGETING::ATTR_POSITION>();
-
- o_todChipData.header.flags |= TOD_FUNC;
-
- o_todChipData.regs.mpcr = l_todRegs.tod_m_path_ctrl_reg.getWord(0);
- o_todChipData.regs.pcrp0 = l_todRegs.tod_pri_port_0_ctrl_reg.getWord(0);
- o_todChipData.regs.pcrp1 = l_todRegs.tod_pri_port_1_ctrl_reg.getWord(0);
- o_todChipData.regs.scrp0 = l_todRegs.tod_sec_port_0_ctrl_reg.getWord(0);
- o_todChipData.regs.scrp1 = l_todRegs.tod_sec_port_1_ctrl_reg.getWord(0);
- o_todChipData.regs.spcr = l_todRegs.tod_s_path_ctrl_reg.getWord(0);
- o_todChipData.regs.ipcr = l_todRegs.tod_i_path_ctrl_reg.getWord(0);
- o_todChipData.regs.psmscr = l_todRegs.tod_pss_mss_ctrl_reg.getWord(0);
- o_todChipData.regs.ccr = l_todRegs.tod_chip_ctrl_reg.getWord(0);
-}
-
-} //end of namespace
OpenPOWER on IntegriCloud