/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* $Source: src/usr/htmgt/genPstate.C $ */ /* */ /* OpenPOWER HostBoot Project */ /* */ /* Contributors Listed Below - COPYRIGHT 2014,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ /* 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 */ #include "genPstate.H" #include "htmgt_utility.H" #include #include // Targeting support #include #include #include #include // occ hwp support #include #include using namespace TARGETING; namespace HTMGT { errlHndl_t genPstateTables(bool i_normalTables) { errlHndl_t err = NULL; // pstate table attribute must be big enough to hold the pstate structure CPPASSERT(sizeof(ATTR_PSTATE_TABLE_type) >= sizeof(PstateSuperStructure)); // normal and mfg pstate tables are the same size CPPASSERT(sizeof(ATTR_PSTATE_TABLE_type) == sizeof(ATTR_PSTATE_TABLE_MFG_type)); TargetHandleList processors; getChipResources(processors, TYPE_PROC, UTIL_FILTER_FUNCTIONAL); for(TargetHandleList::const_iterator procItr = processors.begin(); procItr != processors.end(); ++procItr) { Target * procTarget = *procItr; TargetHandleList occs; getChildChiplets(occs, procTarget, TYPE_OCC, true); if(occs.size() > 0) { const char * tableType = i_normalTables?"normal":"mfg"; PstateSuperStructure pstate_data; Target * occTarget = occs[0]; ATTR_HUID_type huid = occTarget->getAttr(); TMGT_INF("genPstateTables: Building %s pstate tables for " "huid 0x%x", tableType, huid); err = FREQVOLTSVC::runP8BuildPstateDataBlock( procTarget, &pstate_data); if(err) { TMGT_ERR( "genPstateTables: Failed to" " generate PSTATE data for OCC " "(huid=%x).", huid ); // collectTrace is called by the calling routine (htmgt.C). break; } else { TMGT_INF("genPstateTables: %s pstate tables completed for " "huid 0x%x", tableType, huid); if (i_normalTables) { ATTR_PSTATE_TABLE_type * pstateData = reinterpret_cast (&pstate_data); occTarget->setAttr(*pstateData); } else { ATTR_PSTATE_TABLE_MFG_type * pstateData = reinterpret_cast (&pstate_data); occTarget->setAttr(*pstateData); } } } } return err; } }; // end namespace