diff options
| author | Mike Baiocchi <baiocchi@us.ibm.com> | 2015-06-19 03:51:14 -0500 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-07-29 09:44:29 -0500 |
| commit | d92d751ca50a2ca19bdbdec06ed4ad05339eaf3e (patch) | |
| tree | 635d4f8a53bdfc7f90d28d325802a38b7d3a829b /src/usr/hwpf/plat | |
| parent | 296fe5b3960936275c3a1829581b10d5a4894828 (diff) | |
| download | blackbird-hostboot-d92d751ca50a2ca19bdbdec06ed4ad05339eaf3e.tar.gz blackbird-hostboot-d92d751ca50a2ca19bdbdec06ed4ad05339eaf3e.zip | |
Changes for Brazos 2z/3z Support
This commit has the hostboot changes for Brazos 2z/3z support along with
some attributes that Hostboot and HWSV share. It also contains memory
XML and HWP changes from SW305517 and SW305518.
Change-Id: I71896dfac6946624bed3e216fe7823bd73e8e6bc
RTC: 125037
CQ:SW305518
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/19306
Reviewed-by: PRACHI GUPTA <pragupta@us.ibm.com>
Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com>
Reviewed-by: Michael D. Pardeik <pardeik@us.ibm.com>
Reviewed-by: Michael Baiocchi <baiocchi@us.ibm.com>
Tested-by: Michael Baiocchi <baiocchi@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/19375
Tested-by: Jenkins Server
Tested-by: Jenkins OP Build CI
Reviewed-by: WILLIAM G. HOFFA <wghoffa@us.ibm.com>
Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com>
Tested-by: Jenkins OP HW
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/plat')
| -rw-r--r-- | src/usr/hwpf/plat/fapiPlatAttributeService.C | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/src/usr/hwpf/plat/fapiPlatAttributeService.C b/src/usr/hwpf/plat/fapiPlatAttributeService.C index fd22a350b..5c2bf00f6 100644 --- a/src/usr/hwpf/plat/fapiPlatAttributeService.C +++ b/src/usr/hwpf/plat/fapiPlatAttributeService.C @@ -1799,6 +1799,211 @@ fapi::ReturnCode fapiPlatGetTpVitlSpyOffsetAttr( return l_rc; } +fapi::ReturnCode fapiPlatGetMemAttrData ( + const fapi::Target * i_pTarget, + const TARGETING::ATTRIBUTE_ID i_attr, + uint32_t & o_val) +{ + + FAPI_DBG("fapiPlatGetMemAttrData: START: i_attr=0x%X", i_attr); + + fapi::ReturnCode l_rc; + TARGETING::Target * l_pTgt = NULL; + + do { + + // Get non-FAPI Centaur Target + l_rc = getTargetingTarget(i_pTarget, l_pTgt, + TARGETING::TYPE_MEMBUF); + + if (l_rc) + { + FAPI_ERR("fapiPlatGetMemAttrData: Error from getTargetingTarget"); + break; + } + + // Get NODE from MEMBUF target + TARGETING::TargetHandleList l_nodeList; + TARGETING::TargetService& tS = TARGETING::targetService(); + + TARGETING::PredicateCTM isaNode(TARGETING::CLASS_ENC, + TARGETING::TYPE_NODE); + tS.getAssociated( l_nodeList, + l_pTgt, + TARGETING::TargetService::PARENT, + TARGETING::TargetService::ALL, + &isaNode); + + // Node list should only have 1 tgt + if (l_nodeList.size() != 1 ) + { + FAPI_ERR("fapiPlatGetMemAttrData: expect 1 node %d ", + l_nodeList.size()); + + /*@ + * @errortype + * @moduleid MOD_PLAT_ATTR_SVC_GET_MEM_ATTR_DATA + * @reasoncode RC_NO_SINGLE_NODE + * @userdata1 Number of Nodes + * @userdata2 MEMBUF Target HUID + * @devdesc fapiPlatGetMemAttrData could not find the single + * node associated with this membuf target + */ + const bool hbSwError = true; + errlHndl_t l_pError = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, + MOD_PLAT_ATTR_SVC_GET_MEM_ATTR_DATA, + RC_NO_SINGLE_NODE, + l_nodeList.size(), + TARGETING::get_huid(l_pTgt), + hbSwError); + + // Attach the error log to the fapi::ReturnCode + l_rc.setPlatError(reinterpret_cast<void *> (l_pError)); + break; + } + + // Get the attribute from the node level + // NOTE: Using switch statement to explicitly track the attributes + // that need to do this lookup. + bool l_success = false; + + switch ( i_attr ) + { + case TARGETING::ATTR_MSS_CENT_VDD_SLOPE_ACTIVE: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_CENT_VDD_SLOPE_ACTIVE>(o_val); + break; + + case TARGETING::ATTR_MSS_CENT_VDD_SLOPE_INACTIVE: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_CENT_VDD_SLOPE_INACTIVE>(o_val); + break; + + case TARGETING::ATTR_MSS_CENT_VDD_INTERCEPT: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_CENT_VDD_INTERCEPT>(o_val); + break; + + case TARGETING::ATTR_MSS_CENT_VCS_SLOPE_ACTIVE: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_CENT_VCS_SLOPE_ACTIVE>(o_val); + break; + + case TARGETING::ATTR_MSS_CENT_VCS_SLOPE_INACTIVE: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_CENT_VCS_SLOPE_INACTIVE>(o_val); + break; + + case TARGETING::ATTR_MSS_CENT_VCS_INTERCEPT: + l_success = l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_CENT_VCS_INTERCEPT>(o_val); + break; + + case TARGETING::ATTR_MSS_VOLT_VPP_SLOPE_EFF_CONFIG: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_VOLT_VPP_SLOPE_EFF_CONFIG>(o_val); + break; + + case TARGETING::ATTR_MSS_VOLT_VPP_INTERCEPT_EFF_CONFIG: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_VOLT_VPP_INTERCEPT_EFF_CONFIG> + (o_val); + break; + + case TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_SLOPE_EFF_CONFIG: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_SLOPE_EFF_CONFIG> + (o_val); + break; + + case TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_INTERCEPT_EFF_CONFIG: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_INTERCEPT_EFF_CONFIG + >(o_val); + break; + + case TARGETING::ATTR_MRW_DDR3_VDDR_MAX_LIMIT_EFF_CONFIG: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MRW_DDR3_VDDR_MAX_LIMIT_EFF_CONFIG> + (o_val); + break; + + case TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_SLOPE_EFF_CONFIG: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_SLOPE_EFF_CONFIG> + (o_val); + break; + + case TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_INTERCEPT_EFF_CONFIG: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_INTERCEPT_EFF_CONFIG + >(o_val); + break; + + case TARGETING::ATTR_MRW_DDR4_VDDR_MAX_LIMIT_EFF_CONFIG: + l_success = + l_nodeList[0]->tryGetAttr< + TARGETING::ATTR_MRW_DDR4_VDDR_MAX_LIMIT_EFF_CONFIG> + (o_val); + break; + + default: + // Use error creation below + l_success = false; + break; + } + + if (!l_success) + { + FAPI_ERR("fapiPlatGetMemAttrData: Error from _tryGetAttr"); + + /*@ + * @errortype + * @moduleid MOD_PLAT_ATTR_SVC_GET_MEM_ATTR_DATA + * @reasoncode RC_FAILED_TO_ACCESS_ATTRIBUTE + * @userdata1[0:31] Platform attribute ID + * @userdata1[32:64] MEMBUF Target + * @userdata2 FAPI target type, or NULL if system target + * @devdesc Failed to get requested attribute. + * Possible causes: Invalid target, attribute not implemented, + * attribute not present on given target, target service + * not initialized + */ + const bool hbSwError = true; + errlHndl_t l_pError = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_INFORMATIONAL, + MOD_PLAT_ATTR_SVC_GET_MEM_ATTR_DATA, + RC_FAILED_TO_ACCESS_ATTRIBUTE, + TWO_UINT32_TO_UINT64( + i_attr, + TARGETING::get_huid(l_pTgt)), + i_pTarget ? i_pTarget->getType(): NULL, + hbSwError); + l_rc.setPlatError(reinterpret_cast<void *>(l_pError)); + } + + } while (0); + + FAPI_DBG("fapiPlatGetMemAttrData: EXIT: i_attr=0x%X --> o_val = %d (0x%X)", + i_attr, o_val, o_val); + + return l_rc; + +} + } // End platAttrSvc namespace } // End fapi namespace |

